@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,21 +1,22 @@
1
+ @layer icen.components {
1
2
  /*
2
3
  * @icen.ai/ui — Component: sidebar(侧栏导航,分组折叠配套 behaviors/sidebar)
3
4
  *
4
5
  * 完整契约:
5
- * <aside class="sidebar [sidebar--sticky] [sidebar--sm|sidebar--lg]">
6
- * <div class="sidebar-section"> ← 可选区块标题
7
- * <span class="sidebar-section-label">主菜单</span>
6
+ * <aside class="icen-sidebar [icen-sidebar--sticky] [icen-sidebar--sm|icen-sidebar--lg]">
7
+ * <div class="icen-sidebar-section"> ← 可选区块标题
8
+ * <span class="icen-sidebar-section-label">主菜单</span>
8
9
  * </div>
9
- * <div class="sidebar-group is-open">
10
- * <button class="sidebar-group-title" aria-expanded="true">
11
- * <span class="sidebar-group-title-text">分组</span>
10
+ * <div class="icen-sidebar-group is-open">
11
+ * <button class="icen-sidebar-group-title" aria-expanded="true">
12
+ * <span class="icen-sidebar-group-title-text">分组</span>
12
13
  * </button>
13
- * <div class="sidebar-group-panel">
14
- * <div class="sidebar-group-panel-inner">
15
- * <a class="sidebar-item [.is-active]" href="…" [aria-current="page"]>
16
- * <svg class="sidebar-item-icon">…</svg>
17
- * <span class="sidebar-item-label">条目</span>
18
- * <span class="sidebar-item-badge">3</span> ← 可选徽章
14
+ * <div class="icen-sidebar-group-panel">
15
+ * <div class="icen-sidebar-group-panel-inner">
16
+ * <a class="icen-sidebar-item [.is-active]" href="…" [aria-current="page"]>
17
+ * <svg class="icen-sidebar-item-icon">…</svg>
18
+ * <span class="icen-sidebar-item-label">条目</span>
19
+ * <span class="icen-sidebar-item-badge">3</span> ← 可选徽章
19
20
  * </a>
20
21
  * </div>
21
22
  * </div>
@@ -26,48 +27,48 @@
26
27
  * 展开动画 = grid-template-rows 0fr↔1fr(同 accordion 约定)。
27
28
  */
28
29
 
29
- .sidebar {
30
- width: 260px;
30
+ .icen-sidebar {
31
+ inline-size: 260px;
31
32
  flex-shrink: 0;
32
33
  overflow-y: auto;
33
34
  overscroll-behavior: contain;
34
- padding-right: var(--density-space-xs);
35
+ padding-inline-end: var(--icen-density-space-xs);
35
36
  }
36
- .sidebar--sticky {
37
+ .icen-sidebar--sticky {
37
38
  position: sticky;
38
39
  top: 80px;
39
40
  max-height: calc(100vh - 100px);
40
41
  }
41
- .sidebar--sm { width: 220px; }
42
- .sidebar--lg { width: 320px; }
42
+ .icen-sidebar--sm { inline-size: 220px; }
43
+ .icen-sidebar--lg { inline-size: 320px; }
43
44
 
44
- .sidebar-section {
45
- padding: var(--density-space-md) var(--density-space-sm) var(--density-space-xs);
46
- margin-top: var(--density-space-sm);
45
+ .icen-sidebar-section {
46
+ padding: var(--icen-density-space-md) var(--icen-density-space-sm) var(--icen-density-space-xs);
47
+ margin-top: var(--icen-density-space-sm);
47
48
  }
48
- .sidebar-section-label {
49
- font-size: var(--density-font-size-xs);
49
+ .icen-sidebar-section-label {
50
+ font-size: var(--icen-density-font-size-xs);
50
51
  font-weight: 600;
51
- color: var(--token-text-faint);
52
+ color: var(--icen-token-text-faint);
52
53
  text-transform: uppercase;
53
54
  letter-spacing: 0.08em;
54
55
  }
55
56
 
56
- .sidebar-group { margin-bottom: var(--density-space-xs); }
57
- .sidebar-group-title {
57
+ .icen-sidebar-group { margin-bottom: var(--icen-density-space-xs); }
58
+ .icen-sidebar-group-title {
58
59
  width: 100%;
59
60
  display: flex;
60
61
  align-items: center;
61
62
  justify-content: space-between;
62
- gap: var(--density-space-xs);
63
- padding: var(--density-space-sm) var(--density-space-sm);
64
- border-radius: var(--radius-sm);
63
+ gap: var(--icen-density-space-xs);
64
+ padding: var(--icen-density-space-sm) var(--icen-density-space-sm);
65
+ border-radius: var(--icen-radius-sm);
65
66
  font-family: inherit;
66
- font-size: var(--density-font-size-xs);
67
+ font-size: var(--icen-density-font-size-xs);
67
68
  font-weight: 600;
68
69
  text-transform: uppercase;
69
70
  letter-spacing: 0.05em;
70
- color: var(--token-text-muted);
71
+ color: var(--icen-token-text-muted);
71
72
  background: none;
72
73
  border: 0;
73
74
  cursor: pointer;
@@ -75,50 +76,57 @@
75
76
  background-color var(--icen-tx-fast),
76
77
  color var(--icen-tx-fast);
77
78
  }
78
- .sidebar-group-title:hover {
79
- background: var(--token-control-hover);
80
- color: var(--token-text);
79
+ .icen-sidebar-group-title:hover {
80
+ background: var(--icen-token-control-hover);
81
+ color: var(--icen-token-text);
81
82
  }
82
- .sidebar-group-title:focus-visible {
83
+ .icen-sidebar-group-title:focus-visible {
83
84
  outline: none;
84
85
  box-shadow: var(--icen-ring);
85
86
  }
86
- .sidebar-group-title-text {
87
+ .icen-sidebar-group-title-text {
87
88
  flex: 1;
88
- text-align: left;
89
+ text-align: start;
89
90
  }
90
91
  /* chevron:闭合态 rotate(-90deg),展开回正 */
91
- .sidebar-group-title::after {
92
- content: '▾';
93
- font-size: var(--density-font-size-sm);
92
+ .icen-sidebar-group-title::after {
93
+ content: '';
94
+ display: inline-block;
95
+ inline-size: 16px;
96
+ block-size: 16px;
97
+ flex: none;
98
+ vertical-align: middle;
99
+ background: currentColor;
100
+ mask: var(--icen-token-icon-chevron-down) center / contain no-repeat;
101
+ font-size: var(--icen-density-font-size-sm);
94
102
  line-height: 1;
95
- color: var(--token-text-muted);
103
+ color: var(--icen-token-text-muted);
96
104
  transform: rotate(-90deg);
97
105
  transition: transform var(--icen-tx-normal);
98
106
  }
99
- .sidebar-group.is-open .sidebar-group-title::after { transform: none; }
107
+ .icen-sidebar-group.is-open .icen-sidebar-group-title::after { transform: none; }
100
108
 
101
- .sidebar-group-panel {
109
+ .icen-sidebar-group-panel {
102
110
  display: grid;
103
111
  grid-template-rows: 0fr;
104
112
  transition: grid-template-rows var(--icen-tx-normal);
105
113
  }
106
- .sidebar-group.is-open .sidebar-group-panel { grid-template-rows: 1fr; }
107
- .sidebar-group-panel-inner {
114
+ .icen-sidebar-group.is-open .icen-sidebar-group-panel { grid-template-rows: 1fr; }
115
+ .icen-sidebar-group-panel-inner {
108
116
  overflow: hidden;
109
117
  min-height: 0;
110
118
  }
111
119
 
112
- .sidebar-item {
113
- width: 100%;
120
+ .icen-sidebar-item {
121
+ inline-size: 100%;
114
122
  display: flex;
115
123
  align-items: center;
116
- gap: var(--density-space-xs);
117
- padding: var(--density-space-sm) var(--density-space-sm);
118
- border-radius: var(--radius-md);
119
- font-size: var(--density-font-size-md);
120
- color: var(--token-text);
121
- text-align: left;
124
+ gap: var(--icen-density-space-xs);
125
+ padding: var(--icen-density-space-sm) var(--icen-density-space-sm);
126
+ border-radius: var(--icen-radius-md);
127
+ font-size: var(--icen-density-font-size-md);
128
+ color: var(--icen-token-text);
129
+ text-align: start;
122
130
  text-decoration: none;
123
131
  background: none;
124
132
  border: 0;
@@ -127,174 +135,176 @@
127
135
  background-color var(--icen-tx-fast),
128
136
  color var(--icen-tx-fast);
129
137
  }
130
- .sidebar-item:hover {
131
- background: var(--token-control-hover);
138
+ .icen-sidebar-item:hover {
139
+ background: var(--icen-token-control-hover);
132
140
  text-decoration: none;
133
- color: var(--token-text);
141
+ color: var(--icen-token-text);
134
142
  }
135
- .sidebar-item:focus-visible {
143
+ .icen-sidebar-item:focus-visible {
136
144
  outline: none;
137
145
  box-shadow: var(--icen-ring);
138
146
  }
139
- .sidebar-item.is-active,
140
- .sidebar-item[aria-current='page'] {
141
- background: var(--token-accent-subtle);
142
- color: var(--token-accent);
147
+ .icen-sidebar-item.is-active,
148
+ .icen-sidebar-item[aria-current='page'] {
149
+ background: var(--icen-token-accent-subtle);
150
+ color: var(--icen-token-accent-text, var(--icen-token-accent-deep, var(--icen-token-accent)));
143
151
  font-weight: 500;
144
152
  }
145
- .sidebar-item.is-disabled,
146
- .sidebar-item[aria-disabled='true'],
147
- .sidebar-item[data-disabled] {
153
+ .icen-sidebar-item.is-disabled,
154
+ .icen-sidebar-item[aria-disabled='true'],
155
+ .icen-sidebar-item[data-icen-disabled] {
148
156
  opacity: var(--icen-disabled-opacity);
149
157
  pointer-events: none;
150
158
  }
151
- .sidebar-item-icon {
159
+ .icen-sidebar-item-icon {
152
160
  width: 14px;
153
161
  height: 14px;
154
162
  flex-shrink: 0;
155
- color: var(--token-text-muted);
163
+ color: var(--icen-token-text-muted);
156
164
  }
157
- .sidebar-item.is-active .sidebar-item-icon { color: var(--token-accent); }
158
- .sidebar-item-label {
165
+ .icen-sidebar-item.is-active .icen-sidebar-item-icon { color: var(--icen-token-accent); }
166
+ .icen-sidebar-item-label {
159
167
  flex: 1;
160
168
  overflow: hidden;
161
169
  text-overflow: ellipsis;
162
170
  white-space: nowrap;
163
171
  }
164
- .sidebar-item-badge {
172
+ .icen-sidebar-item-badge {
165
173
  display: inline-flex;
166
174
  align-items: center;
167
175
  justify-content: center;
168
176
  min-width: 18px;
169
177
  height: 18px;
170
178
  padding: 0 5px;
171
- font-size: var(--density-font-size-xs);
179
+ font-size: var(--icen-density-font-size-xs);
172
180
  font-weight: 600;
173
- color: var(--token-on-accent);
174
- background: var(--token-accent);
175
- border-radius: var(--radius-full);
181
+ color: var(--icen-token-on-accent);
182
+ background: var(--icen-token-accent-strong);
183
+ border-radius: var(--icen-radius-full);
176
184
  font-variant-numeric: tabular-nums;
177
185
  }
178
186
 
179
187
  @media (prefers-reduced-motion: reduce) {
180
- .sidebar-group-panel,
181
- .sidebar-group-title::after { transition: none; }
188
+ .icen-sidebar-group-panel,
189
+ .icen-sidebar-group-title::after { transition: none; }
182
190
  }
183
191
 
184
192
  /* ── 增强 ── */
185
193
 
186
194
  /* 侧栏头部(品牌/标题) */
187
- .sidebar-header {
195
+ .icen-sidebar-header {
188
196
  display: flex;
189
197
  align-items: center;
190
- gap: var(--density-space-sm);
191
- padding: var(--density-space-sm);
192
- border-bottom: 1px solid var(--token-outline-soft);
193
- margin-bottom: var(--density-space-sm);
198
+ gap: var(--icen-density-space-sm);
199
+ padding: var(--icen-density-space-sm);
200
+ border-bottom: 1px solid var(--icen-token-outline-soft);
201
+ margin-bottom: var(--icen-density-space-sm);
194
202
  }
195
- .sidebar-header-brand {
203
+ .icen-sidebar-header-brand {
196
204
  display: inline-flex;
197
205
  align-items: center;
198
- gap: var(--density-space-xs);
199
- font-family: var(--font-heading);
200
- font-size: var(--density-font-size-md);
206
+ gap: var(--icen-density-space-xs);
207
+ font-family: var(--icen-font-heading);
208
+ font-size: var(--icen-density-font-size-md);
201
209
  font-weight: 600;
202
- color: var(--token-text);
210
+ color: var(--icen-token-text);
203
211
  text-decoration: none;
204
212
  }
205
- .sidebar-header-brand > svg,
206
- .sidebar-header-brand > img {
213
+ .icen-sidebar-header-brand > svg,
214
+ .icen-sidebar-header-brand > img {
207
215
  width: 24px;
208
216
  height: 24px;
209
217
  }
210
- .sidebar-header-toggle {
211
- margin-left: auto;
218
+ .icen-sidebar-header-toggle {
219
+ margin-inline-start: auto;
212
220
  display: inline-flex;
213
221
  align-items: center;
214
222
  justify-content: center;
215
223
  width: 28px;
216
224
  height: 28px;
217
225
  border: 0;
218
- border-radius: var(--radius-sm);
226
+ border-radius: var(--icen-radius-sm);
219
227
  background: transparent;
220
- color: var(--token-text-faint);
228
+ color: var(--icen-token-text-faint);
221
229
  cursor: pointer;
222
230
  transition: color var(--icen-tx-fast), background-color var(--icen-tx-fast);
223
231
  }
224
- .sidebar-header-toggle:hover {
225
- color: var(--token-text);
226
- background: var(--token-fill-1);
232
+ .icen-sidebar-header-toggle:hover {
233
+ color: var(--icen-token-text);
234
+ background: var(--icen-token-fill-1);
227
235
  }
228
236
 
229
237
  /* 侧栏底部 */
230
- .sidebar-footer {
231
- padding: var(--density-space-sm);
232
- border-top: 1px solid var(--token-outline-soft);
238
+ .icen-sidebar-footer {
239
+ padding: var(--icen-density-space-sm);
240
+ border-top: 1px solid var(--icen-token-outline-soft);
233
241
  margin-top: auto;
234
242
  }
235
243
 
236
- /* 激活态左侧指示条 */
237
- .sidebar-item.is-active,
238
- .sidebar-item[aria-current='page'] {
244
+ /* 激活态起始缘侧指示条(RTL 镜像到右缘) */
245
+ .icen-sidebar-item.is-active,
246
+ .icen-sidebar-item[aria-current='page'] {
239
247
  position: relative;
240
248
  }
241
- .sidebar-item.is-active::before,
242
- .sidebar-item[aria-current='page']::before {
249
+ .icen-sidebar-item.is-active::before,
250
+ .icen-sidebar-item[aria-current='page']::before {
243
251
  content: '';
244
252
  position: absolute;
245
- left: 0;
253
+ inset-inline-start: 0;
246
254
  top: 50%;
247
255
  transform: translateY(-50%);
248
256
  width: 3px;
249
257
  height: 60%;
250
- border-radius: var(--radius-full);
251
- background: var(--token-accent);
258
+ border-radius: var(--icen-radius-full);
259
+ background: var(--icen-token-accent);
252
260
  }
253
261
 
254
262
  /* 折叠/轨道模式(icon-only mini sidebar) */
255
- .sidebar--collapsed {
256
- width: 56px;
257
- }
258
- .sidebar--collapsed .sidebar-item-label,
259
- .sidebar--collapsed .sidebar-item-badge,
260
- .sidebar--collapsed .sidebar-section-label,
261
- .sidebar--collapsed .sidebar-group-title-text,
262
- .sidebar--collapsed .sidebar-group-title::after {
263
+ .icen-sidebar--collapsed {
264
+ inline-size: 56px;
265
+ }
266
+ .icen-sidebar--collapsed .icen-sidebar-item-label,
267
+ .icen-sidebar--collapsed .icen-sidebar-item-badge,
268
+ .icen-sidebar--collapsed .icen-sidebar-section-label,
269
+ .icen-sidebar--collapsed .icen-sidebar-group-title-text,
270
+ .icen-sidebar--collapsed .icen-sidebar-group-title::after {
263
271
  display: none;
264
272
  }
265
- .sidebar--collapsed .sidebar-group-title {
273
+ .icen-sidebar--collapsed .icen-sidebar-group-title {
266
274
  justify-content: center;
267
- padding: var(--density-space-sm);
275
+ padding: var(--icen-density-space-sm);
268
276
  }
269
- .sidebar--collapsed .sidebar-item {
277
+ .icen-sidebar--collapsed .icen-sidebar-item {
270
278
  justify-content: center;
271
- padding: var(--density-space-sm);
279
+ padding: var(--icen-density-space-sm);
272
280
  }
273
- .sidebar--collapsed .sidebar-item-icon {
281
+ .icen-sidebar--collapsed .icen-sidebar-item-icon {
274
282
  width: 18px;
275
283
  height: 18px;
276
284
  }
277
285
 
278
286
  /* 侧栏内搜索 */
279
- .sidebar-search {
280
- margin-bottom: var(--density-space-sm);
287
+ .icen-sidebar-search {
288
+ margin-bottom: var(--icen-density-space-sm);
281
289
  }
282
290
 
283
291
  /* 分组分隔线 */
284
- .sidebar-divider {
292
+ .icen-sidebar-divider {
285
293
  height: 1px;
286
- background: var(--token-outline-soft);
287
- margin: var(--density-space-sm) 0;
294
+ background: var(--icen-token-outline-soft);
295
+ margin: var(--icen-density-space-sm) 0;
288
296
  }
289
297
 
290
298
  /* 徽章变体色 */
291
- .sidebar-item-badge--success { background: var(--token-success); }
292
- .sidebar-item-badge--warning { background: var(--token-warning); }
293
- .sidebar-item-badge--error { background: var(--token-error); }
294
- .sidebar-item-badge--dot {
299
+ .icen-sidebar-item-badge--success { background: var(--icen-token-success); }
300
+ .icen-sidebar-item-badge--warning { background: var(--icen-token-warning); }
301
+ .icen-sidebar-item-badge--error { background: var(--icen-token-error); }
302
+ .icen-sidebar-item-badge--dot {
295
303
  width: 8px;
296
304
  min-width: 8px;
297
305
  height: 8px;
298
306
  padding: 0;
299
307
  font-size: 0;
300
308
  }
309
+
310
+ }