@kerfjs/ui 5.0.0-beta.23 → 5.0.0-beta.25

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 (288) hide show
  1. package/README.md +45 -23
  2. package/ai/application-ui-diagnostic-ids-v1.json +3 -0
  3. package/ai/application-ui-profile.defaults.json +1 -1
  4. package/ai/compile-time-contracts-v1.json +5 -12
  5. package/ai/component-catalog-v2-overrides.json +12 -49
  6. package/ai/component-catalog-v2.d.ts +1 -0
  7. package/ai/component-catalog-v2.json +458 -123
  8. package/ai/component-catalog-v2.schema.json +2 -1
  9. package/ai/component-catalog.json +658 -195
  10. package/ai/public-api-signatures-v1.md +160 -80
  11. package/ai/skill.md +22 -22
  12. package/ai/webawesome-jsx-signatures-v1.md +2 -1
  13. package/analyzer/cli.mjs +5 -2
  14. package/analyzer/index.d.mts +1 -0
  15. package/analyzer/index.mjs +117 -10
  16. package/dist/app-tab.d.ts +10 -2
  17. package/dist/app-tab.js +1 -1
  18. package/dist/browser/list-action-row.js +1 -0
  19. package/dist/browser/list-item.js +1 -0
  20. package/dist/browser/list.js +3 -0
  21. package/dist/browser/surface-scaffold.js +3 -0
  22. package/dist/catalog.d.ts +8 -4
  23. package/dist/catalog.js +21 -11
  24. package/dist/catalog.js.map +1 -1
  25. package/dist/{chunk-ELSJX4W7.js → chunk-4EF2CMYS.js} +25 -6
  26. package/dist/chunk-4EF2CMYS.js.map +1 -0
  27. package/dist/{chunk-OHU6CI22.js → chunk-B3A3IVO5.js} +2 -2
  28. package/dist/{chunk-OHU6CI22.js.map → chunk-B3A3IVO5.js.map} +1 -1
  29. package/dist/{chunk-K57KRAOV.js → chunk-FRVS5RFM.js} +24 -6
  30. package/dist/chunk-FRVS5RFM.js.map +1 -0
  31. package/dist/{chunk-DSNIYOZ3.js → chunk-GWEAPEZI.js} +16 -3
  32. package/dist/chunk-GWEAPEZI.js.map +1 -0
  33. package/dist/chunk-HP2B2L26.js +102 -0
  34. package/dist/chunk-HP2B2L26.js.map +1 -0
  35. package/dist/{chunk-OZWU5ZPZ.js → chunk-IJBSZ4NX.js} +2 -2
  36. package/dist/{chunk-OZWU5ZPZ.js.map → chunk-IJBSZ4NX.js.map} +1 -1
  37. package/dist/chunk-J5BFYY7Q.js +35 -0
  38. package/dist/chunk-J5BFYY7Q.js.map +1 -0
  39. package/dist/{chunk-GP5DP5DL.js → chunk-JFGXQBIP.js} +85 -24
  40. package/dist/chunk-JFGXQBIP.js.map +1 -0
  41. package/dist/{chunk-QQFJMRIB.js → chunk-KWWR5VMS.js} +2 -2
  42. package/dist/{chunk-QQFJMRIB.js.map → chunk-KWWR5VMS.js.map} +1 -1
  43. package/dist/chunk-OBLTAKSX.js +43 -0
  44. package/dist/chunk-OBLTAKSX.js.map +1 -0
  45. package/dist/{chunk-PIDTEQ3U.js → chunk-OT6RPYAP.js} +17 -3
  46. package/dist/chunk-OT6RPYAP.js.map +1 -0
  47. package/dist/{chunk-W7YD6E4N.js → chunk-R7ZWUN64.js} +2 -2
  48. package/dist/{chunk-W7YD6E4N.js.map → chunk-R7ZWUN64.js.map} +1 -1
  49. package/dist/{chunk-PZQVSDLH.js → chunk-RKVQEH4J.js} +1 -1
  50. package/dist/chunk-RKVQEH4J.js.map +1 -0
  51. package/dist/{chunk-7L6EHUMV.js → chunk-SYDMYBPG.js} +3 -3
  52. package/dist/chunk-SYDMYBPG.js.map +1 -0
  53. package/dist/{chunk-W4CXQYSG.js → chunk-TB6DY7H5.js} +3 -1
  54. package/dist/chunk-TB6DY7H5.js.map +1 -0
  55. package/dist/{chunk-AASLYRGE.js → chunk-UKKSMZYT.js} +18 -7
  56. package/dist/chunk-UKKSMZYT.js.map +1 -0
  57. package/dist/{chunk-BBRXX6PF.js → chunk-VCE4MPVE.js} +26 -4
  58. package/dist/chunk-VCE4MPVE.js.map +1 -0
  59. package/dist/{chunk-VLYV65LK.js → chunk-W5L2JSBY.js} +5 -3
  60. package/dist/chunk-W5L2JSBY.js.map +1 -0
  61. package/dist/{chunk-5VTB2BKP.js → chunk-WNWD54GR.js} +16 -2
  62. package/dist/chunk-WNWD54GR.js.map +1 -0
  63. package/dist/{chunk-M7JBER5U.js → chunk-X2U3QJCJ.js} +8 -2
  64. package/dist/chunk-X2U3QJCJ.js.map +1 -0
  65. package/dist/{chunk-DPDBVKNA.js → chunk-YMKH5XTF.js} +5 -3
  66. package/dist/chunk-YMKH5XTF.js.map +1 -0
  67. package/dist/collapsible-panel.d.ts +9 -1
  68. package/dist/collapsible-panel.js +36 -15
  69. package/dist/collapsible-panel.js.map +1 -1
  70. package/dist/divider-sides-267FA7sY.d.ts +4 -0
  71. package/dist/index.d.ts +5 -3
  72. package/dist/index.js +20 -19
  73. package/dist/list-action-row.d.ts +11 -1
  74. package/dist/list-action-row.js +2 -1
  75. package/dist/list-header.d.ts +15 -2
  76. package/dist/list-header.js +1 -1
  77. package/dist/list-item.d.ts +12 -1
  78. package/dist/list-item.js +2 -1
  79. package/dist/list.d.ts +19 -0
  80. package/dist/list.js +3 -0
  81. package/dist/list.js.map +1 -0
  82. package/dist/nav-stack.js +1 -1
  83. package/dist/resizable-region.d.ts +19 -2
  84. package/dist/resizable-region.js +1 -1
  85. package/dist/segmented-control.js +1 -1
  86. package/dist/select.d.ts +12 -1
  87. package/dist/select.js +1 -1
  88. package/dist/skeleton.d.ts +1 -1
  89. package/dist/skeleton.js +1 -1
  90. package/dist/split-view.js +2 -2
  91. package/dist/state-banner.d.ts +4 -2
  92. package/dist/state-banner.js +1 -1
  93. package/dist/styles/app-tab.css +26 -0
  94. package/dist/styles/catalog.css +8 -2
  95. package/dist/styles/collapsible-panel.css +66 -4
  96. package/dist/styles/list-action-row.css +64 -0
  97. package/dist/styles/list-header.css +32 -0
  98. package/dist/styles/list-item.css +45 -6
  99. package/dist/styles/list.css +43 -0
  100. package/dist/styles/resizable-region.css +132 -0
  101. package/dist/styles/select.css +68 -0
  102. package/dist/styles/state-banner.css +32 -1
  103. package/dist/styles/styles.css +2 -1
  104. package/dist/styles/sunken-panel.css +4 -0
  105. package/dist/styles/surface-scaffold.css +51 -0
  106. package/dist/styles/tab-bar.css +24 -0
  107. package/dist/styles/toolbar-control-group.css +73 -1
  108. package/dist/styles/toolbar-text.css +1 -1
  109. package/dist/styles/toolbar.css +38 -2
  110. package/dist/styles/webawesome.css +12 -0
  111. package/dist/styles/workbench.css +89 -0
  112. package/dist/sunken-panel.d.ts +5 -2
  113. package/dist/sunken-panel.js +1 -1
  114. package/dist/surface-scaffold.d.ts +25 -0
  115. package/dist/surface-scaffold.js +3 -0
  116. package/dist/surface-scaffold.js.map +1 -0
  117. package/dist/tab-bar.d.ts +11 -2
  118. package/dist/tab-bar.js +1 -1
  119. package/dist/toolbar-control-group.d.ts +16 -2
  120. package/dist/toolbar-control-group.js +1 -1
  121. package/dist/toolbar-text.js +1 -1
  122. package/dist/toolbar.d.ts +5 -3
  123. package/dist/toolbar.js +1 -1
  124. package/dist/value-table.js +1 -1
  125. package/dist/webawesome.d.ts +1 -0
  126. package/dist/wire-catalog.d.ts +4 -2
  127. package/dist/wire-catalog.js +95 -36
  128. package/dist/wire-catalog.js.map +1 -1
  129. package/dist/wire-resizable-regions.js +1 -1
  130. package/dist/wire-sidebar.d.ts +6 -1
  131. package/dist/wire-sidebar.js +27 -8
  132. package/dist/wire-sidebar.js.map +1 -1
  133. package/dist/wire-tab-bars.js +1 -1
  134. package/dist/wire-token-search-fields.d.ts +1 -1
  135. package/dist/wire-token-search-fields.js +1 -1
  136. package/dist/workbench.d.ts +8 -0
  137. package/dist/workbench.js +42 -0
  138. package/dist/workbench.js.map +1 -1
  139. package/docs/accessibility.md +67 -15
  140. package/docs/catalog.md +17 -12
  141. package/docs/collapsible-panel.md +7 -0
  142. package/docs/component-contract.md +19 -9
  143. package/docs/component-selection.md +65 -31
  144. package/docs/design/templates/empty-state/filtered-dark.svg +1 -1
  145. package/docs/design/templates/empty-state/filtered.svg +1 -1
  146. package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
  147. package/docs/design/templates/empty-state/with-action.svg +1 -1
  148. package/docs/design/templates/empty-state-dark.svg +1 -7
  149. package/docs/design/templates/empty-state.svg +1 -7
  150. package/docs/design/templates/list/compact-dark.svg +1 -0
  151. package/docs/design/templates/list/compact.svg +1 -0
  152. package/docs/design/templates/list/stack-dark.svg +1 -0
  153. package/docs/design/templates/list/stack.svg +1 -0
  154. package/docs/design/templates/list-action-row/default-dark.svg +1 -1
  155. package/docs/design/templates/list-action-row/default.svg +1 -1
  156. package/docs/design/templates/list-action-row/selected-dark.svg +1 -1
  157. package/docs/design/templates/list-action-row/selected.svg +1 -1
  158. package/docs/design/templates/list-action-row-dark.svg +1 -7
  159. package/docs/design/templates/list-action-row.svg +1 -7
  160. package/docs/design/templates/list-dark.svg +1 -0
  161. package/docs/design/templates/list-header/action-dark.svg +1 -1
  162. package/docs/design/templates/list-header/action.svg +1 -1
  163. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -1
  164. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -1
  165. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -1
  166. package/docs/design/templates/list-header/toggle-expanded.svg +1 -1
  167. package/docs/design/templates/list-header-dark.svg +1 -11
  168. package/docs/design/templates/list-header.svg +1 -11
  169. package/docs/design/templates/list-item/default-dark.svg +1 -1
  170. package/docs/design/templates/list-item/default.svg +1 -1
  171. package/docs/design/templates/list-item/multiline-dark.svg +1 -1
  172. package/docs/design/templates/list-item/multiline.svg +1 -1
  173. package/docs/design/templates/list-item/selected-dark.svg +1 -1
  174. package/docs/design/templates/list-item/selected.svg +1 -1
  175. package/docs/design/templates/list-item/trailing-dark.svg +1 -1
  176. package/docs/design/templates/list-item/trailing.svg +1 -1
  177. package/docs/design/templates/list-item-dark.svg +1 -11
  178. package/docs/design/templates/list-item.svg +1 -11
  179. package/docs/design/templates/list.svg +1 -0
  180. package/docs/design/templates/segmented-control-dark.svg +1 -7
  181. package/docs/design/templates/segmented-control.svg +1 -7
  182. package/docs/design/templates/skeleton-dark.svg +1 -9
  183. package/docs/design/templates/skeleton.svg +1 -9
  184. package/docs/design/templates/state-banner/danger-dark.svg +1 -1
  185. package/docs/design/templates/state-banner/danger.svg +1 -1
  186. package/docs/design/templates/state-banner/info-badge-dark.svg +1 -0
  187. package/docs/design/templates/state-banner/info-badge.svg +1 -0
  188. package/docs/design/templates/state-banner/info-dark.svg +1 -1
  189. package/docs/design/templates/state-banner/info.svg +1 -1
  190. package/docs/design/templates/state-banner/success-dark.svg +1 -1
  191. package/docs/design/templates/state-banner/success.svg +1 -1
  192. package/docs/design/templates/state-banner/warning-dark.svg +1 -1
  193. package/docs/design/templates/state-banner/warning.svg +1 -1
  194. package/docs/design/templates/state-banner-dark.svg +1 -11
  195. package/docs/design/templates/state-banner.svg +1 -11
  196. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
  197. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
  198. package/docs/design/templates/tab-bar-dark.svg +1 -5
  199. package/docs/design/templates/tab-bar.svg +1 -5
  200. package/docs/design/templates/token-search-field/empty-dark.svg +1 -1
  201. package/docs/design/templates/token-search-field/empty.svg +1 -1
  202. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -1
  203. package/docs/design/templates/token-search-field/tokens.svg +1 -1
  204. package/docs/design/templates/token-search-field-dark.svg +1 -7
  205. package/docs/design/templates/token-search-field.svg +1 -7
  206. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
  207. package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
  208. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -1
  209. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -1
  210. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -1
  211. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -1
  212. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -1
  213. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -1
  214. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
  215. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
  216. package/docs/design/templates/toolbar-control-group-dark.svg +1 -11
  217. package/docs/design/templates/toolbar-control-group.svg +1 -11
  218. package/docs/design/templates/toolbar-dark.svg +1 -5
  219. package/docs/design/templates/toolbar-text-dark.svg +1 -9
  220. package/docs/design/templates/toolbar-text.svg +1 -9
  221. package/docs/design/templates/toolbar.svg +1 -5
  222. package/docs/design/templates/value-table/details-dark.svg +1 -1
  223. package/docs/design/templates/value-table/details.svg +1 -1
  224. package/docs/design/templates/value-table-dark.svg +1 -5
  225. package/docs/design/templates/value-table.svg +1 -5
  226. package/docs/design/templates.md +29 -20
  227. package/docs/examples/component-catalog-extension-v2.json +3 -6
  228. package/docs/examples/component-catalog-extension.json +1 -1
  229. package/docs/layout.md +7 -9
  230. package/docs/recipes.md +8 -7
  231. package/docs/sunken-panel.md +11 -1
  232. package/docs/surface-scaffold.md +17 -0
  233. package/docs/type-contracts.md +11 -10
  234. package/docs/ui-analyzer.md +19 -1
  235. package/docs/ui-doctor.md +7 -5
  236. package/docs/ux-demo.md +6 -3
  237. package/docs/webawesome-theme.md +4 -1
  238. package/docs/workbench.md +49 -2
  239. package/doctor/eslint-diagnostics.d.mts +16 -0
  240. package/doctor/eslint-diagnostics.mjs +17 -0
  241. package/doctor/index.mjs +21 -3
  242. package/llms.txt +33 -11
  243. package/package.json +14 -8
  244. package/traversal-exclusions.mjs +7 -1
  245. package/ux-demo/recipes/app-shell.tsx +36 -23
  246. package/ux-demo/recipes/collapsible-sidebar.tsx +23 -17
  247. package/ux-demo/recipes/composer-form.tsx +15 -6
  248. package/ux-demo/recipes/list-detail-dialog.tsx +31 -15
  249. package/ux-demo/recipes/list-workspace-states.tsx +16 -7
  250. package/ux-demo/recipes/loading-inspector.tsx +39 -18
  251. package/ux-demo/recipes/navigation-sidebar.tsx +1 -1
  252. package/ux-demo/recipes/recipes.css +7 -2
  253. package/ux-demo/recipes/workspace-header.tsx +17 -7
  254. package/dist/browser/panel-header.js +0 -7
  255. package/dist/chunk-5VTB2BKP.js.map +0 -1
  256. package/dist/chunk-7L6EHUMV.js.map +0 -1
  257. package/dist/chunk-AASLYRGE.js.map +0 -1
  258. package/dist/chunk-BBRXX6PF.js.map +0 -1
  259. package/dist/chunk-DPDBVKNA.js.map +0 -1
  260. package/dist/chunk-DSNIYOZ3.js.map +0 -1
  261. package/dist/chunk-ELSJX4W7.js.map +0 -1
  262. package/dist/chunk-GP5DP5DL.js.map +0 -1
  263. package/dist/chunk-K57KRAOV.js.map +0 -1
  264. package/dist/chunk-M7JBER5U.js.map +0 -1
  265. package/dist/chunk-NENBUYX5.js +0 -79
  266. package/dist/chunk-NENBUYX5.js.map +0 -1
  267. package/dist/chunk-PIDTEQ3U.js.map +0 -1
  268. package/dist/chunk-PZQVSDLH.js.map +0 -1
  269. package/dist/chunk-RYRIFZCT.js +0 -58
  270. package/dist/chunk-RYRIFZCT.js.map +0 -1
  271. package/dist/chunk-VLYV65LK.js.map +0 -1
  272. package/dist/chunk-W4CXQYSG.js.map +0 -1
  273. package/dist/panel-header.d.ts +0 -42
  274. package/dist/panel-header.js +0 -7
  275. package/dist/panel-header.js.map +0 -1
  276. package/dist/styles/panel-header.css +0 -64
  277. package/docs/design/templates/panel-header/icon-actions-dark.svg +0 -1
  278. package/docs/design/templates/panel-header/icon-actions.svg +0 -1
  279. package/docs/design/templates/panel-header/icon-summary-actions-dark.svg +0 -1
  280. package/docs/design/templates/panel-header/icon-summary-actions.svg +0 -1
  281. package/docs/design/templates/panel-header/no-icon-dark.svg +0 -1
  282. package/docs/design/templates/panel-header/no-icon.svg +0 -1
  283. package/docs/design/templates/panel-header/page-heading-dark.svg +0 -1
  284. package/docs/design/templates/panel-header/page-heading.svg +0 -1
  285. package/docs/design/templates/panel-header/title-only-dark.svg +0 -1
  286. package/docs/design/templates/panel-header/title-only.svg +0 -1
  287. package/docs/design/templates/panel-header-dark.svg +0 -13
  288. package/docs/design/templates/panel-header.svg +0 -13
