@kerfjs/ui 5.0.0-beta.22 → 5.0.0-beta.24

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 (199) hide show
  1. package/README.md +12 -3
  2. package/ai/compile-time-contracts-v1.json +2 -1
  3. package/ai/component-catalog-v2-overrides.json +5 -12
  4. package/ai/component-catalog-v2.json +266 -32
  5. package/ai/component-catalog.json +293 -37
  6. package/ai/component-catalog.schema.json +1 -0
  7. package/ai/public-api-signatures-v1.md +29 -16
  8. package/ai/skill.md +4 -4
  9. package/ai/webawesome-jsx-signatures-v1.md +1 -1
  10. package/analyzer/index.mjs +2 -8
  11. package/dist/app-tab.js +1 -1
  12. package/dist/browser/list.js +3 -0
  13. package/dist/catalog.d.ts +8 -4
  14. package/dist/catalog.js +19 -10
  15. package/dist/catalog.js.map +1 -1
  16. package/dist/{chunk-RYRIFZCT.js → chunk-7XRDUG4Y.js} +5 -5
  17. package/dist/{chunk-RYRIFZCT.js.map → chunk-7XRDUG4Y.js.map} +1 -1
  18. package/dist/{chunk-OHU6CI22.js → chunk-B3A3IVO5.js} +2 -2
  19. package/dist/{chunk-OHU6CI22.js.map → chunk-B3A3IVO5.js.map} +1 -1
  20. package/dist/{chunk-ELSJX4W7.js → chunk-FEAMR7S4.js} +2 -2
  21. package/dist/{chunk-ELSJX4W7.js.map → chunk-FEAMR7S4.js.map} +1 -1
  22. package/dist/{chunk-OZWU5ZPZ.js → chunk-IJBSZ4NX.js} +2 -2
  23. package/dist/{chunk-OZWU5ZPZ.js.map → chunk-IJBSZ4NX.js.map} +1 -1
  24. package/dist/chunk-J5BFYY7Q.js +35 -0
  25. package/dist/chunk-J5BFYY7Q.js.map +1 -0
  26. package/dist/{chunk-QQFJMRIB.js → chunk-KWWR5VMS.js} +2 -2
  27. package/dist/{chunk-QQFJMRIB.js.map → chunk-KWWR5VMS.js.map} +1 -1
  28. package/dist/{chunk-K57KRAOV.js → chunk-NWSEP5RT.js} +2 -2
  29. package/dist/{chunk-K57KRAOV.js.map → chunk-NWSEP5RT.js.map} +1 -1
  30. package/dist/{chunk-GP5DP5DL.js → chunk-OJWWHFH3.js} +39 -4
  31. package/dist/chunk-OJWWHFH3.js.map +1 -0
  32. package/dist/{chunk-DSNIYOZ3.js → chunk-PSKN344N.js} +2 -2
  33. package/dist/{chunk-DSNIYOZ3.js.map → chunk-PSKN344N.js.map} +1 -1
  34. package/dist/{chunk-W7YD6E4N.js → chunk-R7ZWUN64.js} +2 -2
  35. package/dist/{chunk-W7YD6E4N.js.map → chunk-R7ZWUN64.js.map} +1 -1
  36. package/dist/{chunk-PZQVSDLH.js → chunk-RKVQEH4J.js} +1 -1
  37. package/dist/chunk-RKVQEH4J.js.map +1 -0
  38. package/dist/{chunk-7L6EHUMV.js → chunk-SYDMYBPG.js} +3 -3
  39. package/dist/chunk-SYDMYBPG.js.map +1 -0
  40. package/dist/{chunk-W4CXQYSG.js → chunk-TB6DY7H5.js} +3 -1
  41. package/dist/chunk-TB6DY7H5.js.map +1 -0
  42. package/dist/{chunk-BBRXX6PF.js → chunk-UFZKLBCF.js} +2 -2
  43. package/dist/{chunk-BBRXX6PF.js.map → chunk-UFZKLBCF.js.map} +1 -1
  44. package/dist/{chunk-AASLYRGE.js → chunk-UKKSMZYT.js} +18 -7
  45. package/dist/chunk-UKKSMZYT.js.map +1 -0
  46. package/dist/{chunk-VLYV65LK.js → chunk-W5L2JSBY.js} +5 -3
  47. package/dist/chunk-W5L2JSBY.js.map +1 -0
  48. package/dist/{chunk-PIDTEQ3U.js → chunk-Y45PPBDV.js} +2 -2
  49. package/dist/{chunk-PIDTEQ3U.js.map → chunk-Y45PPBDV.js.map} +1 -1
  50. package/dist/divider-sides-267FA7sY.d.ts +4 -0
  51. package/dist/index.d.ts +3 -1
  52. package/dist/index.js +16 -15
  53. package/dist/list-action-row.js +1 -1
  54. package/dist/list-header.js +1 -1
  55. package/dist/list-item.js +1 -1
  56. package/dist/list.d.ts +19 -0
  57. package/dist/list.js +3 -0
  58. package/dist/list.js.map +1 -0
  59. package/dist/nav-stack.js +1 -1
  60. package/dist/panel-header.js +1 -1
  61. package/dist/segmented-control.js +1 -1
  62. package/dist/select.js +1 -1
  63. package/dist/skeleton.d.ts +1 -1
  64. package/dist/skeleton.js +1 -1
  65. package/dist/split-view.js +1 -1
  66. package/dist/state-banner.d.ts +4 -2
  67. package/dist/state-banner.js +1 -1
  68. package/dist/styles/catalog.css +8 -2
  69. package/dist/styles/list-item.css +6 -6
  70. package/dist/styles/list.css +43 -0
  71. package/dist/styles/state-banner.css +32 -1
  72. package/dist/styles/styles.css +1 -0
  73. package/dist/styles/sunken-panel.css +4 -0
  74. package/dist/styles/toolbar.css +38 -2
  75. package/dist/sunken-panel.d.ts +5 -2
  76. package/dist/sunken-panel.js +1 -1
  77. package/dist/toolbar-text.js +1 -1
  78. package/dist/toolbar.d.ts +5 -3
  79. package/dist/toolbar.js +1 -1
  80. package/dist/value-table.js +1 -1
  81. package/dist/wire-catalog.d.ts +4 -2
  82. package/dist/wire-catalog.js +95 -36
  83. package/dist/wire-catalog.js.map +1 -1
  84. package/dist/wire-tab-bars.js +1 -1
  85. package/dist/wire-token-search-fields.d.ts +1 -1
  86. package/dist/wire-token-search-fields.js +1 -1
  87. package/docs/accessibility.md +12 -3
  88. package/docs/catalog.md +17 -12
  89. package/docs/component-contract.md +14 -1
  90. package/docs/component-selection.md +18 -2
  91. package/docs/design/templates/empty-state/filtered-dark.svg +1 -1
  92. package/docs/design/templates/empty-state/filtered.svg +1 -1
  93. package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
  94. package/docs/design/templates/empty-state/with-action.svg +1 -1
  95. package/docs/design/templates/empty-state-dark.svg +1 -7
  96. package/docs/design/templates/empty-state.svg +1 -7
  97. package/docs/design/templates/list/compact-dark.svg +1 -0
  98. package/docs/design/templates/list/compact.svg +1 -0
  99. package/docs/design/templates/list/stack-dark.svg +1 -0
  100. package/docs/design/templates/list/stack.svg +1 -0
  101. package/docs/design/templates/list-action-row/default-dark.svg +1 -1
  102. package/docs/design/templates/list-action-row/default.svg +1 -1
  103. package/docs/design/templates/list-action-row/selected-dark.svg +1 -1
  104. package/docs/design/templates/list-action-row/selected.svg +1 -1
  105. package/docs/design/templates/list-action-row-dark.svg +1 -7
  106. package/docs/design/templates/list-action-row.svg +1 -7
  107. package/docs/design/templates/list-dark.svg +1 -0
  108. package/docs/design/templates/list-header/action-dark.svg +1 -1
  109. package/docs/design/templates/list-header/action.svg +1 -1
  110. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -1
  111. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -1
  112. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -1
  113. package/docs/design/templates/list-header/toggle-expanded.svg +1 -1
  114. package/docs/design/templates/list-header-dark.svg +1 -11
  115. package/docs/design/templates/list-header.svg +1 -11
  116. package/docs/design/templates/list-item/default-dark.svg +1 -1
  117. package/docs/design/templates/list-item/default.svg +1 -1
  118. package/docs/design/templates/list-item/multiline-dark.svg +1 -1
  119. package/docs/design/templates/list-item/multiline.svg +1 -1
  120. package/docs/design/templates/list-item/selected-dark.svg +1 -1
  121. package/docs/design/templates/list-item/selected.svg +1 -1
  122. package/docs/design/templates/list-item/trailing-dark.svg +1 -1
  123. package/docs/design/templates/list-item/trailing.svg +1 -1
  124. package/docs/design/templates/list-item-dark.svg +1 -11
  125. package/docs/design/templates/list-item.svg +1 -11
  126. package/docs/design/templates/list.svg +1 -0
  127. package/docs/design/templates/panel-header/icon-actions-dark.svg +1 -1
  128. package/docs/design/templates/panel-header/icon-actions.svg +1 -1
  129. package/docs/design/templates/panel-header/icon-summary-actions-dark.svg +1 -1
  130. package/docs/design/templates/panel-header/icon-summary-actions.svg +1 -1
  131. package/docs/design/templates/panel-header-dark.svg +1 -13
  132. package/docs/design/templates/panel-header.svg +1 -13
  133. package/docs/design/templates/segmented-control-dark.svg +1 -7
  134. package/docs/design/templates/segmented-control.svg +1 -7
  135. package/docs/design/templates/skeleton-dark.svg +1 -9
  136. package/docs/design/templates/skeleton.svg +1 -9
  137. package/docs/design/templates/state-banner/danger-dark.svg +1 -1
  138. package/docs/design/templates/state-banner/danger.svg +1 -1
  139. package/docs/design/templates/state-banner/info-badge-dark.svg +1 -0
  140. package/docs/design/templates/state-banner/info-badge.svg +1 -0
  141. package/docs/design/templates/state-banner/info-dark.svg +1 -1
  142. package/docs/design/templates/state-banner/info.svg +1 -1
  143. package/docs/design/templates/state-banner/success-dark.svg +1 -1
  144. package/docs/design/templates/state-banner/success.svg +1 -1
  145. package/docs/design/templates/state-banner/warning-dark.svg +1 -1
  146. package/docs/design/templates/state-banner/warning.svg +1 -1
  147. package/docs/design/templates/state-banner-dark.svg +1 -11
  148. package/docs/design/templates/state-banner.svg +1 -11
  149. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
  150. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
  151. package/docs/design/templates/tab-bar-dark.svg +1 -5
  152. package/docs/design/templates/tab-bar.svg +1 -5
  153. package/docs/design/templates/token-search-field/empty-dark.svg +1 -1
  154. package/docs/design/templates/token-search-field/empty.svg +1 -1
  155. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -1
  156. package/docs/design/templates/token-search-field/tokens.svg +1 -1
  157. package/docs/design/templates/token-search-field-dark.svg +1 -7
  158. package/docs/design/templates/token-search-field.svg +1 -7
  159. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
  160. package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
  161. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -1
  162. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -1
  163. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -1
  164. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -1
  165. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -1
  166. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -1
  167. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
  168. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
  169. package/docs/design/templates/toolbar-control-group-dark.svg +1 -11
  170. package/docs/design/templates/toolbar-control-group.svg +1 -11
  171. package/docs/design/templates/toolbar-dark.svg +1 -5
  172. package/docs/design/templates/toolbar-text-dark.svg +1 -9
  173. package/docs/design/templates/toolbar-text.svg +1 -9
  174. package/docs/design/templates/toolbar.svg +1 -5
  175. package/docs/design/templates/value-table/details-dark.svg +1 -1
  176. package/docs/design/templates/value-table/details.svg +1 -1
  177. package/docs/design/templates/value-table-dark.svg +1 -5
  178. package/docs/design/templates/value-table.svg +1 -5
  179. package/docs/design/templates.md +25 -14
  180. package/docs/sunken-panel.md +11 -1
  181. package/docs/type-contracts.md +6 -3
  182. package/docs/ui-analyzer.md +5 -0
  183. package/docs/ui-doctor.md +8 -1
  184. package/docs/ux-demo.md +2 -2
  185. package/docs/workbench.md +13 -0
  186. package/doctor/eslint-diagnostics.d.mts +8 -0
  187. package/doctor/eslint-diagnostics.mjs +7 -0
  188. package/doctor/index.mjs +11 -10
  189. package/llms.txt +15 -3
  190. package/package.json +9 -2
  191. package/traversal-exclusions.mjs +27 -0
  192. package/ux-demo/recipes/collapsible-sidebar.tsx +1 -1
  193. package/ux-demo/recipes/navigation-sidebar.tsx +1 -1
  194. package/dist/chunk-7L6EHUMV.js.map +0 -1
  195. package/dist/chunk-AASLYRGE.js.map +0 -1
  196. package/dist/chunk-GP5DP5DL.js.map +0 -1
  197. package/dist/chunk-PZQVSDLH.js.map +0 -1
  198. package/dist/chunk-VLYV65LK.js.map +0 -1
  199. package/dist/chunk-W4CXQYSG.js.map +0 -1
