@kerfjs/ui 5.0.0-beta.55 → 5.0.0-beta.57

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 (418) hide show
  1. package/README.md +74 -41
  2. package/ai/application-ui-diagnostic-ids-v1.json +9 -1
  3. package/ai/application-ui-profile-sync.cjs +1 -1
  4. package/ai/application-ui-profile.defaults.json +63 -8
  5. package/ai/application-ui-profile.mjs +1 -1
  6. package/ai/compile-time-contracts-v1.json +2 -2
  7. package/ai/component-catalog.json +407 -80
  8. package/ai/component-catalog.schema.json +2 -0
  9. package/ai/component-class-owners.cjs +83 -0
  10. package/ai/component-composition-extension.d.ts +7 -0
  11. package/ai/component-composition-extension.schema.json +7 -0
  12. package/ai/{component-catalog-v2-overrides.json → component-composition-rules.json} +2 -1
  13. package/ai/{component-catalog-v2.d.ts → component-composition.d.ts} +9 -5
  14. package/ai/{component-catalog-v2.json → component-composition.json} +302 -61
  15. package/ai/{component-catalog-v2.schema.json → component-composition.schema.json} +21 -5
  16. package/ai/components/README.md +170 -0
  17. package/ai/components/application-tabs.md +65 -0
  18. package/ai/components/badge.md +72 -0
  19. package/ai/components/collapsible-panel.md +102 -0
  20. package/ai/components/content-item.md +90 -0
  21. package/ai/components/disclosure-arrow.md +77 -0
  22. package/ai/components/document-baseline.md +75 -0
  23. package/ai/components/empty-state.md +80 -0
  24. package/ai/components/feedback.md +71 -0
  25. package/ai/components/floating-toolbar.md +80 -0
  26. package/ai/components/foundation.md +65 -0
  27. package/ai/components/grid.md +93 -0
  28. package/ai/components/headers.md +63 -0
  29. package/ai/components/layout.md +75 -0
  30. package/ai/components/list-action-row.md +91 -0
  31. package/ai/components/list-header.md +89 -0
  32. package/ai/components/list-inset-control.md +74 -0
  33. package/ai/components/list-inset-text.md +72 -0
  34. package/ai/components/list-item.md +88 -0
  35. package/ai/components/list.md +103 -0
  36. package/ai/components/loading-spinner.md +72 -0
  37. package/ai/components/lucide-icon.md +66 -0
  38. package/ai/components/nav-stack.md +103 -0
  39. package/ai/components/pane.md +100 -0
  40. package/ai/components/popup-menu.md +82 -0
  41. package/ai/components/recipe-app-shell.md +57 -0
  42. package/ai/components/recipe-collapsible-sidebar.md +57 -0
  43. package/ai/components/recipe-compact-toolbar.md +57 -0
  44. package/ai/components/recipe-composer-form.md +57 -0
  45. package/ai/components/recipe-list-detail-dialog.md +57 -0
  46. package/ai/components/recipe-list-workspace-states.md +57 -0
  47. package/ai/components/recipe-loading-inspector.md +57 -0
  48. package/ai/components/recipe-navigation-sidebar.md +57 -0
  49. package/ai/components/recipe-navigation-stack.md +57 -0
  50. package/ai/components/recipe-workspace-header.md +57 -0
  51. package/ai/components/resize.md +101 -0
  52. package/ai/components/row.md +96 -0
  53. package/ai/components/segmented-control.md +82 -0
  54. package/ai/components/select.md +107 -0
  55. package/ai/components/skeleton.md +84 -0
  56. package/ai/components/spacer.md +86 -0
  57. package/ai/components/split-view.md +102 -0
  58. package/ai/components/state-banner.md +92 -0
  59. package/ai/components/sunken-panel.md +79 -0
  60. package/ai/components/surface-scaffold.md +78 -0
  61. package/ai/components/tab-bar.md +112 -0
  62. package/ai/components/tab-scaffold.md +94 -0
  63. package/ai/components/tabs.md +90 -0
  64. package/ai/components/text.md +82 -0
  65. package/ai/components/token-search-field.md +101 -0
  66. package/ai/components/toolbar-control-group.md +100 -0
  67. package/ai/components/toolbar-text.md +76 -0
  68. package/ai/components/toolbar.md +95 -0
  69. package/ai/components/value-table.md +72 -0
  70. package/ai/components/wa-accordion-item.md +55 -0
  71. package/ai/components/wa-accordion.md +65 -0
  72. package/ai/components/wa-animated-image.md +55 -0
  73. package/ai/components/wa-animation.md +55 -0
  74. package/ai/components/wa-avatar.md +55 -0
  75. package/ai/components/wa-badge.md +55 -0
  76. package/ai/components/wa-breadcrumb-item.md +53 -0
  77. package/ai/components/wa-breadcrumb.md +55 -0
  78. package/ai/components/wa-button-group.md +59 -0
  79. package/ai/components/wa-button.md +55 -0
  80. package/ai/components/wa-callout.md +58 -0
  81. package/ai/components/wa-card.md +59 -0
  82. package/ai/components/wa-carousel-item.md +53 -0
  83. package/ai/components/wa-carousel.md +55 -0
  84. package/ai/components/wa-checkbox-group.md +55 -0
  85. package/ai/components/wa-checkbox.md +55 -0
  86. package/ai/components/wa-color-picker.md +55 -0
  87. package/ai/components/wa-comparison.md +55 -0
  88. package/ai/components/wa-copy-button.md +55 -0
  89. package/ai/components/wa-details.md +61 -0
  90. package/ai/components/wa-dialog.md +59 -0
  91. package/ai/components/wa-divider.md +53 -0
  92. package/ai/components/wa-drawer.md +55 -0
  93. package/ai/components/wa-dropdown-item.md +60 -0
  94. package/ai/components/wa-dropdown.md +60 -0
  95. package/ai/components/wa-format-bytes.md +53 -0
  96. package/ai/components/wa-format-date.md +53 -0
  97. package/ai/components/wa-format-number.md +53 -0
  98. package/ai/components/wa-icon.md +58 -0
  99. package/ai/components/wa-include.md +53 -0
  100. package/ai/components/wa-input.md +59 -0
  101. package/ai/components/wa-intersection-observer.md +53 -0
  102. package/ai/components/wa-known-date.md +53 -0
  103. package/ai/components/wa-markdown.md +53 -0
  104. package/ai/components/wa-mutation-observer.md +53 -0
  105. package/ai/components/wa-number-input.md +55 -0
  106. package/ai/components/wa-option.md +59 -0
  107. package/ai/components/wa-otp-input.md +53 -0
  108. package/ai/components/wa-page.md +53 -0
  109. package/ai/components/wa-pagination.md +55 -0
  110. package/ai/components/wa-popover.md +55 -0
  111. package/ai/components/wa-popup.md +53 -0
  112. package/ai/components/wa-progress-bar.md +53 -0
  113. package/ai/components/wa-progress-ring.md +53 -0
  114. package/ai/components/wa-qr-code.md +53 -0
  115. package/ai/components/wa-radio-group.md +59 -0
  116. package/ai/components/wa-radio.md +55 -0
  117. package/ai/components/wa-random-content.md +53 -0
  118. package/ai/components/wa-rating.md +55 -0
  119. package/ai/components/wa-relative-time.md +53 -0
  120. package/ai/components/wa-resize-observer.md +53 -0
  121. package/ai/components/wa-scroller.md +53 -0
  122. package/ai/components/wa-select.md +63 -0
  123. package/ai/components/wa-skeleton.md +53 -0
  124. package/ai/components/wa-slider.md +55 -0
  125. package/ai/components/wa-spinner.md +58 -0
  126. package/ai/components/wa-split-panel.md +58 -0
  127. package/ai/components/wa-switch.md +53 -0
  128. package/ai/components/wa-tab-group.md +69 -0
  129. package/ai/components/wa-tab-panel.md +60 -0
  130. package/ai/components/wa-tab.md +59 -0
  131. package/ai/components/wa-tag.md +59 -0
  132. package/ai/components/wa-textarea.md +53 -0
  133. package/ai/components/wa-time-input.md +55 -0
  134. package/ai/components/wa-toast-item.md +60 -0
  135. package/ai/components/wa-toast.md +60 -0
  136. package/ai/components/wa-tooltip.md +55 -0
  137. package/ai/components/wa-tree-item.md +55 -0
  138. package/ai/components/wa-tree.md +55 -0
  139. package/ai/components/wa-zoomable-frame.md +55 -0
  140. package/ai/components/workbench.md +114 -0
  141. package/ai/public-api-signatures-v1.md +572 -101
  142. package/ai/skill.md +107 -52
  143. package/ai/webawesome-jsx-signatures-v1.md +8 -2
  144. package/analyzer/component-ownership.d.mts +56 -0
  145. package/analyzer/component-ownership.mjs +184 -0
  146. package/analyzer/index.d.mts +3 -0
  147. package/analyzer/index.mjs +274 -20
  148. package/analyzer/selectors.d.mts +21 -0
  149. package/analyzer/selectors.mjs +212 -0
  150. package/dist/app-tab.js +1 -1
  151. package/dist/badge.d.ts +35 -7
  152. package/dist/badge.js +1 -1
  153. package/dist/browser/catalog.js +25 -0
  154. package/dist/browser/collapsible-panel.js +7 -0
  155. package/dist/browser/content-item.js +3 -0
  156. package/dist/browser/nav-stack.js +8 -0
  157. package/dist/browser/select.js +1 -0
  158. package/dist/browser/split-view.js +10 -0
  159. package/dist/browser/tab-scaffold.js +4 -0
  160. package/dist/browser/workbench.js +10 -0
  161. package/dist/catalog-resources.d.ts +12 -1
  162. package/dist/catalog.d.ts +14 -3
  163. package/dist/catalog.js +53 -43
  164. package/dist/catalog.js.map +1 -1
  165. package/dist/{chunk-WZ2GLEY4.js → chunk-2G2ZJQYK.js} +2 -14
  166. package/dist/chunk-2G2ZJQYK.js.map +1 -0
  167. package/dist/{chunk-R754MHXX.js → chunk-553ASUK6.js} +8 -8
  168. package/dist/chunk-553ASUK6.js.map +1 -0
  169. package/dist/{chunk-D7GWXIAS.js → chunk-5I7QGQVT.js} +1 -1
  170. package/dist/chunk-5I7QGQVT.js.map +1 -0
  171. package/dist/{chunk-RNRUVPJ3.js → chunk-63ZWBGE3.js} +3 -2
  172. package/dist/chunk-63ZWBGE3.js.map +1 -0
  173. package/dist/{chunk-44IG7PFV.js → chunk-6CINWX2E.js} +3 -3
  174. package/dist/{chunk-44IG7PFV.js.map → chunk-6CINWX2E.js.map} +1 -1
  175. package/dist/{chunk-MTM43SJO.js → chunk-6YFHCLHG.js} +2 -2
  176. package/dist/chunk-6YFHCLHG.js.map +1 -0
  177. package/dist/{chunk-C2FAYFDE.js → chunk-AGXQQFKZ.js} +2 -2
  178. package/dist/{chunk-C2FAYFDE.js.map → chunk-AGXQQFKZ.js.map} +1 -1
  179. package/dist/{chunk-ATHXW6RP.js → chunk-AHEG27M7.js} +2 -2
  180. package/dist/{chunk-ATHXW6RP.js.map → chunk-AHEG27M7.js.map} +1 -1
  181. package/dist/chunk-BFPBS5Y4.js +250 -0
  182. package/dist/chunk-BFPBS5Y4.js.map +1 -0
  183. package/dist/{chunk-5OLVUEND.js → chunk-DG6G5EPF.js} +4 -6
  184. package/dist/chunk-DG6G5EPF.js.map +1 -0
  185. package/dist/{chunk-LZXQVUGN.js → chunk-EVYKTVBQ.js} +5 -14
  186. package/dist/chunk-EVYKTVBQ.js.map +1 -0
  187. package/dist/{chunk-7GUQYHKA.js → chunk-EZVNC4J6.js} +7 -1
  188. package/dist/chunk-EZVNC4J6.js.map +1 -0
  189. package/dist/{chunk-RNZAKSME.js → chunk-F4QMLOXJ.js} +5 -4
  190. package/dist/chunk-F4QMLOXJ.js.map +1 -0
  191. package/dist/{chunk-EAX2GSS4.js → chunk-G2RKFVRB.js} +54 -20
  192. package/dist/chunk-G2RKFVRB.js.map +1 -0
  193. package/dist/chunk-JCV4GXWB.js +249 -0
  194. package/dist/chunk-JCV4GXWB.js.map +1 -0
  195. package/dist/chunk-K47P7QZC.js +17 -0
  196. package/dist/chunk-K47P7QZC.js.map +1 -0
  197. package/dist/{chunk-HMQ2ZDGG.js → chunk-KROD7KZK.js} +3 -2
  198. package/dist/chunk-KROD7KZK.js.map +1 -0
  199. package/dist/{chunk-5NDQABWK.js → chunk-M7QV3IHH.js} +3 -1
  200. package/dist/chunk-M7QV3IHH.js.map +1 -0
  201. package/dist/chunk-MA73TA6D.js +42 -0
  202. package/dist/chunk-MA73TA6D.js.map +1 -0
  203. package/dist/{chunk-ZMBU522F.js → chunk-MEY33VWB.js} +2 -2
  204. package/dist/{chunk-ZMBU522F.js.map → chunk-MEY33VWB.js.map} +1 -1
  205. package/dist/chunk-MP2GDBQZ.js +50 -0
  206. package/dist/chunk-MP2GDBQZ.js.map +1 -0
  207. package/dist/{chunk-3NBL3OUQ.js → chunk-NAPE7WUS.js} +2 -2
  208. package/dist/chunk-NAPE7WUS.js.map +1 -0
  209. package/dist/{chunk-BSKEH3UC.js → chunk-NBYTIVHS.js} +2 -2
  210. package/dist/{chunk-BSKEH3UC.js.map → chunk-NBYTIVHS.js.map} +1 -1
  211. package/dist/{chunk-T22EM4ET.js → chunk-OUK6QRDR.js} +71 -31
  212. package/dist/chunk-OUK6QRDR.js.map +1 -0
  213. package/dist/chunk-PWXNJS2B.js +115 -0
  214. package/dist/chunk-PWXNJS2B.js.map +1 -0
  215. package/dist/{chunk-GUIHMIT2.js → chunk-QOWG4ZCL.js} +5 -4
  216. package/dist/chunk-QOWG4ZCL.js.map +1 -0
  217. package/dist/{chunk-5I22LMCV.js → chunk-VZOFZPSO.js} +2 -2
  218. package/dist/chunk-VZOFZPSO.js.map +1 -0
  219. package/dist/{chunk-4BIMLITI.js → chunk-WLG6SSNT.js} +5 -3
  220. package/dist/chunk-WLG6SSNT.js.map +1 -0
  221. package/dist/{chunk-NE5JAOQS.js → chunk-WOUF7YXM.js} +3 -3
  222. package/dist/{chunk-NE5JAOQS.js.map → chunk-WOUF7YXM.js.map} +1 -1
  223. package/dist/{chunk-N7FHFNT6.js → chunk-XCO6YCYM.js} +34 -5
  224. package/dist/chunk-XCO6YCYM.js.map +1 -0
  225. package/dist/{chunk-TZ5IHWB2.js → chunk-XDKAYSVD.js} +5 -3
  226. package/dist/chunk-XDKAYSVD.js.map +1 -0
  227. package/dist/collapsible-panel.d.ts +14 -3
  228. package/dist/collapsible-panel.js +13 -16
  229. package/dist/collapsible-panel.js.map +1 -1
  230. package/dist/content-item.d.ts +46 -0
  231. package/dist/content-item.js +4 -0
  232. package/dist/content-item.js.map +1 -0
  233. package/dist/css-values.d.ts +5 -11
  234. package/dist/css-values.js +1 -1
  235. package/dist/disclosure-arrow.d.ts +4 -1
  236. package/dist/disclosure-arrow.js +1 -1
  237. package/dist/floating-toolbar.d.ts +17 -6
  238. package/dist/floating-toolbar.js +1 -1
  239. package/dist/grid.js +1 -1
  240. package/dist/help-tags-register.d.ts +13 -0
  241. package/dist/help-tags-register.js +9 -0
  242. package/dist/help-tags-register.js.map +1 -0
  243. package/dist/index.d.ts +7 -5
  244. package/dist/index.js +29 -26
  245. package/dist/list-action-row.js +2 -1
  246. package/dist/list-header.d.ts +14 -1
  247. package/dist/list-header.js +1 -1
  248. package/dist/list-inset-control.d.ts +1 -1
  249. package/dist/list-inset-control.js +1 -1
  250. package/dist/list-inset-text.d.ts +3 -10
  251. package/dist/list-inset-text.js +1 -1
  252. package/dist/list-item.js +2 -1
  253. package/dist/list.d.ts +10 -3
  254. package/dist/list.js +1 -1
  255. package/dist/nav-stack.d.ts +50 -5
  256. package/dist/nav-stack.js +4 -1
  257. package/dist/pane.d.ts +37 -2
  258. package/dist/pane.js +1 -1
  259. package/dist/{panel-toolbar-BFQxFITu.d.ts → panel-toolbar-BN4x0rth.d.ts} +13 -1
  260. package/dist/popup-menu-register.js +3 -2
  261. package/dist/popup-menu-register.js.map +1 -1
  262. package/dist/popup-menu.js +1 -1
  263. package/dist/row.d.ts +1 -1
  264. package/dist/row.js +1 -1
  265. package/dist/select-register.js +70 -3
  266. package/dist/select-register.js.map +1 -1
  267. package/dist/select.d.ts +46 -8
  268. package/dist/select.js +2 -1
  269. package/dist/{divider-sides-BzB6rphT.d.ts → sides-BPSWde0A.d.ts} +1 -3
  270. package/dist/skeleton.js +1 -1
  271. package/dist/spacer.js +1 -1
  272. package/dist/split-view.d.ts +31 -3
  273. package/dist/split-view.js +34 -5
  274. package/dist/split-view.js.map +1 -1
  275. package/dist/state-banner.js +1 -1
  276. package/dist/styles/app-tab.css +31 -0
  277. package/dist/styles/badge.css +32 -11
  278. package/dist/styles/catalog/components/catalog-example.css +1 -1
  279. package/dist/styles/catalog/components/catalog-stage.css +1 -1
  280. package/dist/styles/collapsible-panel.css +199 -42
  281. package/dist/styles/content-item.css +30 -0
  282. package/dist/styles/floating-toolbar.css +26 -2
  283. package/dist/styles/foundation.css +28 -19
  284. package/dist/styles/layout.css +1 -21
  285. package/dist/styles/list-action-row.css +13 -1
  286. package/dist/styles/list-header.css +0 -12
  287. package/dist/styles/list-inset-text.css +1 -2
  288. package/dist/styles/list-item.css +14 -1
  289. package/dist/styles/list.css +5 -5
  290. package/dist/styles/nav-stack.css +63 -71
  291. package/dist/styles/pane.css +83 -1
  292. package/dist/styles/popup-menu.css +229 -0
  293. package/dist/styles/resizable-region.css +70 -15
  294. package/dist/styles/select.css +60 -19
  295. package/dist/styles/skeleton.css +30 -3
  296. package/dist/styles/split-view.css +31 -32
  297. package/dist/styles/state-banner.css +0 -19
  298. package/dist/styles/surface-scaffold.css +8 -3
  299. package/dist/styles/tab-bar.css +79 -28
  300. package/dist/styles/tab-scaffold.css +60 -14
  301. package/dist/styles/text.css +17 -1
  302. package/dist/styles/token-search-field.css +4 -4
  303. package/dist/styles/toolbar-control-group.css +143 -69
  304. package/dist/styles/toolbar-text.css +21 -0
  305. package/dist/styles/toolbar.css +22 -37
  306. package/dist/styles/value-table.css +19 -2
  307. package/dist/styles/webawesome.css +3 -1
  308. package/dist/styles/workbench.css +145 -42
  309. package/dist/tab-scaffold.d.ts +46 -2
  310. package/dist/tab-scaffold.js +52 -16
  311. package/dist/tab-scaffold.js.map +1 -1
  312. package/dist/token-search-field.d.ts +4 -2
  313. package/dist/token-search-field.js +1 -1
  314. package/dist/toolbar-text.d.ts +7 -1
  315. package/dist/toolbar-text.js +1 -1
  316. package/dist/toolbar.d.ts +20 -5
  317. package/dist/toolbar.js +1 -1
  318. package/dist/{types-D6vzj-VT.d.ts → types-BuHELdXR.d.ts} +39 -6
  319. package/dist/value-table.js +1 -1
  320. package/dist/webawesome.d.ts +7 -1
  321. package/dist/wire-catalog.d.ts +15 -2
  322. package/dist/wire-catalog.js +12 -2
  323. package/dist/wire-catalog.js.map +1 -1
  324. package/dist/wire-scroll-dividers.d.ts +69 -0
  325. package/dist/wire-scroll-dividers.js +3 -0
  326. package/dist/wire-scroll-dividers.js.map +1 -0
  327. package/dist/wire-token-search-fields.js +1 -1
  328. package/dist/workbench.d.ts +60 -22
  329. package/dist/workbench.js +1 -1
  330. package/docs/accessibility.md +116 -7
  331. package/docs/app-layouts.md +18 -8
  332. package/docs/catalog.md +26 -7
  333. package/docs/collapsible-panel.md +32 -9
  334. package/docs/component-contract.md +182 -30
  335. package/docs/component-selection.md +59 -46
  336. package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
  337. package/docs/design/templates/empty-state/with-action.svg +1 -1
  338. package/docs/design/templates/empty-state-dark.svg +1 -1
  339. package/docs/design/templates/empty-state.svg +1 -1
  340. package/docs/design/templates/list/compact-dark.svg +1 -1
  341. package/docs/design/templates/list/compact.svg +1 -1
  342. package/docs/design/templates/list/stack-dark.svg +1 -1
  343. package/docs/design/templates/list/stack.svg +1 -1
  344. package/docs/design/templates/list-action-row/default-dark.svg +1 -1
  345. package/docs/design/templates/list-action-row/default.svg +1 -1
  346. package/docs/design/templates/list-action-row/selected-dark.svg +1 -1
  347. package/docs/design/templates/list-action-row/selected.svg +1 -1
  348. package/docs/design/templates/list-action-row-dark.svg +1 -1
  349. package/docs/design/templates/list-action-row.svg +1 -1
  350. package/docs/design/templates/list-dark.svg +1 -1
  351. package/docs/design/templates/list-item/default-dark.svg +1 -1
  352. package/docs/design/templates/list-item/default.svg +1 -1
  353. package/docs/design/templates/list-item/selected-dark.svg +1 -1
  354. package/docs/design/templates/list-item/selected.svg +1 -1
  355. package/docs/design/templates/list-item/trailing-dark.svg +1 -1
  356. package/docs/design/templates/list-item/trailing.svg +1 -1
  357. package/docs/design/templates/list-item-dark.svg +1 -1
  358. package/docs/design/templates/list-item.svg +1 -1
  359. package/docs/design/templates/list.svg +1 -1
  360. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
  361. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
  362. package/docs/design/templates/tab-bar-dark.svg +1 -1
  363. package/docs/design/templates/tab-bar.svg +1 -1
  364. package/docs/design/templates/value-table/details-dark.svg +1 -1
  365. package/docs/design/templates/value-table/details.svg +1 -1
  366. package/docs/design/templates/value-table-dark.svg +1 -1
  367. package/docs/design/templates/value-table.svg +1 -1
  368. package/docs/design-philosophy.md +31 -4
  369. package/docs/examples/application-ui-profile.json +4 -4
  370. package/docs/examples/command-palette-adapter.tsx +3 -2
  371. package/docs/examples/{component-catalog-extension-v2.json → component-composition-extension.json} +3 -3
  372. package/docs/layout.md +148 -29
  373. package/docs/nav-stack.md +77 -3
  374. package/docs/recipes.md +4 -3
  375. package/docs/split-view.md +54 -5
  376. package/docs/tab-scaffold.md +73 -2
  377. package/docs/type-contracts.md +21 -20
  378. package/docs/ui-analyzer.md +99 -5
  379. package/docs/ui-doctor.md +10 -0
  380. package/docs/ux-demo.md +2 -2
  381. package/docs/webawesome-theme.md +1 -2
  382. package/docs/workbench.md +57 -11
  383. package/doctor/index.mjs +6 -1
  384. package/llms.txt +117 -24
  385. package/package.json +29 -6
  386. package/ux-demo/recipes/collapsible-sidebar.tsx +3 -3
  387. package/ux-demo/recipes/composer-form.tsx +0 -1
  388. package/ux-demo/recipes/list-detail-dialog.tsx +0 -2
  389. package/ux-demo/recipes/list-workspace-states.tsx +0 -1
  390. package/ux-demo/recipes/loading-inspector.tsx +0 -1
  391. package/ux-demo/recipes/navigation-sidebar.tsx +3 -2
  392. package/ux-demo/recipes/navigation-stack.tsx +3 -2
  393. package/ux-demo/recipes/workspace-header.tsx +0 -1
  394. package/ai/component-catalog-extension-v2.d.ts +0 -7
  395. package/ai/component-catalog-extension-v2.schema.json +0 -7
  396. package/dist/chunk-3NBL3OUQ.js.map +0 -1
  397. package/dist/chunk-4BIMLITI.js.map +0 -1
  398. package/dist/chunk-5I22LMCV.js.map +0 -1
  399. package/dist/chunk-5NDQABWK.js.map +0 -1
  400. package/dist/chunk-5OLVUEND.js.map +0 -1
  401. package/dist/chunk-7GUQYHKA.js.map +0 -1
  402. package/dist/chunk-D7GWXIAS.js.map +0 -1
  403. package/dist/chunk-DQA5FMOX.js +0 -85
  404. package/dist/chunk-DQA5FMOX.js.map +0 -1
  405. package/dist/chunk-EAX2GSS4.js.map +0 -1
  406. package/dist/chunk-GUIHMIT2.js.map +0 -1
  407. package/dist/chunk-HMQ2ZDGG.js.map +0 -1
  408. package/dist/chunk-LZXQVUGN.js.map +0 -1
  409. package/dist/chunk-MTM43SJO.js.map +0 -1
  410. package/dist/chunk-N7FHFNT6.js.map +0 -1
  411. package/dist/chunk-R754MHXX.js.map +0 -1
  412. package/dist/chunk-RNRUVPJ3.js.map +0 -1
  413. package/dist/chunk-RNZAKSME.js.map +0 -1
  414. package/dist/chunk-T22EM4ET.js.map +0 -1
  415. package/dist/chunk-TZ5IHWB2.js.map +0 -1
  416. package/dist/chunk-WZ2GLEY4.js.map +0 -1
  417. package/dist/chunk-XD7DWYXG.js +0 -34
  418. package/dist/chunk-XD7DWYXG.js.map +0 -1