@@ -1,4 +1,5 @@
1
1
  .kui-list-action-row {
2
+ --kui-list-group-divider-color: var(--kui-color-neutral-border-quiet);
2
3
  --kui-list-action-row-color: var(--kui-color-neutral-on-normal);
3
4
  --kui-list-action-row-border: transparent;
4
5
  --kui-list-action-row-background: transparent;
@@ -21,6 +22,29 @@
21
22
  align-items: stretch;
22
23
  }
23
24
 
25
+ .kui-list-action-row[data-density="compact"] {
26
+ min-height: 2.25rem;
27
+ }
28
+
29
+ .kui-list-action-row[data-density="compact"]
30
+ :is(.kui-list-action-row__primary, .kui-list-action-row__trailing-action) {
31
+ min-height: 2.25rem;
32
+ }
33
+
34
+ .kui-list-action-row[data-divider="before"],
35
+ .kui-list-action-row[data-divider="both"] {
36
+ border-block-start: 1px solid var(--kui-list-group-divider-color);
37
+ border-start-start-radius: 0;
38
+ border-start-end-radius: 0;
39
+ }
40
+
41
+ .kui-list-action-row[data-divider="after"],
42
+ .kui-list-action-row[data-divider="both"] {
43
+ border-block-end: 1px solid var(--kui-list-group-divider-color);
44
+ border-end-start-radius: 0;
45
+ border-end-end-radius: 0;
46
+ }
47
+
24
48
  .kui-list-action-row:has(.kui-list-action-row__primary:hover) {
25
49
  --kui-list-action-row-border: var(--kui-list-action-row-hover-border);
26
50
  --kui-list-action-row-background: var(--kui-list-action-row-hover-background);
@@ -104,6 +128,26 @@
104
128
  align-items: center;
105
129
  }
