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
@@ -0,0 +1,30 @@
1
+ import { createElement as h } from 'react';
2
+ import { type TableSharedProps } from './table-shared.js';
3
+ /** `Table` 对外 props(外观由组件本身决定,没有 variant 轴)。 */
4
+ export type TableProps = TableSharedProps;
5
+ /**
6
+ * 表格 · 第一档外观(Plain):白卡片上的无线框表格。
7
+ *
8
+ * 特征:双行分组表头(columns 嵌套 `children` 自动算 colSpan / rowSpan)、竖向浅分隔线、
9
+ * **无横向行线**、行悬浮淡蓝、选中行淡蓝底 + 左侧蓝竖条。
10
+ *
11
+ * 只 import 自己这份皮肤 CSS(`TABLE_PLAIN_CSS`):消费方引 `Table` 就只打包这一份。
12
+ * 将来的 `TableGrid` / `TableZebra` 是同族独立组件、各自一份 CSS —— **不做 variant**,
13
+ * 否则两份皮肤会同时进包。
14
+ *
15
+ * ```tsx
16
+ * h(Table, {
17
+ * columns: [
18
+ * { key: 'id', title: 'ID', width: 120 },
19
+ * { key: 'study', title: 'Study', children: [
20
+ * { key: 'date', title: 'Date', width: 130 },
21
+ * { key: 'modality', title: 'Modality', width: 110 },
22
+ * ]},
23
+ * ],
24
+ * rows: [{ key: 'S-1', cells: { id: 'S-1', date: '2026-10-24', modality: 'CT' } }],
25
+ * onRowClick: (row) => select(row.key),
26
+ * })
27
+ * ```
28
+ */
29
+ export declare function Table(props: TableProps): ReturnType<typeof h>;
30
+ //# sourceMappingURL=Table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/ui/Table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAqB,MAAM,OAAO,CAAA;AAK7D,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAErE,gDAAgD;AAChD,MAAM,MAAM,UAAU,GAAG,gBAAgB,CAAA;AA8CzC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAsC7D"}
@@ -0,0 +1,96 @@
1
+ import { createElement as h, useEffect, useRef } from 'react';
2
+ import { ensureComponentStyles } from './css.js';
3
+ import { TABLE_PLAIN_CSS } from './controls-css.js';
4
+ import { Pagination } from './Pagination.js';
5
+ import { clampPage, pageCountOf } from './pagination-logic.js';
6
+ import { tableShell } from './table-shared.js';
7
+ /**
8
+ * 底部哨兵的滚动监听:哨兵进入视口(提前 200px)就调一次 `onLoadMore`。
9
+ * `enabled` 由调用方决定(分页 / 分组模式下关掉);正在加载或已到底时 `blockedRef` 挡住重复触发。
10
+ */
11
+ function useLoadMoreSentinel(props, enabled) {
12
+ const nodeRef = useRef(null);
13
+ const onLoadMoreRef = useRef(props.onLoadMore);
14
+ const blockedRef = useRef(true);
15
+ // 无 deps:每次渲染后同步最新回调与闸门,观察器只用 ref 读现值。
16
+ useEffect(() => {
17
+ onLoadMoreRef.current = props.onLoadMore;
18
+ blockedRef.current =
19
+ !enabled ||
20
+ props.onLoadMore === undefined ||
21
+ props.loading === true ||
22
+ props.loadingMore === true ||
23
+ props.hasMore === false;
24
+ });
25
+ const refCallback = useRef((node) => {
26
+ nodeRef.current = node;
27
+ }).current;
28
+ useEffect(() => {
29
+ if (!enabled || typeof IntersectionObserver === 'undefined')
30
+ return;
31
+ const node = nodeRef.current;
32
+ if (node === null)
33
+ return;
34
+ const observer = new IntersectionObserver((entries) => {
35
+ if (entries.some((entry) => entry.isIntersecting) && !blockedRef.current) {
36
+ onLoadMoreRef.current?.();
37
+ }
38
+ }, { rootMargin: '0px 0px 200px 0px' });
39
+ observer.observe(node);
40
+ return () => {
41
+ observer.disconnect();
42
+ };
43
+ }, [enabled]);
44
+ return refCallback;
45
+ }
46
+ /**
47
+ * 表格 · 第一档外观(Plain):白卡片上的无线框表格。
48
+ *
49
+ * 特征:双行分组表头(columns 嵌套 `children` 自动算 colSpan / rowSpan)、竖向浅分隔线、
50
+ * **无横向行线**、行悬浮淡蓝、选中行淡蓝底 + 左侧蓝竖条。
51
+ *
52
+ * 只 import 自己这份皮肤 CSS(`TABLE_PLAIN_CSS`):消费方引 `Table` 就只打包这一份。
53
+ * 将来的 `TableGrid` / `TableZebra` 是同族独立组件、各自一份 CSS —— **不做 variant**,
54
+ * 否则两份皮肤会同时进包。
55
+ *
56
+ * ```tsx
57
+ * h(Table, {
58
+ * columns: [
59
+ * { key: 'id', title: 'ID', width: 120 },
60
+ * { key: 'study', title: 'Study', children: [
61
+ * { key: 'date', title: 'Date', width: 130 },
62
+ * { key: 'modality', title: 'Modality', width: 110 },
63
+ * ]},
64
+ * ],
65
+ * rows: [{ key: 'S-1', cells: { id: 'S-1', date: '2026-10-24', modality: 'CT' } }],
66
+ * onRowClick: (row) => select(row.key),
67
+ * })
68
+ * ```
69
+ */
70
+ export function Table(props) {
71
+ ensureComponentStyles('table-plain', TABLE_PLAIN_CSS);
72
+ const pager = props.pagination;
73
+ // 通栏分组与分页互斥:一个表里多个板块时,页码该属于哪个板块说不清,直接不分页。
74
+ const grouped = (props.groups?.length ?? 0) > 0;
75
+ // 滚动加载与分页仍互斥(同表两套翻页);分组不挡滚动加载 —— 底部状态行排在最后一组之后。
76
+ const infinite = pager === undefined;
77
+ const sentinelRef = useLoadMoreSentinel(props, infinite);
78
+ if (pager === undefined || grouped) {
79
+ return tableShell('dshpc-table--plain',
80
+ // 分页模式下摘掉加载相关 props,避免同表两套翻页。
81
+ pager === undefined
82
+ ? props
83
+ : { ...props, onLoadMore: undefined, loadingMore: undefined, hasMore: undefined, noMoreText: undefined }, { sentinelRef: infinite ? sentinelRef : undefined });
84
+ }
85
+ const pageSize = Math.max(1, Math.floor(pager.pageSize ?? 10));
86
+ const allRows = props.rows ?? [];
87
+ // total 不给 = 本地分页(全量 rows 自己切);给了 = 服务端分页(rows 已是当前页,不再切)。
88
+ const local = pager.total === undefined;
89
+ const total = local ? allRows.length : Math.max(0, Math.floor(pager.total ?? 0));
90
+ const page = clampPage(pager.page, pageCountOf(total, pageSize));
91
+ const rows = local ? allRows.slice((page - 1) * pageSize, page * pageSize) : allRows;
92
+ return h('div', { className: 'dshpc-table-frame' },
93
+ // 分页与滚动加载二选一:分页模式下把底部加载相关 props 摘掉,避免同表两套翻页。
94
+ tableShell('dshpc-table--plain', { ...props, rows, onLoadMore: undefined, loadingMore: undefined, hasMore: undefined, noMoreText: undefined }, {}), h(Pagination, { ...pager, page, total, align: pager.align ?? 'right' }));
95
+ }
96
+ //# sourceMappingURL=Table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Table.js","sourceRoot":"","sources":["../../src/ui/Table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const PAGINATION_CSS = "/* \u2500\u2500 \u5206\u9875\uFF08\u2039 Previous 1 2 3 \u2026 36 Next \u203A\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n \u5F53\u524D\u9875 = \u84DD\u8272\u5706\u89D2\u65B9\u5757 + \u767D\u5B57\uFF08\u5B9E\u5FC3\u9762\u7684\u5B57\u5FC5\u987B\u8D70 --dshpc-on-signal\uFF0C\u4E0D\u8BB8\u7528\u4E3B\u9898\u53CD\u8272\uFF09\uFF1B\n \u5176\u4F59\u9875\u7801\u662F\u7EAF\u6587\u5B57\u6309\u94AE\uFF0C\u60AC\u6D6E\u53EA\u7ED9\u6781\u6DE1\u4E2D\u6027\u5E95\u3002\u5BF9\u9F50\u7531 --left / --center / --right \u4E09\u4E2A\u4FEE\u9970\u51B3\u5B9A\uFF0C\n \u7EC4\u4EF6\u9ED8\u8BA4 right\u3002\u989C\u8272\u5168\u90E8\u8D70 token\uFF0C\u660E\u6697\u81EA\u52A8\u8DDF\u968F\u5BBF\u4E3B\u3002 */\n\n.dshpc-pagination{display:flex;align-items:center;gap:var(--dshpc-space-2);flex-wrap:wrap;\n font-size:var(--dshpc-font-sm);line-height:1;color:var(--dshpc-fg-2);}\n\n.dshpc-pagination--left{justify-content:flex-start;}\n.dshpc-pagination--center{justify-content:center;}\n.dshpc-pagination--right{justify-content:flex-end;}\n\n.dshpc-pagination__total{color:var(--dshpc-fg-3);margin-inline-end:var(--dshpc-space-1);}\n\n.dshpc-pagination__pages{display:flex;align-items:center;gap:2px;}\n\n/* \u9875\u7801 / \u4E0A\u4E0B\u9875 = \u6838\u5FC3 Button\uFF08\u5F53\u524D\u9875 info \u5B9E\u5FC3\u84DD\u3001\u5176\u4F59 ghost\uFF09\uFF0C\u7BAD\u5934 = \u5168\u7AD9\u552F\u4E00 Chevron\u3002\n \u8FD9\u91CC\u53EA\u8865\u5C3A\u5BF8\u4E0E\u95F4\u8DDD\uFF0C\u4E0D\u91CD\u753B\u6309\u94AE\u76AE\u80A4\uFF1B\u4E24\u7EA7\u9009\u62E9\u5668\u538B\u8FC7 .dshpc-btn--md \u7684\u5185\u8DDD\u3002 */\n.dshpc-pagination .dshpc-pagination__page{padding:0 6px;min-width:28px;}\n.dshpc-pagination .dshpc-pagination__nav{padding:0 var(--dshpc-space-2);}\n\n.dshpc-pagination__ellipsis{display:inline-flex;align-items:center;justify-content:center;\n min-width:28px;height:28px;color:var(--dshpc-fg-3);}\n\n.dshpc-pagination__simple{min-width:64px;text-align:center;font-variant-numeric:tabular-nums;\n color:var(--dshpc-fg);}\n\n/* \u7B80\u6D01\u6A21\u5F0F\u53EA\u7559\u7BAD\u5934\uFF1A\u6587\u5B57\u6807\u7B7E\u9690\u85CF\uFF0C\u7BAD\u5934\u4ECD\u7136\u53EF\u89C1\uFF08\u65E0\u969C\u788D\u540D\u8FD8\u5728 aria-label \u4E0A\uFF09\u3002 */\n.dshpc-pagination--simple .dshpc-pagination__text{display:none;}\n\n/* \u6BCF\u9875\u6761\u6570\u4E0B\u62C9 = \u6838\u5FC3 Picker\uFF08\u7BAD\u5934\u662F\u5168\u7AD9\u552F\u4E00\u7684 Chevron\uFF09\uFF1A\u53EA\u6536\u7A84\u4E0D\u53C2\u4E0E\u4F38\u7F29\u3002 */\n.dshpc-pagination__size{flex:none;}\n";
2
+ //# sourceMappingURL=pagination-css.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination-css.generated.d.ts","sourceRoot":"","sources":["../../../src/ui/controls/pagination-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,4oFAAu9C,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ⚠️ 生成物,勿手改。真源 = src/ui/controls/pagination.css
2
+ // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
+ export const PAGINATION_CSS = "/* ── 分页(‹ Previous 1 2 3 … 36 Next ›)────────────────────────────────────\n 当前页 = 蓝色圆角方块 + 白字(实心面的字必须走 --dshpc-on-signal,不许用主题反色);\n 其余页码是纯文字按钮,悬浮只给极淡中性底。对齐由 --left / --center / --right 三个修饰决定,\n 组件默认 right。颜色全部走 token,明暗自动跟随宿主。 */\n\n.dshpc-pagination{display:flex;align-items:center;gap:var(--dshpc-space-2);flex-wrap:wrap;\n font-size:var(--dshpc-font-sm);line-height:1;color:var(--dshpc-fg-2);}\n\n.dshpc-pagination--left{justify-content:flex-start;}\n.dshpc-pagination--center{justify-content:center;}\n.dshpc-pagination--right{justify-content:flex-end;}\n\n.dshpc-pagination__total{color:var(--dshpc-fg-3);margin-inline-end:var(--dshpc-space-1);}\n\n.dshpc-pagination__pages{display:flex;align-items:center;gap:2px;}\n\n/* 页码 / 上下页 = 核心 Button(当前页 info 实心蓝、其余 ghost),箭头 = 全站唯一 Chevron。\n 这里只补尺寸与间距,不重画按钮皮肤;两级选择器压过 .dshpc-btn--md 的内距。 */\n.dshpc-pagination .dshpc-pagination__page{padding:0 6px;min-width:28px;}\n.dshpc-pagination .dshpc-pagination__nav{padding:0 var(--dshpc-space-2);}\n\n.dshpc-pagination__ellipsis{display:inline-flex;align-items:center;justify-content:center;\n min-width:28px;height:28px;color:var(--dshpc-fg-3);}\n\n.dshpc-pagination__simple{min-width:64px;text-align:center;font-variant-numeric:tabular-nums;\n color:var(--dshpc-fg);}\n\n/* 简洁模式只留箭头:文字标签隐藏,箭头仍然可见(无障碍名还在 aria-label 上)。 */\n.dshpc-pagination--simple .dshpc-pagination__text{display:none;}\n\n/* 每页条数下拉 = 核心 Picker(箭头是全站唯一的 Chevron):只收窄不参与伸缩。 */\n.dshpc-pagination__size{flex:none;}\n";
4
+ //# sourceMappingURL=pagination-css.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination-css.generated.js","sourceRoot":"","sources":["../../../src/ui/controls/pagination-css.generated.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,o9CAAo9C,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const SECTION_HEAD_CSS = "/* \u5206\u533A\u6807\u9898\u884C\uFF1A\u6807\u7B7E\uFF08\u53EF\u9009\uFF0C\u753B\u51FA\u6765\u7684\u77ED\u7AD6\u7EBF\uFF09/ icon + \u6807\u9898 + \u53F3\u4FA7\u63A7\u4EF6\u3002 */\n.dshpc-section-head{display:flex;align-items:center;gap:var(--dshpc-space-2);\n margin-bottom:var(--dshpc-space-3);}\n.dshpc-section-head--flush{margin-bottom:0;}\n\n.dshpc-section-head__bar{flex:none;width:4px;height:1em;border-radius:999px;\n font-size:var(--dshpc-font-lg);background:var(--dshpc-fg-2);}\n\n.dshpc-section-head__icon{display:inline-flex;align-items:center;flex:none;\n line-height:var(--dshpc-line-lg);color:var(--dshpc-fg-3);}\n\n.dshpc-section-head__title{font-size:var(--dshpc-font-lg);line-height:var(--dshpc-line-lg);\n font-weight:600;color:var(--dshpc-fg);flex:none;}\n\n.dshpc-section-head__right{flex:1;display:flex;align-items:center;\n justify-content:flex-end;gap:var(--dshpc-space-2);min-width:0;}\n";
2
+ //# sourceMappingURL=section-head-css.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-head-css.generated.d.ts","sourceRoot":"","sources":["../../../src/ui/controls/section-head-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,25BAAoxB,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ⚠️ 生成物,勿手改。真源 = src/ui/controls/section-head.css
2
+ // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
+ export const SECTION_HEAD_CSS = "/* 分区标题行:标签(可选,画出来的短竖线)/ icon + 标题 + 右侧控件。 */\n.dshpc-section-head{display:flex;align-items:center;gap:var(--dshpc-space-2);\n margin-bottom:var(--dshpc-space-3);}\n.dshpc-section-head--flush{margin-bottom:0;}\n\n.dshpc-section-head__bar{flex:none;width:4px;height:1em;border-radius:999px;\n font-size:var(--dshpc-font-lg);background:var(--dshpc-fg-2);}\n\n.dshpc-section-head__icon{display:inline-flex;align-items:center;flex:none;\n line-height:var(--dshpc-line-lg);color:var(--dshpc-fg-3);}\n\n.dshpc-section-head__title{font-size:var(--dshpc-font-lg);line-height:var(--dshpc-line-lg);\n font-weight:600;color:var(--dshpc-fg);flex:none;}\n\n.dshpc-section-head__right{flex:1;display:flex;align-items:center;\n justify-content:flex-end;gap:var(--dshpc-space-2);min-width:0;}\n";
4
+ //# sourceMappingURL=section-head-css.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-head-css.generated.js","sourceRoot":"","sources":["../../../src/ui/controls/section-head-css.generated.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,qEAAqE;AACrE,MAAM,CAAC,MAAM,gBAAgB,GAAG,ixBAAixB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const TABLE_BASE_CSS = "/* \u2500\u2500 \u8868\u683C\u57FA\u7840\u5C42\uFF08\u7ED3\u6784 + \u4EA4\u4E92 + \u7A7A\u6001\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n \u5916\u89C2\u5206\u6863 = \u5206\u7EC4\u4EF6 + \u5206\u6587\u4EF6\uFF1A\u672C\u6587\u4EF6\u53EA\u653E\u6240\u6709\u5916\u89C2\u5171\u7528\u7684\u90E8\u5206\uFF1B\n \u8868\u5934\u5E95\u8272\u3001\u5206\u9694\u7EBF\u3001\u60AC\u6D6E / \u9009\u4E2D\u8272\u7531\u76AE\u80A4\u6587\u4EF6\u8D1F\u8D23\uFF08table-plain.css \u662F\u7B2C\u4E00\u6863\uFF09\u3002\n \u76AE\u80A4\u9009\u62E9\u5668\u4E00\u5F8B\u6302\u5728 .dshpc-table--<skin> \u4E0B\uFF0C\u4E0E\u57FA\u7840\u5C42\u4E0D\u540C\u540D \u2014\u2014 \u6CE8\u5165\u987A\u5E8F\u4E0D\u5F71\u54CD\u80DC\u8D1F\n \uFF08test/css-contract.test.mjs \u7981\u6B62\u8DE8\u5E38\u91CF\u540C\u540D\u9009\u62E9\u5668\uFF09\u3002\n \u5706\u89D2\u88C1\u526A / \u6A2A\u5411\u6EDA\u52A8\u5F52\u8C03\u7528\u65B9\u5BB9\u5668\uFF0C\u672C\u5C42\u4E0D\u8BBE overflow\uFF1B\u4E5F\u4E0D\u505A\u8868\u5934\u5438\u9876\uFF1A\n \u5206\u7EC4\u8868\u5934\u662F\u591A\u884C\uFF0C\u7EDF\u4E00 top:0 \u4F1A\u5728\u6EDA\u52A8\u65F6\u4E92\u76F8\u76D6\u4F4F\uFF08\u8981\u5438\u9876\u8BF7\u5728\u5916\u5C42\u5BB9\u5668\u5904\u7406\uFF09\u3002 */\n\n.dshpc-table{--dshpc-table-pad-x:var(--dshpc-space-3);--dshpc-table-head-h:44px;--dshpc-table-row-h:48px;\n width:100%;table-layout:fixed;border-collapse:separate;border-spacing:0;box-sizing:border-box;\n color:var(--dshpc-fg);font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}\n\n/* \u5BC6\u5EA6\u4E09\u6863\uFF1A\u53EA\u6539\u884C\u9AD8\u4E0E\u6C34\u5E73\u5185\u8DDD\uFF0C\u914D\u8272\u4E0E\u5206\u9694\u7EBF\u5F52\u76AE\u80A4\u3002compact / comfortable \u5404\u4E00\u884C\uFF0C\n \u65B0\u589E\u6863\u4F4D\u5728\u6B64\u8FFD\u52A0\uFF1B\u5217\u7EA7 padding \u8D70\u5185\u8054 style \u8986\u76D6\uFF08\u4E0D\u5728\u8FD9\u91CC\u518D\u5F00\u4E00\u5957\u53D8\u91CF\uFF09\u3002\n \u9ED8\u8BA4\u6C34\u5E73\u5185\u8DDD 12px\uFF08space-3\uFF09\u2014\u2014 \u53C2\u8003\u7A3F\u7684\u8272\u5757\u95F4\u8DDD\uFF0C16px \u504F\u677E\u3002 */\n.dshpc-table--density-compact{--dshpc-table-pad-x:var(--dshpc-space-2);--dshpc-table-head-h:36px;--dshpc-table-row-h:36px;}\n.dshpc-table--density-comfortable{--dshpc-table-pad-x:var(--dshpc-space-4);--dshpc-table-head-h:52px;--dshpc-table-row-h:60px;}\n\n.dshpc-table__head-cell,.dshpc-table__cell{box-sizing:border-box;padding:var(--dshpc-space-1) var(--dshpc-table-pad-x);\n text-align:left;vertical-align:middle;font-weight:400;}\n\n/* \u8868\u5934 44 / \u6570\u636E\u884C 48 \u662F default \u6863\uFF08\u53C2\u8003\u7A3F\u5BC6\u5EA6\uFF09\uFF1Bheight \u5728 table-cell \u4E0A\u662F\u6700\u5C0F\u9AD8\uFF0C\n \u591A\u884C\u5185\u5BB9\u4F1A\u81EA\u52A8\u628A\u884C\u6491\u9AD8\uFF0C\u4E0D\u4F1A\u88AB\u622A\u65AD\u3002 */\n.dshpc-table__head-cell{height:var(--dshpc-table-head-h);font-size:var(--dshpc-font-sm);font-weight:600;color:var(--dshpc-fg-2);}\n.dshpc-table__head-cell--group{text-align:center;}\n.dshpc-table__cell{height:var(--dshpc-table-row-h);}\n\n.dshpc-table__head-cell--center,.dshpc-table__cell--center{text-align:center;}\n.dshpc-table__head-cell--right,.dshpc-table__cell--right{text-align:right;}\n\n.dshpc-table__row{transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease);}\n/* \u53EA\u6709\u4F20\u4E86 onRowClick \u7684\u884C\u624D\u662F\u53EF\u70B9\u7684\uFF08\u6570\u636E\u5C5E\u6027\u7531\u7EC4\u4EF6\u6309\u6B64\u6253\uFF09\u3002 */\n.dshpc-table__row[data-interactive='true']{cursor:pointer;}\n.dshpc-table__row:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:-2px;}\n\n/* \u6591\u9A6C\u7EB9\u662F\u901A\u7528\u80FD\u529B\uFF08\u8868\u7EA7 striped \u5F00\u5173\uFF09\uFF0C\u653E\u5728\u57FA\u7840\u5C42\uFF1A\u5E95\u8272\u53D6 token\uFF0C\u5404\u6863\u76AE\u80A4\u4E0D\u5FC5\u5404\u81EA\u5B9E\u73B0\u3002\n \u9009\u62E9\u5668\u523B\u610F\u53EA\u5230 3 \u4E2A\u7C7B\u7EA7\u522B\uFF08\u8868\u7EA7 + \u884C + :nth-child\uFF09\uFF1B\u76AE\u80A4\u5C42\u7684\u884C\u6001\u89C4\u5219\u5E26 __body \u4E0A\u4E0B\u6587\n + \u5C5E\u6027\u9009\u62E9\u5668\uFF0C\u5FC5\u7136\u662F 4 \u7EA7 \u21D2 \u4E0E\u6CE8\u5165\u987A\u5E8F\u65E0\u5173\u5730\u538B\u8FC7\u5B83\u3002\n 2026-10-30 \u771F\u673A\u4E8B\u6545\uFF1A\u8FD9\u91CC\u66FE\u5199\u6EE1 4 \u7EA7\uFF08\u591A\u4E86\u4E00\u4E2A __body\uFF09\uFF0C\u4E0E\u9009\u4E2D\u7684 4 \u7EA7\u76F8\u540C \u21D2 \u57FA\u7840\u5C42\n \u6BD4\u76AE\u80A4\u540E\u6CE8\u5165\uFF0C\u5076\u6570\u884C\u6C38\u8FDC\u88AB\u6591\u9A6C\u7EB9\u76D6\u4F4F\uFF08\u300C\u5355\u6570\u884C\u80FD\u9009\u4E2D\u3001\u53CC\u6570\u884C\u70B9\u4E86\u6CA1\u53CD\u5E94\u300D\uFF09\u3002 */\n.dshpc-table--striped .dshpc-table__row:nth-child(even){background:var(--dshpc-plate);}\n\n/* \u5206\u7EC4\u901A\u680F\uFF1A\u4E00\u4E2A\u8868\u683C\u91CC\u653E\u591A\u4E2A\u677F\u5757\uFF08\u5DE5\u4F5C\u533A A / \u5DE5\u4F5C\u533A B\uFF09\u65F6\uFF0C\u6BCF\u7EC4\u5148\u6765\u4E00\u884C\u6A2A\u8DE8\u5168\u90E8\u5217\u7684\u5927\u6807\u9898\uFF0C\n \u7136\u540E\u624D\u662F\u8FD9\u4E00\u7EC4\u81EA\u5DF1\u7684\u8868\u5934\u4E0E\u6570\u636E\u884C\u3002\u7ED3\u6784 + \u5E95\u8272\u5F52\u57FA\u7840\u5C42\uFF08\u53EA\u7528 token\uFF0C\u5404\u6863\u76AE\u80A4\u5171\u540C\u6210\u7ACB\uFF09\uFF1B\n \u901A\u680F\u5E95\u8D70 --dshpc-table-banner-bg\uFF08\u4E0E\u8868\u5934\u4E92\u6362\u7684\u90A3\u4E00\u6863\uFF0C2026-10-30 \u7528\u6237\u5B9A\uFF09\uFF1B\n \u901A\u680F\u4E0E\u7EC4\u8868\u5934\u4E4B\u95F4\u753B\u4E00\u6761\u7EBF\uFF08\u7528\u6237 2026-10-30\uFF1A\u90A3\u4E4B\u95F4\u4E5F\u8981\u6709 border\uFF09\uFF1B\n \u7EC4\u4E0E\u7EC4\u4E4B\u95F4\u7528\u901A\u680F\u9876\u7EBF\u9694\u5F00\uFF0C\u7B2C\u4E00\u7EC4\u9876\u90E8\u4E0D\u753B\uFF08\u5916\u6846\u5DF2\u7ECF\u5728\u90A3\u513F\uFF0C\u753B\u4E86\u5C31\u6210\u53CC\u7EBF\uFF09\u3002 */\n.dshpc-table__group-cell{height:var(--dshpc-table-head-h);padding:var(--dshpc-space-1) var(--dshpc-table-pad-x);\n box-sizing:border-box;background:var(--dshpc-table-banner-bg);border-top:1px solid var(--dshpc-border);\n border-bottom:1px solid var(--dshpc-border);\n text-align:left;vertical-align:middle;font-size:var(--dshpc-font-sm);font-weight:600;color:var(--dshpc-fg);}\n.dshpc-table__group-body:first-of-type .dshpc-table__group-cell{border-top:0;}\n\n/* \u901A\u680F\u6807\u9898\u7684\u56FA\u5B9A\u6807\u7B7E\uFF08\u77ED\u7AD6\u7EBF\uFF09\u4E0E\u6392\u7248\u7531 SectionHead \u81EA\u5E26\uFF084px \u5706\u5934\uFF09\uFF0C\u672C\u5C42\u4E0D\u518D\u753B\u3002 */\n\n.dshpc-table__empty{height:80px;padding:0 var(--dshpc-space-4);text-align:center;\n color:var(--dshpc-fg-3);font-size:var(--dshpc-font-sm);}\n\n/* \u52A0\u8F7D\u6001\u884C\uFF08\u52A0\u8F7D\u66F4\u591A / \u6CA1\u6709\u66F4\u591A / \u6574\u8868\u52A0\u8F7D\uFF09\uFF1A\u5355\u5143\u683C\u81EA\u8EAB\u4E0D\u753B\u8FB9\u6846\uFF08\u5E95\u90E8\u72B6\u6001\u884C\u7684\u9876\u7EBF\u7531\u76AE\u80A4\u8865\uFF09\uFF0C\u5185\u5BB9\u5C45\u4E2D\uFF1B\n \u6574\u8868\u52A0\u8F7D\u9ED8\u8BA4\u5360\u4F4D 160px\uFF08\u53EF\u7531 loadingHeight \u8986\u76D6\uFF09\uFF0C\u5E95\u90E8\u90A3\u884C\u53EA\u5360\u4E00\u884C\u9AD8\u3002 */\n.dshpc-table__state-cell{padding:0;border:0;text-align:center;vertical-align:middle;}\n.dshpc-table__state{display:flex;align-items:center;justify-content:center;\n gap:var(--dshpc-space-2);min-height:40px;padding:var(--dshpc-space-1) var(--dshpc-table-pad-x);\n box-sizing:border-box;color:var(--dshpc-fg-3);font-size:var(--dshpc-font-sm);}\n.dshpc-table__state--full{flex-direction:column;min-height:160px;gap:var(--dshpc-space-3);font-size:var(--dshpc-font-sm);}\n.dshpc-table__state-text{line-height:1;}\n/* \u5E95\u90E8\u54E8\u5175\uFF1A\u96F6\u9AD8\u3001\u65E0\u8FB9\u6846\u3001\u65E0\u5185\u5BB9\uFF0C\u53EA\u7ED9 IntersectionObserver \u4E00\u4E2A\u843D\u70B9\u3002 */\n.dshpc-table__sentinel>td{height:0;padding:0;border:0;line-height:0;}\n\n/* \u5185\u5EFA\u5206\u9875\u7684\u5916\u58F3\uFF1A\u8868\u683C\u5728\u4E0A\u3001\u5206\u9875\u6761\u5728\u4E0B\uFF0C\u95F4\u8DDD\u8D70 space-3\uFF08\u5206\u9875\u6761\u81EA\u5DF1\u7BA1\u5DE6\u53F3\u5BF9\u9F50\uFF09\u3002 */\n.dshpc-table-frame{display:flex;flex-direction:column;gap:var(--dshpc-space-3);}\n";
2
+ //# sourceMappingURL=table-css.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-css.generated.d.ts","sourceRoot":"","sources":["../../../src/ui/controls/table-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,8oQAAmlI,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ⚠️ 生成物,勿手改。真源 = src/ui/controls/table.css
2
+ // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
+ export const TABLE_BASE_CSS = "/* ── 表格基础层(结构 + 交互 + 空态)─────────────────────────────────────\n 外观分档 = 分组件 + 分文件:本文件只放所有外观共用的部分;\n 表头底色、分隔线、悬浮 / 选中色由皮肤文件负责(table-plain.css 是第一档)。\n 皮肤选择器一律挂在 .dshpc-table--<skin> 下,与基础层不同名 —— 注入顺序不影响胜负\n (test/css-contract.test.mjs 禁止跨常量同名选择器)。\n 圆角裁剪 / 横向滚动归调用方容器,本层不设 overflow;也不做表头吸顶:\n 分组表头是多行,统一 top:0 会在滚动时互相盖住(要吸顶请在外层容器处理)。 */\n\n.dshpc-table{--dshpc-table-pad-x:var(--dshpc-space-3);--dshpc-table-head-h:44px;--dshpc-table-row-h:48px;\n width:100%;table-layout:fixed;border-collapse:separate;border-spacing:0;box-sizing:border-box;\n color:var(--dshpc-fg);font-size:var(--dshpc-font-md);line-height:var(--dshpc-line-md);}\n\n/* 密度三档:只改行高与水平内距,配色与分隔线归皮肤。compact / comfortable 各一行,\n 新增档位在此追加;列级 padding 走内联 style 覆盖(不在这里再开一套变量)。\n 默认水平内距 12px(space-3)—— 参考稿的色块间距,16px 偏松。 */\n.dshpc-table--density-compact{--dshpc-table-pad-x:var(--dshpc-space-2);--dshpc-table-head-h:36px;--dshpc-table-row-h:36px;}\n.dshpc-table--density-comfortable{--dshpc-table-pad-x:var(--dshpc-space-4);--dshpc-table-head-h:52px;--dshpc-table-row-h:60px;}\n\n.dshpc-table__head-cell,.dshpc-table__cell{box-sizing:border-box;padding:var(--dshpc-space-1) var(--dshpc-table-pad-x);\n text-align:left;vertical-align:middle;font-weight:400;}\n\n/* 表头 44 / 数据行 48 是 default 档(参考稿密度);height 在 table-cell 上是最小高,\n 多行内容会自动把行撑高,不会被截断。 */\n.dshpc-table__head-cell{height:var(--dshpc-table-head-h);font-size:var(--dshpc-font-sm);font-weight:600;color:var(--dshpc-fg-2);}\n.dshpc-table__head-cell--group{text-align:center;}\n.dshpc-table__cell{height:var(--dshpc-table-row-h);}\n\n.dshpc-table__head-cell--center,.dshpc-table__cell--center{text-align:center;}\n.dshpc-table__head-cell--right,.dshpc-table__cell--right{text-align:right;}\n\n.dshpc-table__row{transition:background-color var(--dshpc-dur-fast) var(--dshpc-ease);}\n/* 只有传了 onRowClick 的行才是可点的(数据属性由组件按此打)。 */\n.dshpc-table__row[data-interactive='true']{cursor:pointer;}\n.dshpc-table__row:focus-visible{outline:2px solid var(--dshpc-focus);outline-offset:-2px;}\n\n/* 斑马纹是通用能力(表级 striped 开关),放在基础层:底色取 token,各档皮肤不必各自实现。\n 选择器刻意只到 3 个类级别(表级 + 行 + :nth-child);皮肤层的行态规则带 __body 上下文\n + 属性选择器,必然是 4 级 ⇒ 与注入顺序无关地压过它。\n 2026-10-30 真机事故:这里曾写满 4 级(多了一个 __body),与选中的 4 级相同 ⇒ 基础层\n 比皮肤后注入,偶数行永远被斑马纹盖住(「单数行能选中、双数行点了没反应」)。 */\n.dshpc-table--striped .dshpc-table__row:nth-child(even){background:var(--dshpc-plate);}\n\n/* 分组通栏:一个表格里放多个板块(工作区 A / 工作区 B)时,每组先来一行横跨全部列的大标题,\n 然后才是这一组自己的表头与数据行。结构 + 底色归基础层(只用 token,各档皮肤共同成立);\n 通栏底走 --dshpc-table-banner-bg(与表头互换的那一档,2026-10-30 用户定);\n 通栏与组表头之间画一条线(用户 2026-10-30:那之间也要有 border);\n 组与组之间用通栏顶线隔开,第一组顶部不画(外框已经在那儿,画了就成双线)。 */\n.dshpc-table__group-cell{height:var(--dshpc-table-head-h);padding:var(--dshpc-space-1) var(--dshpc-table-pad-x);\n box-sizing:border-box;background:var(--dshpc-table-banner-bg);border-top:1px solid var(--dshpc-border);\n border-bottom:1px solid var(--dshpc-border);\n text-align:left;vertical-align:middle;font-size:var(--dshpc-font-sm);font-weight:600;color:var(--dshpc-fg);}\n.dshpc-table__group-body:first-of-type .dshpc-table__group-cell{border-top:0;}\n\n/* 通栏标题的固定标签(短竖线)与排版由 SectionHead 自带(4px 圆头),本层不再画。 */\n\n.dshpc-table__empty{height:80px;padding:0 var(--dshpc-space-4);text-align:center;\n color:var(--dshpc-fg-3);font-size:var(--dshpc-font-sm);}\n\n/* 加载态行(加载更多 / 没有更多 / 整表加载):单元格自身不画边框(底部状态行的顶线由皮肤补),内容居中;\n 整表加载默认占位 160px(可由 loadingHeight 覆盖),底部那行只占一行高。 */\n.dshpc-table__state-cell{padding:0;border:0;text-align:center;vertical-align:middle;}\n.dshpc-table__state{display:flex;align-items:center;justify-content:center;\n gap:var(--dshpc-space-2);min-height:40px;padding:var(--dshpc-space-1) var(--dshpc-table-pad-x);\n box-sizing:border-box;color:var(--dshpc-fg-3);font-size:var(--dshpc-font-sm);}\n.dshpc-table__state--full{flex-direction:column;min-height:160px;gap:var(--dshpc-space-3);font-size:var(--dshpc-font-sm);}\n.dshpc-table__state-text{line-height:1;}\n/* 底部哨兵:零高、无边框、无内容,只给 IntersectionObserver 一个落点。 */\n.dshpc-table__sentinel>td{height:0;padding:0;border:0;line-height:0;}\n\n/* 内建分页的外壳:表格在上、分页条在下,间距走 space-3(分页条自己管左右对齐)。 */\n.dshpc-table-frame{display:flex;flex-direction:column;gap:var(--dshpc-space-3);}\n";
4
+ //# sourceMappingURL=table-css.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-css.generated.js","sourceRoot":"","sources":["../../../src/ui/controls/table-css.generated.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,glIAAglI,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const TABLE_PLAIN_CSS = "/* \u2500\u2500 \u5916\u89C2\u4E00 \u00B7 Plain\uFF08\u7B2C\u4E00\u4E2A\u6837\u5F0F\uFF1A\u767D\u5361\u7247\u4E0A\u7684\u8F7B\u91CF\u8868\u683C\uFF09\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n \u7279\u5F81\uFF1A\u5916\u6846 + \u7070\u5E95\u8868\u5934\uFF08\u542B\u4E0B\u8FB9\u7EBF\uFF0C\u53CC\u884C\u5206\u7EC4\u8868\u5934\u4E5F\u6E05\u695A\uFF09\u3001\u7AD6\u5411\u5206\u9694\u7EBF\u3001\n \u6570\u636E\u884C\u53EA\u4FDD\u7559\u6781\u6DE1\u5E95\u7EBF\uFF08\u4E0D\u753B\u91CD\u6A2A\u7EBF\uFF09\u3001\u884C\u60AC\u6D6E\u6DE1\u84DD\u3001\u9009\u4E2D\u884C\u6DE1\u84DD\u5E95 + \u5DE6\u4FA7 3px \u84DD\u7AD6\u6761\u3002\n \u9009\u62E9\u5668\u5168\u90E8\u6302\u5728 .dshpc-table--plain \u4E0B\uFF0C\u548C\u57FA\u7840\u5C42\u4E0D\u540C\u540D\uFF08\u6CE8\u5165\u987A\u5E8F\u65E0\u5173\uFF09\u3002\n \u7AD6\u5206\u9694\u7EBF\u6309\u5217\u58F0\u660E\uFF08\u683C\u5B50\u4E0A\u7684 data-divider\uFF09\uFF0C\u4E0D\u7528\u76F8\u90BB\u5144\u5F1F\u9009\u62E9\u5668 \u2014\u2014 \u540E\u8005\u4F1A\u8BA9\u6BCF\u884C\u9996\u683C\n \u6C38\u8FDC\u6CA1\u6709\u5DE6\u7EBF\uFF08\u7528\u6237 2026-10-30 \u771F\u673A\u770B\u5230\u7684 Name \u5DE6\u4FA7\u7F3A\u7EBF\uFF09\uFF0C\u4E14\u5355\u5143\u683C\u8DE8\u5217\u540E\u4F1A\u753B\u9519\u4F4D\u7F6E\u3002\n \u540E\u7EED\u5916\u89C2\u7167\u6B64\u53E6\u5EFA\uFF1Atable-grid.css / table-zebra.css\uFF0C\u5404\u81EA\u4E00\u4E2A\u7EC4\u4EF6\u3001\u5404\u81EA import \u81EA\u5DF1\u90A3\u4EFD\u3002 */\n\n/* \u5916\u6846\u56DB\u6001\uFF1Aall \u56DB\u8FB9 / x \u53EA\u6709\u5DE6\u53F3 / y \u53EA\u6709\u4E0A\u4E0B / none \u5168\u4E0D\u8981\u3002\n \u7EC4\u4EF6\u603B\u4F1A\u6309 borders \u5C5E\u6027\u548C\u4E0A\u5BF9\u5E94 class\uFF0C\u6545\u8FD9\u91CC\u4E0D\u5B58\u5728\u300C\u65E0 class \u7684\u88F8\u8868\u300D\u3002\n \u300C\u4E0D\u8981\u5DE6\u53F3\u4E24\u6761\u8FB9\u300D\u5C31\u662F borders='y'\u3002 */\n.dshpc-table--plain.dshpc-table--borders-all{border:1px solid var(--dshpc-border);}\n.dshpc-table--plain.dshpc-table--borders-x{border-left:1px solid var(--dshpc-border);\n border-right:1px solid var(--dshpc-border);}\n.dshpc-table--plain.dshpc-table--borders-y{border-top:1px solid var(--dshpc-border);\n border-bottom:1px solid var(--dshpc-border);}\n.dshpc-table--plain.dshpc-table--borders-none{border:0;}\n\n/* \u8868\u5934\uFF1A\u4E2D\u6027\u7070\u5E95 + \u4E0B\u8FB9\u7EBF\u3002\u5E95\u8272\u8D70 --dshpc-table-head-bg\uFF08= --dshpc-surface-sunken\uFF0C\n \u4E0E\u901A\u680F\u90A3\u5C42\u7070\u540C\u6E90\uFF1B2026-10-30 \u7528\u6237\u4E8C\u6B21\u5B9A\u6848\uFF1A\u8868\u5934 / \u901A\u680F\u4E92\u6362\u5E95\u8272\uFF09\uFF1B\u4E0B\u8FB9\u7EBF\u515C\u4F4F\u5206\u7EC4\u8868\u5934\u7684\u7B2C\u4E8C\u5C42\u3002 */\n.dshpc-table--plain .dshpc-table__head-cell{\n background:var(--dshpc-table-head-bg);\n border-bottom:1px solid var(--dshpc-border);\n}\n.dshpc-table--plain .dshpc-table__head-cell--group{color:var(--dshpc-fg-3);}\n\n/* \u8868\u5934\u591A\u8272\uFF1A\u5217\u7EA7 headerTone \u6253\u5230 data-header-tone\uFF0C\u6D45\u5E95 + \u540C\u8272\u6587\u5B57\u3002\n \u8272\u503C\u5168\u90E8\u6765\u81EA token\uFF08soft \u5E95 / \u5B9E\u8272\u5B57\uFF09\uFF0C\u6697\u8272\u4E3B\u9898\u81EA\u52A8\u8DDF\u968F\uFF0C\u4E0D\u5199\u6B7B\u4EFB\u4F55 hex\u3002\n \u8FD9\u7EC4\u89C4\u5219\u6BD4\u4E0A\u65B9\u7070\u5E95\u89C4\u5219\u591A\u4E00\u4E2A\u5C5E\u6027\u9009\u62E9\u5668\uFF0C\u5FC5\u7136\u8986\u76D6\u9ED8\u8BA4\u7070\u5E95\u3002 */\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='business']{background:var(--dshpc-business-soft);color:var(--dshpc-business);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='success']{background:var(--dshpc-success-soft);color:var(--dshpc-success);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='warning']{background:var(--dshpc-warning-soft);color:var(--dshpc-warning);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='danger']{background:var(--dshpc-danger-soft);color:var(--dshpc-danger);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='purple']{background:var(--dshpc-purple-soft);color:var(--dshpc-purple);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='pink']{background:var(--dshpc-pink-soft);color:var(--dshpc-pink);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='cyan']{background:var(--dshpc-cyan-soft);color:var(--dshpc-cyan);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='teal']{background:var(--dshpc-teal-soft);color:var(--dshpc-teal);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='orange']{background:var(--dshpc-orange-soft);color:var(--dshpc-orange);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='indigo']{background:var(--dshpc-indigo-soft);color:var(--dshpc-indigo);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='rose']{background:var(--dshpc-rose-soft);color:var(--dshpc-rose);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='slate']{background:var(--dshpc-slate-soft);color:var(--dshpc-slate);}\n\n/* \u7AD6\u5206\u9694\u7EBF\uFF1A\u6309\u5217\u58F0\u660E\uFF0C**\u9ED8\u8BA4\u4E0D\u753B**\u3002\u7EC4\u4EF6\u53EA\u7ED9 divider: true \u7684\u5217\u6253 data-divider='left'\uFF0C\n \u9996\u5217\u6052\u4E0D\u753B\uFF08\u90A3\u662F\u5916\u6846\u7684\u4F4D\u7F6E\uFF09\u3002\u9ED8\u8BA4\u8868\u683C = \u53EA\u6709\u6A2A\u7EBF\u3001\u6CA1\u6709\u4E00\u6761\u7AD6\u7EBF\uFF1B\n \u8981\u300C\u5217\u95F4\u6709\u7EBF\u300D\u5C31\u7ED9\u5BF9\u5E94\u5217 divider:true\u3002 */\n.dshpc-table--plain .dshpc-table__head-cell[data-divider='left'],\n.dshpc-table--plain .dshpc-table__cell[data-divider='left']{border-left:1px solid var(--dshpc-border);}\n\n/* \u6570\u636E\u884C\u4E4B\u95F4\u7684\u6781\u6DE1\u5E95\u7EBF\uFF1A\u53EA\u5E2E\u773C\u775B\u300C\u5206\u884C\u300D\uFF0C\u4E0D\u56DE\u5230\u7C97\u6A2A\u7EBF\u8868\u683C\u7684\u8001\u6837\u5B50\u3002 */\n.dshpc-table--plain .dshpc-table__row + .dshpc-table__row .dshpc-table__cell{\n border-top:1px solid var(--dshpc-border-faint);\n}\n\n/* \u5E95\u90E8\u72B6\u6001\u884C\uFF08\u52A0\u8F7D\u66F4\u591A / \u5230\u5E95\uFF09\uFF1A\u6574\u884C\u901A\u680F\uFF0C\u4E0E\u4E0A\u65B9\u6570\u636E\u884C\u4E4B\u95F4\u8865\u4E00\u6761\u5B9E\u7EBF\u3002\n \u53EA\u8865\u9876\u7EBF\uFF1A\u5DE6\u53F3\u4E24\u6761\u4E0D\u7531\u8FD9\u4E00\u683C\u91CD\u590D\u753B \u2014\u2014 borders=all / x \u65F6\u8868\u7EA7\u5916\u6846\u5DF2\u7ECF\u515C\u4F4F\uFF1B\n borders=y / none \u672C\u6765\u5C31\u6CA1\u6709\u5DE6\u53F3\u8FB9\u3002\u6574\u8868\u52A0\u8F7D\u5360\u4F4D\u884C\u4E0D\u52A0\uFF08\u8868\u5934\u5DF2\u6709\u4E0B\u8FB9\u7EBF\uFF0C\u518D\u52A0\u5C31\u6210\u53CC\u7EBF\uFF09\u3002 */\n.dshpc-table--plain .dshpc-table__state-row--footer .dshpc-table__state-cell{\n border-top:1px solid var(--dshpc-border);\n}\n\n/* \u6CA1\u6709\u5DE6\u53F3\u5916\u6846\u65F6\uFF08borders=y\uFF09\u5E95\u90E8\u72B6\u6001\u884C\u4E0B\u9762\u90A3\u6761\u8868\u5E95\u7EBF\u4E5F\u53BB\u6389\uFF1A\n \u72B6\u6001\u884C\u53EA\u7559\u4E0A\u65B9\u4E00\u6761\u5B9E\u7EBF\uFF0C\u5426\u5219\u56FE\u6807 / \u6587\u6848\u4E0B\u65B9\u8FD8\u591A\u4E00\u6761\u5B64\u7EBF\uFF082026-10-31 \u7528\u6237\u5B9A\uFF09\u3002\n borders=none \u672C\u6765\u5C31\u6CA1\u6709\u5E95\u8FB9\uFF0C\u65E0\u9700\u5728\u6B64\u91CD\u590D\u3002 */\n.dshpc-table--plain.dshpc-table--borders-y.dshpc-table--foot-no-bottom{border-bottom:0;}\n\n/* \u884C\u60AC\u6D6E\uFF1A\u53EA\u5728\u53EF\u70B9\u884C\u4E0A\u7ED9\u53CD\u9988\uFF0C\u9759\u6001\u8868\u683C\u4E0D\u8BEF\u5BFC\u7528\u6237\u4EE5\u4E3A\u80FD\u70B9\u3002\n \u5E95\u8272\u662F\u6781\u6DE1\u4E2D\u6027\u7070\uFF08--dshpc-table-row-hover\uFF1A\u4EAE\u8272\u4E00\u5C42\u6DE1\u9ED1 \u22481.5%\uFF0C\u6697\u8272\u4E00\u5C42\u6DE1\u767D \u22483%\uFF09\u2014\u2014\n 2026-10-30 \u7528\u6237\uFF1Ahover \u8981\u7279\u522B\u6DE1\u7684\u7070\u3001\u4E0D\u8981\u6DE1\u84DD\uFF08\u7B2C\u4E8C\u6B21\u53C8\u8981\u6C42\u518D\u6D45\u4E00\u534A\uFF09\u3002\u5E26 __body \u4E0A\u4E0B\u6587\u662F\u4E3A\u4E86\u538B\u8FC7\u57FA\u7840\u5C42\u7684\u6591\u9A6C\u7EB9\uFF08\u89C1 table.css\uFF09\u3002 */\n.dshpc-table--plain .dshpc-table__body .dshpc-table__row[data-interactive='true']:hover{background:var(--dshpc-table-row-hover);}\n\n/* \u9009\u4E2D\u884C\uFF1A\u6DE1\u84DD\u5E95 + \u5DE6\u4FA7\u84DD\u7AD6\u6761\u3002\u7528\u80CC\u666F\u6E10\u53D8\u753B\u6761\uFF0C\u907F\u514D tr \u4E0A\u4F2A\u5143\u7D20 / \u5B9A\u4F4D\u7684\u517C\u5BB9\u95EE\u9898\uFF1B\n \u4E24\u6761\u9009\u62E9\u5668\u540C\u4E00\u4EFD\u58F0\u660E\uFF1A\u60AC\u6D6E\u6001\uFF08\u591A\u4E00\u4E2A\u5C5E\u6027 + \u4F2A\u7C7B\uFF09\u4E0D\u4F1A\u76D6\u6389\u9009\u4E2D\u6001\u3002\n \u5E95\u8272\u7528 business-soft\uFF08\u6BD4\u60AC\u6D6E\u518D\u660E\u786E\u4E00\u6863\u4F46\u4ECD\u662F\u6D45\u8272\uFF09\uFF0C\u6761\u672C\u8EAB\u624D\u662F\u300C\u9009\u4E2D\u300D\u7684\u4FE1\u53F7\u3002\n \u7279\u5F02\u6027 4 \u7EA7\uFF0C\u9AD8\u4E8E\u57FA\u7840\u5C42\u7684\u6591\u9A6C\u7EB9\uFF083 \u7EA7\uFF09\u21D2 \u5076\u6570\u884C\u4E5F\u80FD\u6B63\u5E38\u9009\u4E2D\u3002 */\n.dshpc-table--plain .dshpc-table__body .dshpc-table__row[data-selected='true'],\n.dshpc-table--plain .dshpc-table__body .dshpc-table__row[data-selected='true'][data-interactive='true']:hover{\n background:linear-gradient(to right,var(--dshpc-business) 3px,var(--dshpc-business-soft) 3px);\n}\n";
2
+ //# sourceMappingURL=table-plain-css.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-plain-css.generated.d.ts","sourceRoot":"","sources":["../../../src/ui/controls/table-plain-css.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,6qSAA6tJ,CAAA"}
@@ -0,0 +1,4 @@
1
+ // ⚠️ 生成物,勿手改。真源 = src/ui/controls/table-plain.css
2
+ // 由 scripts/gen-css.mjs 生成(`pnpm run gen:css`):改样式请改那个 .css 文件后重新生成。
3
+ export const TABLE_PLAIN_CSS = "/* ── 外观一 · Plain(第一个样式:白卡片上的轻量表格)─────────────────────\n 特征:外框 + 灰底表头(含下边线,双行分组表头也清楚)、竖向分隔线、\n 数据行只保留极淡底线(不画重横线)、行悬浮淡蓝、选中行淡蓝底 + 左侧 3px 蓝竖条。\n 选择器全部挂在 .dshpc-table--plain 下,和基础层不同名(注入顺序无关)。\n 竖分隔线按列声明(格子上的 data-divider),不用相邻兄弟选择器 —— 后者会让每行首格\n 永远没有左线(用户 2026-10-30 真机看到的 Name 左侧缺线),且单元格跨列后会画错位置。\n 后续外观照此另建:table-grid.css / table-zebra.css,各自一个组件、各自 import 自己那份。 */\n\n/* 外框四态:all 四边 / x 只有左右 / y 只有上下 / none 全不要。\n 组件总会按 borders 属性和上对应 class,故这里不存在「无 class 的裸表」。\n 「不要左右两条边」就是 borders='y'。 */\n.dshpc-table--plain.dshpc-table--borders-all{border:1px solid var(--dshpc-border);}\n.dshpc-table--plain.dshpc-table--borders-x{border-left:1px solid var(--dshpc-border);\n border-right:1px solid var(--dshpc-border);}\n.dshpc-table--plain.dshpc-table--borders-y{border-top:1px solid var(--dshpc-border);\n border-bottom:1px solid var(--dshpc-border);}\n.dshpc-table--plain.dshpc-table--borders-none{border:0;}\n\n/* 表头:中性灰底 + 下边线。底色走 --dshpc-table-head-bg(= --dshpc-surface-sunken,\n 与通栏那层灰同源;2026-10-30 用户二次定案:表头 / 通栏互换底色);下边线兜住分组表头的第二层。 */\n.dshpc-table--plain .dshpc-table__head-cell{\n background:var(--dshpc-table-head-bg);\n border-bottom:1px solid var(--dshpc-border);\n}\n.dshpc-table--plain .dshpc-table__head-cell--group{color:var(--dshpc-fg-3);}\n\n/* 表头多色:列级 headerTone 打到 data-header-tone,浅底 + 同色文字。\n 色值全部来自 token(soft 底 / 实色字),暗色主题自动跟随,不写死任何 hex。\n 这组规则比上方灰底规则多一个属性选择器,必然覆盖默认灰底。 */\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='business']{background:var(--dshpc-business-soft);color:var(--dshpc-business);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='success']{background:var(--dshpc-success-soft);color:var(--dshpc-success);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='warning']{background:var(--dshpc-warning-soft);color:var(--dshpc-warning);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='danger']{background:var(--dshpc-danger-soft);color:var(--dshpc-danger);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='purple']{background:var(--dshpc-purple-soft);color:var(--dshpc-purple);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='pink']{background:var(--dshpc-pink-soft);color:var(--dshpc-pink);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='cyan']{background:var(--dshpc-cyan-soft);color:var(--dshpc-cyan);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='teal']{background:var(--dshpc-teal-soft);color:var(--dshpc-teal);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='orange']{background:var(--dshpc-orange-soft);color:var(--dshpc-orange);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='indigo']{background:var(--dshpc-indigo-soft);color:var(--dshpc-indigo);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='rose']{background:var(--dshpc-rose-soft);color:var(--dshpc-rose);}\n.dshpc-table--plain .dshpc-table__head-cell[data-header-tone='slate']{background:var(--dshpc-slate-soft);color:var(--dshpc-slate);}\n\n/* 竖分隔线:按列声明,**默认不画**。组件只给 divider: true 的列打 data-divider='left',\n 首列恒不画(那是外框的位置)。默认表格 = 只有横线、没有一条竖线;\n 要「列间有线」就给对应列 divider:true。 */\n.dshpc-table--plain .dshpc-table__head-cell[data-divider='left'],\n.dshpc-table--plain .dshpc-table__cell[data-divider='left']{border-left:1px solid var(--dshpc-border);}\n\n/* 数据行之间的极淡底线:只帮眼睛「分行」,不回到粗横线表格的老样子。 */\n.dshpc-table--plain .dshpc-table__row + .dshpc-table__row .dshpc-table__cell{\n border-top:1px solid var(--dshpc-border-faint);\n}\n\n/* 底部状态行(加载更多 / 到底):整行通栏,与上方数据行之间补一条实线。\n 只补顶线:左右两条不由这一格重复画 —— borders=all / x 时表级外框已经兜住;\n borders=y / none 本来就没有左右边。整表加载占位行不加(表头已有下边线,再加就成双线)。 */\n.dshpc-table--plain .dshpc-table__state-row--footer .dshpc-table__state-cell{\n border-top:1px solid var(--dshpc-border);\n}\n\n/* 没有左右外框时(borders=y)底部状态行下面那条表底线也去掉:\n 状态行只留上方一条实线,否则图标 / 文案下方还多一条孤线(2026-10-31 用户定)。\n borders=none 本来就没有底边,无需在此重复。 */\n.dshpc-table--plain.dshpc-table--borders-y.dshpc-table--foot-no-bottom{border-bottom:0;}\n\n/* 行悬浮:只在可点行上给反馈,静态表格不误导用户以为能点。\n 底色是极淡中性灰(--dshpc-table-row-hover:亮色一层淡黑 ≈1.5%,暗色一层淡白 ≈3%)——\n 2026-10-30 用户:hover 要特别淡的灰、不要淡蓝(第二次又要求再浅一半)。带 __body 上下文是为了压过基础层的斑马纹(见 table.css)。 */\n.dshpc-table--plain .dshpc-table__body .dshpc-table__row[data-interactive='true']:hover{background:var(--dshpc-table-row-hover);}\n\n/* 选中行:淡蓝底 + 左侧蓝竖条。用背景渐变画条,避免 tr 上伪元素 / 定位的兼容问题;\n 两条选择器同一份声明:悬浮态(多一个属性 + 伪类)不会盖掉选中态。\n 底色用 business-soft(比悬浮再明确一档但仍是浅色),条本身才是「选中」的信号。\n 特异性 4 级,高于基础层的斑马纹(3 级)⇒ 偶数行也能正常选中。 */\n.dshpc-table--plain .dshpc-table__body .dshpc-table__row[data-selected='true'],\n.dshpc-table--plain .dshpc-table__body .dshpc-table__row[data-selected='true'][data-interactive='true']:hover{\n background:linear-gradient(to right,var(--dshpc-business) 3px,var(--dshpc-business-soft) 3px);\n}\n";
4
+ //# sourceMappingURL=table-plain-css.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-plain-css.generated.js","sourceRoot":"","sources":["../../../src/ui/controls/table-plain-css.generated.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,qEAAqE;AACrE,MAAM,CAAC,MAAM,eAAe,GAAG,0tJAA0tJ,CAAA"}
@@ -8,4 +8,8 @@ export { BACK_TO_TOP_CSS } from './controls/back-to-top-css.generated.js';
8
8
  export { HINT_CSS } from './controls/hint-css.generated.js';
