iter(g08): 新增 segmented 分段控制器组件

This commit is contained in:
HIsheR
2026-10-26 10:20:45 +08:00
parent 7cf1f2877a
commit 0e385cdb3a
12 changed files with 302 additions and 14 deletions
+49 -2
View File
@@ -48,7 +48,8 @@
"formItem(props, control):表单字段,label + 必填红星 + 规则校验 + 错误区,返回 { el, validate } 句柄",
"dataTable(props):数据表格,粘性表头 / 行选择(全选三态)/ 排序 / 筛选 / 分页 / 空状态;loading 为真时数据行换骨架行且筛选/翻页禁用,内核为 table-core",
"image(props):图片,缩略图点击 / 回车开遮罩大图预览(Esc 或点击遮罩关闭),width 控制缩略宽",
"timeline(props):时间线,items 按序渲染纵向事件流(标题 / 时间 / 正文 + 语义色节点),mode 控制轴线左右,pending 追加进行中节点"
"timeline(props):时间线,items 按序渲染纵向事件流(标题 / 时间 / 正文 + 语义色节点),mode 控制轴线左右,pending 追加进行中节点",
"segmented(props):分段控制器,胶囊分段 + 滑动滑块,value 信号双向绑定,←→ 环形导航,整组或单项可禁用"
],
"keyTypes": [
"ButtonProps",
@@ -87,7 +88,8 @@
"DrawerProps",
"AvatarProps",
"TimelineItem",
"TimelineProps"
"TimelineProps",
"SegmentedProps"
]
},
"usage": "const checked = signal(false); checkbox({ label: '同意', checked }); const open = signal(false); modal({ title: '确认', open }, '内容')",
@@ -1487,6 +1489,51 @@
"需要轴线居右(如右侧栏时间流)时传 mode: 'right',条目与节点整体镜像",
"content 为纯文本;需要按钮等交互内容时改用 accordion / card 组合"
]
},
{
"id": "segmented",
"title": "分段控制器 Segmented",
"demo": "sec-segmented",
"props": [
{
"n": "options",
"t": "OptionItem[]",
"r": 1,
"d": "分段选项列表(互斥),每项含 value / label / disabled"
},
{
"n": "value",
"t": "Signal<string>",
"r": 1,
"d": "当前选中值信号,双向绑定(点击写回,外部赋值即同步滑块)"
},
{
"n": "size",
"t": "'sm' | 'md'",
"d": "尺寸档位;缺省 md",
"df": "md"
},
{
"n": "disabled",
"t": "boolean | Signal<boolean>",
"d": "整组禁用:布尔直接置位,传信号则动态同步;单项禁用走 options[].disabled"
},
{
"n": "onChange",
"t": "(value: string) => void",
"k": 1,
"d": "切换回调(禁用项与重复点击当前项都不触发)"
}
],
"example": "segmented({ options: [{ value: 'day', label: '日' }, { value: 'week', label: '周' }], value: range })",
"steps": [
"和 tabs 的分工:tabs 是页签(下划线指示条 + 面板语义),segmented 是紧凑互斥切换(视图 / 单位 / 时间粒度)",
"value 必须传信号:点击写回信号,外部改信号滑块自动平移,不要在回调里另存一份状态",
"options[].disabled 置灰单项;disabled 传布尔或信号则整组失效(连滑块一起置灰)",
"键盘:←→ 在可用项间环形移动并选中,Tab 只落在当前项上(漫游 tabindex)",
"滑块几何由组件测量按钮位置得到,不要在外部改按钮宽度 / 内边距,否则需自行重渲染",
"需要带图标或更复杂布局的分段,改用 radioGroup + 自定义样式"
]
}
]
}