58 lines
2.2 KiB
TypeScript
58 lines
2.2 KiB
TypeScript
import { useState } from 'react'
|
|
import { Icon, Segmented, Text } from '../../src'
|
|
import { Demo } from '../components/Demo'
|
|
import { PropsTable } from '../components/PropsTable'
|
|
import { Section } from '../components/Section'
|
|
|
|
const OPTIONS = [
|
|
{ value: 'grid', label: '网格', icon: <Icon name="grid_line" /> },
|
|
{ value: 'list', label: '列表', icon: <Icon name="menu_line" /> },
|
|
]
|
|
|
|
export function Segmenteds() {
|
|
const [view, setView] = useState('grid')
|
|
|
|
return (
|
|
<Section
|
|
id="segmented"
|
|
title="分段"
|
|
api="Segmented"
|
|
desc="在几个视图之间切换(网格/列表、全部/收藏)。只切展示形态,不切内容分区——后者用 Tabs。"
|
|
>
|
|
<Demo
|
|
title="基础用法"
|
|
desc="选中项白底 + 轻阴影,容器浅灰底;选项可以带图标。"
|
|
code={`const [view, setView] = useState('grid')
|
|
|
|
<Segmented options={OPTIONS} value={view} onChange={setView} />`}
|
|
>
|
|
<Segmented options={OPTIONS} value={view} onChange={setView} />
|
|
<Text size="sm" tone="muted">
|
|
当前:{view}
|
|
</Text>
|
|
</Demo>
|
|
|
|
<Demo
|
|
title="尺寸与占满整行"
|
|
desc="sm 用于卡片内;block 让选项等分宽度(窄容器或移动端常用)。"
|
|
layout="column"
|
|
code={`<Segmented size="sm" options={OPTIONS} value={view} onChange={setView} />
|
|
<Segmented block options={OPTIONS} value={view} onChange={setView} />`}
|
|
>
|
|
<Segmented size="sm" options={OPTIONS} value={view} onChange={setView} />
|
|
<Segmented block options={OPTIONS} value={view} onChange={setView} />
|
|
</Demo>
|
|
|
|
<PropsTable
|
|
rows={[
|
|
{ name: 'options', type: 'SegmentedOption[]', required: true, desc: '{ value, label, icon? }' },
|
|
{ name: 'value', type: 'string', required: true, desc: '当前值' },
|
|
{ name: 'onChange', type: '(value: string) => void', required: true, desc: '切换回调' },
|
|
{ name: 'size', type: "'sm' | 'md'", defaultValue: "'md'", desc: '24 / 28px 高' },
|
|
{ name: 'block', type: 'boolean', defaultValue: 'false', desc: '占满一行,选项等分' },
|
|
]}
|
|
/>
|
|
</Section>
|
|
)
|
|
}
|