package/README.md CHANGED
@@ -97,7 +97,7 @@ primary region, while semantic positions and replacement content use explicit
97
97
  named `SafeHtml` props such as `header`, `footer`, `leading`, `trailing`,
98
98
  `icon`, and `action`. These named `SafeHtml` prop slots are ordinary typed
99
99
  function-component props—not native `<slot>` elements, wrapper slot
100
- components, or a generic `slots` object. The v2 composition catalog publishes
100
+ components, or a generic `slots` object. The composition catalog publishes
101
101
  sound prop bindings as `zone.jsx.prop`, allowing ESLint to validate statically
102
102
  visible content and cardinality without guessing from zone names.
103
103
 
@@ -168,8 +168,8 @@ The same property-specific boundary applies beyond spacing: use `flex()` (or a
168
168
  finite keyword) for `Row.flex`, `Grid.flex`, and `List.flex`; length builders and intrinsic-size keywords for
169
169
  `Skeleton.width`/`height`; length builders for `Skeleton.radius`; and
170
170
  a foreground color for `SelectChoice.color` — `uiColor()` with a foreground
171
- token such as `success-on-quiet`, or `foregroundColorVar()` (fill aliases such
172
- as `uiColor('success')` are rejected). These grammars are not
171
+ token such as `success-on-quiet`, or `foregroundColorVar()` (fill tokens such
172
+ as `uiColor('success-fill-quiet')` are rejected). These grammars are not
173
173
  interchangeable. `ListItem` and `ListActionRow` deliberately expose no raw
