REAL SHOWCASE SOURCEadvanced-inputs

1 个文件 · 48 行 · TypeScript

// ===== showcase/src/examples/components/advanced_inputs.ts ===== import {  RenderColorPicker,  RenderGridPanel,  RenderNumberInput,  RenderPageHeader,  RenderSlider,  RenderStackPanel,  RenderText,  RenderTextArea,  gridFr,} from 'ds-ui' export function createAdvancedInputsExample(): RenderStackPanel {  const status = new RenderText('高级输入:数值提交、长文本草稿、连续调节和颜色确认采用不同事件模型。', { role: 'secondary' })  const number = new RenderNumberInput({    value: 36.5, min: 30, max: 45, step: 0.1, label: '体温', suffixText: '℃', helperText: '提交或点击步进按钮后更新。',    onChange: value => { status.text = `NumberInput:体温 ${value.toFixed(1)}℃` },  })  const notes = new RenderTextArea({    value: '患者主诉持续咳嗽三天,夜间加重。', placeholder: '输入就诊备注', maxLength: 240,    onChange: value => { status.text = `TextArea:草稿 ${value.length} / 240 字` },    onCommit: value => { status.text = `TextArea:已提交 ${value.length} 字备注` },  })  const slider = new RenderSlider({    value: 80, min: 50, max: 200, step: 10, label: '界面缩放',    onChange: value => { status.text = `Slider:缩放 ${Math.round(value)}%` },  })  const color = new RenderColorPicker({    color: { r: 47, g: 111, b: 237, a: 1 }, label: '强调色', suffixText: 'RGBA', helperText: '弹窗确认后才提交颜色。',    onChange: value => { status.text = `ColorPicker:rgba(${value.r}, ${value.g}, ${value.b}, ${value.a.toFixed(2)})` },  })   const grid = new RenderGridPanel({ columns: [gridFr(), gridFr()], columnGap: 18, rowGap: 18 })  grid.addChild(number, { row: 0, column: 0 })  grid.addChild(color, { row: 0, column: 1 })  grid.addChild(notes, { row: 1, column: 0 })  slider.verticalAlignment = 'center'  grid.addChild(slider, { row: 1, column: 1 })   const panel = new RenderStackPanel({ orientation: 'vertical', spacing: 18, crossAxisAlignment: 'stretch' })  panel.addChild(new RenderPageHeader({ title: '高级输入模型', description: '对比精确数值、长文本、连续范围和颜色弹窗的状态提交方式。' }))  panel.addChild(grid)  panel.addChild(status)  panel.padding = 24  return panel}