@icen.ai/ui 0.9.0 → 0.10.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 (281) hide show
  1. package/AGENTS.md +138 -80
  2. package/README.md +66 -91
  3. package/dist/base.css +208 -179
  4. package/dist/behaviors/accordion.mjs +8 -8
  5. package/dist/behaviors/ai-branch.d.mts +1 -1
  6. package/dist/behaviors/ai-branch.mjs +1010 -94
  7. package/dist/behaviors/ai-chat.d.mts +7 -7
  8. package/dist/behaviors/ai-chat.mjs +1071 -161
  9. package/dist/behaviors/ai-composer.d.mts +44 -12
  10. package/dist/behaviors/ai-composer.mjs +1997 -524
  11. package/dist/behaviors/ai-core.d.mts +1 -1
  12. package/dist/behaviors/ai-core.mjs +1016 -107
  13. package/dist/behaviors/ai-diff.mjs +1019 -127
  14. package/dist/behaviors/ai-feedback.d.mts +1 -1
  15. package/dist/behaviors/ai-feedback.mjs +1035 -126
  16. package/dist/behaviors/ai-panel.d.mts +8 -8
  17. package/dist/behaviors/ai-panel.mjs +1284 -266
  18. package/dist/behaviors/ai-provider.mjs +1003 -101
  19. package/dist/behaviors/ai-threads.d.mts +1 -1
  20. package/dist/behaviors/ai-threads.mjs +1068 -154
  21. package/dist/behaviors/ai-tool.d.mts +2 -2
  22. package/dist/behaviors/ai-tool.mjs +2037 -396
  23. package/dist/behaviors/ai-tools.d.mts +89 -16
  24. package/dist/behaviors/ai-tools.mjs +4448 -372
  25. package/dist/behaviors/autocomplete.d.mts +53 -0
  26. package/dist/behaviors/autocomplete.mjs +1600 -0
  27. package/dist/behaviors/back-top.d.mts +1 -1
  28. package/dist/behaviors/back-top.mjs +951 -14
  29. package/dist/behaviors/carousel.d.mts +1 -1
  30. package/dist/behaviors/carousel.mjs +906 -11
  31. package/dist/behaviors/cascader.d.mts +48 -0
  32. package/dist/behaviors/cascader.mjs +1853 -0
  33. package/dist/behaviors/charts.d.mts +72 -8
  34. package/dist/behaviors/charts.mjs +1901 -256
  35. package/dist/behaviors/code-block.d.mts +36 -0
  36. package/dist/behaviors/code-block.mjs +1611 -0
  37. package/dist/behaviors/command-palette.d.mts +9 -6
  38. package/dist/behaviors/command-palette.mjs +161 -59
  39. package/dist/behaviors/context-menu.d.mts +9 -8
  40. package/dist/behaviors/context-menu.mjs +1112 -44
  41. package/dist/behaviors/controls.d.mts +13 -13
  42. package/dist/behaviors/controls.mjs +989 -130
  43. package/dist/behaviors/copy.d.mts +21 -2
  44. package/dist/behaviors/copy.mjs +1206 -42
  45. package/dist/behaviors/datatable.d.mts +53 -3
  46. package/dist/behaviors/datatable.mjs +1963 -207
  47. package/dist/behaviors/date-picker.d.mts +0 -1
  48. package/dist/behaviors/date-picker.mjs +1340 -293
  49. package/dist/behaviors/design.d.mts +54 -0
  50. package/dist/behaviors/design.mjs +109 -0
  51. package/dist/behaviors/dropdown.d.mts +5 -6
  52. package/dist/behaviors/dropdown.mjs +262 -110
  53. package/dist/behaviors/events.d.mts +120 -3
  54. package/dist/behaviors/events.mjs +47 -2
  55. package/dist/behaviors/feedback.d.mts +30 -0
  56. package/dist/behaviors/feedback.mjs +296 -0
  57. package/dist/behaviors/focus.d.mts +8 -0
  58. package/dist/behaviors/focus.mjs +24 -0
  59. package/dist/behaviors/form-validate.d.mts +102 -0
  60. package/dist/behaviors/form-validate.mjs +6091 -0
  61. package/dist/behaviors/i18n.d.mts +789 -0
  62. package/dist/behaviors/i18n.mjs +1711 -0
  63. package/dist/behaviors/icons.d.mts +93 -0
  64. package/dist/behaviors/icons.mjs +113 -0
  65. package/dist/behaviors/input.d.mts +9 -1
  66. package/dist/behaviors/input.mjs +1056 -60
  67. package/dist/behaviors/kb-access.d.mts +1 -1
  68. package/dist/behaviors/kb-access.mjs +2129 -239
  69. package/dist/behaviors/kb-acl.d.mts +6 -6
  70. package/dist/behaviors/kb-acl.mjs +1119 -179
  71. package/dist/behaviors/kb-answer.mjs +2070 -418
  72. package/dist/behaviors/kb-audit.d.mts +1 -1
  73. package/dist/behaviors/kb-audit.mjs +1076 -154
  74. package/dist/behaviors/kb-canvas.mjs +1100 -177
  75. package/dist/behaviors/kb-chain.mjs +1022 -100
  76. package/dist/behaviors/kb-checkpoint.d.mts +1 -1
  77. package/dist/behaviors/kb-checkpoint.mjs +1319 -169
  78. package/dist/behaviors/kb-chunks.mjs +1152 -213
  79. package/dist/behaviors/kb-citation.d.mts +1 -1
  80. package/dist/behaviors/kb-citation.mjs +1201 -179
  81. package/dist/behaviors/kb-clarify.mjs +1058 -130
  82. package/dist/behaviors/kb-conflict.mjs +1041 -119
  83. package/dist/behaviors/kb-connector.mjs +1104 -176
  84. package/dist/behaviors/kb-core.d.mts +6 -1
  85. package/dist/behaviors/kb-core.mjs +1077 -162
  86. package/dist/behaviors/kb-eval.mjs +1971 -144
  87. package/dist/behaviors/kb-explain.d.mts +1 -1
  88. package/dist/behaviors/kb-explain.mjs +1024 -102
  89. package/dist/behaviors/kb-filter.mjs +2008 -178
  90. package/dist/behaviors/kb-gap.d.mts +1 -1
  91. package/dist/behaviors/kb-gap.mjs +1043 -121
  92. package/dist/behaviors/kb-hittest.d.mts +1 -1
  93. package/dist/behaviors/kb-hittest.mjs +1093 -150
  94. package/dist/behaviors/kb-metadata.mjs +1052 -130
  95. package/dist/behaviors/kb-passage.d.mts +2 -2
  96. package/dist/behaviors/kb-passage.mjs +1101 -161
  97. package/dist/behaviors/kb-pipeline.d.mts +2 -2
  98. package/dist/behaviors/kb-pipeline.mjs +1082 -162
  99. package/dist/behaviors/kb-qa.mjs +1088 -160
  100. package/dist/behaviors/kb-rerank.mjs +1047 -114
  101. package/dist/behaviors/kb-retrieval.mjs +2063 -224
  102. package/dist/behaviors/kb-review.mjs +1990 -159
  103. package/dist/behaviors/kb-sandbox.d.mts +1 -1
  104. package/dist/behaviors/kb-sandbox.mjs +1026 -104
  105. package/dist/behaviors/kb-segment.mjs +1111 -179
  106. package/dist/behaviors/kb-select.d.mts +24 -0
  107. package/dist/behaviors/kb-select.mjs +1989 -0
  108. package/dist/behaviors/kb-sources.d.mts +1 -1
  109. package/dist/behaviors/kb-sources.mjs +1084 -170
  110. package/dist/behaviors/kb-sql.d.mts +1 -1
  111. package/dist/behaviors/kb-sql.mjs +1143 -226
  112. package/dist/behaviors/kb-trace.d.mts +1 -1
  113. package/dist/behaviors/kb-trace.mjs +1042 -128
  114. package/dist/behaviors/kb-visibility.mjs +1086 -158
  115. package/dist/behaviors/kb-who-can.mjs +1974 -137
  116. package/dist/behaviors/mentions.d.mts +93 -0
  117. package/dist/behaviors/mentions.mjs +2152 -0
  118. package/dist/behaviors/modal.d.mts +4 -3
  119. package/dist/behaviors/modal.mjs +1055 -33
  120. package/dist/behaviors/nav.d.mts +1 -1
  121. package/dist/behaviors/nav.mjs +6 -6
  122. package/dist/behaviors/notification.d.mts +16 -8
  123. package/dist/behaviors/notification.mjs +1615 -265
  124. package/dist/behaviors/panel.d.mts +4 -0
  125. package/dist/behaviors/panel.mjs +994 -0
  126. package/dist/behaviors/popover.d.mts +28 -5
  127. package/dist/behaviors/popover.mjs +225 -24
  128. package/dist/behaviors/select.d.mts +5 -2
  129. package/dist/behaviors/select.mjs +1410 -117
  130. package/dist/behaviors/sidebar.d.mts +1 -1
  131. package/dist/behaviors/sidebar.mjs +13 -13
  132. package/dist/behaviors/slider.d.mts +1 -1
  133. package/dist/behaviors/slider.mjs +9 -9
  134. package/dist/behaviors/split-pane.d.mts +1 -1
  135. package/dist/behaviors/split-pane.mjs +7 -7
  136. package/dist/behaviors/suggestions.d.mts +27 -0
  137. package/dist/behaviors/suggestions.mjs +1089 -0
  138. package/dist/behaviors/svg-parse.d.mts +14 -0
  139. package/dist/behaviors/svg-parse.mjs +37 -0
  140. package/dist/behaviors/tabs.d.mts +2 -2
  141. package/dist/behaviors/tabs.mjs +25 -25
  142. package/dist/behaviors/tag-input.d.mts +23 -5
  143. package/dist/behaviors/tag-input.mjs +1359 -104
  144. package/dist/behaviors/theme-switcher.d.mts +24 -0
  145. package/dist/behaviors/theme-switcher.mjs +1981 -0
  146. package/dist/behaviors/theme.d.mts +15 -8
  147. package/dist/behaviors/theme.mjs +390 -28
  148. package/dist/behaviors/toast.d.mts +24 -25
  149. package/dist/behaviors/toast.mjs +1266 -88
  150. package/dist/behaviors/tooltip.d.mts +4 -0
  151. package/dist/behaviors/tooltip.mjs +378 -0
  152. package/dist/behaviors/tree-select.d.mts +69 -0
  153. package/dist/behaviors/tree-select.mjs +1907 -0
  154. package/dist/behaviors/tree.d.mts +1 -1
  155. package/dist/behaviors/tree.mjs +15 -15
  156. package/dist/behaviors/upload.d.mts +3 -2
  157. package/dist/behaviors/upload.mjs +1076 -66
  158. package/dist/cli.mjs +5 -6
  159. package/dist/components/ai-chat.css +666 -573
  160. package/dist/components/ai-diff.css +153 -132
  161. package/dist/components/ai-panel.css +351 -343
  162. package/dist/components/ai-tool.css +393 -238
  163. package/dist/components/autocomplete.css +61 -0
  164. package/dist/components/autocomplete.mjs +3 -0
  165. package/dist/components/back-top.css +34 -31
  166. package/dist/components/badge.css +44 -41
  167. package/dist/components/breadcrumb.css +67 -46
  168. package/dist/components/btn.css +80 -74
  169. package/dist/components/card.css +117 -106
  170. package/dist/components/cascader.css +311 -0
  171. package/dist/components/cascader.mjs +3 -0
  172. package/dist/components/chart-area.css +8 -2
  173. package/dist/components/chart-bar.css +95 -33
  174. package/dist/components/chart-gauge.css +14 -11
  175. package/dist/components/chart-graph.css +20 -17
  176. package/dist/components/chart-heatmap.css +96 -90
  177. package/dist/components/chart-line.css +8 -3
  178. package/dist/components/chart-pie.css +9 -6
  179. package/dist/components/chart-radar.css +8 -5
  180. package/dist/components/chart-scatter.css +9 -6
  181. package/dist/components/chart-sparkline.css +5 -2
  182. package/dist/components/chart-stack.css +14 -11
  183. package/dist/components/charts.css +164 -73
  184. package/dist/components/code-block.css +418 -0
  185. package/dist/components/code-block.mjs +4 -0
  186. package/dist/components/command-palette.css +138 -117
  187. package/dist/components/content.css +257 -251
  188. package/dist/components/copy.css +72 -44
  189. package/dist/components/datatable.css +423 -181
  190. package/dist/components/date-picker.css +135 -104
  191. package/dist/components/empty.css +68 -65
  192. package/dist/components/feedback.css +201 -183
  193. package/dist/components/form-validate.css +120 -0
  194. package/dist/components/form-validate.mjs +3 -0
  195. package/dist/components/form.css +150 -127
  196. package/dist/components/icon.css +102 -0
  197. package/dist/components/icon.mjs +3 -0
  198. package/dist/components/input.css +159 -104
  199. package/dist/components/kb-agent.css +188 -173
  200. package/dist/components/kb-data.css +257 -253
  201. package/dist/components/kb-ground.css +197 -185
  202. package/dist/components/kb-ingest.css +334 -350
  203. package/dist/components/kb-ops.css +265 -259
  204. package/dist/components/kb-perm.css +260 -271
  205. package/dist/components/kb-search.css +317 -360
  206. package/dist/components/kb.css +120 -109
  207. package/dist/components/layout.css +85 -82
  208. package/dist/components/material-chinese.css +73 -0
  209. package/dist/components/material-soviet.css +76 -0
  210. package/dist/components/material.css +275 -0
  211. package/dist/components/media.css +220 -166
  212. package/dist/components/mentions.css +189 -0
  213. package/dist/components/mentions.mjs +3 -0
  214. package/dist/components/menu.css +113 -105
  215. package/dist/components/modal.css +107 -112
  216. package/dist/components/nav.css +118 -115
  217. package/dist/components/notification.css +238 -174
  218. package/dist/components/pagination.css +56 -53
  219. package/dist/components/panel.css +66 -63
  220. package/dist/components/panel.mjs +1 -0
  221. package/dist/components/pill.css +81 -71
  222. package/dist/components/popover.css +67 -53
  223. package/dist/components/scroll-area.css +113 -110
  224. package/dist/components/segmented.css +146 -143
  225. package/dist/components/select.css +206 -186
  226. package/dist/components/sidebar.css +137 -127
  227. package/dist/components/slider.css +117 -114
  228. package/dist/components/split-pane.css +112 -109
  229. package/dist/components/stat.css +112 -106
  230. package/dist/components/steps.css +109 -103
  231. package/dist/components/switch.css +138 -134
  232. package/dist/components/table.css +131 -107
  233. package/dist/components/tabs.css +114 -108
  234. package/dist/components/tag-input.css +48 -133
  235. package/dist/components/tag.css +81 -71
  236. package/dist/components/theme-switcher.css +105 -0
  237. package/dist/components/theme-switcher.mjs +3 -0
  238. package/dist/components/toast.css +100 -86
  239. package/dist/components/toolbar.css +45 -42
  240. package/dist/components/tooltip.css +102 -43
  241. package/dist/components/tooltip.mjs +1 -0
  242. package/dist/components/tree-select.css +416 -0
  243. package/dist/components/tree-select.mjs +3 -0
  244. package/dist/components/upload.css +135 -92
  245. package/dist/fonts/LICENSES/ark-pixel/OFL.txt +96 -0
  246. package/dist/fonts/LICENSES/cubic-11/OFL.txt +108 -0
  247. package/dist/fonts/LICENSES/galmuri/LICENSE.txt +93 -0
  248. package/dist/fonts/OFL.txt +96 -0
  249. package/dist/fonts/README.md +14 -0
  250. package/dist/fonts/fusion-pixel-12px-zh-hans.woff2 +0 -0
  251. package/dist/index.d.mts +28 -14
  252. package/dist/index.mjs +20705 -9601
  253. package/dist/react.d.mts +91 -0
  254. package/dist/react.mjs +8208 -0
  255. package/dist/registry.json +130 -13
  256. package/dist/tokens/chinese.css +44 -0
  257. package/dist/tokens/colors.css +365 -1222
  258. package/dist/tokens/design.css +109 -0
  259. package/dist/tokens/dtcg.json +11198 -0
  260. package/dist/tokens/figma.variables.json +7017 -0
  261. package/dist/tokens/icon-masks.css +78 -0
  262. package/dist/tokens/pixel.css +50 -0
  263. package/dist/tokens/soviet.css +44 -0
  264. package/dist/tokens/style-profiles.css +36 -547
  265. package/dist/tokens/themes.json +308 -0
  266. package/dist/tokens/tokens-studio.json +6728 -0
  267. package/dist/tokens/typography.css +21 -18
  268. package/dist/tokens.css +1555 -1801
  269. package/dist/ui.css +11975 -9831
  270. package/dist/vue.d.mts +344 -0
  271. package/dist/vue.mjs +7781 -0
  272. package/docs/spec/ai-input-experience.md +75 -0
  273. package/docs/spec/ai-native.md +238 -147
  274. package/docs/spec/design-philosophy.md +189 -0
  275. package/docs/spec/design-primitives.md +196 -0
  276. package/docs/spec/kb-family.md +147 -115
  277. package/package.json +43 -8
  278. package/dist/retro-effects.css +0 -255
  279. package/dist/tokens/retro-effects.css +0 -255
  280. package/docs/research/2026-10-03-ai-kb-components.md +0 -392
  281. package/docs/research/2026-10-03-kb-permissions.md +0 -992