174
174
  `style` declarations; use `className`, public tokens, and component props.
175
175
 
@@ -197,6 +197,7 @@ interchangeable. `ListItem` and `ListActionRow` deliberately expose no raw
197
197
  | `ListHeader` | `@kerfjs/ui/list-header` | `@kerfjs/ui/list-header.css` |
198
198
  | `ListInsetControl` | `@kerfjs/ui/list-inset-control` | `@kerfjs/ui/list-inset-control.css` |
199
199
  | `ListInsetText` | `@kerfjs/ui/list-inset-text` | `@kerfjs/ui/list-inset-text.css` |
200
+ | `ContentItem` | `@kerfjs/ui/content-item` | `@kerfjs/ui/content-item.css` |
200
201
  | `Pane` | `@kerfjs/ui/pane` | `@kerfjs/ui/pane.css` |
201
202
  | `NavStack` | `@kerfjs/ui/nav-stack` | `@kerfjs/ui/nav-stack.css` |
202
203
  | `wireNavStack` | `@kerfjs/ui/wire-nav-stack` | — |
@@ -213,6 +214,7 @@ interchangeable. `ListItem` and `ListActionRow` deliberately expose no raw
213
214
  | `AppTab` | `@kerfjs/ui/app-tab` | `@kerfjs/ui/app-tab.css` |