package/README.md CHANGED
@@ -122,6 +122,7 @@ as a `New` marker.
122
122
  | `ToolbarControlGroup` | `@kerfjs/ui/toolbar-control-group` | `@kerfjs/ui/toolbar-control-group.css` |
123
123
  | `FloatingToolbar` | `@kerfjs/ui/floating-toolbar` | `@kerfjs/ui/floating-toolbar.css` |
124
124
  | `ToolbarText` | `@kerfjs/ui/toolbar-text` | `@kerfjs/ui/toolbar-text.css` |
125
+ | `List` | `@kerfjs/ui/list` | `@kerfjs/ui/list.css` |
125
126
  | `ListActionRow` | `@kerfjs/ui/list-action-row` | `@kerfjs/ui/list-action-row.css` |
126
127
  | `ListItem` | `@kerfjs/ui/list-item` | `@kerfjs/ui/list-item.css` |
127
128
  | `ListHeader` | `@kerfjs/ui/list-header` | `@kerfjs/ui/list-header.css` |
@@ -146,6 +147,13 @@ as a `New` marker.
146
147
  | `PanelHeader` | `@kerfjs/ui/panel-header` | `@kerfjs/ui/panel-header.css` |
147
148
  | `ValueTable`, `ValueTableRow` | `@kerfjs/ui/value-table` | `@kerfjs/ui/value-table.css` |
