{
"slug": "segmented",
"curated": true,
"mode": "scenarios",
"examples": [
{
"id": "segmented-ex-1",
"title": "分段控制器 Segmented 示例 1",
"titleSrc": "",
"desc": "",
"html": "",
"preview": {
"show": [
[
0,
2,
0
]
],
"hide": [
[
1
],
[
0,
0
],
[
0,
1
],
[
0,
2,
1
],
[
0,
2,
2
],
[
0,
2,
3
]
],
"mode": "scenarios"
},
"previewSafe": true,
"previewUnsafeReasons": [],
"source": "curated",
"code": {
"html": "",
"jsx": "import { useState } from 'react';\nimport { KoleSegmented } from 'kole-ui/react';\n\n// 图标 + 文字:options 里带 icon 的项在标签前多渲染一个图标\nconst views = [\n { label: '列表', value: 'list', icon: '☰' },\n { label: '看板', value: 'kanban' },\n { label: '甘特图', value: 'gantt' },\n { label: '日历', value: 'cal', disabled: true }\n];\n\nexport default function Demo() {\n const [view, setView] = useState('list');\n return ;\n}",
"vue3": "\n\n\n \n",
"vue2": "\n \n\n\n",
"tsx": "import { useState } from 'react';\nimport { KoleSegmented } from 'kole-ui/react';\n\ninterface SegmentedOption {\n label: string;\n value: string;\n icon?: string;\n disabled?: boolean;\n}\n\n// 图标 + 文字:options 里带 icon 的项在标签前多渲染一个图标\nconst views: ReadonlyArray = [\n { label: '列表', value: 'list', icon: '☰' },\n { label: '看板', value: 'kanban' },\n { label: '甘特图', value: 'gantt' },\n { label: '日历', value: 'cal', disabled: true },\n];\n\nexport default function SegmentedIconDemo(): JSX.Element {\n const [view, setView] = useState('list');\n return ;\n}",
"vue3ts": "\n \n\n\n",
"vue2ts": "\n \n \n
\n\n\n"
},
"notes": [
"依据 frameworks/Segmented.html 第 33 行第一个按钮:带 ☰ 的「列表」且类含 is-active,data-val=\"list\" —— 即 options 首项 { label: \"列表\", value: \"list\", icon: \"☰\" } 与选中值 list。",
"options 字段 label / value / icon? / disabled? 见 frameworks/Segmented.jsx 第 7 行注释与第 28 行 icon 渲染分支;prop 名 options / value(Vue3 为 modelValue)见 Segmented.jsx 第 10 行、Segmented.vue3.vue 第 17-20 行。"
]
},
{
"id": "segmented-ex-2",
"title": "看板",
"titleSrc": "demo",
"desc": "",
"html": "",
"preview": {
"show": [
[
0,
2,
1
]
],
"hide": [
[
1
],
[
0,
0
],
[
0,
1
],
[
0,
2,
0
],
[
0,
2,
2
],
[
0,
2,
3
]
],
"mode": "scenarios"
},
"previewSafe": true,
"previewUnsafeReasons": [],
"source": "curated",
"code": {
"html": "",
"jsx": "import { useState } from 'react';\nimport { KoleSegmented } from 'kole-ui/react';\n\n// 纯文字分段:不传 icon,选中项背景白色\nconst views = [\n { label: '列表', value: 'list' },\n { label: '看板', value: 'kanban' },\n { label: '甘特图', value: 'gantt' },\n { label: '日历', value: 'cal', disabled: true }\n];\n\nexport default function Demo() {\n const [view, setView] = useState('kanban');\n return ;\n}",
"vue3": "\n\n\n \n",
"vue2": "\n \n\n\n",
"tsx": "import { useState } from 'react';\nimport { KoleSegmented } from 'kole-ui/react';\n\ninterface SegmentedOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\n// 纯文字分段:不传 icon,选中项背景白色\nconst views: ReadonlyArray = [\n { label: '列表', value: 'list' },\n { label: '看板', value: 'kanban' },\n { label: '甘特图', value: 'gantt' },\n { label: '日历', value: 'cal', disabled: true },\n];\n\nexport default function SegmentedTextDemo(): JSX.Element {\n const [view, setView] = useState('kanban');\n return ;\n}",
"vue3ts": "\n \n\n\n",
"vue2ts": "\n \n \n
\n\n\n"
},
"notes": [
"依据 frameworks/Segmented.html 第 34 行第二个按钮「看板」data-val=\"kanban\":无 icon 子元素、无 is-active(未选中),对照第 33 行可确认 icon 只出现在「列表」项上。",
"本示例给纯文字分段的调用形态(options 不带 icon 字段),选中值 kanban;选中项白底由 Segmented.css 第 11 行 .is-active 决定,组件据 options 项的 value 与当前值比对后自动加类(Segmented.jsx 第 24 行)。"
]
},
{
"id": "segmented-ex-3",
"title": "甘特图",
"titleSrc": "demo",
"desc": "",
"html": "",
"preview": {
"show": [
[
0,
2,
2
]
],
"hide": [
[
1
],
[
0,
0
],
[
0,
1
],
[
0,
2,
0
],
[
0,
2,
1
],
[
0,
2,
3
]
],
"mode": "scenarios"
},
"previewSafe": true,
"previewUnsafeReasons": [],
"source": "curated",
"code": {
"html": "",
"jsx": "import { useState } from 'react';\nimport { KoleSegmented } from 'kole-ui/react';\n\nconst views = [\n { label: '列表', value: 'list' },\n { label: '看板', value: 'kanban' },\n { label: '甘特图', value: 'gantt' },\n { label: '日历', value: 'cal', disabled: true }\n];\n\nexport default function Demo() {\n const [view, setView] = useState('gantt');\n // change 事件带出被点项的 value(Segmented.jsx 第 13-17 行)\n return ;\n}",
"vue3": "\n\n\n \n",
"vue2": "\n \n\n\n",
"tsx": "import { useState } from 'react';\nimport { KoleSegmented } from 'kole-ui/react';\n\ninterface SegmentedOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\nconst views: ReadonlyArray = [\n { label: '列表', value: 'list' },\n { label: '看板', value: 'kanban' },\n { label: '甘特图', value: 'gantt' },\n { label: '日历', value: 'cal', disabled: true },\n];\n\nexport default function SegmentedGanttDemo(): JSX.Element {\n const [view, setView] = useState('gantt');\n // change 事件带出被点项的 value(Segmented.jsx 第 13-17 行)\n function handleChange(next: string): void {\n setView(next);\n }\n return ;\n}",
"vue3ts": "\n \n\n\n",
"vue2ts": "\n \n \n
\n\n\n"
},
"notes": [
"依据 frameworks/Segmented.html 第 35 行第三个按钮「甘特图」data-val=\"gantt\":本示例以它为当前项,并显式接 change 事件(第 42-47 行演示页的点击切换逻辑)。",
"change 事件载荷为被点项的 value(frameworks/Segmented.jsx 第 13-17 行 choose()、Segmented.vue3.vue 第 23-27 行),三端均为受控切换;与示例 1/2 的写法差异在于显式监听 change 而非只给初始值。"
]
},
{
"id": "segmented-ex-4",
"title": "日历",
"titleSrc": "demo",
"desc": "",
"html": "",
"preview": {
"show": [
[
0,
2,
3
]
],
"hide": [
[
1
],
[
0,
0
],
[
0,
1
],
[
0,
2,
0
],
[
0,
2,
1
],
[
0,
2,
2
]
],
"mode": "scenarios"
},
"previewSafe": true,
"previewUnsafeReasons": [],
"source": "curated",
"code": {
"html": "",
"jsx": "import { KoleSegmented } from 'kole-ui/react';\n\n// 禁用项:disabled: true → 按钮带 disabled 且类含 is-disabled,文字取 --kole-color-text-disabled\nconst views = [\n { label: '列表', value: 'list' },\n { label: '看板', value: 'kanban' },\n { label: '甘特图', value: 'gantt' },\n { label: '日历', value: 'cal', disabled: true }\n];\n\nexport default function Demo() {\n return ;\n}",
"vue3": "\n\n\n \n",
"vue2": "\n \n\n\n",
"tsx": "import { KoleSegmented } from 'kole-ui/react';\n\ninterface SegmentedOption {\n label: string;\n value: string;\n disabled?: boolean;\n}\n\n// 禁用项:disabled: true → 按钮带 disabled 且类含 is-disabled,文字取 --kole-color-text-disabled\nconst views: ReadonlyArray = [\n { label: '列表', value: 'list' },\n { label: '看板', value: 'kanban' },\n { label: '甘特图', value: 'gantt' },\n { label: '日历', value: 'cal', disabled: true },\n];\n\nconst initialValue: string = 'list';\n\nexport default function SegmentedDisabledDemo(): JSX.Element {\n return ;\n}",
"vue3ts": "\n \n\n\n",
"vue2ts": "\n \n \n
\n\n\n"
},
"notes": [
"依据 frameworks/Segmented.html 第 36 行第四个按钮「日历」:类含 is-disabled 且带 disabled 属性,data-val=\"cal\" —— 即 options 里 { label: \"日历\", value: \"cal\", disabled: true }。",
"禁用项判定见 frameworks/Segmented.jsx 第 24 行(opt.disabled 加 is-disabled)与第 14 行(choose() 直接 return),Vue 端同见 Segmented.vue3.vue 第 6-7、24 行;禁用文字色见 Segmented.css 第 12 行。本示例不再重复受控切换,只体现含禁用项的静态渲染。"
]
}
]
}