214
215
  | `TabBar` | `@kerfjs/ui/tab-bar` | `@kerfjs/ui/tab-bar.css` |
215
216
  | `wireTabBars`, `reorderTabs` | `@kerfjs/ui/wire-tab-bars` | — |
217
+ | `wireScrollDividers` | `@kerfjs/ui/wire-scroll-dividers` | — |
216
218
  | `LoadingSpinner` | `@kerfjs/ui/loading-spinner` | `@kerfjs/ui/loading-spinner.css` |
217
219
  | `Skeleton` | `@kerfjs/ui/skeleton` | `@kerfjs/ui/skeleton.css` |
218
220
  | `SunkenPanel` | `@kerfjs/ui/sunken-panel` | `@kerfjs/ui/sunken-panel.css` |
@@ -249,9 +251,9 @@ moving focus or DOM identity. When a product wants fewer visible commands at
249
251
  narrow widths, it chooses them: render a lower-priority command inside an
250
252
  app-owned "More" `PopupMenu` (in a `single` group with `nestedDropdown`).
251
253
 
252
- `DisclosureArrow` defaults to an 18px root-scaled decorative visual. Override
253
- `--kui-disclosure-arrow-size` at the narrowest useful scope when a consumer
254
- needs another size; the owning control still supplies interaction, naming, and
254
+ `DisclosureArrow` defaults to an 18px root-scaled decorative visual. Pass a
255
+ typed `size` (for example `size={remify(24)}` from `@kerfjs/ui/css-values`)
256
+ when a consumer needs another size; the owning control still supplies interaction, naming, and
255
257
  expanded state. Kerf `Select` retains its independent Web Awesome expand-glyph