148
149
 
150
+ Opt-in application layouts keep JavaScript and CSS explicit. For the
151
+ desktop-class multi-panel shell, import `Workbench` from
152
+ `@kerfjs/ui/workbench` and load `@kerfjs/ui/workbench.css`; its supported
153
+ classes and size tokens are cataloged under the `workbench` entry. See
154
+ [`docs/workbench.md`](./docs/workbench.md) for panel ownership and responsive
155
+ replacement guidance.
156
+
149
157
  `PanelHeader` is a plain `Toolbar` used as a panel, dialog, or page heading: an
150
158
  optional icon control group (given a brand fill with a matching border), the
151
159
  title as extra-large `ToolbarText`, the app's trailing action controls, and an
@@ -331,9 +339,10 @@ that convenience import, also import `@kerfjs/ui/styles.css`, which deliberately
331
339
  contains the complete layer. Non-browser/SSR tools resolve the pure `import`
332
340
  condition automatically; `@kerfjs/ui/unstyled` is the explicit CSS-free root
333
341
  entry for a browser build with a custom styling pipeline. The exported
334
- `foundation.css` and component CSS paths remain available for fully manual
335
- delivery. Load application overrides after package styles, or scope `--kui-*`
336
- variables directly on a component instance.
342
+ `@kerfjs/ui/foundation.css` and component CSS paths remain available for fully
343
+ manual delivery. Its complete supported `--kui-*` token surface is cataloged
344
+ under the `foundation` entry. Load application overrides after package styles,
345
+ or scope variables directly on a component instance.
337
346
 
