dsh-plugin-core 0.12.1 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/design/tokens-css.generated.d.ts +1 -1
  2. package/dist/design/tokens-css.generated.d.ts.map +1 -1
  3. package/dist/design/tokens-css.generated.js +1 -1
  4. package/dist/design/tokens-css.generated.js.map +1 -1
  5. package/dist/ui/Pagination.d.ts +59 -0
  6. package/dist/ui/Pagination.d.ts.map +1 -0
  7. package/dist/ui/Pagination.js +110 -0
  8. package/dist/ui/Pagination.js.map +1 -0
  9. package/dist/ui/SectionHead.d.ts +24 -5
  10. package/dist/ui/SectionHead.d.ts.map +1 -1
  11. package/dist/ui/SectionHead.js +32 -5
  12. package/dist/ui/SectionHead.js.map +1 -1
  13. package/dist/ui/Table.d.ts +30 -0
  14. package/dist/ui/Table.d.ts.map +1 -0
  15. package/dist/ui/Table.js +96 -0
  16. package/dist/ui/Table.js.map +1 -0
  17. package/dist/ui/controls/pagination-css.generated.d.ts +2 -0
  18. package/dist/ui/controls/pagination-css.generated.d.ts.map +1 -0
  19. package/dist/ui/controls/pagination-css.generated.js +4 -0
  20. package/dist/ui/controls/pagination-css.generated.js.map +1 -0
  21. package/dist/ui/controls/section-head-css.generated.d.ts +2 -0
  22. package/dist/ui/controls/section-head-css.generated.d.ts.map +1 -0
  23. package/dist/ui/controls/section-head-css.generated.js +4 -0
  24. package/dist/ui/controls/section-head-css.generated.js.map +1 -0
  25. package/dist/ui/controls/table-css.generated.d.ts +2 -0
  26. package/dist/ui/controls/table-css.generated.d.ts.map +1 -0
  27. package/dist/ui/controls/table-css.generated.js +4 -0
  28. package/dist/ui/controls/table-css.generated.js.map +1 -0
  29. package/dist/ui/controls/table-plain-css.generated.d.ts +2 -0
  30. package/dist/ui/controls/table-plain-css.generated.d.ts.map +1 -0
  31. package/dist/ui/controls/table-plain-css.generated.js +4 -0
  32. package/dist/ui/controls/table-plain-css.generated.js.map +1 -0
  33. package/dist/ui/controls-css.d.ts +4 -0
  34. package/dist/ui/controls-css.d.ts.map +1 -1
  35. package/dist/ui/controls-css.js +7 -0
  36. package/dist/ui/controls-css.js.map +1 -1
  37. package/dist/ui/index.d.ts +5 -1
  38. package/dist/ui/index.d.ts.map +1 -1
  39. package/dist/ui/index.js +6 -0
  40. package/dist/ui/index.js.map +1 -1
  41. package/dist/ui/pagination-logic.d.ts +36 -0
  42. package/dist/ui/pagination-logic.d.ts.map +1 -0
  43. package/dist/ui/pagination-logic.js +73 -0
  44. package/dist/ui/pagination-logic.js.map +1 -0
  45. package/dist/ui/table-logic.d.ts +110 -0
  46. package/dist/ui/table-logic.d.ts.map +1 -0
  47. package/dist/ui/table-logic.js +81 -0
  48. package/dist/ui/table-logic.js.map +1 -0
  49. package/dist/ui/table-shared.d.ts +101 -0
  50. package/dist/ui/table-shared.d.ts.map +1 -0
  51. package/dist/ui/table-shared.js +229 -0
  52. package/dist/ui/table-shared.js.map +1 -0
  53. package/dist/utils/i18n.d.ts +1 -1
  54. package/dist/utils/i18n.d.ts.map +1 -1
  55. package/dist/utils/i18n.js +24 -0
  56. package/dist/utils/i18n.js.map +1 -1
  57. package/docs/design/structure.md +5 -3
  58. package/docs/help/ui.doc.ts +221 -2
  59. package/docs/help/ui.md +211 -2
  60. package/docs/requirements.md +49 -0
  61. package/package.json +1 -1