@@ -1,179 +1,201 @@
1
+ @layer icen.components {
1
2
  /*
2
3
  * @icen.ai/ui — Component: table(数据表)
3
4
  *
4
5
  * 完整契约:
5
- * <div class="table-wrap [table-wrap--bordered]">
6
- * <table class="table [--zebra|--compact|--dense] [--sticky-col]">
7
- * <caption class="table-caption">标题说明</caption> ← 可选
6
+ * <div class="icen-table-wrap [icen-table-wrap--bordered]">
7
+ * <icen-table class="icen-table [--zebra|--compact|--dense] [--sticky-col]">
8
+ * <caption class="icen-table-caption">标题说明</caption> ← 可选
8
9
  * <thead>
9
- * <tr><th [colspan=rowspan] [data-sort]>列名</th>…</tr>
10
+ * <tr><th [colspan=rowspan] [data-icen-sort]>列名</th>…</tr>
10
11
  * </thead>
11
12
  * <tbody>
12
- * <tr class="row-link [.is-selected] [.is-expanded]> ← 整行可点
13
- * <td class="col-fixed">…</td> ← 固定列(sticky-col 模式)
13
+ * <tr class="icen-row-link [.is-selected] [.is-expanded]> ← 整行可点
14
+ * <td class="icen-col-fixed">…</td> ← 固定列(sticky-col 模式)
14
15
  * <td>…</td>
15
- * <td class="ops"><button class="btn btn-sm">…</button></td>
16
+ * <td class="icen-ops"><button class="icen-btn icen-btn-sm">…</button></td>
16
17
  * </tr>
17
- * <tr class="row-expand"> ← 展开行(配合 .is-expanded)
18
+ * <tr class="icen-row-expand"> ← 展开行(配合 .is-expanded)
18
19
  * <td colspan="99">…展开详情…</td>
19
20
  * </tr>
20
21
  * </tbody>
21
22
  * <tfoot><tr><td>合计</td>…</tr></tfoot>
22
- * </table>
23
+ * </icen-table>
23
24
  * </div>
24
25
  *
25
- * .table-wrap:窄屏横向滚动(滚动条样式见 base.css);--bordered 加外边框。
26
- * .table--zebra:斑马纹(奇数行底色)。
27
- * .table--compact:紧凑(cell padding 缩小);--dense:极紧凑(行高更紧)。
28
- * .table--sticky-col:首列水平粘滞(配合 td/th .col-fixed,长表横向滚动时保持可见)。
29
- * .row-expand[hidden]:配合 .row-link.is-expanded 控制展开行显隐。
26
+ * .icen-table-wrap:窄屏横向滚动(滚动条样式见 base.css);--bordered 加外边框。
27
+ * .icen-table--zebra:斑马纹(奇数行底色)。
28
+ * .icen-table--compact:紧凑(cell padding 缩小);--dense:极紧凑(行高更紧)。
29
+ * .icen-table--sticky-col:首列水平粘滞(配合 td/th .icen-col-fixed,长表横向滚动时保持可见)。
30
+ * .icen-row-expand[hidden]:配合 .icen-row-link.is-expanded 控制展开行显隐。
30
31
  */
31
32
 
32
- .table-wrap {
33
+ .icen-table-wrap {
33
34
  overflow-x: auto;
34
35
  overscroll-behavior: contain;
35
- border-radius: var(--radius-lg);
36
+ border-radius: var(--icen-radius-lg);
36
37
  }
37
- .table-wrap--bordered {
38
- border: 1px solid var(--token-line-soft);
38
+ .icen-table-wrap--bordered {
39
+ border: 1px solid var(--icen-token-line-soft);
39
40
  }
40
41
 
41
- .table {
42
- width: 100%;
42
+ .icen-table {
43
+ inline-size: 100%;
43
44
  border-collapse: collapse;
44
- font-size: var(--density-font-size-md);
45
+ font-size: var(--icen-density-font-size-md);
45
46
  font-variant-numeric: tabular-nums;
46
47
  }
47
- .table th,
48
- .table td {
49
- padding: var(--density-space-sm) calc(var(--density-space-md) + 2px);
50
- text-align: left;
48
+ .icen-table th,
49
+ .icen-table td {
50
+ padding: var(--icen-density-space-sm) calc(var(--icen-density-space-md) + 2px);
51
+ text-align: start;
51
52
  }
52
- .table th {
53
+ .icen-table th {
53
54
  font-weight: 600;
54
- font-size: var(--density-font-size-xs);
55
+ font-size: var(--icen-density-font-size-xs);
55
56
  letter-spacing: 0.05em;
56
- color: var(--token-text-faint);
57
- border-bottom: 1px solid var(--token-line);
57
+ color: var(--icen-token-text-faint);
58
+ border-bottom: 1px solid var(--icen-token-line);
58
59
  white-space: nowrap;
59
60
  text-transform: uppercase;
60
- background: var(--token-bg-soft);
61
+ background: var(--icen-token-bg-soft);
61
62
  position: sticky;
62
63
  top: 0;
63
- z-index: var(--z-raised);
64
+ z-index: var(--icen-z-raised);
64
65
  }
65
- .table td {
66
- border-bottom: 1px solid var(--token-line-soft);
66
+ .icen-table td {
67
+ border-bottom: 1px solid var(--icen-token-line-soft);
67
68
  vertical-align: middle;
68
- color: var(--token-text);
69
+ color: var(--icen-token-text);
69
70
  }
70
- .table tbody tr:last-child td { border-bottom: 0; }
71
- .table tbody tr {
71
+ .icen-table tbody tr:last-child td { border-bottom: 0; }
72
+ .icen-table tbody tr {
72
73
  transition: background-color var(--icen-tx-fast);
73
74
  }
74
- .table tbody tr:hover {
75
- background: var(--token-surface-strong);
75
+ .icen-table tbody tr:hover {
76
+ background: var(--icen-token-surface-strong);
76
77
  }
77
- .table tbody tr.row-link {
78
+ .icen-table tbody tr.icen-row-link {
78
79
  cursor: pointer;
79
80
  }
80
- .table tbody tr.is-selected {
81
- background: var(--token-accent-subtle);
81
+ .icen-table tbody tr.is-selected {
82
+ background: var(--icen-token-accent-subtle);
82
83
  }
83
- .table tfoot td {
84
- border-top: 1px solid var(--token-line);
84
+ .icen-table tfoot td {
85
+ border-top: 1px solid var(--icen-token-line);
85
86
  border-bottom: 0;
86
87
  font-weight: 500;
87
- background: var(--token-bg-soft);
88
+ background: var(--icen-token-bg-soft);
88
89
  }
89
90
 
90
91
  /* 紧凑变体 */
91
- .table--compact th,
92
- .table--compact td {
93
- padding: var(--density-space-xs) var(--density-space-sm);
92
+ .icen-table--compact th,
93
+ .icen-table--compact td {
94
+ padding: var(--icen-density-space-xs) var(--icen-density-space-sm);
94
95
  }
95
- .table--dense th,
96
- .table--dense td {
97
- padding: 4px var(--density-space-xs);
98
- font-size: var(--density-font-size-sm);
96
+ .icen-table--dense th,
97
+ .icen-table--dense td {
98
+ padding: 4px var(--icen-density-space-xs);
99
+ font-size: var(--icen-density-font-size-sm);
99
100
  }
100
101
 
101
- /* 右对齐数字列 */
102
- .table td.num {
103
- text-align: right;
102
+ /* 右对齐数字列(数字是 LTR 文种,业界惯例 RTL 下保持物理右对齐——Excel/Analytics 一致) */
103
+ .icen-table td.icen-num {
104
+ text-align: right; /* guard:allow-physical 数字列物理右对齐惯例,RTL 不镜像 */
104
105
  font-variant-numeric: tabular-nums lining-nums;
105
106
  }
106
107
 
107
- /* 操作列(.btn-sm 必伴 .btn,无需单独列) */
108
- .table .ops {
108
+ /* 操作列(行内末端对齐,RTL 镜像到左侧;.icen-btn-sm 必伴 .icen-btn,无需单独列) */
109
+ .icen-table .icen-ops {
109
110
  white-space: nowrap;
110
- text-align: right;
111
+ text-align: end;
111
112
  }
112
- .table .ops .btn {
113
- margin-left: var(--density-space-xs);
113
+ .icen-table .icen-ops .icen-btn {
114
+ margin-inline-start: var(--icen-density-space-xs);
114
115
  }
115
116
 
116
- /* 可排序表头(使用方 data-sort 指示) */
117
- .table th[data-sort] {
117
+ /* 可排序表头(使用方 data-icen-sort 指示) */
118
+ .icen-table th[data-icen-sort] {
118
119
  cursor: pointer;
119
120
  user-select: none;
120
121
  }
121
- .table th[data-sort]::after {
122
- content: '↕';
123
- margin-left: var(--density-space-xs);
124
- color: var(--token-text-faint);
122
+ .icen-table th[data-icen-sort]::after {
123
+ content: '';
124
+ display: inline-block;
125
+ inline-size: 16px;
126
+ block-size: 16px;
127
+ flex: none;
128
+ vertical-align: middle;
129
+ background: currentColor;
130
+ mask: var(--icen-token-icon-sort) center / contain no-repeat;
131
+ margin-inline-start: var(--icen-density-space-xs);
132
+ color: var(--icen-token-text-faint);
125
133
  opacity: 0.6;
126
134
  }
127
- .table th[data-sort='asc']::after { content: '↑'; opacity: 1; color: var(--token-accent); }
128
- .table th[data-sort='desc']::after { content: '↓'; opacity: 1; color: var(--token-accent); }
135
+ .icen-table th[data-icen-sort='asc']::after { content: '';
136
+ display: inline-block;
137
+ inline-size: 16px;
138
+ block-size: 16px;
139
+ flex: none;
140
+ vertical-align: middle;
141
+ background: currentColor;
142
+ mask: var(--icen-token-icon-arrow-up) center / contain no-repeat; opacity: 1; color: var(--icen-token-accent); }
143
+ .icen-table th[data-icen-sort='desc']::after { content: '';
144
+ display: inline-block;
145
+ inline-size: 16px;
146
+ block-size: 16px;
147
+ flex: none;
148
+ vertical-align: middle;
149
+ background: currentColor;
150
+ mask: var(--icen-token-icon-arrow-down) center / contain no-repeat; opacity: 1; color: var(--icen-token-accent); }
129
151
 
130
152
  /* ── 斑马纹 ── */
131
- .table--zebra tbody tr:nth-child(odd) {
132
- background: color-mix(in srgb, var(--token-bg-soft) 50%, transparent);
153
+ .icen-table--zebra tbody tr:nth-child(odd) {
154
+ background: color-mix(in srgb, var(--icen-token-bg-soft) 50%, transparent);
133
155
  }
134
- .table--zebra tbody tr:hover {
135
- background: var(--token-surface-strong);
156
+ .icen-table--zebra tbody tr:hover {
157
+ background: var(--icen-token-surface-strong);
136
158
  }
137
159
 
138
160
  /* ── 表格标题(caption) ── */
139
- .table-caption {
140
- text-align: left;
141
- padding: var(--density-space-sm) calc(var(--density-space-md) + 2px);
142
- font-size: var(--density-font-size-md);
161
+ .icen-table-caption {
162
+ text-align: start;
163
+ padding: var(--icen-density-space-sm) calc(var(--icen-density-space-md) + 2px);
164
+ font-size: var(--icen-density-font-size-md);
143
165
  font-weight: 600;
144
- color: var(--token-text);
166
+ color: var(--icen-token-text);
145
167
  caption-side: top;
146
168
  }
147
169
 
148
170
  /* ── 首列粘滞(长表横向滚动时保持可见) ── */
149
- .table--sticky-col th:first-child,
150
- .table--sticky-col .col-fixed {
171
+ .icen-table--sticky-col th:first-child,
172
+ .icen-table--sticky-col .icen-col-fixed {
151
173
  position: sticky;
152
- left: 0;
153
- z-index: calc(var(--z-raised) + 1);
154
- background: var(--token-bg-soft);
155
- box-shadow: 2px 0 4px color-mix(in srgb, var(--token-text) 5%, transparent);
174
+ inset-inline-start: 0;
175
+ z-index: calc(var(--icen-z-raised) + 1);
176
+ background: var(--icen-token-bg-soft);
177
+ box-shadow: 2px 0 4px color-mix(in srgb, var(--icen-token-text) 5%, transparent);
156
178
  }
157
- .table--sticky-col tbody td.col-fixed {
158
- background: var(--token-surface);
179
+ .icen-table--sticky-col tbody td.icen-col-fixed {
180
+ background: var(--icen-token-surface);
159
181
  }
160
- .table--sticky-col tbody tr:hover td.col-fixed {
161
- background: var(--token-surface-strong);
182
+ .icen-table--sticky-col tbody tr:hover td.icen-col-fixed {
183
+ background: var(--icen-token-surface-strong);
162
184
  }
163
185
 
164
186
  /* ── 展开行 ── */
165
- .table .row-expand > td {
166
- padding: 0 var(--density-space-md);
167
- background: var(--token-bg-soft);
168
- border-bottom: 1px solid var(--token-line-soft);
169
- font-size: var(--density-font-size-sm);
170
- color: var(--token-text-muted);
171
- }
172
- .table .row-expand[hidden] { display: none; }
187
+ .icen-table .icen-row-expand > td {
188
+ padding: 0 var(--icen-density-space-md);
189
+ background: var(--icen-token-bg-soft);
190
+ border-bottom: 1px solid var(--icen-token-line-soft);
191
+ font-size: var(--icen-density-font-size-sm);
192
+ color: var(--icen-token-text-muted);
193
+ }
194
+ .icen-table .icen-row-expand[hidden] { display: none; }
173
195
  /* 展开行的内容容器(使用方可加 padding/动画) */
174
- .row-expand-content {
175
- padding: var(--density-space-sm) 0;
176
- animation: row-expand-in var(--icen-tx-fast) var(--ease-out);
196
+ .icen-row-expand-content {
197
+ padding: var(--icen-density-space-sm) 0;
198
+ animation: row-expand-in var(--icen-tx-fast) var(--icen-ease-out);
177
199
  }
178
200
  @keyframes row-expand-in {
179
201
  from { opacity: 0; transform: translateY(-4px); }
@@ -181,23 +203,25 @@
181
203
  }
182
204
 
183
205
  /* ── 列宽工具类 ── */
184
- .table .col-narrow { width: 80px; }
185
- .table .col-wide { width: 240px; }
186
- .table .col-action { width: 1%; white-space: nowrap; }
206
+ .icen-table .icen-col-narrow { width: 80px; }
207
+ .icen-table .icen-col-wide { width: 240px; }
208
+ .icen-table .icen-col-action { width: 1%; white-space: nowrap; }
187
209
 
188
210
  /* ── 行状态色 ── */
189
- .table tbody tr.row-success { background: color-mix(in srgb, var(--token-success) 6%, transparent); }
190
- .table tbody tr.row-warning { background: color-mix(in srgb, var(--token-warning) 6%, transparent); }
191
- .table tbody tr.row-error { background: color-mix(in srgb, var(--token-error) 6%, transparent); }
211
+ .icen-table tbody tr.icen-row-success { background: color-mix(in srgb, var(--icen-token-success) 6%, transparent); }
212
+ .icen-table tbody tr.icen-row-warning { background: color-mix(in srgb, var(--icen-token-warning) 6%, transparent); }
213
+ .icen-table tbody tr.icen-row-error { background: color-mix(in srgb, var(--icen-token-error) 6%, transparent); }
192
214
 
193
215
  /* ── 粘滞表头阴影提示 ── */
194
- .table thead th {
195
- box-shadow: 0 1px 0 var(--token-line);
216
+ .icen-table thead th {
217
+ box-shadow: 0 1px 0 var(--icen-token-line);
196
218
  }
197
219
 
198
220
  /* ── 表头分组(rowspan/colspan 样式) ── */
199
- .table th[rowspan] { vertical-align: bottom; }
221
+ .icen-table th[rowspan] { vertical-align: bottom; }
200
222
 
201
223
  @media (prefers-reduced-motion: reduce) {
202
- .row-expand-content { animation: none; }
224
+ .icen-row-expand-content { animation: none; }
225
+ }
226
+
203
227
  }