338
347
  ## Pane and content geometry
339
348
 
@@ -87,6 +87,7 @@
87
87
  "id": "KUI-T011",
88
88
  "publicImport": "@kerfjs/ui",
89
89
  "symbols": [
90
+ "DividerSides",
90
91
  "StateBannerUrgency",
91
92
  "TabActivation",
92
93
  "ToolbarControlGroupAppearance",
@@ -95,7 +96,7 @@
95
96
  "ToolbarControlGroupTone"
96
97
  ],
97
98
  "kind": "finite-vocabulary",
98
- "summary": "Finite public variant vocabularies are named exported unions rather than anonymous string sets."
99
+ "summary": "Finite public variant vocabularies, including canonical divider-edge combinations, are named exported unions rather than anonymous string sets."
99
100
  }
100
101
  ]
101
102
  }
@@ -93,21 +93,14 @@
93
93
  ]
94
94
  },
95
95
  "@kerfjs/ui:list": {
96
- "_source": "docs/component-selection.md#correct-composition-and-duplicated-markup-trap",
97
- "contexts": ["navigation-list"],
96
+ "_source": "docs/component-selection.md#problem-to-component-matrix",
97
+ "contexts": ["application-ui", "navigation-list", "vertical-layout"],
98
98
  "children": {
99
- "mode": "listed",
100
- "concepts": ["list-header", "list-item", "list-action-row"],
99
+ "mode": "any",
100
+ "concepts": [],
101
101
  "requiredConcepts": []
102
102
  },
103
- "zones": [
104
- {
105
- "id": "rows",
106
- "accepts": ["list-header", "list-item", "list-action-row"],
107
- "cardinality": { "min": 1, "max": "unbounded" },
108
- "exclusiveWith": []
109
- }
110
- ]
103
+ "zones": []
111
104
  },