256
258
  scale of `.5` through `--kui-disclosure-icon-scale`. Author replacement
257
259
  `DisclosureArrow` icon content facing right before its configured direction
@@ -270,7 +272,19 @@ action at the logical end. Its visible action glyph defaults to 18px through
270
272
 
271
273
  ## Machine-readable catalog
272
274
 
273
- AI tools can retrieve the shipped [`ai/component-catalog.json`](./ai/component-catalog.json)
275
+ AI assistants should start from the generated markdown reference,
276
+ [`ai/components/README.md`](./ai/components/README.md): a one-line index of
277
+ every entry grouped like the catalog, plus one short page per entry
278
+ (`ai/components/<id>.md`) covering when to use and avoid it, imports and
279
+ CSS/registration side effects, where its exact props live, legal parents,
280
+ zones with their JSX props and child counts, app- and wiring-owned state,
281
+ geometry ownership, accessibility obligations, the styling boundary
282
+ (configure through props; never override internals), and its composition
283
+ diagnostics. The pages are projected from the two JSON catalogs by
284
+ `scripts/sync-component-docs.mjs` (`npm run catalog:sync`), and
285
+ `npm run check:catalog` fails when any page drifts.
286
+
287
+ Tools can retrieve the shipped [`ai/component-catalog.json`](./ai/component-catalog.json)
274
288
  for the exhaustive component and composition inventory. It is the canonical
