REAL SHOWCASE SOURCEselection-controls
1 个文件 · 49 行 · TypeScript
// ===== showcase/src/examples/components/selection_controls.ts ===== import { RenderCheckbox, RenderPageHeader, RenderRadioGroup, RenderStackPanel, RenderSwitch, RenderText, RenderWrapPanel,} from 'ds-ui' export function createSelectionControlsExample(): RenderStackPanel { const status = new RenderText('选择状态变化会即时写回当前 Canvas Runtime') const checks = new RenderWrapPanel({ spacing: 18, runSpacing: 12 }) checks.addChild(new RenderCheckbox({ checked: true, label: '接收站内通知', onChange: value => { status.text = `站内通知:${value ? '开启' : '关闭'}` } })) checks.addChild(new RenderCheckbox({ checked: false, label: '同步邮件', onChange: value => { status.text = `邮件同步:${value ? '开启' : '关闭'}` } })) checks.addChild(new RenderCheckbox({ checked: false, indeterminate: true, label: '部分科室可见' })) checks.addChild(new RenderCheckbox({ checked: true, disabled: true, label: '系统必选项' })) const switches = new RenderWrapPanel({ spacing: 18, runSpacing: 12 }) switches.addChild(new RenderSwitch({ checked: true, label: '启用自动保存', onChange: value => { status.text = `自动保存:${value ? '开启' : '关闭'}` } })) switches.addChild(new RenderSwitch({ checked: false, label: '公开访问', onChange: value => { status.text = `公开访问:${value ? '开启' : '关闭'}` } })) switches.addChild(new RenderSwitch({ checked: true, label: '受策略控制', disabled: true })) const panel = new RenderStackPanel({ orientation: 'vertical', spacing: 18, crossAxisAlignment: 'stretch' }) panel.addChild(new RenderPageHeader({ title: 'Checkbox / Switch / RadioGroup', description: '多选、布尔设置和互斥选择使用不同语义控件,并共享焦点与键盘体系。', })) panel.addChild(new RenderText('Checkbox · 多个选项可以同时成立', { role: 'title', weight: 'semibold' })) panel.addChild(checks) panel.addChild(new RenderText('Switch · 设置立即生效', { role: 'title', weight: 'semibold' })) panel.addChild(switches) panel.addChild(new RenderText('RadioGroup · 同组只能选择一个值', { role: 'title', weight: 'semibold' })) panel.addChild(new RenderRadioGroup({ value: 'normal', options: [ { value: 'compact', label: '紧凑' }, { value: 'normal', label: '标准' }, { value: 'comfortable', label: '宽松' }, { value: 'locked', label: '策略锁定', disabled: true }, ], onChange: value => { status.text = `界面密度:${value}` }, })) panel.addChild(status) panel.padding = 24 return panel}