@@ -50,6 +50,18 @@ const DICT = {
50
50
  mdUnwrap: '取消换行',
51
51
  mdFootnotes: '脚注',
52
52
  cardToggle: '展开/收起',
53
+ tableEmpty: '暂无数据',
54
+ tableLoading: '正在加载…',
55
+ tableLoadingMore: '加载中…',
56
+ tableNoMore: '没有更多数据',
57
+ paginationAria: '分页',
58
+ paginationPrev: '上一页',
59
+ paginationNext: '下一页',
60
+ paginationPage: '第 {n} 页',
61
+ paginationTotal: '第 {from}-{to} 条,共 {total} 条',
62
+ paginationTotalZero: '共 0 条',
63
+ paginationPageSizeOption: '{n} 条/页',
64
+ paginationPageSizeAria: '每页条数',
53
65
  modalClose: '关闭',
54
66
  dockClose: '关闭面板',
55
67
  dockResize: '拖动调整宽度',
@@ -309,6 +321,18 @@ const DICT = {
309
321
  mdUnwrap: 'Unwrap',
310
322
  mdFootnotes: 'Footnotes',
311
323
  cardToggle: 'Expand/Collapse',
324
+ tableEmpty: 'No data',
325
+ tableLoading: 'Loading…',
326
+ tableLoadingMore: 'Loading more…',
327
+ tableNoMore: 'No more data',
328
+ paginationAria: 'Pagination',
329
+ paginationPrev: 'Previous',
330
+ paginationNext: 'Next',
331
+ paginationPage: 'Page {n}',
332
+ paginationTotal: '{from}-{to} of {total}',
333
+ paginationTotalZero: '0 items',
334
+ paginationPageSizeOption: '{n} / page',
335
+ paginationPageSizeAria: 'Rows per page',
312
336
  modalClose: 'Close',
313
337
  dockClose: 'Close panel',
314
338
  dockResize: 'Drag to resize',
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/utils/i18n.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/utils/i18n.ts"],"names":[],"mappings":"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"}
@@ -46,7 +46,10 @@ dsh-plugin-core/
46
46
  │ │ │ 两者都只画图形,无背景无定位,背景与位置归调用方
47
47
  │ │ └── Loading ✅ 旧复合浮层(贴右下角的 pill + 两种加载卡),保留、已标 deprecated
48
48
  │ ├── 展示 ✅ Card / StripCard / Chip / MarqueeText /
49
- │ │ SectionHead / FieldHint / LiveText / BackToTop
49
+ │ │ SectionHead / FieldHint / LiveText / BackToTop /
50
+ │ │ Table(第一档 Plain:外框 + 灰底表头 + 按列分隔线;
51
+ │ │ 表级 density / striped / borders,列级 divider / padding / headerTone,
52
+ │ │ 单元格可跨列跨行;TableGrid / TableZebra 预留同族独立组件)
50
53
  │ ├── 选择 ✅ WorkspacePicker(选工作区,自取宿主快照)
51
54
  │ │ 通用 Picker 是纯零件;领域选择器经 connectHost 自取数(2026-10-20)
52
55
  │ ├── 组合 ✅ SplitGroup(两格焊成一体:只画外框 / 分隔 / 聚焦圈,不持状态)
@@ -114,7 +117,7 @@ utils(谁都不依赖,谁都可以用)
114
117
  │ ├─ 表单 Input / NumberInput / PrefixedInput / Textarea / Checkbox / Segmented / Picker / DateTimePicker
115
118
  │ ├─ 动作 Button / IconButton
116
119
  │ ├─ 反馈 Modal / Toast
117
- │ ├─ 展示 Card / StripCard / Chip / MarqueeText / SectionHead / FieldHint / LiveText / BackToTop
120
+ │ ├─ 展示 Card / StripCard / Chip / Table / MarqueeText / SectionHead / FieldHint / LiveText / BackToTop
118
121
  │ ├─ 组合 SplitGroup(展示在选择器页)
119
122
  │ └─ 布局 PanelDock / 拉栏
120
123
  │
@@ -154,6 +157,5 @@ utils(谁都不依赖,谁都可以用)
154
157
  `resizer` 保留为它的底层函数。
155
158
  - **暂缓项**:`utils/string`、`utils/number`、`utils/http`、`ui/feedback/Loading` —— 只标注,未删代码。
156
159
  - **库里没有的**:
157
- - 表格 Table —— 待真实需求再定,不预造;
158
160
  - Switch 开关 —— 官方 primitives 有,归「包官方」批次;
159
161
  - Select 下拉 —— 用 `Picker` 代替(`SelectField` 曾因依赖官方 Menu 被删,属待反转的旧决策)。
@@ -70,12 +70,124 @@ h(SplitGroup, null,
70
70
  h(Picker, { size: 'md', options: membersOf(scope), value: member, onChange: setMember, searchable: true }),
71
71
  )`
72
72
 
73
+ const tableExample = `import { Table, Chip } from 'dsh-plugin-core/ui'
74
+
75
+ const columns = [
76
+ { key: 'id', title: 'Patient ID', width: 140 },
77
+ {
78
+ key: 'patient', title: 'Patient', headerTone: 'business',
79
+ children: [
80
+ // divider:true ⇒ 这一列左缘画竖线(默认不画 —— 表格默认只有横线)
81
+ // 分组列自己不写时跟随第一个子列 ⇒ 组头与子列的竖线连成一条
82
+ { key: 'name', title: 'Name', width: 200, padding: 12, divider: true },
83
+ { key: 'age', title: 'Age / Sex', width: 100, align: 'center', divider: true },
84
+ ],
85
+ },
86
+ { key: 'status', title: 'Status', width: 130, headerTone: 'success', divider: true },
87
+ ]
88
+
89
+ const rows = [{
90
+ key: 'S-2418',
91
+ cells: {
92
+ id: 'S-2418',
93
+ // 单元格可以装任意 ReactNode:头像 + 名字 + 编号的多行排版由调用方决定
94
+ name: h('div', null, h('strong', null, 'Chen, Wei'), h('div', null, 'MRN-88214')),
95
+ age: '62 / M',
96
+ status: h(Chip, { tone: 'success', size: 'xs' }, 'Reviewed'),
97
+ },
98
+ }, {
99
+ // 跨列:对象写法占 id + name 两格
100
+ key: 'S-2420',
101
+ cells: { id: { content: 'S-2420 · escalated', colSpan: 2 }, age: null, status: 'Pending' },
102
+ }]
103
+
104
+ h(Table, {
105
+ columns, rows,
106
+ density: 'compact', // compact / default / comfortable
107
+ striped: true, // 偶数行淡底
108
+ borders: 'all', // y 只上下(默认,无左右边)/ all 四边 / x 只左右 / none
109
+ selectedKeys: [picked],
110
+ onRowClick: (row) => setPicked(row.key),
111
+ })
112
+
113
+ // 通栏分组:一个表格里放多个工作区(groups 与 rows 二选一)
114
+ // 每组 = 横跨全部列的通栏标题 → 这一组自己的表头 → 这一组的任务行,组间一条实线
115
+ h(Table, {
116
+ columns: [
117
+ { key: 'task', title: 'Task', width: 260 },
118
+ { key: 'state', title: 'Status', width: 120, align: 'center' },
119
+ ],
120
+ groups: [
121
+ { key: 'ws-a', title: '工作区 A', rows: [
122
+ { key: 'a1', cells: { task: '修表格斑马纹', state: '进行中' } },
123
+ ] },
124
+ { key: 'ws-b', title: '工作区 B', rows: [
125
+ { key: 'b1', cells: { task: '补通栏文档', state: '已完成' } },
126
+ ] },
127
+ ],
128
+ // 通栏标题前的固定标签(短竖线):由 SectionHead 绘制,4px 圆头、高 ≈ 字号;
129
+ // 默认随主题(浅色深灰 / 深色浅灰);groupAccent 换色(内置色名或任意色值,如 '#7c3aed'),
130
+ // false 整条关掉。Table 只负责把标题装进通栏,样式走 SectionHead 那一份。
131
+ groupAccent: 'business',
132
+ // 组内任务行与普通表一样:给 selectedKeys / onRowClick 就有选中与悬浮
133
+ selectedKeys: [picked],
134
+ onRowClick: (row) => setPicked(row.key),
135
+ ariaLabel: 'Tasks by workspace',
136
+ })
137
+
138
+ // 第二档外观是另一个组件、另一份 CSS(预留):引 TableGrid / TableZebra 时
139
+ // 只打包它自己那份皮肤,不会把 Table 的皮肤一起带上。`
140
+
141
+ const paginationExample = `import { Pagination, Table } from 'dsh-plugin-core/ui'
142
+
143
+ // 独立控件:只给当前页 / 每页条数 / 总条数 —— 总页数与省略窗口由控件算,
144
+ // 消费方永远不自己算页数、也不自己渲染页码
145
+ h(Pagination, {
146
+ page, pageSize, total: 86,
147
+ onChange: (nextPage, nextSize) => { setPage(nextPage); setPageSize(nextSize) },
148
+ align: 'right', // left / center / right(默认 right)
149
+ pageSizeOptions: [10, 20, 50], // 传了才出现「每页条数」下拉
150
+ showTotal: true, // 传了才出现「第 1-10 条,共 86 条」
151
+ siblingCount: 1, // 当前页两侧留几页(默认 1)
152
+ boundaryCount: 1, // 首尾各固定几页(默认 1;1/1 合计最多 7 个位置)
153
+ hideOnSinglePage: true, // 只有一页时整条不渲染
154
+ })
155
+
156
+ // 简洁模式:只留上一页 / 下一页与「2 / 36」
157
+ h(Pagination, { page, pageSize, total: 86, simple: true, onChange })
158
+
159
+ // Table 内建:不传 total = 本地分页(rows 是全量,表格自己按当前页切片,页码排在表下)
160
+ h(Table, {
161
+ columns, rows,
162
+ pagination: { page, pageSize, showTotal: true, onChange },
163
+ })
164
+
165
+ // 服务端分页:给了 total 就不切片(rows 只放当前页那几条),表格只负责摆页码
166
+ h(Table, {
167
+ columns, rows: currentPageRows,
168
+ pagination: { page, pageSize, total: 86, onChange },
169
+ })
170
+
171
+ // 加载态(滚动加载,与分页二选一):onLoadMore 本身就是开关 —— 传了就监听底部
172
+ h(Table, {
173
+ columns, rows: [],
174
+ loading: true, // 首屏一条数据都没有:整表高占位(默认 160px)
175
+ loadingHeight: 160,
176
+ })
177
+
178
+ h(Table, {
179
+ columns, rows,
180
+ loadingMore: true, // 正在取下一页:底部一行小转圈
181
+ hasMore: true, // false ⇒ 底部「没有更多数据」;noMoreText: false 可关
182
+ onLoadMore: () => fetchNextPage(), // 滚到接近底部自动触发一次
183
+ })`
184
+
73
185
  const doc: DocTopic = {
74
186
  title: { zh: 'ui —— 基础控件', en: 'ui — base controls' },
75
187
  exports: [
76
188
  'Button', 'IconButton', 'Segmented', 'SplitGroup', 'Input', 'PrefixedInput', 'NumberInput', 'Textarea',
77
189
  'Checkbox', 'fieldMetricsOf', 'Picker', 'WorkspacePicker', 'ModelPicker', 'DateTimePicker', 'Card', 'StripCard',
78
- 'Chip', 'Modal', 'FieldHint', 'setTooltipRenderer', 'showToast', 'notify', 'showHostToast',
190
+ 'Chip', 'Table', 'Pagination', 'Modal', 'FieldHint', 'setTooltipRenderer', 'showToast', 'notify', 'showHostToast',
79
191
  'Loader', 'LoaderBar', 'Loading', 'RunningBlocks', 'SectionHead', 'MarqueeText', 'LiveText',
80
192
  'BackToTop', 'startResizeLayoutWidth', 'PanelDock', 'createPanelDock', 'DockPanel',
81
193
  'ensureControls', 'setStyleKit',
@@ -358,6 +470,113 @@ const doc: DocTopic = {
358
470
  },
359
471
  ],
360
472
  },
473
+ {
474
+ id: 'table',
475
+ heading: { zh: 'Table(表格)', en: 'Table' },
476
+ prose: [
477
+ {
478
+ zh: '第一档外观 Plain:轻量表格 —— 表头默认是中性灰底(`--dshpc-surface-sunken`,与通栏同一层灰)+ 下边线,双行分组表头也清楚;通栏标题反而用更实的表面色(亮 #f6f8fa / 暗 #151b23);数据行只保留极淡底线,**默认没有一条竖线**;可点行悬浮是极淡的中性灰(亮色 ≈1.5% 淡黑、暗色 ≈3% 淡白),选中行淡蓝底 + 左侧 3px 蓝条。',
479
+ en: 'First skin, Plain: a lightweight table — the header defaults to a neutral grey (--dshpc-surface-sunken, the same wash the banner uses) with a bottom rule that keeps two-row grouped headers legible, while the banner title uses a firmer surface tone (light #f6f8fa / dark #151b23); data rows keep only a very faint bottom line and, by default, **no vertical lines at all**; clickable rows hover to an extremely faint neutral grey (a ~1.5% light black wash in light mode, a ~3% light white wash in dark), and the selected row gets a blue tint plus a 3px blue bar on the left.',
480
+ },
481
+ {
482
+ zh: '三个表级开关:density 三档(compact / default / comfortable,改行高与水平内距 —— default 行高 44 / 48、水平内距 12px,compact 36 / 36 与 8px,comfortable 52 / 60 与 16px)、striped(偶数行淡底斑马纹)、borders(**默认 y**:只留上下两条、没有左右边;all 四边 = 带全框;x 只留左右两条;none 全不要)。',
483
+ en: 'Three table-level switches: `density` (compact / default / comfortable — row height and horizontal padding; default is 44 / 48 rows with 12px padding, compact 36 / 36 with 8px, comfortable 52 / 60 with 16px), `striped` (a faint tint on even rows), and `borders` (**y by default**: top and bottom only, no left/right edges; all for a full frame; x for left+right only; none for nothing).',
484
+ },
485
+ {
486
+ zh: '列级配置:align 居中 / 右对齐,divider=true 才在该列左缘画竖线(**默认不画**,首列恒不画 —— 「列间不要线」是默认值,要线才开;分组列自己不写时跟随它第一个子列,组头与子列的竖线才连成一条),padding 单独调该列水平内距(px),headerTone 给该列表头换语义色(business / success / warning / danger / 扩展八色,全部映射 token,暗色自动跟随)。',
487
+ en: 'Per-column config: `align` for centring / right alignment; `divider=true` draws the divider on that column’s left edge (**off by default**, and the first column never draws one — “no lines between columns” is the default, opt in for lines; a group column that omits it follows its first child, so the header and child dividers line up); `padding` adjusts that column’s horizontal padding in px; `headerTone` recolours that column’s header from the semantic palette (business / success / warning / danger and the eight extended tones — all mapped to tokens, so dark mode follows automatically).',
488
+ },
489
+ {
490
+ zh: '数据驱动、组件不取数:columns 可嵌套 children 形成多行分组表头(colSpan / rowSpan 由组件算);rows 是 { key, cells },cells 按叶子列 key 取内容。单元格有两种写法 —— 直接给任意 ReactNode(头像 + 姓名 + 编号这种多内容排版、状态胶囊、行尾按钮都由调用方塞),或给 { content, colSpan, rowSpan, align } 对象做跨列 / 跨行。跨行时下一行不要给该列 key(缺 key = 该格不渲染、让位给上一行;要空单元格请显式传 null)。传 onRowClick 才可点。',
491
+ en: 'Data-driven, never self-fetching: columns may nest children for a multi-row grouped header (colSpan / rowSpan are computed); rows are { key, cells } looked up by leaf-column key. A cell is either any ReactNode (multi-line layouts such as avatar + name + ID, status pills, row-end buttons are all the caller’s) or a { content, colSpan, rowSpan, align } object for column/row spanning. When spanning rows, the next row must omit that column’s key (a missing key renders nothing and yields the slot to the previous row; pass null explicitly for an empty cell). Rows are clickable only with onRowClick.',
492
+ },
493
+ {
494
+ zh: '通栏分组:传 groups(与 rows 二选一)就能在一个表格里放下多个板块 —— 每组渲染成「一行横跨所有列的通栏标题 → 这一组自己的表头 → 这一组的任务行」,组与组之间用一条实线隔开。典型场景是多个工作区的任务:仍是一张表,不会拆成两张、也不会出现两个互不相干的表头挤在一起;分组模式下没有 <thead>,表头跟着每组走。组内任务行与普通表一样,给 `selectedKeys` / `onRowClick` 就有选中与悬浮(不给就是静态表)。通栏标题由 `SectionHead` 装进通栏并带上它的固定标签(4px 圆头短竖线):颜色用 `groupAccent` 换(内置语义色名映射 token、也可直接给 CSS 色值),传 `false` 整条不画。',
495
+ en: 'Banner groups: pass groups (instead of rows) to hold several sections in one table — each group renders as a full-width banner row spanning every column → that group’s own header → that group’s rows, with a solid rule between groups. The canonical case is tasks across several workspaces: it stays one table rather than two tables with unrelated headers. Group mode has no thead; the header travels with each group. Rows inside a group behave like ordinary rows: pass `selectedKeys` / `onRowClick` for selection and hover (omit them for a static table). The banner title is rendered through `SectionHead`, carrying its fixed 4px rounded bar: recolour it with `groupAccent` (a built-in semantic name mapped to tokens, or a raw CSS colour), or pass `false` to drop it entirely.',
496
+ },
497
+ {
498
+ zh: '外观分档 = 分组件 + 分文件,没有 variant:Table 只 import 自己那份皮肤 CSS;后续 TableGrid(网格线)/ TableZebra(斑马纹)是同族独立组件,各自 import 各自皮肤。消费方引哪个就只打包哪个 —— 引一个表格不会把另一档的 CSS 也带进包里。',
499
+ en: 'Skins are separate components and separate files — no variant: Table imports only its own skin CSS; future TableGrid (grid lines) / TableZebra (zebra stripes) are sibling components importing their own skins. Importing one packs only that one — choosing a table never drags the other skin into the bundle.',
500
+ },
501
+ {
502
+ zh: '边界:不负责取数 / 排序 / 虚拟滚动;横向滚动容器与圆角裁剪归调用方;表头不做吸顶(分组表头是多行,统一 top:0 会在滚动时互相盖住)。分页可选:给 `pagination` 就让表格自己切片并在表下摆页码(详见 Pagination 一节),不给就完全不分页。没有数据时显示内置空态(emptyText 可覆盖)。加载态两种,都只放图标、不显示文案:首屏一条数据都没有时用 `loading`(居中三块加载动画、最大号,较高占位,不遮挡已有数据),已有数据翻下一页时用 `loadingMore`(底部一行、中号三块动画;整行通栏,与上方数据行之间补一条实线,左右两条在 borders=all / x 时由表级外框兜住、y / none 本来就没有,且 y / none 时状态行下方那条表底线也一起去掉,只留上方一条实线);滚动加载由 `onLoadMore` 本身当开关 —— 传了就监听底部、滚到附近自动调一次,到底(`hasMore: false`)显示「没有更多数据」(`noMoreText` 换文案 / `false` 不渲染)。滚动加载与 `pagination` 互斥;`groups` 模式可用,底部状态行与哨兵排在最后一组之后。',
503
+ en: 'Boundaries: no fetching / sorting / virtual scrolling; the horizontal scroll container and rounded clipping are the caller’s; headers do not stick (the grouped header spans multiple rows, and a single top:0 would overlap itself while scrolling). Paging is optional: pass `pagination` and the table slices rows itself and renders the pager underneath (see the Pagination section); omit it and nothing pages. With no rows, a built-in empty state shows (override with emptyText). Two loading states, icon only with no visible copy: `loading` for a first load with no rows at all (centred three-block loader at the largest size, a taller placeholder that never covers existing rows), and `loadingMore` when appending the next page (one full-width bottom row with the middle-size three-block loader; a solid rule is added above it, while the left/right edges come from the table frame when borders=all / x and are absent for y / none — and for y / none the bottom table rule under the status row is dropped too, so only the rule above it remains). Scroll loading uses `onLoadMore` itself as the switch: pass it and the table watches the bottom and calls it once when you get near; at the end (`hasMore: false`) it shows “No more data” (`noMoreText` to change the copy / `false` to render nothing). Scroll loading is mutually exclusive with `pagination`; it works in `groups` mode, with the status row and sentinel placed after the last group.',
504
+ },
505
+ ],
506
+ api: [
507
+ {
508
+ id: 'ui-table',
509
+ rows: [
510
+ { name: 'columns', type: 'TableColumn[]', def: '—', required: '必填', desc: { zh: '列定义;children 非空即分组表头(自动算 colSpan / rowSpan),叶子 key 用来取单元格;width 数字按 px;align 对齐;divider=true 才画该列左竖线(默认不画);padding 该列水平内距(px);headerTone 该列表头语义色', en: 'Column definitions; non-empty children makes a group header (colSpan / rowSpan computed); leaf keys select cells; numeric width means px; align sets alignment; divider=true draws that column’s left divider (off by default); padding sets its horizontal padding (px); headerTone recolours its header' } },
511
+ { name: 'rows', type: 'TableRow[]', def: '—', desc: { zh: '行数据 { key, cells }(与 groups 二选一):key 兼作选中标识与 React key;cells 按叶子列 key 给内容(ReactNode 或 { content, colSpan, rowSpan, align });缺 key = 不渲染、给上一行 rowSpan 让位', en: 'Row data { key, cells } (either this or groups): key doubles as selection id and React key; cells map leaf-column key to content (ReactNode or { content, colSpan, rowSpan, align }); a missing key renders nothing and yields to the previous row’s rowSpan' } },
512
+ { name: 'groups', type: 'TableGroup[]', def: '—', desc: { zh: '分组数据 { key, title, rows }(与 rows 二选一,传了就忽略 rows):每组 = 一行横跨全部列的通栏标题 + 自己的表头 + 自己的数据行,多组连续排布、组间一条实线;用于「一个表格展示多个工作区 / 板块」', en: 'Group data { key, title, rows } (instead of rows; when given, rows is ignored): each group is a banner row spanning every column + its own header + its own rows, with groups stacked and separated by a solid rule — for showing several workspaces / sections in one table' } },
513
+ { name: 'groupAccent', type: "SectionHeadAccent | false", def: "'default'", desc: { zh: '通栏标题前固定标签(4px 圆头短竖线,由 SectionHead 绘制)的颜色(只对 groups 生效):内置语义色名映射 token,也可直接给 CSS 色值;不传 / default = 主题默认(浅色深灰、深色浅灰),false = 整条不画', en: 'Colour of the fixed bar before each banner title (4px rounded, drawn by SectionHead; groups only): a built-in semantic name maps to tokens, or pass any CSS colour; omitted / default = theme default (dark grey in light, light grey in dark), false = no bar' } },
514
+ { name: 'density', type: "'compact' | 'default' | 'comfortable'", def: "'default'", desc: { zh: '行密度:行高与水平内距 —— default 44 / 48 与 12px,compact 36 / 36 与 8px,comfortable 52 / 60 与 16px', en: 'Row density: height and horizontal padding — default 44 / 48 with 12px, compact 36 / 36 with 8px, comfortable 52 / 60 with 16px' } },
515
+ { name: 'striped', type: 'boolean', def: 'false', desc: { zh: '偶数行淡底斑马纹(hover / 选中仍优先)', en: 'Faint tint on even rows (hover / selection still win)' } },
516
+ { name: 'borders', type: "'all' | 'x' | 'y' | 'none'", def: "'y'", desc: { zh: '外框范围:y 只上下(默认,左右没有边)/ all 四边全框 / x 只左右 / none 全不要', en: 'Outer border: y for top+bottom only (default, no left/right) / all for a full frame / x for left+right only / none for nothing' } },
517
+ { name: 'selectedKeys', type: '(string | number)[]', def: '—', desc: { zh: '选中行 key 列表(高亮样式由皮肤决定);有 rowSpan 跨行时,块内任一行的 key 都让整块高亮(不用调用方自己展开)', en: 'Keys of selected rows (the highlight is the skin’s call); with a rowSpan block, a key of any row in it highlights the whole block (no expansion needed on the caller side)' } },
518
+ { name: 'onRowClick', type: '(row, index) => void', def: '—', desc: { zh: '传了行才可点:获得指针光标与 Enter / 空格激活', en: 'Only when given are rows interactive: pointer cursor plus Enter / Space activation' } },
519
+ { name: 'emptyText', type: 'ReactNode', def: '内置字典', desc: { zh: '空态文案;不传走核心字典(随 setLocale 中英切换)', en: 'Empty-state copy; defaults to the core dictionary (follows setLocale)' } },
520
+ { name: 'pagination', type: 'TablePaginationConfig', def: '—', desc: { zh: '内建分页(与 Pagination 同参数,total 可省):不传 total = 本地切片,给了 total = 服务端分页(不切片);groups 模式忽略本项', en: 'Built-in paging (same params as Pagination, total optional): omit total to slice locally; pass total for server-side paging (no slicing); ignored in groups mode' } },
521
+ { name: 'loading', type: 'boolean', def: 'false', desc: { zh: '整表加载中(首屏一条数据都没有时用):主体换成较高占位(居中三块加载动画,最大号,只有图标没有文案);已有数据时不遮挡数据', en: 'Whole-table loading (first load with no rows): swaps the body for a taller placeholder (centred three-block loader at the largest size, icon only); never covers existing rows' } },
522
+ { name: 'loadingHeight', type: 'number', def: '160', desc: { zh: '整表加载占位区高度(px)', en: 'Height (px) of the whole-table loading placeholder' } },
523
+ { name: 'loadingMore', type: 'boolean', def: 'false', desc: { zh: '底部「加载更多」中(已有数据、正在取下一页):数据行下方插一行中号三块加载动画(只有图标没有文案),整行通栏并在上方补一条实线;只在给了 onLoadMore 时生效', en: 'Bottom “loading more” (rows exist, fetching the next page): inserts one full-width row with the middle-size three-block loader (icon only) and a solid rule above it; only effective when onLoadMore is given' } },
524
+ { name: 'hasMore', type: 'boolean', def: 'true', desc: { zh: '是否还有下一页;false 时底部显示「没有更多数据」(noMoreText 可换,false 整行不渲染)。只在给了 onLoadMore 时生效', en: 'Whether another page exists; false shows “No more data” (change with noMoreText, false renders nothing). Only effective when onLoadMore is given' } },
525
+ { name: 'noMoreText', type: 'ReactNode', def: '内置字典', desc: { zh: '到底文案;不传走核心字典,传 false 则到底时整行不渲染', en: 'End-of-list copy; defaults to the core dictionary, false renders nothing at the end' } },
526
+ { name: 'onLoadMore', type: '() => void', def: '—', desc: { zh: '滚动到底自动加载下一页:这个 props 本身就是开关 —— 传了就装底部哨兵并监听,不传完全不监听;加载中 / 到底不重复触发。与 pagination 互斥;groups 模式可用(状态行排在最后一组之后)', en: 'Auto-load the next page when scrolled near the bottom: this prop is the switch — pass it to install the sentinel and watch, omit it and nothing listens; guarded while loading or at the end. Mutually exclusive with pagination; works in groups mode (status row after the last group)' } },
527
+ { name: 'ariaLabel', type: 'string', def: '—', desc: { zh: '表格无障碍名(没有可见标题时请务必给)', en: 'Accessible name for the table (give it when there is no visible caption)' } },
528
+ { name: 'translate', type: 'Translate', def: '—', desc: { zh: '覆盖内置文案翻译(插件自带 i18n 时用)', en: 'Override built-in copy translation (for plugins with their own i18n)' } },
529
+ { name: 'className / style', type: 'string / CSSProperties', def: '—', desc: { zh: '只允许补布局,不许覆盖皮肤', en: 'Layout only; never override the skin' } },
530
+ ],
531
+ },
532
+ ],
533
+ code: [{ id: 'ui-table-example', lang: 'tsx', src: tableExample }],
534
+ },
535
+ {
536
+ id: 'pagination',
537
+ heading: { zh: 'Pagination(分页)', en: 'Pagination' },
538
+ prose: [
539
+ {
540
+ zh: '通行口径(Ant Design / MUI / Element Plus 一致):调用方只给 `page`(当前页,1 起)、`pageSize`(每页条数,默认 10)、`total`(总条数,不是总页数),总页数 `ceil(total / pageSize)` 与页码序列都由控件算 —— 消费方不自己算页数、不自己写渲染循环。受控组件:页码由调用方 state 持有,控件只发 `onChange(page, pageSize)`;越界的 page 会被夹回有效范围,不会渲染出空页。',
541
+ en: 'Shared convention (Ant Design / MUI / Element Plus agree): you pass `page` (1-based current page), `pageSize` (default 10) and `total` (row count, not page count), and the control derives `ceil(total / pageSize)` plus the whole page sequence — you never compute pages or write a render loop. Fully controlled: your state owns the page; the control emits `onChange(page, pageSize)` and clamps out-of-range pages so an empty page is never rendered.',
542
+ },
543
+ {
544
+ zh: '省略号窗口:首尾各固定 `boundaryCount` 页、当前页两侧各留 `siblingCount` 页(默认 1 / 1,最多 7 个位置,与 Element Plus 的 pager-count:7 等价)。间隔正好 1 页时直接显示那个页号、不画省略号(各家共同的细节,否则会出现「1 2 … 4」)。上一页 / 下一页恒在,到边界置灰而非隐藏。',
545
+ en: 'Ellipsis window: `boundaryCount` pages pinned at each end and `siblingCount` pages around the current one (default 1 / 1 — at most 7 slots, equivalent to Element Plus pager-count:7). When the gap is exactly one page the number itself is shown instead of an ellipsis (a detail every library shares, otherwise you get “1 2 … 4”). Prev / Next are always present and grey out at the ends rather than disappearing.',
546
+ },
547
+ {
548
+ zh: '四个可选能力都是开关(不传就不出现):`pageSizeOptions` 出「每页条数」下拉(切换时页码回到第 1 页,与 antd / MUI 同口径)、`showTotal` 出总数文案(`true` 走内置字典,也可给函数自定义)、`hideOnSinglePage` 单页时整条不渲染、`simple` 只留「‹ 2 / 36 ›」。位置由 `align` 决定:left / center / right,**默认 right**。',
549
+ en: 'Four optional bits are switches (omit them and they vanish): `pageSizeOptions` adds a rows-per-page select (changing it resets to page 1, same as antd / MUI), `showTotal` adds the total copy (`true` uses the built-in dictionary, or pass a renderer), `hideOnSinglePage` drops the whole bar when there is a single page, and `simple` keeps only “‹ 2 / 36 ›”. Placement comes from `align`: left / center / right, **right by default**.',
550
+ },
551
+ {
552
+ zh: '无障碍:根节点是 `nav`(`aria-label` 默认走内置字典「分页」,可覆盖),当前页带 `aria-current="page"`,每个页码按钮有「第 n 页」的可读名,上一页 / 下一页的文案与禁用态都由控件负责 —— 调用方不用补 aria。',
553
+ en: 'Accessibility: the root is a `nav` (its `aria-label` defaults to the built-in “Pagination”, overridable), the current page carries `aria-current="page"`, every page button has a readable “Page n” name, and prev/next labels plus disabled states are the control’s job — callers add no aria.',
554
+ },
555
+ {
556
+ zh: '与 Table 两种接法:① 独立控件,自己摆在表格下方 / 工具栏(表格不传 `pagination`);② 内建 —— 给 `Table` 传 `pagination`,它先按当前页切片 `rows` 再渲染,并把分页条排在表格下方(`total` 缺省 = `rows.length` 本地分页;给了 `total` 则不切片,按服务端分页只摆页码)。`groups` 通栏模式与分页互斥,传了 groups 就忽略 pagination。',
557
+ en: 'Two ways to wire it to Table: ① standalone — place it yourself under the table or in a toolbar (Table gets no `pagination`); ② built in — pass `pagination` to Table and it slices `rows` by the current page before rendering, with the pager placed underneath (omit `total` for local paging where total = rows.length; pass `total` for server-side paging where rows are not sliced and only the pager is rendered). The `groups` banner mode is mutually exclusive: when groups are given, pagination is ignored.',
558
+ },
559
+ ],
560
+ api: [
561
+ {
562
+ id: 'ui-pagination',
563
+ rows: [
564
+ { name: 'page / total', type: 'number / number', def: '—', required: '必填', desc: { zh: '当前页(1 起,越界自动夹回)/ 总条数(不是总页数)', en: 'Current page (1-based, clamped) / row count (not page count)' } },
565
+ { name: 'pageSize', type: 'number', def: '10', desc: { zh: '每页条数;总页数由它算出来', en: 'Rows per page; the page count derives from it' } },
566
+ { name: 'onChange', type: '(page, pageSize) => void', def: '—', required: '必填', desc: { zh: '切页与切每页条数都走它;切条数时页码回到 1', en: 'Fires for page changes and rows-per-page changes; the latter resets to page 1' } },
567
+ { name: 'align', type: "'left' | 'center' | 'right'", def: "'right'", desc: { zh: '分页条位置(默认放右边)', en: 'Pager placement (right by default)' } },
568
+ { name: 'siblingCount / boundaryCount', type: 'number / number', def: '1 / 1', desc: { zh: '当前页两侧页数 / 首尾固定页数;1/1 合计最多 7 个位置', en: 'Pages beside the current one / pages pinned at each end; 1/1 gives at most 7 slots' } },
569
+ { name: 'pageSizeOptions', type: 'number[]', def: '—', desc: { zh: '传了才出现「每页条数」下拉', en: 'Only then does the rows-per-page select appear' } },
570
+ { name: 'showTotal', type: 'boolean | (total, from, to) => ReactNode', def: '—', desc: { zh: '总数文案:不传 = 不显示(默认关),传 true 走内置字典,传函数可自定义', en: 'Total copy: omitted = hidden (off by default), true uses the dictionary, a renderer customises it' } },
571
+ { name: 'hideOnSinglePage', type: 'boolean', def: 'false', desc: { zh: '只有一页时整条不渲染', en: 'Render nothing when there is a single page' } },
572
+ { name: 'simple', type: 'boolean', def: 'false', desc: { zh: '简洁模式:只留「‹ 2 / 36 ›」', en: 'Simple mode: only “‹ 2 / 36 ›”' } },
573
+ { name: 'disabled / ariaLabel / translate', type: 'boolean / string / Translate', def: 'false / 内置「分页」/ —', desc: { zh: '整条禁用 / 无障碍名 / 覆盖内置文案', en: 'Disable the bar / accessible name / override built-in copy' } },
574
+ { name: 'Table · pagination', type: 'TablePaginationConfig', def: '—', desc: { zh: '同上参数,total 可省:不传 = 本地切片,给了 = 服务端分页(不切片)', en: 'Same params, total optional: omit to slice locally, pass it for server-side paging (no slicing)' } },
575
+ ],
576
+ },
577
+ ],
578
+ code: [{ id: 'ui-pagination-example', lang: 'tsx', src: paginationExample }],
579
+ },
361
580
  {
362
581
  id: 'feedback',
363
582
  heading: { zh: '反馈件', en: 'Feedback' },
@@ -409,7 +628,7 @@ const doc: DocTopic = {
409
628
  { name: 'LoadingBlock({ text? })', type: '', def: '', desc: { zh: '就地渲染的方块加载卡(转圈在上、文字在下)', en: 'In-place square loading card (spinner above text)' } },
410
629
  { name: 'Loading({ anchorId? })', type: '', def: '', desc: { zh: '贴到主内容容器右下角的加载指示;anchorId 默认 dshpc-main', en: 'Loading indicator pinned to the main container’s bottom-right; anchorId defaults to dshpc-main' } },
411
630
  { name: 'RunningBlocks()', type: '', def: '', desc: { zh: '运行中的占位块', en: 'Placeholder blocks while running' } },
412
- { name: 'SectionHead({ icon, title, right? })', type: '', def: '', desc: { zh: '分区标题', en: 'Section heading' } },
631
+ { name: 'SectionHead({ icon?, title, right?, accent?, flush? })', type: '', def: '', desc: { zh: '分区标题:标签(可选,画出来的短竖线)/ icon + 标题 + 右侧控件。accent = 标签颜色(内置色名 / 任意色值 / default / false 不画);flush = 去底边距', en: 'Section heading: optional drawn bar / icon + title + right controls. accent = bar colour (built-in name / raw value / default / false for none); flush = no bottom margin' } },
413
632
  { name: 'MarqueeText({ text, style?, title?, className? })', type: '', def: '', desc: { zh: '超长省略、hover 滚动', en: 'Ellipsis on overflow, scroll on hover' } },
414
633
  { name: 'LiveText({ render, style? })', type: '', def: '', desc: { zh: '定时重渲染(相对时间这类)', en: 'Periodic re-render (for relative time etc.)' } },
415
634
  { name: 'BackToTop({ anchorId? })', type: '', def: '', desc: { zh: '回到顶部,贴主容器右缘外侧', en: 'Back-to-top, outside the main container’s right edge' } },