275
289
  source for ids, public exports, purpose and selection guidance, relationships,
276
290
  delivery and side effects, companion wiring, application-owned policy,
@@ -290,14 +304,16 @@ Keeping this as a companion artifact prevents per-entry selection facts from
290
304
  duplicating presentation rules.
291
305
 
292
306
  Tools that evaluate composition may additionally load
293
- [`component-catalog-v2.json`](./ai/component-catalog-v2.json). It is a
294
- deterministic, package-qualified projection of every v1 entry with formal
295
- parent/context, zone/cardinality, child, state ownership, wiring, responsive,
296
- layout, accessibility, public-boundary, and stable-diagnostic fields. V1
297
- remains the selection and delivery compatibility surface. V2 defaults are
307
+ [`component-composition.json`](./ai/component-composition.json). It is a
308
+ generated composition layer beside `component-catalog.json`, not a newer
309
+ version of it: a deterministic, package-qualified projection of every
310
+ component-catalog entry with formal parent/context, zone/cardinality, child,
311
+ state ownership, wiring, responsive, layout, accessibility, public-boundary,
312
+ and stable-diagnostic fields. `component-catalog.json` remains the selection
313
+ and delivery surface. Composition defaults are
298
314
  deliberately permissive; only documented objective rules receive an
299
315
  authoritative override and enforceable diagnostic. The adjacent schema and
300
- [`component-catalog-v2.d.ts`](./ai/component-catalog-v2.d.ts) types describe
316
+ [`component-composition.d.ts`](./ai/component-composition.d.ts) types describe
301
317
  the same contract.
302
318
 
303
319
  Applications and downstream design systems should publish the same facts for
@@ -313,9 +329,9 @@ tool reason about both sides of a composition using one vocabulary without
313
329
  pretending app-local components are `@kerfjs/ui` exports.
314
330
 
315
331
  Composition-aware consumers use
316
- [`component-catalog-extension-v2.schema.json`](./ai/component-catalog-extension-v2.schema.json),
332
+ [`component-composition-extension.schema.json`](./ai/component-composition-extension.schema.json),
317
333
  its shipped TypeScript types, and the checked
318
- [`component-catalog-extension-v2.json`](./docs/examples/component-catalog-extension-v2.json)
334
+ [`component-composition-extension.json`](./docs/examples/component-composition-extension.json)
319
335
  example. Preserve each catalog's package and qualify every identity and
320
336
  cross-catalog reference as `package:id`; never merge entries by bare id.
321
337
 
@@ -326,7 +342,7 @@ rejects. The package gate compiles one positive/negative consumer fixture agains
326
342
  both source and declarations extracted from the real packed tarball. The
327
343
  [compile-time contract guide](./docs/type-contracts.md) documents migrations and
328
344
  the dynamic DOM/children relationships that remain runtime or catalog checks.
329
- Packages scaffolded by `create-kerf-component` maintain this v2 input from
345
+ Packages scaffolded by `create-kerf-component` maintain this composition input from
330
346
  `kerf.components.json`: `npm run catalog:generate` emits the catalog and
331
347
  `npm run catalog:check` verifies source files, named public exports, explicit
332
348
  author decisions, and byte-for-byte drift. Tools index the generated consumer
@@ -349,9 +365,9 @@ token overrides, layout/responsive conventions, and narrow rule exceptions.
349
365
  Profiles contain policy only—never product records, user data, or broad styling
350
366
  waivers.
351
367
 
352
- Catalog declarations always provide a v2 `composition` location. Consumer
368
+ Catalog declarations always provide a `composition` location. Consumer
353
369
  packages generated with composition-only metadata omit `selection`;
354
- `@kerfjs/ui` continues to require its v1 selection catalog.
370
+ `@kerfjs/ui` continues to require its `component-catalog.json` selection catalog.
355
371
 
356
372
  Node-based AI and static-analysis tools may import the shipped discovery API
357
373
  from `@kerfjs/ui/ai/application-ui-profile.mjs`. It discovers package defaults,