9
9
  export { DATETIME_CSS } from './controls/datetime-css.generated.js';
10
10
  export { SPLIT_GROUP_CSS } from './controls/split-group-css.generated.js';
11
+ export { TABLE_BASE_CSS } from './controls/table-css.generated.js';
12
+ export { TABLE_PLAIN_CSS } from './controls/table-plain-css.generated.js';
13
+ export { PAGINATION_CSS } from './controls/pagination-css.generated.js';
14
+ export { SECTION_HEAD_CSS } from './controls/section-head-css.generated.js';
11
15
  //# sourceMappingURL=controls-css.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"controls-css.d.ts","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA"}
1
+ {"version":3,"file":"controls-css.d.ts","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AAEzE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AAEzE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAA"}
@@ -15,4 +15,11 @@ export { BACK_TO_TOP_CSS } from './controls/back-to-top-css.generated.js';
15
15
  export { HINT_CSS } from './controls/hint-css.generated.js';
16
16
  export { DATETIME_CSS } from './controls/datetime-css.generated.js';
17
17
  export { SPLIT_GROUP_CSS } from './controls/split-group-css.generated.js';
18
+ // 表格:基础层与各外观皮肤分开导出 —— 组件只 import 自己那一份(外观按需分包)。
19
+ export { TABLE_BASE_CSS } from './controls/table-css.generated.js';
20
+ export { TABLE_PLAIN_CSS } from './controls/table-plain-css.generated.js';
21
+ // 分页:独立控件,Table 内建分页时也复用这一份。
22
+ export { PAGINATION_CSS } from './controls/pagination-css.generated.js';
23
+ // 分区标题:SectionHead 自注入;Table 的通栏标题也走它。
24
+ export { SECTION_HEAD_CSS } from './controls/section-head-css.generated.js';
18
25
  //# sourceMappingURL=controls-css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"controls-css.js","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,mCAAmC;AACnC,8DAA8D;AAC9D,kEAAkE;AAClE,gDAAgD;AAChD,kDAAkD;AAClD,4DAA4D;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA"}