112
105
  "@kerfjs/ui:list-header": {
113
106
  "_source": "docs/accessibility.md#shared-rules",
@@ -141,6 +141,157 @@
141
141
  "composition": "generated-permissive-default"
142
142
  }
143
143
  },
144
+ {
145
+ "key": "@kerfjs/ui:foundation",
146
+ "package": "@kerfjs/ui",
147
+ "id": "foundation",
148
+ "name": "Foundation tokens",
149
+ "kind": "composition",
150
+ "source": "kerf",
151
+ "parents": { "mode": "any", "entries": [] },
152
+ "contexts": ["application-ui"],
153
+ "zones": [],
154
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
155
+ "state": [
156
+ {
157
+ "id": "application theme overrides",
158
+ "owner": "application",
159
+ "required": false
160
+ },
161
+ {
162
+ "id": "responsive policy at the cataloged device-class breakpoints",
163
+ "owner": "application",
164
+ "required": false
165
+ }
166
+ ],
167
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
168
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
169
+ "layout": {
170
+ "roles": ["foundation"],
171
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
172
+ },
173
+ "accessibility": {
174
+ "obligations": [
175
+ "Preserve semantic contrast relationships and the visible focus ring when overriding foundation colors."
176
+ ]
177
+ },
178
+ "boundaries": {
179
+ "rootClass": null,
180
+ "publicClasses": [],
181
+ "publicTokens": [
182
+ "--kui-font-sans",
183
+ "--kui-font-mono",
184
+ "--kui-font-2xs",
185
+ "--kui-font-xs",
186
+ "--kui-font-s",
187
+ "--kui-font-m",
188
+ "--kui-font-l",
189
+ "--kui-font-2xl",
190
+ "--kui-font-weight-semibold",
191
+ "--kui-space-none",
192
+ "--kui-space-2xs",
193
+ "--kui-space-xs",
194
+ "--kui-space-s",
195
+ "--kui-space-m",
196
+ "--kui-space-l",
197
+ "--kui-space-xl",
198
+ "--kui-bp-mobile",
199
+ "--kui-bp-tablet",
200
+ "--kui-bp-desktop",
201
+ "--kui-bp-xl-desktop",
202
+ "--kui-layout-inline-margin",
203
+ "--kui-layout-item-border-width",
204
+ "--kui-layout-item-padding",
205
+ "--kui-layout-item-gap",
206
+ "--kui-layout-content-gap",
207
+ "--kui-layout-control-gap",
208
+ "--kui-layout-metadata-gap",
209
+ "--kui-layout-rounded-radius",
210
+ "--kui-layout-pill-radius",
211
+ "--kui-toolbar-group-inner-size",
212
+ "--kui-toolbar-group-size",
213
+ "--kui-toolbar-gap",
214
+ "--kui-radius-s",
215
+ "--kui-radius-m",
216
+ "--kui-radius-l",
217
+ "--kui-radius-circle",
218
+ "--kui-radius-pill",
219
+ "--kui-disclosure-icon-scale",
220
+ "--kui-color-surface",
221
+ "--kui-color-surface-raised",
222
+ "--kui-color-surface-lowered",
223
+ "--kui-color-text",
224
+ "--kui-color-text-quiet",
225
+ "--kui-color-text-link",
226
+ "--kui-color-neutral-fill-quiet",
227
+ "--kui-color-neutral-fill-normal",
228
+ "--kui-color-neutral-fill-loud",
229
+ "--kui-color-neutral-border-quiet",
230
+ "--kui-color-neutral-border-normal",
231
+ "--kui-color-neutral-border-loud",
232
+ "--kui-color-neutral-on-quiet",
233
+ "--kui-color-neutral-on-normal",
234
+ "--kui-color-neutral-on-loud",
235
+ "--kui-color-brand-fill-loud",
236
+ "--kui-color-brand-fill-quiet",
237
+ "--kui-color-brand-fill-normal",
238
+ "--kui-color-brand-border-quiet",
239
+ "--kui-color-brand-border-normal",
240
+ "--kui-color-brand-border-loud",
241
+ "--kui-color-brand-on-quiet",
242
+ "--kui-color-brand-on-normal",
243
+ "--kui-color-brand-on-loud",
244
+ "--kui-color-brand-on-fill",
245
+ "--kui-color-success-fill-loud",
246
+ "--kui-color-success-fill-quiet",
247
+ "--kui-color-success-fill-normal",
248
+ "--kui-color-success-border-quiet",
249
+ "--kui-color-success-border-normal",
250
+ "--kui-color-success-border-loud",
251
+ "--kui-color-success-on-quiet",
252
+ "--kui-color-success-on-normal",
253
+ "--kui-color-success-on-loud",
254
+ "--kui-color-success-on-fill",
255
+ "--kui-color-warning-fill-loud",
256
+ "--kui-color-warning-fill-quiet",
257
+ "--kui-color-warning-fill-normal",
258
+ "--kui-color-warning-border-quiet",
259
+ "--kui-color-warning-border-normal",
260
+ "--kui-color-warning-border-loud",
261
+ "--kui-color-warning-on-quiet",
262
+ "--kui-color-warning-on-normal",
263
+ "--kui-color-warning-on-loud",
264
+ "--kui-color-warning-on-fill",
265
+ "--kui-color-danger-fill-loud",
266
+ "--kui-color-danger-fill-quiet",
267
+ "--kui-color-danger-fill-normal",
268
+ "--kui-color-danger-border-quiet",
269
+ "--kui-color-danger-border-normal",
270
+ "--kui-color-danger-border-loud",
271
+ "--kui-color-danger-on-quiet",
272
+ "--kui-color-danger-on-normal",
273
+ "--kui-color-danger-on-loud",
274
+ "--kui-color-border",
275
+ "--kui-color-border-quiet",
276
+ "--kui-color-accent",
277
+ "--kui-color-accent-text",
278
+ "--kui-color-success",
279
+ "--kui-color-success-text",
280
+ "--kui-color-warning",
281
+ "--kui-color-warning-text",
282
+ "--kui-color-danger",
283
+ "--kui-color-danger-text",
284
+ "--kui-focus-ring",
285
+ "--kui-shadow-s",
286
+ "--kui-shadow-l"
287
+ ]
288
+ },
289
+ "diagnostics": [],
290
+ "provenance": {
291
+ "selection": "ai/component-catalog.json",
292
+ "composition": "generated-permissive-default"
293
+ }
294
+ },
144
295
  {
145
296
  "key": "@kerfjs/ui:layout",
146
297
  "package": "@kerfjs/ui",
@@ -282,6 +433,78 @@
282
433
  "composition": "generated-permissive-default"
283
434
  }