@@ -375,9 +391,12 @@ Run `kerf-ui-analyze --root . src` (or import
375
391
  composition catalogs and application profile. It catches provable private
376
392
  selector reach-through, unknown tokens, competing geometry owners, nested
377
393
  scroll owners, and cataloged CSS-value violations in JavaScript/TypeScript
378
- component calls and JSX. It reports forced dimensions, repeated insets,
379
- exceptional spacing shorthands, and dynamic classes separately as review
380
- findings. Text, versioned JSON,
394
+ component calls and JSX, plus component-ownership overrides: CSS that makes
395
+ another package's component its subject, touches its private variables,
396
+ overrides a token its typed prop sets, or styles it through a hook class on
397
+ its root (`KUI-L019`–`KUI-L022`; forcing a component's dimensions is one such
398
+ restyle). It reports repeated insets, exceptional spacing shorthands, and
399
+ dynamic classes separately as review findings. Text, versioned JSON,
381
400
  and SARIF outputs carry stable `KUI-L###` ids, repository-relative locations,
382
401
  evidence, and ownership chains. See the [analyzer guide](./docs/ui-analyzer.md).
383
402
 
@@ -434,7 +453,10 @@ file.
434
453
 
435
454
  `npm run check:css-ownership` keeps that boundary honest: application CSS may
436
455
  style only application-owned structure, never package component classes or
437
- Web Awesome descendants. The UX catalog's `style.css` contains document-shell
456
+ Web Awesome descendants, and a package component's stylesheet styles only
457
+ itself (in a composing parent's context when needed) — never another kerf
458
+ component's root, the `wa-*` tags it renders, its variables, or a hook class on
459
+ its root. The UX catalog's `style.css` contains document-shell
438
460
  mechanics only, recipes ship no stylesheets (`npm run check:recipes` rejects
439
461
  route stylesheets, inline styles, and styling-only classes), and `catalog.css`
440
462
  remains a
@@ -460,28 +482,35 @@ component browser imports. See [Document baseline](./docs/document-baseline.md).
460
482
 
461
483
  ## Pane and content geometry
462
484
 
463
- Import `@kerfjs/ui/layout.css` and use the same structural vocabulary for a
464
- sidebar, main area, inspector, or dialog. `.kui-pane` is unpadded and contains
465
- an optional toolbar, one scrolling `.kui-pane__content`, and an optional footer.
466
- Add `.kui-content` to make its major children a vertical stack with 24px gaps.
485
+ Render `Pane` (`@kerfjs/ui/pane`) for a sidebar, main area, inspector, or
486
+ dialog: the same structural vocabulary everywhere. Its `.kui-pane` root is
487
+ unpadded and contains an optional header, one scrolling `.kui-pane__content`,
488
+ and an optional footer; the content slot already carries `.kui-content`, which
489
+ makes its major children a vertical stack with 24px gaps. Choose landmark
490
+ semantics with `element` / `contentElement` rather than writing the pane
491
+ classes onto your own elements — `eslint-plugin-kerfjs` reports a component's
492
+ anatomy class on an application-owned element as `KUI-L103`.
467
493
 
468
494
  ```tsx
469
- <aside class="kui-pane">
470
- <div class="kui-pane__toolbar"><Toolbar label="Workspace" ... /></div>
471
- <nav class="kui-pane__content kui-content">
472
- <section>
473
- <ListHeader label="Workspace" count={3} countLabel="3 workspaces" />
474
- <ListItem action="open" label="Inbox" icon={inboxIcon} />
475
- <ListItem action="open" label="Drafts" />
476
- </section>
477
- <div class="kui-content-item">Workspace details</div>
478
- </nav>
479
- </aside>
495
+ <Pane
496
+ element="aside"
497
+ label="Workspace"
498
+ contentElement="nav"
499
+ header={<Toolbar label="Workspace" ... />}
500
+ >
501
+ <section>
502
+ <ListHeader label="Workspace" count={3} countLabel="3 workspaces" />
503
+ <ListItem action="open" label="Inbox" icon={inboxIcon} />
504
+ <ListItem action="open" label="Drafts" />
505
+ </section>
506
+ <ContentItem>Workspace details</ContentItem>
507
+ </Pane>
480
508
  ```
481
509
 
482
- Ordinary children use `.kui-content-item`: 8px inline margin, a real 1px border
483
- (transparent by default), 8px padding, and 12px rounded corners. The pill
484
- modifier uses a 22px radius. A component can expose a transparent border or
510
+ Ordinary children use `ContentItem` (`@kerfjs/ui/content-item`): 8px inline
511
+ margin, a real 1px border (transparent by default), 8px padding, and 12px
512
+ rounded corners. `shape="pill"` uses a 22px radius, and `frame="framed"` paints
513
+ the neutral border only when the item marks a real distinction. A component can expose a transparent border or
485
514
  background without changing layout. `ListHeader` follows the same rule while
486
515
  keeping its dormant title and count-or-badge cluster separate from its optional
487
516
  44px action.
@@ -551,6 +580,10 @@ arrays support diagnostics, tooling, browser assertions, and package-owned
551
580
  composition; they are not an application styling API. Application-owned CSS may
552
581
  style new structure rendered by its own component, but it must not select a
553
582
  nested Kerf or Web Awesome component. Add missing configuration to the owner.
583
+ Markup follows the same rule: write only an entry's `placeableClasses` (layout
584
+ utilities, `kui-app-root`, `kui-content-item` on a non-div carrier) onto your
585
+ own elements; any other public class recreates a component by class, which
586
+ `eslint-plugin-kerfjs` reports as `KUI-L103` with the component to render.
554
587
 
555
588
  `StateBanner` has opinionated `neutral`, `info`, `pop`, `success`, `warning`,
556
589
  and `danger` palettes. Override an individual banner with
@@ -646,7 +679,7 @@ import "@kerfjs/ui/webawesome.css";
646
679
  import "@kerfjs/ui/select/register";
647
680
  ```
648
681
 
649
- That boundary keeps Web Awesome and its custom-element side effects out of bundles that use unrelated components. Automated consumer-bundle tests enforce it. `PopupMenu` follows the same rule: import `@kerfjs/ui/popup-menu/register` once to register the dropdown, item, button, and divider elements it renders.
682
+ That boundary keeps Web Awesome and its custom-element side effects out of bundles that use unrelated components. Automated consumer-bundle tests enforce it. `PopupMenu` follows the same rule: import `@kerfjs/ui/popup-menu/register` once to register the dropdown, item, button, and divider elements it renders. Either registration also installs help tags: an icon-only Select, PopupMenu, or `aria-label`-named `<button>` in a `ToolbarControlGroup` shows its name in an `aria-hidden` tooltip on hover and keyboard focus. A toolbar with icon-only buttons but neither control imports `@kerfjs/ui/help-tags/register`, which registers only the tooltip.
650
683
  Use `label` for a visible label or `ariaLabel` for a visually hidden name. A
651
684
  nonempty visible label takes precedence when both are supplied. Kerf names the
652
685
  actual shadow combobox without adding visible label spacing; this also works
@@ -47,9 +47,14 @@
47
47
  "KUI-L016",
48
48
  "KUI-L017",
49
49
  "KUI-L018",
50
+ "KUI-L019",
51
+ "KUI-L020",
52
+ "KUI-L021",
53
+ "KUI-L022",
50
54
  "KUI-L090",
51
55
  "KUI-L101",
52
56
  "KUI-L102",
57
+ "KUI-L103",
53
58
  "KUI-L201",
54
59
  "KUI-L202",
55
60
  "KUI-L203",
@@ -97,5 +102,8 @@
97
102
  "KUI-T009",
98
103
  "KUI-T010",
99
104
  "KUI-T011"
100
- ]
105
+ ],
106
+ "retired": {
107
+ "KUI-L005": "Folded into KUI-L019: any application rule whose subject is a cataloged component, forced dimensions included. Kept in ids so existing profile exceptions that name it still load."
108
+ }
101
109
  }
@@ -202,7 +202,7 @@ function validateApplicationUiProfile(profile, options = {}) {
202
202
  add(
203
203
  'KUI-P005',
204
204
  `${path}.selection`,
205
- 'The @kerfjs/ui catalog requires its v1 selection location.',
205
+ 'The @kerfjs/ui catalog requires its component-catalog.json selection location.',
206
206
  );
207
207
  for (const kind of ['selection', 'composition']) {
208
208
  if (kind === 'selection' && !catalog[kind]) continue;
@@ -5,22 +5,77 @@
5
5
  "catalogs": [
6
6
  {
7
7
  "package": "@kerfjs/ui",
8
- "selection": { "path": "./component-catalog.json", "schemaVersion": 1 },
8
+ "selection": {
9
+ "path": "./component-catalog.json",
10
+ "schemaVersion": 1
11
+ },
9
12
  "composition": {
10
- "path": "./component-catalog-v2.json",
11
- "schemaVersion": 2
13
+ "path": "./component-composition.json",
14
+ "schemaVersion": 1
12
15
  }
13
16
  }
14
17
  ],
15
18
  "preferences": {
16
- "application-shell": { "preferred": "@kerfjs/ui:recipe-app-shell" },
19
+ "application-shell": {
20
+ "preferred": "@kerfjs/ui:recipe-app-shell"
21
+ },
22
+ "application-tabs": {
23
+ "preferred": "@kerfjs/ui:tab-bar",
24
+ "avoid": [
25
+ "@kerfjs/ui:wa-tab-group",
26
+ "@kerfjs/ui:wa-tab",
27
+ "@kerfjs/ui:wa-tab-panel"
28
+ ],
29
+ "rationale": "Render TabBar (or SegmentedControl for a view switch) instead of composing Web Awesome tabs directly."
30
+ },
31
+ "command-menu": {
32
+ "preferred": "@kerfjs/ui:popup-menu",
33
+ "avoid": ["@kerfjs/ui:wa-dropdown", "@kerfjs/ui:wa-dropdown-item"],
34
+ "rationale": "Render PopupMenu, which wraps wa-dropdown with the shared popup contract; use Select when choosing a value."
35
+ },
36
+ "embedded-media": {
37
+ "preferred": "@kerfjs/ui:content-item",
38
+ "avoid": [
39
+ "@kerfjs/ui:wa-animated-image",
40
+ "@kerfjs/ui:wa-comparison",
41
+ "@kerfjs/ui:wa-zoomable-frame"
42
+ ],
43
+ "rationale": "Keep media behavior application-owned: place a native img, video, or iframe in a ContentItem. Record a narrow KUI-L301 profile exception only when a concrete product requirement needs this Web Awesome element."
44
+ },
17
45
  "exclusive-choice": {
18
46
  "preferred": "@kerfjs/ui:segmented-control",
19
- "avoid": ["@kerfjs/ui:wa-button-group"]
47
+ "avoid": ["@kerfjs/ui:wa-button-group"],
48
+ "rationale": "Render SegmentedControl for one-of-N choices instead of a Web Awesome button group."
49
+ },
50
+ "hierarchy-navigation": {
51
+ "preferred": "@kerfjs/ui:list",
52
+ "avoid": ["@kerfjs/ui:wa-tree", "@kerfjs/ui:wa-tree-item"],
53
+ "rationale": "Present hierarchy as List rows (or NavStack drill-in levels). Record a narrow KUI-L301 profile exception only when the product requires tree behavior."
54
+ },
55
+ "icon": {
56
+ "preferred": "@kerfjs/ui:lucide-icon",
57
+ "avoid": ["@kerfjs/ui:wa-icon"],
58
+ "rationale": "Render LucideIcon; Web Awesome icons are not part of the Kerf icon contract."
20
59
  },
21
- "navigation-row": { "preferred": "@kerfjs/ui:list-item" },
22
- "panel-heading": { "preferred": "@kerfjs/ui:toolbar" },
23
- "structured-search": { "preferred": "@kerfjs/ui:token-search-field" }
60
+ "navigation-row": {
61
+ "preferred": "@kerfjs/ui:list-item"
62
+ },
63
+ "panel-heading": {
64
+ "preferred": "@kerfjs/ui:toolbar"
65
+ },
66
+ "resizable-pane": {
67
+ "preferred": "@kerfjs/ui:resize",
68
+ "avoid": ["@kerfjs/ui:wa-split-panel"],
69
+ "rationale": "Render ResizableRegion for application panes instead of a Web Awesome split panel."
70
+ },
71
+ "structured-search": {
72
+ "preferred": "@kerfjs/ui:token-search-field"
73
+ },
74
+ "value-selection": {
75
+ "preferred": "@kerfjs/ui:select",
76
+ "avoid": ["@kerfjs/ui:wa-select", "@kerfjs/ui:wa-option"],
77
+ "rationale": "Render Select, which wraps wa-select and wa-option with Kerf's popup and spacing contract."
78
+ }
24
79
  },
25
80
  "theme": {
26
81
  "colorScheme": "light",
@@ -289,7 +289,7 @@ export function validateApplicationUiProfile(
289
289
  add(
290
290
  'KUI-P005',
291
291
  `${path}.selection`,
292
- 'The @kerfjs/ui catalog requires its v1 selection location.',
292
+ 'The @kerfjs/ui catalog requires its component-catalog.json selection location.',
293
293
  );
294
294
  for (const kind of ['selection', 'composition']) {
295
295
  if (kind === 'selection' && !catalog?.selection) continue;
@@ -79,7 +79,7 @@
79
79
  "id": "KUI-T010",
80
80
  "publicImport": "@kerfjs/ui",
81
81
  "symbols": [
82
- "DividerSides",
82
+ "Sides",
83
83
  "StateBannerUrgency",
84
84
  "TabActivation",
85
85
  "TextVariant",
@@ -89,7 +89,7 @@
89
89
  "ToolbarControlGroupTone"
90
90
  ],
91
91
  "kind": "finite-vocabulary",
92
- "summary": "Finite public variant vocabularies, including canonical divider-edge combinations, are named exported unions rather than anonymous string sets."
92
+ "summary": "Finite public variant vocabularies, including canonical edge combinations, are named exported unions rather than anonymous string sets."
93
93
  },
94
94
  {
95
95
  "id": "KUI-T011",