1
+ {"version":3,"file":"controls-css.js","sourceRoot":"","sources":["../../src/ui/controls-css.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,mCAAmC;AACnC,8DAA8D;AAC9D,kEAAkE;AAClE,gDAAgD;AAChD,kDAAkD;AAClD,4DAA4D;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,gDAAgD;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,6BAA6B;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAA;AACvE,uCAAuC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAA"}
@@ -12,6 +12,10 @@ export { ConfirmModal, type ConfirmModalProps, type ConfirmTone, } from './Confi
12
12
  export { alertModal, confirmModal, type AlertOptions, type ConfirmOptions, } from './modal-host.js';
13
13
  export { CARD_ACCENTS, Card, StripCard, type CardAccent, type CardSharedProps, } from './Card.js';
14
14
  export { Chip, type ChipProps, type ChipSize, type ChipTone } from './Chip.js';
15
+ export { Table, type TableProps } from './Table.js';
16
+ export { Pagination, type PaginationProps, type TablePaginationConfig, } from './Pagination.js';
17
+ export { clampPage, pageCountOf, pageItems, pageRange, type PageItem, type PageTotalRenderer, type PaginationAlign, } from './pagination-logic.js';
18
+ export { headerRows, isLeafColumn, isTableCellSpec, leafColumns, tableDepth, type TableAlign, type TableBorders, type TableCell, type TableCellSpec, type TableColumn, type TableDensity, type TableGroup, type TableHeaderCell, type TableRow, type TableTone, } from './table-logic.js';
15
19
  export { showToast, notify, type ToastVariant, type ToastPosition, type ToastOptions, type ToastAction, type NotifyOptions, } from './Toast.js';
16
20
  export { Button, IconButton, type ButtonProps, type ButtonSize, type ButtonVariant, type IconButtonProps } from './Button.js';
17
21
  export { Segmented, type SegmentedProps, type SegmentedTone } from './Segmented.js';
@@ -23,7 +27,7 @@ export { Loader, type LoaderProps, type LoaderSize, type LoaderVariant } from '.
23
27
  export { LoaderBar, type LoaderBarProps } from './LoaderBar.js';
24
28
  export { Loading, LoadingBlock, LoadingToast, RunningBlocks, showLoading, type LoadingOptions, type LoadingProps, type LoadingViewProps, } from './Loading.js';
25
29
  export { claimLoadingHost, createLoadingSlot, loadingOverlayClass, LOADING_HOST_KEY, type LoadingHandle, type LoadingPosition, type LoadingSlotState, type LoadingVariant, } from './loading-host.js';
26
- export { SectionHead } from './SectionHead.js';
30
+ export { SectionHead, type SectionHeadAccent, type SectionHeadProps } from './SectionHead.js';
27
31
  export { FieldHint, type FieldHintProps } from './FieldHint.js';
28
32
  export { getTooltipRenderer, setTooltipRenderer, type TooltipRenderProps, type TooltipRenderer, } from './tooltip.js';
29
33
  export { LiveText } from './LiveText.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACpF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,oBAAoB,EACpB,QAAQ,EACR,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EACL,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,eAAe,EACf,eAAe,EACf,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,UAAU,EACV,aAAa,EACb,OAAO,EACP,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,UAAU,EACV,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,SAAS,GACf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AACjF,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,UAAU,GAChB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,aAAa,GACnB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,WAAW,GACjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,UAAU,EACV,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,KAAK,UAAU,EACf,KAAK,eAAe,GACrB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAA;AAE9E,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,qBAAqB,GAC3B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,SAAS,EACT,WAAW,EACX,SAAS,EACT,SAAS,EACT,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACtB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,UAAU,EACV,YAAY,EACZ,eAAe,EACf,WAAW,EACX,UAAU,EACV,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,SAAS,GACf,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,SAAS,EACT,MAAM,EACN,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7H,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnF,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3F,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EACL,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,gBAAgB,GACtB,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,EACL,SAAS,EACT,SAAS,EACT,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,WAAW,EACX,MAAM,EACN,SAAS,EACT,WAAW,EACX,aAAa,EACb,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,aAAa,EACb,cAAc,EACd,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAA"}
package/dist/ui/index.js CHANGED
@@ -16,6 +16,12 @@ export { ConfirmModal, } from './ConfirmModal.js';
16
16
  export { alertModal, confirmModal, } from './modal-host.js';
17
17
  export { CARD_ACCENTS, Card, StripCard, } from './Card.js';
18
18
  export { Chip } from './Chip.js';
19
+ // 表格:第一档外观 = Table(后续 TableGrid / TableZebra 各自独立导出,引哪个打包哪个)。
20
+ export { Table } from './Table.js';
21
+ // 分页:独立控件;Table 也可通过 `pagination` 内建(切片 + 表下渲染)。
22
+ export { Pagination, } from './Pagination.js';
23
+ export { clampPage, pageCountOf, pageItems, pageRange, } from './pagination-logic.js';
24
+ export { headerRows, isLeafColumn, isTableCellSpec, leafColumns, tableDepth, } from './table-logic.js';
19
25
  export { showToast, notify, } from './Toast.js';
20
26
  export { Button, IconButton } from './Button.js';
21
27
  export { Segmented } from './Segmented.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,sDAAsD;AACtD,uDAAuD;AACvD,4CAA4C;AAC5C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACpF,OAAO,EACL,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,oBAAoB,EACpB,QAAQ,EACR,WAAW,GAGZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAqC,MAAM,aAAa,CAAA;AACvE,OAAO,EACL,cAAc,GAIf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,eAAe,EACf,eAAe,EACf,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,UAAU,EACV,aAAa,EACb,OAAO,EACP,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,UAAU,EACV,aAAa,GAQd,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,WAAW,EAAkD,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EAAE,eAAe,EAA6B,MAAM,sBAAsB,CAAA;AACjF,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,aAAa,GAOd,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,KAAK,EAAmC,MAAM,YAAY,CAAA;AACnE,OAAO,EACL,UAAU,GAGX,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,YAAY,GAGb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,UAAU,EACV,YAAY,GAGb,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,SAAS,GAGV,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,IAAI,EAAgD,MAAM,WAAW,CAAA;AAC9E,8DAA8D;AAC9D,OAAO,EAAE,KAAK,EAAmB,MAAM,YAAY,CAAA;AACnD,iDAAiD;AACjD,OAAO,EACL,UAAU,GAGX,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,SAAS,EACT,WAAW,EACX,SAAS,EACT,SAAS,GAIV,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,UAAU,EACV,YAAY,EACZ,eAAe,EACf,WAAW,EACX,UAAU,GAWX,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,SAAS,EACT,MAAM,GAMP,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,MAAM,EAAE,UAAU,EAA+E,MAAM,aAAa,CAAA;AAC7H,OAAO,EAAE,SAAS,EAA2C,MAAM,gBAAgB,CAAA;AACnF,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAyD,MAAM,aAAa,CAAA;AAC3F,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EACL,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,GAIZ,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,GAKjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAiD,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GAGnB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAsB,MAAM,cAAc,CAAA;AACzE,OAAO,EACL,SAAS,EACT,SAAS,EACT,eAAe,GAOhB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,WAAW,EACX,MAAM,EACN,SAAS,EACT,WAAW,EACX,aAAa,GAGd,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,aAAa,EACb,cAAc,GAMf,MAAM,YAAY,CAAA"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * 分页纯逻辑:总页数、页码夹取、省略号窗口、当前页可见区间。
3
+ *
4
+ * 零 React 运行时依赖(只 `import type`,编译后不留痕迹),可被 node 单测直接引。
5
+ *
6
+ * 口径照通行的分页约定(Ant Design / MUI / Element Plus 一致):
7
+ * 调用方只给「当前页 / 每页条数 / 总条数」,总页数与省略窗口一律由这里算,
8
+ * **消费方永远不自己算页数、也不自己拼页码**。
9
+ */
10
+ import type { ReactNode } from 'react';
11
+ /** 页码条对齐:默认 right(放内容右下角)。 */
12
+ export type PaginationAlign = 'left' | 'center' | 'right';
13
+ /** 页码条里的一项:页码,或省略号占位。 */
14
+ export type PageItem = number | 'gap';
15
+ /** 总页数:`ceil(total / pageSize)`,至少 1 页(空数据也显示单页)。 */
16
+ export declare function pageCountOf(total: number, pageSize: number): number;
17
+ /** 把页码夹回 `[1, pageCount]`(越界 / NaN 一律落到第 1 页)。 */
18
+ export declare function clampPage(page: number, pageCount: number): number;
19
+ /**
20
+ * 当前页在数据里的区间(1 起的闭区间行号)。
21
+ * 空数据返回 `[0, 0]`(调用方据此显示「共 0 条」而不是「第 0-0 条」)。
22
+ */
23
+ export declare function pageRange(page: number, pageSize: number, total: number): [number, number];
24
+ /**
25
+ * 页码条上的项序列(含省略号占位)。
26
+ *
27
+ * 窗口算法照 MUI 的实现:首尾各固定 `boundaryCount` 页,当前页两侧各留 `siblingCount` 页,
28
+ * 中间不足的部分收成 `'gap'`。默认 1 / 1 —— 最多 7 个位置(与 Element Plus `pager-count: 7` 等价)。
29
+ *
30
+ * 关键细节(各家一致,别改成「有缝就画省略号」):间隔**正好 1 页**时直接显示那个页号,
31
+ * 不画省略号,否则会出现 `1 2 … 4` 这种丑态。
32
+ */
33
+ export declare function pageItems(page: number, pageCount: number, siblingCount?: number, boundaryCount?: number): PageItem[];
34
+ /** `showTotal` 的两种写法:`true` 走内置字典,函数则拿到 (总条数, 起始行, 结束行)。 */
35
+ export type PageTotalRenderer = (total: number, from: number, to: number) => ReactNode;
36
+ //# sourceMappingURL=pagination-logic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination-logic.d.ts","sourceRoot":"","sources":["../../src/ui/pagination-logic.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,8BAA8B;AAC9B,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;AAEzD,yBAAyB;AACzB,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAA;AAErC,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAInE;AAED,kDAAkD;AAClD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAOzF;AAQD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,YAAY,SAAI,EAChB,aAAa,SAAI,GAChB,QAAQ,EAAE,CA6BZ;AAED,4DAA4D;AAC5D,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,SAAS,CAAA"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * 分页纯逻辑:总页数、页码夹取、省略号窗口、当前页可见区间。
3
+ *
4
+ * 零 React 运行时依赖(只 `import type`,编译后不留痕迹),可被 node 单测直接引。
5
+ *
6
+ * 口径照通行的分页约定(Ant Design / MUI / Element Plus 一致):
7
+ * 调用方只给「当前页 / 每页条数 / 总条数」,总页数与省略窗口一律由这里算,
8
+ * **消费方永远不自己算页数、也不自己拼页码**。
9
+ */
10
+ /** 总页数:`ceil(total / pageSize)`,至少 1 页(空数据也显示单页)。 */
11
+ export function pageCountOf(total, pageSize) {
12
+ const size = Math.max(1, Math.floor(pageSize));
13
+ const rows = Math.max(0, Math.floor(total));
14
+ return Math.max(1, Math.ceil(rows / size));
15
+ }
16
+ /** 把页码夹回 `[1, pageCount]`(越界 / NaN 一律落到第 1 页)。 */
17
+ export function clampPage(page, pageCount) {
18
+ const count = Math.max(1, Math.floor(pageCount));
19
+ if (!Number.isFinite(page))
20
+ return 1;
21
+ return Math.min(Math.max(1, Math.floor(page)), count);
22
+ }
23
+ /**
24
+ * 当前页在数据里的区间(1 起的闭区间行号)。
25
+ * 空数据返回 `[0, 0]`(调用方据此显示「共 0 条」而不是「第 0-0 条」)。
26
+ */
27
+ export function pageRange(page, pageSize, total) {
28
+ const rows = Math.max(0, Math.floor(total));
29
+ if (rows === 0)
30
+ return [0, 0];
31
+ const size = Math.max(1, Math.floor(pageSize));
32
+ const current = clampPage(page, pageCountOf(rows, size));
33
+ const from = (current - 1) * size + 1;
34
+ return [from, Math.min(rows, from + size - 1)];
35
+ }
36
+ function range(start, end) {
37
+ const out = [];
38
+ for (let n = start; n <= end; n += 1)
39
+ out.push(n);
40
+ return out;
41
+ }
42
+ /**
43
+ * 页码条上的项序列(含省略号占位)。
44
+ *
45
+ * 窗口算法照 MUI 的实现:首尾各固定 `boundaryCount` 页,当前页两侧各留 `siblingCount` 页,
46
+ * 中间不足的部分收成 `'gap'`。默认 1 / 1 —— 最多 7 个位置(与 Element Plus `pager-count: 7` 等价)。
47
+ *
48
+ * 关键细节(各家一致,别改成「有缝就画省略号」):间隔**正好 1 页**时直接显示那个页号,
49
+ * 不画省略号,否则会出现 `1 2 … 4` 这种丑态。
50
+ */
51
+ export function pageItems(page, pageCount, siblingCount = 1, boundaryCount = 1) {
52
+ const count = Math.max(1, Math.floor(pageCount));
53
+ const current = clampPage(page, count);
54
+ const boundary = Math.max(0, Math.floor(boundaryCount));
55
+ const siblings = Math.max(0, Math.floor(siblingCount));
56
+ const startPages = range(1, Math.min(boundary, count));
57
+ const endPages = range(Math.max(count - boundary + 1, boundary + 1), count);
58
+ const siblingsStart = Math.max(Math.min(current - siblings, count - boundary - siblings * 2 - 1), boundary + 2);
59
+ const siblingsEnd = Math.min(Math.max(current + siblings, boundary + siblings * 2 + 2), endPages.length > 0 ? endPages[0] - 2 : count - 1);
60
+ const items = [...startPages];
61
+ if (siblingsStart > boundary + 2)
62
+ items.push('gap');
63
+ else if (boundary + 1 < count - boundary)
64
+ items.push(boundary + 1);
65
+ items.push(...range(siblingsStart, siblingsEnd));
66
+ if (siblingsEnd < count - boundary - 1)
67
+ items.push('gap');
68
+ else if (count - boundary > boundary)
69
+ items.push(count - boundary);
70
+ items.push(...endPages);
71
+ return items;
72
+ }
73
+ //# sourceMappingURL=pagination-logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination-logic.js","sourceRoot":"","sources":["../../src/ui/pagination-logic.ts"],"names":[],"mappings":"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"}