284
435
  },
436
+ {
437
+ "key": "@kerfjs/ui:workbench",
438
+ "package": "@kerfjs/ui",
439
+ "id": "workbench",
440
+ "name": "Workbench",
441
+ "kind": "component",
442
+ "source": "kerf",
443
+ "parents": { "mode": "any", "entries": [] },
444
+ "contexts": ["application-ui"],
445
+ "zones": [],
446
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
447
+ "state": [
448
+ {
449
+ "id": "panel presence and content",
450
+ "owner": "application",
451
+ "required": false
452
+ },
453
+ { "id": "collapsed state", "owner": "application", "required": false },
454
+ { "id": "panel sizes", "owner": "application", "required": false },
455
+ {
456
+ "id": "responsive replacement below desktop",
457
+ "owner": "application",
458
+ "required": false
459
+ },
460
+ {
461
+ "id": "collapse controls and focus policy",
462
+ "owner": "application",
463
+ "required": false
464
+ }
465
+ ],
466
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
467
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
468
+ "layout": {
469
+ "roles": ["structure"],
470
+ "geometry": {
471
+ "margin": "none",
472
+ "border": "self",
473
+ "padding": "child",
474
+ "notes": [
475
+ "Workbench owns the rail and drawer separators; each region's content owns its internal padding and scroll behavior."
476
+ ]
477
+ }
478
+ },
479
+ "accessibility": {
480
+ "obligations": [
481
+ "Give the Workbench and each meaningful rail or drawer an accessible label.",
482
+ "Keep collapse controls outside the disappearing region and move focus when a controlled rerender replaces a collapse control with its restore control."
483
+ ]
484
+ },
485
+ "boundaries": {
486
+ "rootClass": "kui-workbench",
487
+ "publicClasses": [
488
+ "kui-workbench",
489
+ "kui-workbench__rail",
490
+ "kui-workbench__rail--left",
491
+ "kui-workbench__rail--right",
492
+ "kui-workbench__center",
493
+ "kui-workbench__main",
494
+ "kui-workbench__drawer",
495
+ "kui-workbench__panel-content"
496
+ ],
497
+ "publicTokens": [
498
+ "--kui-workbench-rail-width",
499
+ "--kui-workbench-drawer-height"
500
+ ]
501
+ },
502
+ "diagnostics": [],
503
+ "provenance": {
504
+ "selection": "ai/component-catalog.json",
505
+ "composition": "generated-permissive-default"
506
+ }
507
+ },
285
508
  {
286
509
  "key": "@kerfjs/ui:sunken-panel",
287
510
  "package": "@kerfjs/ui",
@@ -299,6 +522,7 @@
299
522
  "owner": "application",
300
523
  "required": false
301
524
  },