106
130
 
131
+ .kui-list-action-row__primary-label,
132
+ .kui-list-action-row__description,
133
+ .kui-list-action-row__status {
134
+ min-width: 0;
135
+ }
136
+
137
+ .kui-list-action-row__description,
138
+ .kui-list-action-row__status {
139
+ color: var(--kui-color-neutral-on-quiet);
140
+ font-size: var(--kui-font-xs);
141
+ font-weight: 400;
142
+ line-height: 1.3;
143
+ }
144
+
145
+ .kui-list-action-row__status {
146
+ display: inline-flex;
147
+ align-items: center;
148
+ gap: 0.25rem;
149
+ }
150
+
107
151
  .kui-list-action-row[data-has-icon="true"] .kui-list-action-row__label {
108
152
  margin-inline-start: calc(
109
153
  1.5rem + var(--kui-layout-item-gap, 0.5rem)
@@ -131,6 +175,26 @@
131
175
  place-items: center;
132
176
  }
133
177
 
178
+ .kui-list-action-row[data-trailing-visibility="interaction"]
179
+ .kui-list-action-row__trailing-action {
180
+ opacity: 0;
181
+ }
182
+
183
+ .kui-list-action-row[data-trailing-visibility="interaction"]:is(
184
+ :hover,
185
+ :focus-within
186
+ )
187
+ .kui-list-action-row__trailing-action {
188
+ opacity: 1;
189
+ }
190
+
191
+ @media (hover: none) {
192
+ .kui-list-action-row[data-trailing-visibility="interaction"]
193
+ .kui-list-action-row__trailing-action {
194
+ opacity: 1;
195
+ }
196
+ }
197
+
134
198
  .kui-list-action-row__trailing-action:hover:not(:disabled) {
135
199
  background: var(--kui-list-action-row-trailing-hover-background);
136
200
  }
@@ -1,4 +1,5 @@
1
1
  .kui-list-header {
2
+ --kui-list-group-divider-color: var(--kui-color-neutral-border-quiet);
2
3
  --kui-list-header-color: var(--kui-color-neutral-on-quiet);
3
4
  --kui-list-header-hover-background: var(--kui-color-neutral-border-quiet);
4
5
  --_kui-list-header-action-icon-size: var(
@@ -18,6 +19,25 @@
18
19
  gap: var(--kui-layout-item-gap, 0.5rem);
19
20
  }
20
21
 
22
+ .kui-list-header[data-density="compact"],
23
+ .kui-list-header[data-density="compact"] .kui-list-header__title {
24
+ min-height: 2.25rem;
25
+ }
26
+
27
+ .kui-list-header[data-density="compact"] .kui-list-header__title {
28
+ padding-block: 0.25rem;
29
+ }
30
+
31
+ .kui-list-header[data-divider="before"],
32
+ .kui-list-header[data-divider="both"] {
33
+ border-block-start: 1px solid var(--kui-list-group-divider-color);
34
+ }
35
+
36
+ .kui-list-header[data-divider="after"],
37
+ .kui-list-header[data-divider="both"] {
38
+ border-block-end: 1px solid var(--kui-list-group-divider-color);
39
+ }
40
+
21
41
  .kui-list-header__title,
22
42
  .kui-list-header__action {
23
43
  box-sizing: border-box;
@@ -86,6 +106,18 @@
86
106
  line-height: 1;
87
107
  }
88
108
 
109
+ .kui-list-header[data-indicator-tone="accent"]
110
+ :is(.kui-list-header__count, .kui-list-header__badge) {
111
+ color: var(--kui-color-brand-on-normal);
112
+ background: var(--kui-color-brand-fill-normal);
113
+ }
114
+
115
+ .kui-list-header[data-indicator-tone="danger"]
116
+ :is(.kui-list-header__count, .kui-list-header__badge) {
117
+ color: var(--kui-color-danger-on-normal);
118
+ background: var(--kui-color-danger-fill-normal);
119
+ }
120
+
89
121
  .kui-list-header__action,
90
122
  .kui-list-header__action-layer {
91
123
  display: grid;
@@ -1,4 +1,5 @@
1
1
  .kui-list-item {
2
+ --kui-list-group-divider-color: var(--kui-color-neutral-border-quiet);
2
3
  --kui-list-item-color: var(--kui-color-neutral-on-normal);
3
4
  --kui-list-item-border: transparent;
4
5
  --kui-list-item-background: transparent;
@@ -25,8 +26,27 @@
25
26
  text-align: start;
26
27
  }
27
28
 
29
+ .kui-list-item[data-density="compact"] {
30
+ min-height: 2.25rem;
31
+ padding-block: 0.25rem;
32
+ }
33
+
34
+ .kui-list-item[data-divider="before"],
35
+ .kui-list-item[data-divider="both"] {
36
+ border-block-start-color: var(--kui-list-group-divider-color);
37
+ border-start-start-radius: 0;
38
+ border-start-end-radius: 0;
39
+ }
40
+
41
+ .kui-list-item[data-divider="after"],
42
+ .kui-list-item[data-divider="both"] {
43
+ border-block-end-color: var(--kui-list-group-divider-color);
44
+ border-end-start-radius: 0;
45
+ border-end-end-radius: 0;
46
+ }
47
+
28
48
  .kui-list-item[data-has-icon="true"] {
29
- grid-template-columns: 1.5rem minmax(0, 1fr) auto;
49
+ grid-template-columns: 1.125rem minmax(0, 1fr) auto;
30
50
  }
31
51
 
32
52
  .kui-list-item[data-has-icon="true"] .kui-list-item__icon {
@@ -75,25 +95,38 @@
75
95
 
76
96
  .kui-list-item__icon {
77
97
  display: grid;
78
- width: 1.5rem;
79
- height: 1.5rem;
98
+ width: 1.125rem;
99
+ height: 1.125rem;
80
100
  color: currentColor;
81
101
  place-items: center;
82
102
  }
83
103
 
84
104
  .kui-list-item__icon svg {
85
105
  display: block;
86
- width: 1.5rem;
87
- height: 1.5rem;
106
+ width: 1.125rem;
107
+ height: 1.125rem;
88
108
  }
89
109
 
90
110
  .kui-list-item__label {
111
+ display: grid;
91
112
  min-width: 0;
92
113
  overflow: hidden;
93
114
  text-overflow: ellipsis;
94
115
  white-space: nowrap;
95
116
  }
96
117
 
118
+ .kui-list-item__primary-label,
119
+ .kui-list-item__description {
120
+ min-width: 0;
121
+ }
122
+
123
+ .kui-list-item__description {
124
+ color: var(--kui-color-neutral-on-quiet);
125
+ font-size: var(--kui-font-xs);
126
+ font-weight: 400;
127
+ line-height: 1.3;
128
+ }
129
+
97
130
  .kui-list-item[data-multiline="true"] {
98
131
  height: fit-content;
99
132
  white-space: normal;
@@ -106,7 +139,7 @@
106
139
 
107
140
  .kui-list-item[data-multiline="true"] .kui-list-item__icon {
108
141
  align-self: start;
109
- margin-block-start: calc((1lh - 1.5rem) / 2);
142
+ margin-block-start: calc((1lh - 1.125rem) / 2);
110
143
  }
111
144
 
112
145
  .kui-list-item__trailing {
@@ -117,6 +150,12 @@
117
150
  gap: var(--kui-layout-item-gap, 0.5rem);
118
151
  }
119
152
 
153
+ .kui-list-item__status {
154
+ color: var(--kui-color-neutral-on-quiet);
155
+ font-size: var(--kui-font-xs);
156
+ font-weight: 500;
157
+ }
158
+
120
159
  .kui-list-item__trailing > svg {
121
160
  width: 1rem;
122
161
  height: 1rem;
@@ -0,0 +1,43 @@
1
+ .kui-list {
2
+ --kui-list-divider-color: var(--kui-color-border);
3
+ --kui-list-gap: var(--kui-layout-item-gap, 0.5rem);
4
+ --_kui-list-divider-top: transparent;
5
+ --_kui-list-divider-right: transparent;
6
+ --_kui-list-divider-bottom: transparent;
7
+ --_kui-list-divider-left: transparent;
8
+
9
+ display: flex;
10
+ min-width: 0;
11
+ min-height: 0;
12
+ box-sizing: border-box;
13
+ flex: var(--_kui-list-flex, initial);
14
+ flex-direction: column;
15
+ align-items: stretch;
16
+ gap: var(--_kui-list-gap, 0);
17
+ box-shadow:
18
+ inset 0 1px var(--_kui-list-divider-top),
19
+ inset -1px 0 var(--_kui-list-divider-right),
20
+ inset 0 -1px var(--_kui-list-divider-bottom),
21
+ inset 1px 0 var(--_kui-list-divider-left);
22
+ }
23
+
24
+ .kui-list[data-scrollable="true"] {
25
+ overflow-y: auto;
26
+ overscroll-behavior-y: contain;
27
+ }
28
+
29
+ .kui-list[divider-sides*="t"] {
30
+ --_kui-list-divider-top: var(--kui-list-divider-color);
31
+ }
32
+
33
+ .kui-list[divider-sides*="r"] {
34
+ --_kui-list-divider-right: var(--kui-list-divider-color);
35
+ }
36
+
37
+ .kui-list[divider-sides*="b"] {
38
+ --_kui-list-divider-bottom: var(--kui-list-divider-color);
39
+ }
40
+
41
+ .kui-list[divider-sides*="l"] {
42
+ --_kui-list-divider-left: var(--kui-list-divider-color);
43
+ }
@@ -27,6 +27,132 @@
27
27
  min-height: 0;
28
28
  overflow: hidden;
29
29
  }
30
+ .kui-resizable-region[data-content-overflow="auto"]
31
+ > .kui-resizable-region__content {
32
+ overflow: auto;
33
+ }
34
+ .kui-resizable-region[data-content-overflow="visible"] {
35
+ z-index: var(--kui-resizable-region-popup-z, 5);
36
+ overflow: visible;
37
+ }
38
+ .kui-resizable-region[data-content-overflow="visible"]
39
+ > .kui-resizable-region__content {
40
+ overflow: visible;
41
+ }
42
+ .kui-resizable-region[data-separator="hidden"] {
43
+ --kui-resizable-region-separator-color: transparent;
44
+ }
45
+ .kui-resizable-region[data-collapsed="true"] > .kui-resizable-region__handle,
46
+ .kui-resizable-region:not([data-presentation="inline"])
47
+ > .kui-resizable-region__handle {
48
+ display: none;
49
+ }
50
+
51
+ /* The track always snaps to its new size. Motion is isolated to the fixed-size
52
+ content so a large sibling workspace incurs one reflow, not one per frame. */
53
+ .kui-resizable-region[data-collapse-motion="slide"]
54
+ > .kui-resizable-region__content,
55
+ .kui-resizable-region[data-collapse-motion="fade-slide"]
56
+ > .kui-resizable-region__content {
57
+ transition:
58
+ opacity 160ms ease,
59
+ transform 200ms ease;
60
+ }
61
+ .kui-resizable-region[data-axis="horizontal"][data-collapse-motion]:not(
62
+ [data-collapse-motion="none"]
63
+ )
64
+ > .kui-resizable-region__content {
65
+ width: var(--kui-resizable-region-expanded-size);
66
+ min-width: var(--kui-resizable-region-expanded-size);
67
+ }
68
+ .kui-resizable-region[data-axis="vertical"][data-collapse-motion]:not(
69
+ [data-collapse-motion="none"]
70
+ )
71
+ > .kui-resizable-region__content {
72
+ height: var(--kui-resizable-region-expanded-size);
73
+ min-height: var(--kui-resizable-region-expanded-size);
74
+ }
75
+ .kui-resizable-region[data-axis="horizontal"][data-edge="end"][data-collapsed="true"]
76
+ > .kui-resizable-region__content {
77
+ transform: translateX(-100%);
78
+ }
79
+ .kui-resizable-region[data-axis="horizontal"][data-edge="start"][data-collapsed="true"]
80
+ > .kui-resizable-region__content {
81
+ transform: translateX(100%);
82
+ }
83
+ .kui-resizable-region[data-axis="vertical"][data-edge="end"][data-collapsed="true"]
84
+ > .kui-resizable-region__content {
85
+ transform: translateY(-100%);
86
+ }
87
+ .kui-resizable-region[data-axis="vertical"][data-edge="start"][data-collapsed="true"]
88
+ > .kui-resizable-region__content {
89
+ transform: translateY(100%);
90
+ }
91
+ .kui-resizable-region[data-collapse-motion="fade-slide"][data-collapsed="true"]
92
+ > .kui-resizable-region__content {
93
+ opacity: 0;
94
+ }
95
+ .kui-resizable-region[data-resizing="true"] > .kui-resizable-region__content {
96
+ transition: none;
97
+ }
98
+
99
+ /* Responsive replacement policies. Overlay regions stay on their logical edge
100
+ and stop participating in the parent's flex tracks; hidden regions are fully
101
+ replaced by application-owned compact UI. */
102
+ .kui-resizable-region[data-presentation="overlay"] {
103
+ position: absolute;
104
+ z-index: var(--kui-resizable-region-overlay-z, 41);
105
+ max-width: var(--kui-resizable-region-overlay-max-width, 85vw);
106
+ max-height: var(--kui-resizable-region-overlay-max-height, 85vh);
107
+ box-shadow: var(--kui-shadow-l, 0 8px 32px rgb(0 0 0 / 24%));
108
+ }
109
+ .kui-resizable-region[data-presentation="overlay"][data-axis="horizontal"] {
110
+ inset-block: 0;
111
+ }
112
+ .kui-resizable-region[data-presentation="overlay"][data-axis="horizontal"][data-edge="end"] {
113
+ inset-inline-start: 0;
114
+ }
115
+ .kui-resizable-region[data-presentation="overlay"][data-axis="horizontal"][data-edge="start"] {
116
+ inset-inline-end: 0;
117
+ }
118
+ .kui-resizable-region[data-presentation="overlay"][data-axis="vertical"] {
119
+ inset-inline: 0;
120
+ }
121
+ .kui-resizable-region[data-presentation="overlay"][data-axis="vertical"][data-edge="end"] {
122
+ inset-block-start: 0;
123
+ }
124
+ .kui-resizable-region[data-presentation="overlay"][data-axis="vertical"][data-edge="start"] {
125
+ inset-block-end: 0;
126
+ }
127
+ .kui-resizable-region[data-presentation="overlay"][data-collapsed="true"] {
128
+ pointer-events: none;
129
+ }
130
+ .kui-resizable-region[data-presentation="hidden"] {
131
+ display: none;
132
+ }
133
+
134
+ /* A collapsed panel can supply its own affordance while Kerf owns consistent,
135
+ safe-area-aware viewport placement. */
136
+ .kui-resizable-region__restore {
137
+ position: fixed;
138
+ z-index: var(--kui-resizable-region-restore-z, 42);
139
+ inset-block-end: calc(
140
+ var(--kui-resizable-region-restore-inset, 1rem) +
141
+ var(--kui-safe-area-block-end, env(safe-area-inset-bottom, 0px))
142
+ );
143
+ }
144
+ .kui-resizable-region__restore[data-position="bottom-start"] {
145
+ inset-inline-start: calc(
146
+ var(--kui-resizable-region-restore-inset, 1rem) +
147
+ var(--kui-safe-area-inline-start, env(safe-area-inset-left, 0px))
148
+ );
149
+ }
150
+ .kui-resizable-region__restore[data-position="bottom-end"] {
151
+ inset-inline-end: calc(
152
+ var(--kui-resizable-region-restore-inset, 1rem) +
153
+ var(--kui-safe-area-inline-end, env(safe-area-inset-right, 0px))
154
+ );
155
+ }
30
156
  .kui-resizable-region__handle {
31
157
  position: absolute;
32
158
  z-index: 3;
@@ -109,3 +235,9 @@
109
235
  .kui-resizable-region__handle:focus-visible .kui-resizable-region__handle-icon {
110
236
  opacity: 1;
111
237
  }
238
+
239
+ @media (prefers-reduced-motion: reduce) {
240
+ .kui-resizable-region > .kui-resizable-region__content {
241
+ transition: none;
242
+ }
243
+ }
@@ -4,13 +4,61 @@
4
4
  border-radius: var(--kui-layout-rounded-radius, calc(1px + 0.6875rem));
5
5
  gap: 0;
6
6
  }
7
+ .kui-select--label-hidden::part(form-control-label) {
8
+ position: absolute;
9
+ width: 1px;
10
+ height: 1px;
11
+ padding: 0;
12
+ margin: -1px;
13
+ overflow: hidden;
14
+ clip-path: inset(50%);
15
+ white-space: nowrap;
16
+ border: 0;
17
+ }
7
18
  .kui-select::part(display-input) {
8
19
  min-width: 0;
20
+ max-width: var(--kui-select-label-max-width, none);
9
21
  overflow: hidden;
10
22
  padding: 0;
11
23
  text-overflow: ellipsis;
12
24
  white-space: nowrap;
13
25
  }
26
+ .kui-select[data-size="compact"]::part(combobox) {
27
+ min-height: 2rem;
28
+ }
29
+ .kui-select[data-presentation="toolbar-borderless"]::part(combobox) {
30
+ border-color: transparent;
31
+ background: transparent;
32
+ box-shadow: none;
33
+ }
34
+ .kui-select[data-presentation="navigation"] {
35
+ width: max-content;
36
+ max-width: 100%;
37
+ }
38
+ .kui-select[data-focus-ring-owner="group"]:focus-within::part(combobox) {
39
+ outline: none;
40
+ box-shadow: none;
41
+ }
42
+ .kui-select[data-selected-presentation="icon-only"] {
43
+ width: 2rem;
44
+ }
45
+ .kui-select[data-selected-presentation="icon-only"]::part(combobox) {
46
+ width: 2rem;
47
+ min-width: 2rem;
48
+ padding-inline: 0.4375rem;
49
+ }
50
+ .kui-select[data-selected-presentation="icon-only"]::part(display-input) {
51
+ position: absolute;
52
+ width: 1px;
53
+ height: 1px;
54
+ padding: 0;
55
+ overflow: hidden;
56
+ clip-path: inset(50%);
57
+ }
58
+ .kui-select[data-selected-presentation="icon-only"]
59
+ .kui-select__icon[slot="start"] {
60
+ margin-inline-end: 0 !important;
61
+ }
14
62
  .kui-select::part(start),
15
63
  .kui-select::part(end),
16
64
  .kui-select::part(expand-icon) {
@@ -122,9 +170,29 @@
122
170
  border-radius: var(--kui-layout-rounded-radius, calc(1px + 0.6875rem));
123
171
  background: var(--kui-color-surface);
124
172
  }
173
+ .kui-select--placeholder[data-size="compact"] .kui-select__placeholder-box {
174
+ min-height: 2rem;
175
+ }
176
+ .kui-select--placeholder[data-presentation="toolbar-borderless"]
177
+ .kui-select__placeholder-box {
178
+ border-color: transparent;
179
+ background: transparent;
180
+ }
181
+ .kui-select--placeholder[data-presentation="navigation"] {
182
+ width: max-content;
183
+ max-width: 100%;
184
+ }
125
185
  .kui-select__placeholder-box .kui-skeleton {
126
186
  max-width: 10rem;
127
187
  }
188
+ .kui-select__placeholder-hint {
189
+ display: block;
190
+ margin-block-start: 0.25rem;
191
+ padding-inline: calc(1px + var(--kui-layout-item-padding, 0.5rem));
192
+ color: var(--kui-color-text-quiet);
193
+ font-size: var(--kui-font-xs);
194
+ line-height: 1.4;
195
+ }
128
196
  .kui-select__placeholder-chevron {
129
197
  display: inline-flex;
130
198
  width: 1rem;
@@ -21,6 +21,14 @@
21
21
  )
22
22
  );
23
23
  --_kui-state-banner-detail: var(--kui-state-banner-detail, currentColor);
24
+ --_kui-state-banner-badge-background: var(
25
+ --kui-state-banner-badge-background,
26
+ var(--_kui-state-banner-foreground)
27
+ );
28
+ --_kui-state-banner-badge-foreground: var(
29
+ --kui-state-banner-badge-foreground,
30
+ var(--kui-color-surface)
31
+ );
24
32
  --_kui-state-banner-action-background: var(
25
33
  --kui-state-banner-action-background,
26
34
  color-mix(in srgb, var(--kui-color-surface) 52%, transparent)
@@ -129,7 +137,23 @@
129
137
  .kui-state-banner__copy strong {
130
138
  font-size: var(--kui-font-xs);
131
139
  }
132
- .kui-state-banner__copy span {
140
+ .kui-state-banner__badge {
141
+ display: inline-grid;
142
+ min-width: 1.25rem;
143
+ min-height: 1.25rem;
144
+ padding-inline: 0.35rem;
145
+ box-sizing: border-box;
146
+ border-radius: var(--kui-radius-pill);
147
+ color: var(--_kui-state-banner-badge-foreground);
148
+ background: var(--_kui-state-banner-badge-background);
149
+ place-items: center;
150
+ flex: none;
151
+ font-size: var(--kui-font-2xs);
152
+ font-weight: 700;
153
+ letter-spacing: 0;
154
+ line-height: 1;
155
+ }
156
+ .kui-state-banner__detail {
133
157
  overflow: hidden;
134
158
  color: var(--_kui-state-banner-detail);
135
159
  font-size: var(--kui-font-2xs);
@@ -162,6 +186,13 @@
162
186
  @media (max-width: 36rem) {
163
187
  .kui-state-banner__copy {
164
188
  display: grid;
189
+ grid-template-columns: auto 1fr;
165
190
  gap: 0.05rem;
166
191
  }
192
+ .kui-state-banner__badge {
193
+ justify-self: start;
194
+ }
195
+ .kui-state-banner__detail {
196
+ grid-column: 1 / -1;
197
+ }
167
198
  }
@@ -4,7 +4,9 @@
4
4
  @import "./disclosure-arrow.css";
5
5
  @import "./toolbar.css";
6
6
  @import "./toolbar-control-group.css";
7
+ @import "./surface-scaffold.css";
7
8
  @import "./toolbar-text.css";
9
+ @import "./list.css";
8
10
  @import "./list-action-row.css";
9
11
  @import "./list-item.css";
10
12
  @import "./list-header.css";
@@ -19,5 +21,4 @@
19
21
  @import "./token-search-field.css";
20
22
  @import "./state-banner.css";
21
23
  @import "./empty-state.css";
22
- @import "./panel-header.css";
23
24
  @import "./value-table.css";
@@ -16,3 +16,7 @@
16
16
  flex-direction: column;
17
17
  gap: var(--kui-sunken-panel-gap, 0.5rem);
18
18
  }
19
+
20
+ .kui-sunken-panel[data-shape="square"] {
21
+ border-radius: 0;
22
+ }
@@ -0,0 +1,51 @@
1
+ .kui-dialog-surface > wa-dialog {
2
+ --width: min(35rem, calc(100vw - 2rem));
3
+ }
4
+ .kui-dialog-surface[data-size="small"] > wa-dialog {
5
+ --width: min(25rem, calc(100vw - 2rem));
6
+ }
7
+ .kui-dialog-surface[data-size="large"] > wa-dialog {
8
+ --width: min(50rem, calc(100vw - 2rem));
9
+ }
10
+ .kui-dialog-surface[data-body-inset="none"] > wa-dialog::part(body),
11
+ .kui-dialog-surface[data-footer-inset="none"] > wa-dialog::part(footer) {
12
+ padding: 0;
13
+ }
14
+ .kui-dialog-surface[data-body-inset="compact"] > wa-dialog::part(body),
15
+ .kui-dialog-surface[data-footer-inset="compact"] > wa-dialog::part(footer) {
16
+ padding: var(--kui-wa-surface-inset, 0.5rem);
17
+ }
18
+ .kui-dialog-surface[data-body-inset="comfortable"] > wa-dialog::part(body),
19
+ .kui-dialog-surface[data-footer-inset="comfortable"] > wa-dialog::part(footer) {
20
+ padding: var(--kui-wa-container-inset, 1rem);
21
+ }
22
+ .kui-dialog-surface[data-presentation="side-sheet"] > wa-dialog::part(dialog) {
23
+ width: min(30rem, 100vw);
24
+ max-width: 100vw;
25
+ height: 100dvh;
26
+ max-height: 100dvh;
27
+ margin-inline-end: 0;
28
+ border-radius: var(--kui-radius-l) 0 0 var(--kui-radius-l);
29
+ }
30
+ .kui-dialog-surface[data-presentation="fullscreen"] > wa-dialog {
31
+ --width: 100vw;
32
+ }
33
+ .kui-dialog-surface[data-presentation="fullscreen"] > wa-dialog::part(dialog) {
34
+ width: 100vw;
35
+ max-width: 100vw;
36
+ height: 100dvh;
37
+ max-height: 100dvh;
38
+ border-radius: 0;
39
+ }
40
+ .kui-popup-surface {
41
+ display: inline-flex;
42
+ }
43
+ .kui-popup-surface[data-inset="standard"] > wa-dropdown::part(menu) {
44
+ padding: var(--kui-wa-surface-inset, 0.5rem);
45
+ }
46
+ .kui-popup-surface[data-inset="compact"] > wa-dropdown::part(menu) {
47
+ padding: 0.25rem;
48
+ }
49
+ .kui-popup-surface[data-inset="list-zero"] > wa-dropdown::part(menu) {
50
+ padding: 0;
51
+ }
@@ -31,6 +31,30 @@
31
31
  gap: 0;
32
32
  overscroll-behavior-inline: contain;
33
33
  }
34
+ .kui-tab-bar[data-presentation="segmented"],
35
+ .kui-tab-bar[data-presentation="inspector"] {
36
+ --kui-tab-bar-background: var(--kui-color-neutral-fill-quiet);
37
+ --kui-tab-bar-border: var(--kui-color-neutral-border-quiet);
38
+ }
39
+ .kui-tab-bar[data-presentation="inspector"] {
40
+ min-height: 2.125rem;
41
+ padding: 0;
42
+ }
43
+ .kui-tab-bar[data-presentation="inspector"] .kui-tab-bar__tabs {
44
+ height: 2.125rem;
45
+ border-radius: var(--kui-radius-s);
46
+ }
47
+ .kui-tab-bar[data-allocation="fill"] [data-component="app-tab"] {
48
+ min-width: 0;
49
+ flex: 1 1 0;
50
+ }
51
+ .kui-tab-bar[data-allocation="fill"] [data-component="app-tab"] > [role="tab"] {
52
+ width: 100%;
53
+ justify-content: center;
54
+ }
55
+ .kui-tab-bar[data-trailing-placement="adjacent"] .kui-tab-bar__tabs {
56
+ flex: 0 1 auto;
57
+ }
34
58
 
35
59
  .kui-tab-bar__tabs::-webkit-scrollbar {
36
60
  display: none;