525
+ { "id": "corner shape", "owner": "application", "required": false },
302
526
  { "id": "scroll ownership", "owner": "application", "required": false },
303
527
  {
304
528
  "id": "child ordering and content",
@@ -397,7 +621,7 @@
397
621
  "border": "conditional",
398
622
  "padding": "self",
399
623
  "notes": [
400
- "Padding belongs to the toolbar; the optional divider variant also owns its border."
624
+ "Padding belongs to the toolbar; dividerSides selects any canonical combination of its physical top, right, bottom, and left edges."
401
625
  ]
402
626
  }
403
627
  },
@@ -414,7 +638,11 @@
414
638
  "kui-toolbar__leading",
415
639
  "kui-toolbar__trailing"
416
640
  ],
417
- "publicTokens": ["--kui-color-border", "--kui-font-sans"]
641
+ "publicTokens": [
642
+ "--kui-color-border",
643
+ "--kui-font-sans",
644
+ "--kui-toolbar-divider-color"
645
+ ]
418
646
  },
419
647
  "diagnostics": [
420
648
  {
@@ -765,33 +993,26 @@
765
993
  "key": "@kerfjs/ui:list",
766
994
  "package": "@kerfjs/ui",
767
995
  "id": "list",
768
- "name": "List composition",
769
- "kind": "composition",
996
+ "name": "List",
997
+ "kind": "component",
770
998
  "source": "kerf",
771
999
  "parents": { "mode": "any", "entries": [] },
772
- "contexts": ["navigation-list"],
773
- "zones": [
774
- {
775
- "id": "rows",
776
- "accepts": ["list-header", "list-item", "list-action-row"],
777
- "cardinality": { "min": 1, "max": "unbounded" },
778
- "exclusiveWith": []
779
- }
780
- ],
781
- "children": {
782
- "mode": "listed",
783
- "concepts": ["list-header", "list-item", "list-action-row"],
784
- "requiredConcepts": []
785
- },
1000
+ "contexts": ["application-ui", "navigation-list", "vertical-layout"],
1001
+ "zones": [],
1002
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
786
1003
  "state": [
787
1004
  {
788
- "id": "information architecture",
1005
+ "id": "child semantics and content",
1006
+ "owner": "application",
1007
+ "required": false
1008
+ },
1009
+ {
1010
+ "id": "the bounded height needed for scrolling",
789
1011
  "owner": "application",
790
1012
  "required": false
791
1013
  },
792
- { "id": "routing", "owner": "application", "required": false },
793
1014
  {
794
- "id": "responsive shell behavior",
1015
+ "id": "gap, flex, and divider choices",
795
1016
  "owner": "application",
796
1017
  "required": false
797
1018
  }
@@ -800,28 +1021,35 @@
800
1021
  "responsive": { "owner": "not-applicable", "behaviors": [] },
801
1022
  "layout": {
802
1023
  "roles": ["navigation"],
803
- "geometry": { "margin": "child", "border": "child", "padding": "child" }
1024
+ "geometry": {
1025
+ "margin": "none",
1026
+ "border": "conditional",
1027
+ "padding": "none",
1028
+ "notes": [
1029
+ "List adds no margin or padding; dividerSides draws only the selected physical edges without changing box geometry."
1030
+ ]
1031
+ }
804
1032
  },
805
1033
  "accessibility": {
806
1034
  "obligations": [
807
- "Use native links for link navigation, retain ListItem button semantics for actions, and keep standalone header and toolbar actions at least 44px square.",
808
- "A ListHeader disclosure controls real content, keeps a stable accessible name and aria-expanded state, and uses the production DisclosureArrow visual."
1035
+ "List adds layout only and no list role; children retain responsibility for their native or ARIA semantics.",
1036
+ "Give a scrollable List a bounded block size and keep keyboard focus visible as its contents scroll."
809
1037
  ]
810
1038
  },
811
1039
  "boundaries": {
812
- "rootClass": "kui-content",
813
- "publicClasses": ["kui-content", "kui-content-item"],
1040
+ "rootClass": "kui-list",
1041
+ "publicClasses": ["kui-list"],
814
1042
  "publicTokens": [
815
- "--kui-layout-content-gap",
816
- "--kui-layout-inline-margin",
817
- "--kui-layout-item-padding",
818
- "--kui-layout-rounded-radius"
1043
+ "--kui-color-border",
1044
+ "--kui-layout-item-gap",
1045
+ "--kui-list-divider-color",
1046
+ "--kui-list-gap"
819
1047
  ]
820
1048
  },
821
1049
  "diagnostics": [],
822
1050
  "provenance": {
823
1051
  "selection": "ai/component-catalog.json",
824
- "composition": "docs/component-selection.md#correct-composition-and-duplicated-markup-trap"
1052
+ "composition": "docs/component-selection.md#problem-to-component-matrix"
825
1053
  }
826
1054
  },
827
1055
  {
@@ -1576,6 +1804,7 @@
1576
1804
  "zones": [],
1577
1805
  "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1578
1806
  "state": [
1807
+ { "id": "badge content", "owner": "application", "required": false },
1579
1808
  { "id": "state mapping", "owner": "application", "required": false },
1580
1809
  { "id": "message lifetime", "owner": "application", "required": false },
1581
1810
  { "id": "retry behavior", "owner": "application", "required": false },
@@ -1589,7 +1818,8 @@
1589
1818
  },
1590
1819
  "accessibility": {
1591
1820
  "obligations": [
1592
- "Use alert urgency only for an attention-requiring failure."
1821
+ "Use alert urgency only for an attention-requiring failure.",
1822
+ "Keep optional badge content terse and do not rely on its tone alone for meaning."
1593
1823
  ]
1594
1824
  },
1595
1825
  "boundaries": {
@@ -1597,7 +1827,9 @@
1597
1827
  "publicClasses": [
1598
1828
  "kui-state-banner",
1599
1829
  "kui-state-banner__action",
1830
+ "kui-state-banner__badge",
1600
1831
  "kui-state-banner__copy",
1832
+ "kui-state-banner__detail",
1601
1833
  "kui-state-banner__icon"
1602
1834
  ],
1603
1835
  "publicTokens": [
@@ -1624,6 +1856,8 @@
1624
1856
  "--kui-state-banner-action-background",
1625
1857
  "--kui-state-banner-action-hover-background",
1626
1858
  "--kui-state-banner-background",
1859
+ "--kui-state-banner-badge-background",
1860
+ "--kui-state-banner-badge-foreground",
1627
1861
  "--kui-state-banner-border",
1628
1862
  "--kui-state-banner-danger-background",
1629
1863
  "--kui-state-banner-danger-border",