@kerfjs/ui 5.0.0-beta.10 → 5.0.0-beta.100

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 (997) hide show
  1. package/README.md +630 -132
  2. package/ai/application-ui-diagnostic-ids-v1.json +114 -0
  3. package/ai/application-ui-profile-sync.cjs +548 -0
  4. package/ai/application-ui-profile.d.mts +1 -0
  5. package/ai/application-ui-profile.d.ts +106 -0
  6. package/ai/application-ui-profile.defaults.json +96 -0
  7. package/ai/application-ui-profile.mjs +653 -0
  8. package/ai/application-ui-profile.schema.json +140 -0
  9. package/ai/catalog-authoring.json +34 -0
  10. package/ai/catalog-authoring.schema.json +105 -0
  11. package/ai/compile-time-contracts-v1.json +149 -0
  12. package/ai/compile-time-contracts-v1.schema.json +52 -0
  13. package/ai/component-catalog-extension.schema.json +104 -0
  14. package/ai/component-catalog.json +6401 -931
  15. package/ai/component-catalog.schema.json +94 -1
  16. package/ai/component-class-owners.cjs +83 -0
  17. package/ai/component-composition-extension.d.ts +7 -0
  18. package/ai/component-composition-extension.schema.json +7 -0
  19. package/ai/component-composition-rules.json +551 -0
  20. package/ai/component-composition.d.ts +132 -0
  21. package/ai/component-composition.json +8729 -0
  22. package/ai/component-composition.schema.json +412 -0
  23. package/ai/components/README.md +185 -0
  24. package/ai/components/anchored-surface.md +99 -0
  25. package/ai/components/application-tabs.md +65 -0
  26. package/ai/components/badge.md +76 -0
  27. package/ai/components/chip.md +76 -0
  28. package/ai/components/choice-chips.md +87 -0
  29. package/ai/components/collapsible-panel.md +103 -0
  30. package/ai/components/column-track.md +78 -0
  31. package/ai/components/combobox.md +88 -0
  32. package/ai/components/composer.md +83 -0
  33. package/ai/components/content-item.md +98 -0
  34. package/ai/components/content-swap.md +78 -0
  35. package/ai/components/corner-status.md +88 -0
  36. package/ai/components/disclosure-arrow.md +77 -0
  37. package/ai/components/document-baseline.md +77 -0
  38. package/ai/components/edge-activity-indicator.md +81 -0
  39. package/ai/components/empty-state.md +80 -0
  40. package/ai/components/feedback.md +71 -0
  41. package/ai/components/file-picker.md +88 -0
  42. package/ai/components/floating-toolbar.md +82 -0
  43. package/ai/components/foundation.md +65 -0
  44. package/ai/components/framed-list.md +80 -0
  45. package/ai/components/grid.md +101 -0
  46. package/ai/components/headers.md +63 -0
  47. package/ai/components/icon-button.md +82 -0
  48. package/ai/components/icon-toggle-button.md +80 -0
  49. package/ai/components/layout.md +75 -0
  50. package/ai/components/list-action-row.md +108 -0
  51. package/ai/components/list-header.md +91 -0
  52. package/ai/components/list-inset-control.md +74 -0
  53. package/ai/components/list-inset-text.md +72 -0
  54. package/ai/components/list-item.md +108 -0
  55. package/ai/components/list.md +125 -0
  56. package/ai/components/loading-spinner.md +73 -0
  57. package/ai/components/lucide-icon.md +97 -0
  58. package/ai/components/nav-stack.md +115 -0
  59. package/ai/components/pane.md +115 -0
  60. package/ai/components/popup-menu.md +171 -0
  61. package/ai/components/recipe-app-shell.md +57 -0
  62. package/ai/components/recipe-collapsible-sidebar.md +57 -0
  63. package/ai/components/recipe-compact-toolbar.md +57 -0
  64. package/ai/components/recipe-composer-form.md +57 -0
  65. package/ai/components/recipe-list-detail-dialog.md +57 -0
  66. package/ai/components/recipe-list-workspace-states.md +57 -0
  67. package/ai/components/recipe-loading-inspector.md +57 -0
  68. package/ai/components/recipe-navigation-sidebar.md +57 -0
  69. package/ai/components/recipe-navigation-stack.md +57 -0
  70. package/ai/components/recipe-workspace-header.md +57 -0
  71. package/ai/components/resize.md +106 -0
  72. package/ai/components/row.md +96 -0
  73. package/ai/components/segmented-control.md +82 -0
  74. package/ai/components/select.md +116 -0
  75. package/ai/components/skeleton.md +84 -0
  76. package/ai/components/spacer.md +86 -0
  77. package/ai/components/split-button.md +80 -0
  78. package/ai/components/split-view.md +105 -0
  79. package/ai/components/state-banner.md +96 -0
  80. package/ai/components/summary-row.md +85 -0
  81. package/ai/components/sunken-panel.md +79 -0
  82. package/ai/components/surface-scaffold.md +105 -0
  83. package/ai/components/tab-bar.md +114 -0
  84. package/ai/components/tab-navigator.md +100 -0
  85. package/ai/components/tabs.md +95 -0
  86. package/ai/components/text.md +90 -0
  87. package/ai/components/token-search-field.md +107 -0
  88. package/ai/components/toolbar-control-group.md +125 -0
  89. package/ai/components/toolbar-text.md +100 -0
  90. package/ai/components/toolbar.md +103 -0
  91. package/ai/components/value-table.md +80 -0
  92. package/ai/components/wa-accordion-item.md +55 -0
  93. package/ai/components/wa-accordion.md +65 -0
  94. package/ai/components/wa-animated-image.md +55 -0
  95. package/ai/components/wa-animation.md +55 -0
  96. package/ai/components/wa-avatar.md +55 -0
  97. package/ai/components/wa-badge.md +55 -0
  98. package/ai/components/wa-breadcrumb-item.md +53 -0
  99. package/ai/components/wa-breadcrumb.md +55 -0
  100. package/ai/components/wa-button-group.md +60 -0
  101. package/ai/components/wa-button.md +59 -0
  102. package/ai/components/wa-callout.md +58 -0
  103. package/ai/components/wa-card.md +59 -0
  104. package/ai/components/wa-carousel-item.md +53 -0
  105. package/ai/components/wa-carousel.md +55 -0
  106. package/ai/components/wa-checkbox-group.md +55 -0
  107. package/ai/components/wa-checkbox.md +55 -0
  108. package/ai/components/wa-color-picker.md +55 -0
  109. package/ai/components/wa-comparison.md +55 -0
  110. package/ai/components/wa-copy-button.md +55 -0
  111. package/ai/components/wa-details.md +61 -0
  112. package/ai/components/wa-dialog.md +59 -0
  113. package/ai/components/wa-divider.md +53 -0
  114. package/ai/components/wa-drawer.md +55 -0
  115. package/ai/components/wa-dropdown-item.md +60 -0
  116. package/ai/components/wa-dropdown.md +60 -0
  117. package/ai/components/wa-format-bytes.md +53 -0
  118. package/ai/components/wa-format-date.md +53 -0
  119. package/ai/components/wa-format-number.md +53 -0
  120. package/ai/components/wa-icon.md +58 -0
  121. package/ai/components/wa-include.md +53 -0
  122. package/ai/components/wa-input.md +59 -0
  123. package/ai/components/wa-intersection-observer.md +53 -0
  124. package/ai/components/wa-known-date.md +53 -0
  125. package/ai/components/wa-markdown.md +53 -0
  126. package/ai/components/wa-mutation-observer.md +53 -0
  127. package/ai/components/wa-number-input.md +55 -0
  128. package/ai/components/wa-option.md +59 -0
  129. package/ai/components/wa-otp-input.md +53 -0
  130. package/ai/components/wa-page.md +53 -0
  131. package/ai/components/wa-pagination.md +55 -0
  132. package/ai/components/wa-popover.md +55 -0
  133. package/ai/components/wa-popup.md +53 -0
  134. package/ai/components/wa-progress-bar.md +53 -0
  135. package/ai/components/wa-progress-ring.md +53 -0
  136. package/ai/components/wa-qr-code.md +53 -0
  137. package/ai/components/wa-radio-group.md +59 -0
  138. package/ai/components/wa-radio.md +55 -0
  139. package/ai/components/wa-random-content.md +53 -0
  140. package/ai/components/wa-rating.md +55 -0
  141. package/ai/components/wa-relative-time.md +53 -0
  142. package/ai/components/wa-resize-observer.md +53 -0
  143. package/ai/components/wa-scroller.md +53 -0
  144. package/ai/components/wa-select.md +63 -0
  145. package/ai/components/wa-skeleton.md +53 -0
  146. package/ai/components/wa-slider.md +55 -0
  147. package/ai/components/wa-spinner.md +58 -0
  148. package/ai/components/wa-split-panel.md +58 -0
  149. package/ai/components/wa-switch.md +53 -0
  150. package/ai/components/wa-tab-group.md +69 -0
  151. package/ai/components/wa-tab-panel.md +60 -0
  152. package/ai/components/wa-tab.md +59 -0
  153. package/ai/components/wa-tag.md +59 -0
  154. package/ai/components/wa-textarea.md +53 -0
  155. package/ai/components/wa-time-input.md +55 -0
  156. package/ai/components/wa-toast-item.md +60 -0
  157. package/ai/components/wa-toast.md +60 -0
  158. package/ai/components/wa-tooltip.md +55 -0
  159. package/ai/components/wa-tree-item.md +55 -0
  160. package/ai/components/wa-tree.md +55 -0
  161. package/ai/components/wa-zoomable-frame.md +55 -0
  162. package/ai/components/workbench.md +120 -0
  163. package/ai/public-api-signatures-v1.md +4261 -459
  164. package/ai/skill.md +441 -63
  165. package/ai/webawesome-jsx-signatures-v1.md +9 -2
  166. package/analyzer/cli.mjs +49 -0
  167. package/analyzer/component-ownership.d.mts +72 -0
  168. package/analyzer/component-ownership.mjs +429 -0
  169. package/analyzer/index.d.mts +53 -0
  170. package/analyzer/index.mjs +2375 -0
  171. package/analyzer/loud-pairs.d.mts +49 -0
  172. package/analyzer/loud-pairs.mjs +357 -0
  173. package/analyzer/report.schema.json +66 -0
  174. package/analyzer/selectors.d.mts +21 -0
  175. package/analyzer/selectors.mjs +212 -0
  176. package/catalog-projection-cli.mjs +96 -0
  177. package/catalog-projection.d.mts +55 -0
  178. package/catalog-projection.mjs +62 -0
  179. package/dist/anchored-surface.d.ts +69 -0
  180. package/dist/anchored-surface.js +3 -0
  181. package/dist/anchored-surface.js.map +1 -0
  182. package/dist/app-tab.d.ts +39 -4
  183. package/dist/app-tab.js +2 -1
  184. package/dist/badge.d.ts +83 -0
  185. package/dist/badge.js +4 -0
  186. package/dist/badge.js.map +1 -0
  187. package/dist/browser/anchored-surface.js +3 -0
  188. package/dist/browser/badge.js +3 -0
  189. package/dist/browser/catalog.js +28 -0
  190. package/dist/browser/chip.js +3 -0
  191. package/dist/browser/choice-chips.js +3 -0
  192. package/dist/browser/collapsible-panel.js +9 -0
  193. package/dist/browser/column-track.js +3 -0
  194. package/dist/browser/combobox.js +3 -0
  195. package/dist/browser/composer.js +4 -0
  196. package/dist/browser/content-item.js +3 -0
  197. package/dist/browser/content-swap.js +3 -0
  198. package/dist/browser/corner-status.js +3 -0
  199. package/dist/browser/edge-activity-indicator.js +3 -0
  200. package/dist/browser/file-picker.js +3 -0
  201. package/dist/browser/floating-toolbar.js +3 -0
  202. package/dist/browser/framed-list.js +3 -0
  203. package/dist/browser/grid.js +3 -0
  204. package/dist/browser/icon-button.js +4 -0
  205. package/dist/browser/icon-toggle-button.js +4 -0
  206. package/dist/browser/list-action-row.js +2 -0
  207. package/dist/browser/list-header.js +3 -1
  208. package/dist/browser/list-inset-control.js +3 -0
  209. package/dist/browser/list-inset-text.js +3 -0
  210. package/dist/browser/list-item.js +1 -0
  211. package/dist/browser/list.js +3 -0
  212. package/dist/browser/nav-stack.js +11 -0
  213. package/dist/browser/pane.js +3 -0
  214. package/dist/browser/popup-menu.js +3 -0
  215. package/dist/browser/row.js +3 -0
  216. package/dist/browser/segmented-control.js +0 -1
  217. package/dist/browser/select.js +2 -1
  218. package/dist/browser/spacer.js +3 -0
  219. package/dist/browser/split-button.js +5 -0
  220. package/dist/browser/split-view.js +13 -0
  221. package/dist/browser/state-banner.js +1 -0
  222. package/dist/browser/summary-row.js +3 -0
  223. package/dist/browser/sunken-panel.js +3 -0
  224. package/dist/browser/surface-scaffold.js +3 -0
  225. package/dist/browser/tab-navigator.js +4 -0
  226. package/dist/browser/text.js +3 -0
  227. package/dist/browser/toolbar-control-group.js +1 -0
  228. package/dist/browser/workbench.js +14 -0
  229. package/dist/catalog-resources.d.ts +50 -0
  230. package/dist/catalog-resources.js +22 -0
  231. package/dist/catalog-resources.js.map +1 -0
  232. package/dist/catalog.d.ts +134 -101
  233. package/dist/catalog.js +668 -105
  234. package/dist/catalog.js.map +1 -1
  235. package/dist/chip.d.ts +69 -0
  236. package/dist/chip.js +3 -0
  237. package/dist/chip.js.map +1 -0
  238. package/dist/choice-chips.d.ts +82 -0
  239. package/dist/choice-chips.js +3 -0
  240. package/dist/choice-chips.js.map +1 -0
  241. package/dist/chunk-2GOCOLQL.js +270 -0
  242. package/dist/chunk-2GOCOLQL.js.map +1 -0
  243. package/dist/chunk-2MSPNRWJ.js +82 -0
  244. package/dist/chunk-2MSPNRWJ.js.map +1 -0
  245. package/dist/chunk-34U4ANDJ.js +119 -0
  246. package/dist/chunk-34U4ANDJ.js.map +1 -0
  247. package/dist/chunk-3GLYIIFR.js +230 -0
  248. package/dist/chunk-3GLYIIFR.js.map +1 -0
  249. package/dist/{chunk-56RJXPHG.js → chunk-3VXDSIBJ.js} +7 -4
  250. package/dist/chunk-3VXDSIBJ.js.map +1 -0
  251. package/dist/chunk-3WYREXW4.js +120 -0
  252. package/dist/chunk-3WYREXW4.js.map +1 -0
  253. package/dist/chunk-4UB5Z3ZZ.js +68 -0
  254. package/dist/chunk-4UB5Z3ZZ.js.map +1 -0
  255. package/dist/chunk-6C6DLP3W.js +31 -0
  256. package/dist/chunk-6C6DLP3W.js.map +1 -0
  257. package/dist/chunk-7IUEBNCO.js +108 -0
  258. package/dist/chunk-7IUEBNCO.js.map +1 -0
  259. package/dist/chunk-AN5IWMTM.js +24 -0
  260. package/dist/chunk-AN5IWMTM.js.map +1 -0
  261. package/dist/chunk-AV7CPAPT.js +82 -0
  262. package/dist/chunk-AV7CPAPT.js.map +1 -0
  263. package/dist/chunk-B53PS2LE.js +34 -0
  264. package/dist/chunk-B53PS2LE.js.map +1 -0
  265. package/dist/chunk-CA7LNX3J.js +44 -0
  266. package/dist/chunk-CA7LNX3J.js.map +1 -0
  267. package/dist/chunk-CEJ5FK6G.js +288 -0
  268. package/dist/chunk-CEJ5FK6G.js.map +1 -0
  269. package/dist/chunk-CMETHPKR.js +175 -0
  270. package/dist/chunk-CMETHPKR.js.map +1 -0
  271. package/dist/chunk-CMLPFIC5.js +46 -0
  272. package/dist/chunk-CMLPFIC5.js.map +1 -0
  273. package/dist/chunk-CVD5IZGB.js +66 -0
  274. package/dist/chunk-CVD5IZGB.js.map +1 -0
  275. package/dist/chunk-CXZXHZTR.js +514 -0
  276. package/dist/chunk-CXZXHZTR.js.map +1 -0
  277. package/dist/chunk-D5RGM3XA.js +38 -0
  278. package/dist/chunk-D5RGM3XA.js.map +1 -0
  279. package/dist/chunk-DZJ4GBSP.js +59 -0
  280. package/dist/chunk-DZJ4GBSP.js.map +1 -0
  281. package/dist/chunk-EIET4QLK.js +51 -0
  282. package/dist/chunk-EIET4QLK.js.map +1 -0
  283. package/dist/chunk-ELCMSQNJ.js +49 -0
  284. package/dist/chunk-ELCMSQNJ.js.map +1 -0
  285. package/dist/chunk-EOO6PYGF.js +162 -0
  286. package/dist/chunk-EOO6PYGF.js.map +1 -0
  287. package/dist/chunk-ETCWQLJV.js +85 -0
  288. package/dist/chunk-ETCWQLJV.js.map +1 -0
  289. package/dist/chunk-FDZNYD4C.js +138 -0
  290. package/dist/chunk-FDZNYD4C.js.map +1 -0
  291. package/dist/chunk-FR76ZJQC.js +90 -0
  292. package/dist/chunk-FR76ZJQC.js.map +1 -0
  293. package/dist/chunk-G3J7JDP6.js +29 -0
  294. package/dist/chunk-G3J7JDP6.js.map +1 -0
  295. package/dist/chunk-GS2QD3N7.js +14 -0
  296. package/dist/chunk-GS2QD3N7.js.map +1 -0
  297. package/dist/chunk-HGV7J4T6.js +86 -0
  298. package/dist/chunk-HGV7J4T6.js.map +1 -0
  299. package/dist/chunk-HLDRH23D.js +84 -0
  300. package/dist/chunk-HLDRH23D.js.map +1 -0
  301. package/dist/chunk-HQZYKJ56.js +302 -0
  302. package/dist/chunk-HQZYKJ56.js.map +1 -0
  303. package/dist/chunk-HZPHCSCS.js +95 -0
  304. package/dist/chunk-HZPHCSCS.js.map +1 -0
  305. package/dist/chunk-IKS72C6P.js +53 -0
  306. package/dist/chunk-IKS72C6P.js.map +1 -0
  307. package/dist/chunk-IM3GKYOG.js +202 -0
  308. package/dist/chunk-IM3GKYOG.js.map +1 -0
  309. package/dist/chunk-INI4WDWC.js +125 -0
  310. package/dist/chunk-INI4WDWC.js.map +1 -0
  311. package/dist/chunk-IQSRHXZR.js +164 -0
  312. package/dist/chunk-IQSRHXZR.js.map +1 -0
  313. package/dist/chunk-JOR5LGYE.js +55 -0
  314. package/dist/chunk-JOR5LGYE.js.map +1 -0
  315. package/dist/chunk-K4AT3V3J.js +545 -0
  316. package/dist/chunk-K4AT3V3J.js.map +1 -0
  317. package/dist/chunk-KCS6NJ3O.js +82 -0
  318. package/dist/chunk-KCS6NJ3O.js.map +1 -0
  319. package/dist/chunk-KH4KEMSP.js +71 -0
  320. package/dist/chunk-KH4KEMSP.js.map +1 -0
  321. package/dist/chunk-LL45C7BB.js +122 -0
  322. package/dist/chunk-LL45C7BB.js.map +1 -0
  323. package/dist/chunk-LOSRXZAH.js +100 -0
  324. package/dist/chunk-LOSRXZAH.js.map +1 -0
  325. package/dist/chunk-MF6ZUUJZ.js +300 -0
  326. package/dist/chunk-MF6ZUUJZ.js.map +1 -0
  327. package/dist/chunk-MHMWQ7RB.js +19 -0
  328. package/dist/chunk-MHMWQ7RB.js.map +1 -0
  329. package/dist/chunk-MJ5RU6XT.js +173 -0
  330. package/dist/chunk-MJ5RU6XT.js.map +1 -0
  331. package/dist/chunk-MXNIVEVL.js +48 -0
  332. package/dist/chunk-MXNIVEVL.js.map +1 -0
  333. package/dist/{chunk-YGN7OMLT.js → chunk-NS2TBYM4.js} +8 -5
  334. package/dist/chunk-NS2TBYM4.js.map +1 -0
  335. package/dist/chunk-PIVY32AE.js +140 -0
  336. package/dist/chunk-PIVY32AE.js.map +1 -0
  337. package/dist/chunk-PYBBYSZ3.js +526 -0
  338. package/dist/chunk-PYBBYSZ3.js.map +1 -0
  339. package/dist/chunk-QDSZTQXL.js +28 -0
  340. package/dist/chunk-QDSZTQXL.js.map +1 -0
  341. package/dist/chunk-QH5KOFNS.js +39 -0
  342. package/dist/chunk-QH5KOFNS.js.map +1 -0
  343. package/dist/chunk-QIG4IGUP.js +139 -0
  344. package/dist/chunk-QIG4IGUP.js.map +1 -0
  345. package/dist/chunk-QLA25V2K.js +493 -0
  346. package/dist/chunk-QLA25V2K.js.map +1 -0
  347. package/dist/chunk-QROYYGWU.js +52 -0
  348. package/dist/chunk-QROYYGWU.js.map +1 -0
  349. package/dist/chunk-QYMJHS4K.js +36 -0
  350. package/dist/chunk-QYMJHS4K.js.map +1 -0
  351. package/dist/chunk-RHD7RKGI.js +176 -0
  352. package/dist/chunk-RHD7RKGI.js.map +1 -0
  353. package/dist/chunk-S2XULQEK.js +52 -0
  354. package/dist/chunk-S2XULQEK.js.map +1 -0
  355. package/dist/chunk-S3ECMF23.js +33 -0
  356. package/dist/chunk-S3ECMF23.js.map +1 -0
  357. package/dist/chunk-S4Y3YTAI.js +35 -0
  358. package/dist/chunk-S4Y3YTAI.js.map +1 -0
  359. package/dist/chunk-S4ZGTDSG.js +18 -0
  360. package/dist/chunk-S4ZGTDSG.js.map +1 -0
  361. package/dist/chunk-T4WJ5VGP.js +165 -0
  362. package/dist/chunk-T4WJ5VGP.js.map +1 -0
  363. package/dist/chunk-TDMHA7C3.js +251 -0
  364. package/dist/chunk-TDMHA7C3.js.map +1 -0
  365. package/dist/chunk-TGLUDQP2.js +138 -0
  366. package/dist/chunk-TGLUDQP2.js.map +1 -0
  367. package/dist/chunk-TLMMFQWM.js +222 -0
  368. package/dist/chunk-TLMMFQWM.js.map +1 -0
  369. package/dist/chunk-U6QYTMDB.js +85 -0
  370. package/dist/chunk-U6QYTMDB.js.map +1 -0
  371. package/dist/chunk-UMKV7YVQ.js +20 -0
  372. package/dist/chunk-UMKV7YVQ.js.map +1 -0
  373. package/dist/chunk-VFYO3UGZ.js +45 -0
  374. package/dist/chunk-VFYO3UGZ.js.map +1 -0
  375. package/dist/chunk-W4IK7AWD.js +73 -0
  376. package/dist/chunk-W4IK7AWD.js.map +1 -0
  377. package/dist/chunk-WVS6CUCT.js +48 -0
  378. package/dist/chunk-WVS6CUCT.js.map +1 -0
  379. package/dist/chunk-Y6KT7ZTR.js +109 -0
  380. package/dist/chunk-Y6KT7ZTR.js.map +1 -0
  381. package/dist/chunk-YMUIQRWK.js +44 -0
  382. package/dist/chunk-YMUIQRWK.js.map +1 -0
  383. package/dist/chunk-YOA5W5ZH.js +807 -0
  384. package/dist/chunk-YOA5W5ZH.js.map +1 -0
  385. package/dist/chunk-YQ2AC4E2.js +59 -0
  386. package/dist/chunk-YQ2AC4E2.js.map +1 -0
  387. package/dist/chunk-ZKKO4MHC.js +25 -0
  388. package/dist/chunk-ZKKO4MHC.js.map +1 -0
  389. package/dist/chunk-ZNROKDSZ.js +54 -0
  390. package/dist/chunk-ZNROKDSZ.js.map +1 -0
  391. package/dist/collapsible-panel.d.ts +96 -17
  392. package/dist/collapsible-panel.js +132 -14
  393. package/dist/collapsible-panel.js.map +1 -1
  394. package/dist/column-track.d.ts +41 -0
  395. package/dist/column-track.js +4 -0
  396. package/dist/column-track.js.map +1 -0
  397. package/dist/combobox.d.ts +40 -0
  398. package/dist/combobox.js +3 -0
  399. package/dist/combobox.js.map +1 -0
  400. package/dist/composer.d.ts +62 -0
  401. package/dist/composer.js +5 -0
  402. package/dist/composer.js.map +1 -0
  403. package/dist/content-item.d.ts +116 -0
  404. package/dist/content-item.js +4 -0
  405. package/dist/content-item.js.map +1 -0
  406. package/dist/content-swap.d.ts +34 -0
  407. package/dist/content-swap.js +3 -0
  408. package/dist/content-swap.js.map +1 -0
  409. package/dist/corner-status.d.ts +36 -0
  410. package/dist/corner-status.js +3 -0
  411. package/dist/corner-status.js.map +1 -0
  412. package/dist/css-values.d.ts +127 -0
  413. package/dist/css-values.js +3 -0
  414. package/dist/css-values.js.map +1 -0
  415. package/dist/device-class.js +34 -6
  416. package/dist/device-class.js.map +1 -1
  417. package/dist/disclosure-arrow.d.ts +6 -1
  418. package/dist/disclosure-arrow.js +2 -1
  419. package/dist/edge-activity-indicator.d.ts +28 -0
  420. package/dist/edge-activity-indicator.js +3 -0
  421. package/dist/edge-activity-indicator.js.map +1 -0
  422. package/dist/empty-state.d.ts +5 -2
  423. package/dist/empty-state.js +2 -1
  424. package/dist/extension-attributes-mu8MFUl0.d.ts +13 -0
  425. package/dist/file-picker.d.ts +47 -0
  426. package/dist/file-picker.js +3 -0
  427. package/dist/file-picker.js.map +1 -0
  428. package/dist/flex-alignment-4ms8ZbV8.d.ts +5 -0
  429. package/dist/floating-toolbar.d.ts +51 -0
  430. package/dist/floating-toolbar.js +3 -0
  431. package/dist/floating-toolbar.js.map +1 -0
  432. package/dist/framed-list.d.ts +47 -0
  433. package/dist/framed-list.js +4 -0
  434. package/dist/framed-list.js.map +1 -0
  435. package/dist/grid.d.ts +58 -0
  436. package/dist/grid.js +6 -0
  437. package/dist/grid.js.map +1 -0
  438. package/dist/help-tags-register.d.ts +13 -0
  439. package/dist/help-tags-register.js +9 -0
  440. package/dist/help-tags-register.js.map +1 -0
  441. package/dist/icon-button.d.ts +46 -0
  442. package/dist/icon-button.js +6 -0
  443. package/dist/icon-button.js.map +1 -0
  444. package/dist/icon-toggle-button.d.ts +42 -0
  445. package/dist/icon-toggle-button.js +6 -0
  446. package/dist/icon-toggle-button.js.map +1 -0
  447. package/dist/index.d.ts +63 -17
  448. package/dist/index.js +66 -23
  449. package/dist/list-action-row.d.ts +69 -12
  450. package/dist/list-action-row.js +5 -1
  451. package/dist/list-header.d.ts +65 -10
  452. package/dist/list-header.js +4 -1
  453. package/dist/list-icon-tile-B8dr97OW.d.ts +18 -0
  454. package/dist/list-inset-control.d.ts +22 -0
  455. package/dist/list-inset-control.js +3 -0
  456. package/dist/list-inset-control.js.map +1 -0
  457. package/dist/list-inset-text.d.ts +30 -0
  458. package/dist/list-inset-text.js +4 -0
  459. package/dist/list-inset-text.js.map +1 -0
  460. package/dist/list-item.d.ts +49 -5
  461. package/dist/list-item.js +4 -1
  462. package/dist/list.d.ts +128 -0
  463. package/dist/list.js +7 -0
  464. package/dist/list.js.map +1 -0
  465. package/dist/loading-spinner.d.ts +12 -2
  466. package/dist/loading-spinner.js +2 -1
  467. package/dist/lucide-icon.d.ts +15 -3
  468. package/dist/lucide-icon.js +2 -1
  469. package/dist/nav-stack-VXTumzKa.d.ts +158 -0
  470. package/dist/nav-stack.d.ts +15 -38
  471. package/dist/nav-stack.js +13 -1
  472. package/dist/pane.d.ts +153 -0
  473. package/dist/pane.js +5 -0
  474. package/dist/pane.js.map +1 -0
  475. package/dist/panel-toolbar-vg6Ir5Dy.d.ts +77 -0
  476. package/dist/popup-menu-register.d.ts +10 -0
  477. package/dist/popup-menu-register.js +336 -0
  478. package/dist/popup-menu-register.js.map +1 -0
  479. package/dist/popup-menu.d.ts +125 -0
  480. package/dist/popup-menu.js +3 -0
  481. package/dist/popup-menu.js.map +1 -0
  482. package/dist/resizable-region.d.ts +32 -3
  483. package/dist/resizable-region.js +1 -1
  484. package/dist/row.d.ts +53 -0
  485. package/dist/row.js +7 -0
  486. package/dist/row.js.map +1 -0
  487. package/dist/scroll-clearance-BikHljTc.d.ts +14 -0
  488. package/dist/segmented-control.d.ts +12 -9
  489. package/dist/segmented-control.js +1 -2
  490. package/dist/select-register.js +255 -3
  491. package/dist/select-register.js.map +1 -1
  492. package/dist/select.d.ts +103 -8
  493. package/dist/select.js +4 -1
  494. package/dist/semantic-content-BbzjvSu9.d.ts +14 -0
  495. package/dist/semantic-tone-CdW013KF.d.ts +4 -0
  496. package/dist/sides-BPSWde0A.d.ts +4 -0
  497. package/dist/skeleton.d.ts +14 -7
  498. package/dist/skeleton.js +2 -1
  499. package/dist/spacer.d.ts +18 -0
  500. package/dist/spacer.js +4 -0
  501. package/dist/spacer.js.map +1 -0
  502. package/dist/split-button.d.ts +57 -0
  503. package/dist/split-button.js +7 -0
  504. package/dist/split-button.js.map +1 -0
  505. package/dist/split-view.d.ts +63 -6
  506. package/dist/split-view.js +149 -10
  507. package/dist/split-view.js.map +1 -1
  508. package/dist/state-banner.d.ts +41 -7
  509. package/dist/state-banner.js +4 -1
  510. package/dist/styles/anchored-surface.css +41 -0
  511. package/dist/styles/app-tab.css +232 -0
  512. package/dist/styles/badge.css +145 -0
  513. package/dist/styles/catalog/components/catalog-example-stack.css +14 -0
  514. package/dist/styles/catalog/components/catalog-example.css +204 -0
  515. package/dist/styles/catalog/components/catalog-stage.css +61 -0
  516. package/dist/styles/catalog/components/catalog.css +26 -0
  517. package/dist/styles/catalog.css +5 -498
  518. package/dist/styles/chip.css +208 -0
  519. package/dist/styles/choice-chips.css +154 -0
  520. package/dist/styles/collapsible-panel.css +450 -16
  521. package/dist/styles/column-track.css +57 -0
  522. package/dist/styles/combobox.css +113 -0
  523. package/dist/styles/components/actions/floating-toolbar/floating-toolbar.css +119 -0
  524. package/dist/styles/components/actions/icon-button/icon-button.css +22 -0
  525. package/dist/styles/components/actions/icon-toggle-button/icon-toggle-button.css +83 -0
  526. package/dist/styles/components/actions/popup-menu/popup-menu.css +370 -0
  527. package/dist/styles/components/actions/split-button/split-button.css +95 -0
  528. package/dist/styles/components/actions/toolbar/toolbar.css +443 -0
  529. package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +1069 -0
  530. package/dist/styles/components/actions/toolbar-text/toolbar-text.css +269 -0
  531. package/dist/styles/components/collections/framed-list/framed-list.css +47 -0
  532. package/dist/styles/components/collections/list/list.css +250 -0
  533. package/dist/styles/components/collections/list-action-row/list-action-row.css +466 -0
  534. package/dist/styles/components/collections/list-header/list-header.css +229 -0
  535. package/dist/styles/components/collections/list-inset-control/list-inset-control.css +30 -0
  536. package/dist/styles/components/collections/list-inset-text/list-inset-text.css +29 -0
  537. package/dist/styles/components/collections/list-item/list-item.css +461 -0
  538. package/dist/styles/components/collections/summary-row/summary-row.css +161 -0
  539. package/dist/styles/components/data-display/value-table/value-table.css +183 -0
  540. package/dist/styles/components/feedback/anchored-surface/anchored-surface.css +41 -0
  541. package/dist/styles/components/feedback/badge/badge.css +145 -0
  542. package/dist/styles/components/feedback/chip/chip.css +208 -0
  543. package/dist/styles/components/feedback/corner-status/corner-status.css +60 -0
  544. package/dist/styles/components/feedback/edge-activity-indicator/edge-activity-indicator.css +127 -0
  545. package/dist/styles/components/feedback/empty-state/empty-state.css +47 -0
  546. package/dist/styles/components/feedback/loading-spinner/loading-spinner.css +25 -0
  547. package/dist/styles/components/feedback/skeleton/skeleton.css +92 -0
  548. package/dist/styles/components/feedback/state-banner/state-banner.css +297 -0
  549. package/dist/styles/components/forms/choice-chips/choice-chips.css +154 -0
  550. package/dist/styles/components/forms/combobox/combobox.css +113 -0
  551. package/dist/styles/components/forms/composer/composer.css +100 -0
  552. package/dist/styles/components/forms/file-picker/file-picker.css +81 -0
  553. package/dist/styles/components/forms/segmented-control/segmented-control.css +196 -0
  554. package/dist/styles/components/forms/select/select.css +455 -0
  555. package/dist/styles/components/forms/token-search-field/token-search-field.css +432 -0
  556. package/dist/styles/components/layout/collapsible-panel/collapsible-panel.css +580 -0
  557. package/dist/styles/components/layout/column-track/column-track.css +57 -0
  558. package/dist/styles/components/layout/content-swap/content-swap.css +154 -0
  559. package/dist/styles/components/layout/grid/grid.css +88 -0
  560. package/dist/styles/components/layout/pane/pane.css +382 -0
  561. package/dist/styles/components/layout/resizable-region/resizable-region.css +545 -0
  562. package/dist/styles/components/layout/row/row.css +114 -0
  563. package/dist/styles/components/layout/spacer/spacer.css +11 -0
  564. package/dist/styles/components/layout/split-view/split-view.css +146 -0
  565. package/dist/styles/components/layout/workbench/workbench.css +1086 -0
  566. package/dist/styles/components/media/lucide-icon/lucide-icon.css +15 -0
  567. package/dist/styles/components/navigation/app-tab/app-tab.css +384 -0
  568. package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +23 -0
  569. package/dist/styles/components/navigation/nav-stack/nav-stack.css +342 -0
  570. package/dist/styles/components/navigation/tab-bar/tab-bar.css +197 -0
  571. package/dist/styles/components/navigation/tab-navigator/tab-navigator.css +325 -0
  572. package/dist/styles/components/surfaces/content-item/content-item.css +138 -0
  573. package/dist/styles/components/surfaces/sunken-panel/sunken-panel.css +31 -0
  574. package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +425 -0
  575. package/dist/styles/components/typography/text/text.css +220 -0
  576. package/dist/styles/composer.css +100 -0
  577. package/dist/styles/content-item.css +138 -0
  578. package/dist/styles/content-swap.css +154 -0
  579. package/dist/styles/corner-status.css +60 -0
  580. package/dist/styles/document.css +98 -0
  581. package/dist/styles/edge-activity-indicator.css +127 -0
  582. package/dist/styles/file-picker.css +81 -0
  583. package/dist/styles/floating-toolbar.css +119 -0
  584. package/dist/styles/foundation.css +261 -45
  585. package/dist/styles/framed-list.css +47 -0
  586. package/dist/styles/grid.css +88 -0
  587. package/dist/styles/icon-button.css +22 -0
  588. package/dist/styles/icon-toggle-button.css +83 -0
  589. package/dist/styles/layout.css +3 -41
  590. package/dist/styles/list-action-row.css +324 -18
  591. package/dist/styles/list-header.css +128 -59
  592. package/dist/styles/list-inset-control.css +30 -0
  593. package/dist/styles/list-inset-text.css +29 -0
  594. package/dist/styles/list-item.css +371 -33
  595. package/dist/styles/list.css +250 -0
  596. package/dist/styles/loading-spinner.css +4 -0
  597. package/dist/styles/lucide-icon.css +9 -0
  598. package/dist/styles/nav-stack.css +280 -49
  599. package/dist/styles/pane.css +382 -0
  600. package/dist/styles/popup-menu.css +370 -0
  601. package/dist/styles/resizable-region.css +438 -4
  602. package/dist/styles/row.css +114 -0
  603. package/dist/styles/segmented-control.css +36 -9
  604. package/dist/styles/select.css +338 -21
  605. package/dist/styles/skeleton.css +64 -3
  606. package/dist/styles/spacer.css +11 -0
  607. package/dist/styles/split-button.css +95 -0
  608. package/dist/styles/split-view.css +114 -3
  609. package/dist/styles/state-banner.css +146 -22
  610. package/dist/styles/styles.css +23 -1
  611. package/dist/styles/summary-row.css +161 -0
  612. package/dist/styles/sunken-panel.css +31 -0
  613. package/dist/styles/surface-scaffold.css +425 -0
  614. package/dist/styles/tab-bar.css +161 -9
  615. package/dist/styles/tab-navigator.css +325 -0
  616. package/dist/styles/text.css +220 -0
  617. package/dist/styles/token-search-field.css +202 -59
  618. package/dist/styles/toolbar-control-group.css +894 -36
  619. package/dist/styles/toolbar-text.css +236 -7
  620. package/dist/styles/toolbar.css +393 -11
  621. package/dist/styles/value-table.css +115 -7
  622. package/dist/styles/webawesome.css +410 -17
  623. package/dist/styles/workbench.css +999 -7
  624. package/dist/summary-row.d.ts +56 -0
  625. package/dist/summary-row.js +4 -0
  626. package/dist/summary-row.js.map +1 -0
  627. package/dist/sunken-panel.d.ts +38 -0
  628. package/dist/sunken-panel.js +4 -0
  629. package/dist/sunken-panel.js.map +1 -0
  630. package/dist/surface-scaffold-register.d.ts +9 -0
  631. package/dist/surface-scaffold-register.js +151 -0
  632. package/dist/surface-scaffold-register.js.map +1 -0
  633. package/dist/surface-scaffold.d.ts +170 -0
  634. package/dist/surface-scaffold.js +4 -0
  635. package/dist/surface-scaffold.js.map +1 -0
  636. package/dist/tab-bar.d.ts +33 -7
  637. package/dist/tab-bar.js +1 -1
  638. package/dist/tab-navigator.d.ts +114 -0
  639. package/dist/tab-navigator.js +102 -0
  640. package/dist/tab-navigator.js.map +1 -0
  641. package/dist/text.d.ts +98 -0
  642. package/dist/text.js +3 -0
  643. package/dist/text.js.map +1 -0
  644. package/dist/token-search-field.d.ts +3 -43
  645. package/dist/token-search-field.js +2 -1
  646. package/dist/token-search-model-aYR0YAei.d.ts +184 -0
  647. package/dist/token-search-model.d.ts +3 -0
  648. package/dist/token-search-model.js +3 -0
  649. package/dist/token-search-model.js.map +1 -0
  650. package/dist/toolbar-control-group.d.ts +96 -7
  651. package/dist/toolbar-control-group.js +3 -1
  652. package/dist/toolbar-text.d.ts +58 -9
  653. package/dist/toolbar-text.js +2 -1
  654. package/dist/toolbar.d.ts +71 -7
  655. package/dist/toolbar.js +1 -1
  656. package/dist/types-CVgIwSdq.d.ts +189 -0
  657. package/dist/value-table.d.ts +30 -4
  658. package/dist/value-table.js +2 -1
  659. package/dist/webawesome.d.ts +8 -1
  660. package/dist/wire-catalog.d.ts +111 -5
  661. package/dist/wire-catalog.js +302 -14
  662. package/dist/wire-catalog.js.map +1 -1
  663. package/dist/wire-comboboxes.d.ts +26 -0
  664. package/dist/wire-comboboxes.js +3 -0
  665. package/dist/wire-comboboxes.js.map +1 -0
  666. package/dist/wire-composers.d.ts +16 -0
  667. package/dist/wire-composers.js +3 -0
  668. package/dist/wire-composers.js.map +1 -0
  669. package/dist/wire-content-items.d.ts +11 -0
  670. package/dist/wire-content-items.js +139 -0
  671. package/dist/wire-content-items.js.map +1 -0
  672. package/dist/wire-corner-status.d.ts +11 -0
  673. package/dist/wire-corner-status.js +3 -0
  674. package/dist/wire-corner-status.js.map +1 -0
  675. package/dist/wire-file-pickers.d.ts +26 -0
  676. package/dist/wire-file-pickers.js +3 -0
  677. package/dist/wire-file-pickers.js.map +1 -0
  678. package/dist/wire-list-focus-scroll.d.ts +16 -0
  679. package/dist/wire-list-focus-scroll.js +3 -0
  680. package/dist/wire-list-focus-scroll.js.map +1 -0
  681. package/dist/wire-list-reorder.d.ts +41 -0
  682. package/dist/wire-list-reorder.js +3 -0
  683. package/dist/wire-list-reorder.js.map +1 -0
  684. package/dist/wire-nav-stack.d.ts +4 -1
  685. package/dist/wire-nav-stack.js +326 -15
  686. package/dist/wire-nav-stack.js.map +1 -1
  687. package/dist/wire-resizable-regions.d.ts +2 -1
  688. package/dist/wire-resizable-regions.js +2 -1
  689. package/dist/wire-scroll-dividers.d.ts +87 -0
  690. package/dist/wire-scroll-dividers.js +3 -0
  691. package/dist/wire-scroll-dividers.js.map +1 -0
  692. package/dist/wire-sidebar.d.ts +24 -4
  693. package/dist/wire-sidebar.js +159 -45
  694. package/dist/wire-sidebar.js.map +1 -1
  695. package/dist/wire-tab-bars.d.ts +6 -2
  696. package/dist/wire-tab-bars.js +1 -1
  697. package/dist/wire-tab-navigator.d.ts +13 -0
  698. package/dist/wire-tab-navigator.js +153 -0
  699. package/dist/wire-tab-navigator.js.map +1 -0
  700. package/dist/wire-token-search-fields.d.ts +28 -10
  701. package/dist/wire-token-search-fields.js +2 -1
  702. package/dist/wire-toolbar-visibility.d.ts +13 -0
  703. package/dist/wire-toolbar-visibility.js +3 -0
  704. package/dist/wire-toolbar-visibility.js.map +1 -0
  705. package/dist/wire-workbench.d.ts +116 -0
  706. package/dist/wire-workbench.js +6 -0
  707. package/dist/wire-workbench.js.map +1 -0
  708. package/dist/workbench.d.ts +253 -10
  709. package/dist/workbench.js +20 -15
  710. package/dist/workbench.js.map +1 -1
  711. package/docs/accessibility.md +640 -33
  712. package/docs/anchored-surface.md +101 -0
  713. package/docs/app-layouts.md +159 -10
  714. package/docs/apple-hig.md +2 -0
  715. package/docs/catalog.md +565 -63
  716. package/docs/collapsible-panel.md +308 -25
  717. package/docs/component-contract.md +816 -53
  718. package/docs/component-integration.md +75 -0
  719. package/docs/component-selection.md +962 -99
  720. package/docs/composer.md +143 -0
  721. package/docs/design/templates/choice-chips/color-palette-dark.svg +1 -0
  722. package/docs/design/templates/choice-chips/color-palette.svg +1 -0
  723. package/docs/design/templates/choice-chips/compact-icons-dark.svg +1 -0
  724. package/docs/design/templates/choice-chips/compact-icons.svg +1 -0
  725. package/docs/design/templates/choice-chips/multiple-dark.svg +1 -0
  726. package/docs/design/templates/choice-chips/multiple.svg +1 -0
  727. package/docs/design/templates/choice-chips-dark.svg +1 -0
  728. package/docs/design/templates/choice-chips.svg +1 -0
  729. package/docs/design/templates/composer/chat-dark.svg +1 -0
  730. package/docs/design/templates/composer/chat.svg +1 -0
  731. package/docs/design/templates/composer/prompt-dark.svg +1 -0
  732. package/docs/design/templates/composer/prompt.svg +1 -0
  733. package/docs/design/templates/composer-dark.svg +1 -0
  734. package/docs/design/templates/composer.svg +1 -0
  735. package/docs/design/templates/empty-state/filtered-dark.svg +1 -0
  736. package/docs/design/templates/empty-state/filtered.svg +1 -0
  737. package/docs/design/templates/empty-state/with-action-dark.svg +1 -0
  738. package/docs/design/templates/empty-state/with-action.svg +1 -0
  739. package/docs/design/templates/empty-state-dark.svg +1 -0
  740. package/docs/design/templates/empty-state.svg +1 -0
  741. package/docs/design/templates/list/compact-dark.svg +1 -0
  742. package/docs/design/templates/list/compact.svg +1 -0
  743. package/docs/design/templates/list/stack-dark.svg +1 -0
  744. package/docs/design/templates/list/stack.svg +1 -0
  745. package/docs/design/templates/list-action-row/default-dark.svg +1 -0
  746. package/docs/design/templates/list-action-row/default.svg +1 -0
  747. package/docs/design/templates/list-action-row/icon-tile-dark.svg +1 -0
  748. package/docs/design/templates/list-action-row/icon-tile.svg +1 -0
  749. package/docs/design/templates/list-action-row/selected-dark.svg +1 -0
  750. package/docs/design/templates/list-action-row/selected.svg +1 -0
  751. package/docs/design/templates/list-action-row/trailing-menu-dark.svg +1 -0
  752. package/docs/design/templates/list-action-row/trailing-menu.svg +1 -0
  753. package/docs/design/templates/list-action-row-dark.svg +1 -0
  754. package/docs/design/templates/list-action-row.svg +1 -0
  755. package/docs/design/templates/list-dark.svg +1 -0
  756. package/docs/design/templates/list-header/action-dark.svg +1 -0
  757. package/docs/design/templates/list-header/action.svg +1 -0
  758. package/docs/design/templates/list-header/count-dark.svg +1 -0
  759. package/docs/design/templates/list-header/count.svg +1 -0
  760. package/docs/design/templates/list-header/inline-action-dark.svg +1 -0
  761. package/docs/design/templates/list-header/inline-action.svg +1 -0
  762. package/docs/design/templates/list-header/size-l-dark.svg +1 -0
  763. package/docs/design/templates/list-header/size-l.svg +1 -0
  764. package/docs/design/templates/list-header/size-m-dark.svg +1 -0
  765. package/docs/design/templates/list-header/size-m.svg +1 -0
  766. package/docs/design/templates/list-header/size-xl-dark.svg +1 -0
  767. package/docs/design/templates/list-header/size-xl.svg +1 -0
  768. package/docs/design/templates/list-header/size-xs-dark.svg +1 -0
  769. package/docs/design/templates/list-header/size-xs.svg +1 -0
  770. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -0
  771. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -0
  772. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -0
  773. package/docs/design/templates/list-header/toggle-expanded.svg +1 -0
  774. package/docs/design/templates/list-header-dark.svg +1 -0
  775. package/docs/design/templates/list-header.svg +1 -0
  776. package/docs/design/templates/list-item/default-dark.svg +1 -0
  777. package/docs/design/templates/list-item/default.svg +1 -0
  778. package/docs/design/templates/list-item/icon-tile-dark.svg +1 -0
  779. package/docs/design/templates/list-item/icon-tile.svg +1 -0
  780. package/docs/design/templates/list-item/multiline-dark.svg +1 -0
  781. package/docs/design/templates/list-item/multiline.svg +1 -0
  782. package/docs/design/templates/list-item/selected-dark.svg +1 -0
  783. package/docs/design/templates/list-item/selected.svg +1 -0
  784. package/docs/design/templates/list-item/trailing-dark.svg +1 -0
  785. package/docs/design/templates/list-item/trailing.svg +1 -0
  786. package/docs/design/templates/list-item-dark.svg +1 -0
  787. package/docs/design/templates/list-item.svg +1 -0
  788. package/docs/design/templates/list.svg +1 -0
  789. package/docs/design/templates/segmented-control/equal-dark.svg +1 -0
  790. package/docs/design/templates/segmented-control/equal.svg +1 -0
  791. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -0
  792. package/docs/design/templates/segmented-control/pill-small.svg +1 -0
  793. package/docs/design/templates/segmented-control-dark.svg +1 -0
  794. package/docs/design/templates/segmented-control.svg +1 -0
  795. package/docs/design/templates/skeleton/avatar-dark.svg +1 -0
  796. package/docs/design/templates/skeleton/avatar.svg +1 -0
  797. package/docs/design/templates/skeleton/block-dark.svg +1 -0
  798. package/docs/design/templates/skeleton/block.svg +1 -0
  799. package/docs/design/templates/skeleton/lines-dark.svg +1 -0
  800. package/docs/design/templates/skeleton/lines.svg +1 -0
  801. package/docs/design/templates/skeleton-dark.svg +1 -0
  802. package/docs/design/templates/skeleton.svg +1 -0
  803. package/docs/design/templates/state-banner/danger-dark.svg +1 -0
  804. package/docs/design/templates/state-banner/danger.svg +1 -0
  805. package/docs/design/templates/state-banner/info-badge-dark.svg +1 -0
  806. package/docs/design/templates/state-banner/info-badge.svg +1 -0
  807. package/docs/design/templates/state-banner/info-dark.svg +1 -0
  808. package/docs/design/templates/state-banner/info.svg +1 -0
  809. package/docs/design/templates/state-banner/strip-dark.svg +1 -0
  810. package/docs/design/templates/state-banner/strip.svg +1 -0
  811. package/docs/design/templates/state-banner/success-dark.svg +1 -0
  812. package/docs/design/templates/state-banner/success.svg +1 -0
  813. package/docs/design/templates/state-banner/warning-dark.svg +1 -0
  814. package/docs/design/templates/state-banner/warning.svg +1 -0
  815. package/docs/design/templates/state-banner-dark.svg +1 -0
  816. package/docs/design/templates/state-banner.svg +1 -0
  817. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -0
  818. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -0
  819. package/docs/design/templates/tab-bar-dark.svg +1 -0
  820. package/docs/design/templates/tab-bar.svg +1 -0
  821. package/docs/design/templates/token-search-field/empty-dark.svg +1 -0
  822. package/docs/design/templates/token-search-field/empty.svg +1 -0
  823. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -0
  824. package/docs/design/templates/token-search-field/tokens.svg +1 -0
  825. package/docs/design/templates/token-search-field-dark.svg +1 -0
  826. package/docs/design/templates/token-search-field.svg +1 -0
  827. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -0
  828. package/docs/design/templates/toolbar/title-and-actions.svg +1 -0
  829. package/docs/design/templates/toolbar/width-visibility-320-dark.svg +1 -0
  830. package/docs/design/templates/toolbar/width-visibility-320.svg +1 -0
  831. package/docs/design/templates/toolbar/width-visibility-600-dark.svg +1 -0
  832. package/docs/design/templates/toolbar/width-visibility-600.svg +1 -0
  833. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -1
  834. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -1
  835. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -1
  836. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -1
  837. package/docs/design/templates/toolbar-control-group/icon-tile-brand-dark.svg +1 -0
  838. package/docs/design/templates/toolbar-control-group/icon-tile-brand.svg +1 -0
  839. package/docs/design/templates/toolbar-control-group/icon-tile-danger-dark.svg +1 -0
  840. package/docs/design/templates/toolbar-control-group/icon-tile-danger.svg +1 -0
  841. package/docs/design/templates/toolbar-control-group/icon-tile-neutral-dark.svg +1 -0
  842. package/docs/design/templates/toolbar-control-group/icon-tile-neutral.svg +1 -0
  843. package/docs/design/templates/toolbar-control-group/icon-tile-success-dark.svg +1 -0
  844. package/docs/design/templates/toolbar-control-group/icon-tile-success.svg +1 -0
  845. package/docs/design/templates/toolbar-control-group/icon-tile-warning-dark.svg +1 -0
  846. package/docs/design/templates/toolbar-control-group/icon-tile-warning.svg +1 -0
  847. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -1
  848. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -1
  849. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
  850. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
  851. package/docs/design/templates/toolbar-control-group-dark.svg +1 -11
  852. package/docs/design/templates/toolbar-control-group.svg +1 -11
  853. package/docs/design/templates/toolbar-dark.svg +1 -0
  854. package/docs/design/templates/toolbar-text/dark-tone-dark.svg +1 -0
  855. package/docs/design/templates/toolbar-text/dark-tone.svg +1 -0
  856. package/docs/design/templates/toolbar-text/default-dark.svg +1 -0
  857. package/docs/design/templates/toolbar-text/default.svg +1 -0
  858. package/docs/design/templates/toolbar-text/large-dark.svg +1 -0
  859. package/docs/design/templates/toolbar-text/large.svg +1 -0
  860. package/docs/design/templates/toolbar-text/small-dark.svg +1 -0
  861. package/docs/design/templates/toolbar-text/small.svg +1 -0
  862. package/docs/design/templates/toolbar-text-dark.svg +1 -0
  863. package/docs/design/templates/toolbar-text.svg +1 -0
  864. package/docs/design/templates/toolbar.svg +1 -0
  865. package/docs/design/templates/value-table/details-dark.svg +1 -0
  866. package/docs/design/templates/value-table/details.svg +1 -0
  867. package/docs/design/templates/value-table-dark.svg +1 -0
  868. package/docs/design/templates/value-table.svg +1 -0
  869. package/docs/design/templates.md +75 -18
  870. package/docs/design-philosophy.md +65 -20
  871. package/docs/device-class.md +10 -9
  872. package/docs/document-baseline.md +93 -0
  873. package/docs/examples/application-ui-profile.json +60 -0
  874. package/docs/examples/command-palette-adapter.tsx +69 -17
  875. package/docs/examples/component-catalog-extension.json +52 -0
  876. package/docs/examples/component-composition-extension.json +80 -0
  877. package/docs/layout.md +796 -53
  878. package/docs/nav-stack.md +287 -14
  879. package/docs/recipes.md +129 -73
  880. package/docs/split-view.md +96 -7
  881. package/docs/sunken-panel.md +106 -0
  882. package/docs/surface-scaffold.md +270 -0
  883. package/docs/tab-navigator.md +255 -0
  884. package/docs/type-contracts.md +137 -0
  885. package/docs/ui-analyzer.md +406 -0
  886. package/docs/ui-doctor.md +281 -0
  887. package/docs/ui-evaluator.md +139 -0
  888. package/docs/ux-demo.md +48 -17
  889. package/docs/webawesome-theme.md +215 -16
  890. package/docs/workbench.md +627 -12
  891. package/docs/writing.md +152 -0
  892. package/doctor/cli.mjs +120 -0
  893. package/doctor/component-style-checks.mjs +457 -0
  894. package/doctor/config.schema.json +94 -0
  895. package/doctor/copy-capitalization-checks.mjs +591 -0
  896. package/doctor/eslint-diagnostics.d.mts +24 -0
  897. package/doctor/eslint-diagnostics.mjs +24 -0
  898. package/doctor/index.d.mts +122 -0
  899. package/doctor/index.mjs +1424 -0
  900. package/doctor/report.schema.json +118 -0
  901. package/evaluator/cli.mjs +89 -0
  902. package/evaluator/index.d.mts +90 -0
  903. package/evaluator/index.mjs +1203 -0
  904. package/evaluator/report.schema.json +152 -0
  905. package/llms.txt +770 -50
  906. package/package.json +345 -27
  907. package/scripts/component-catalog-extension-validation.mjs +28 -0
  908. package/traversal-exclusions.mjs +86 -0
  909. package/ux-demo/recipes/app-shell.tsx +204 -16
  910. package/ux-demo/recipes/collapsible-sidebar.tsx +206 -45
  911. package/ux-demo/recipes/compact-toolbar.tsx +135 -14
  912. package/ux-demo/recipes/composer-form.tsx +133 -21
  913. package/ux-demo/recipes/list-detail-dialog.tsx +255 -14
  914. package/ux-demo/recipes/list-workspace-states.tsx +183 -11
  915. package/ux-demo/recipes/loaders.ts +9 -3
  916. package/ux-demo/recipes/loading-inspector.tsx +162 -39
  917. package/ux-demo/recipes/mount-recipe.ts +26 -10
  918. package/ux-demo/recipes/navigation-sidebar.tsx +137 -11
  919. package/ux-demo/recipes/navigation-stack.tsx +79 -24
  920. package/ux-demo/recipes/types.ts +17 -2
  921. package/ux-demo/recipes/workspace-header.tsx +86 -5
  922. package/vite-ux-review.d.mts +83 -0
  923. package/vite-ux-review.mjs +120 -0
  924. package/dist/browser/panel-header.js +0 -7
  925. package/dist/chunk-2Z5TWHKQ.js +0 -34
  926. package/dist/chunk-2Z5TWHKQ.js.map +0 -1
  927. package/dist/chunk-37T3VNIZ.js +0 -19
  928. package/dist/chunk-37T3VNIZ.js.map +0 -1
  929. package/dist/chunk-55DATV3A.js +0 -10
  930. package/dist/chunk-55DATV3A.js.map +0 -1
  931. package/dist/chunk-56RJXPHG.js.map +0 -1
  932. package/dist/chunk-7BR3DO2A.js +0 -31
  933. package/dist/chunk-7BR3DO2A.js.map +0 -1
  934. package/dist/chunk-7JB7VPRI.js +0 -34
  935. package/dist/chunk-7JB7VPRI.js.map +0 -1
  936. package/dist/chunk-7LDCTU7D.js +0 -134
  937. package/dist/chunk-7LDCTU7D.js.map +0 -1
  938. package/dist/chunk-AQNKJRFH.js +0 -79
  939. package/dist/chunk-AQNKJRFH.js.map +0 -1
  940. package/dist/chunk-AVZHJN6C.js +0 -14
  941. package/dist/chunk-AVZHJN6C.js.map +0 -1
  942. package/dist/chunk-B24C4A6T.js +0 -22
  943. package/dist/chunk-B24C4A6T.js.map +0 -1
  944. package/dist/chunk-BLK3UEEI.js +0 -23
  945. package/dist/chunk-BLK3UEEI.js.map +0 -1
  946. package/dist/chunk-CVZYNJJ5.js +0 -265
  947. package/dist/chunk-CVZYNJJ5.js.map +0 -1
  948. package/dist/chunk-DAFFDO33.js +0 -14
  949. package/dist/chunk-DAFFDO33.js.map +0 -1
  950. package/dist/chunk-I7INRJO4.js +0 -17
  951. package/dist/chunk-I7INRJO4.js.map +0 -1
  952. package/dist/chunk-L4OKFDJY.js +0 -24
  953. package/dist/chunk-L4OKFDJY.js.map +0 -1
  954. package/dist/chunk-LC3YSAZC.js +0 -39
  955. package/dist/chunk-LC3YSAZC.js.map +0 -1
  956. package/dist/chunk-M5JRI6MN.js +0 -27
  957. package/dist/chunk-M5JRI6MN.js.map +0 -1
  958. package/dist/chunk-MFKMHK5W.js +0 -10
  959. package/dist/chunk-MFKMHK5W.js.map +0 -1
  960. package/dist/chunk-RUNWEPR4.js +0 -10
  961. package/dist/chunk-RUNWEPR4.js.map +0 -1
  962. package/dist/chunk-W2FK7ZNY.js +0 -26
  963. package/dist/chunk-W2FK7ZNY.js.map +0 -1
  964. package/dist/chunk-W5EQ3HYQ.js +0 -42
  965. package/dist/chunk-W5EQ3HYQ.js.map +0 -1
  966. package/dist/chunk-WVPYVDXY.js +0 -15
  967. package/dist/chunk-WVPYVDXY.js.map +0 -1
  968. package/dist/chunk-XXMOARTH.js +0 -229
  969. package/dist/chunk-XXMOARTH.js.map +0 -1
  970. package/dist/chunk-Y5MRDTLC.js +0 -20
  971. package/dist/chunk-Y5MRDTLC.js.map +0 -1
  972. package/dist/chunk-YGN7OMLT.js.map +0 -1
  973. package/dist/panel-header.d.ts +0 -36
  974. package/dist/panel-header.js +0 -7
  975. package/dist/panel-header.js.map +0 -1
  976. package/dist/styles/panel-header.css +0 -64
  977. package/dist/styles/tab-scaffold.css +0 -84
  978. package/dist/tab-scaffold.d.ts +0 -30
  979. package/dist/tab-scaffold.js +0 -16
  980. package/dist/tab-scaffold.js.map +0 -1
  981. package/dist/wire-tab-scaffold.d.ts +0 -11
  982. package/dist/wire-tab-scaffold.js +0 -16
  983. package/dist/wire-tab-scaffold.js.map +0 -1
  984. package/docs/design/templates/panel-header/icon-actions-dark.svg +0 -1
  985. package/docs/design/templates/panel-header/icon-actions.svg +0 -1
  986. package/docs/design/templates/panel-header/icon-summary-actions-dark.svg +0 -1
  987. package/docs/design/templates/panel-header/icon-summary-actions.svg +0 -1
  988. package/docs/design/templates/panel-header/no-icon-dark.svg +0 -1
  989. package/docs/design/templates/panel-header/no-icon.svg +0 -1
  990. package/docs/design/templates/panel-header/page-heading-dark.svg +0 -1
  991. package/docs/design/templates/panel-header/page-heading.svg +0 -1
  992. package/docs/design/templates/panel-header/title-only-dark.svg +0 -1
  993. package/docs/design/templates/panel-header/title-only.svg +0 -1
  994. package/docs/design/templates/panel-header-dark.svg +0 -13
  995. package/docs/design/templates/panel-header.svg +0 -13
  996. package/docs/tab-scaffold.md +0 -41
  997. package/ux-demo/recipes/recipes.css +0 -448
@@ -7,15 +7,29 @@ tokens and styles, representative sample data). They're for design review,
7
7
  documentation, figma/paste hand-off, and any surface that wants an accurate
8
8
  component picture without running the app.
9
9
 
10
+ ## Coverage
11
+
12
+ Templated components (each with light + dark variants):
13
+ `ToolbarControlGroup`, `Toolbar`, `ToolbarText`, `List`, `ListItem`, `ListHeader`,
14
+ `ListActionRow`, `ValueTable`, `StateBanner`, `EmptyState`, `Skeleton`,
15
+ `SegmentedControl`, `TabBar`/`AppTab`, and `TokenSearchField`.
16
+
17
+ Deliberately **not** templated (they don't read as a single static component
18
+ picture): `Select` renders a Web Awesome custom element that needs its runtime
19
+ registered, so it has no faithful static capture; `LucideIcon` and
20
+ `DisclosureArrow` are decorative primitives best seen inside the components that
21
+ use them; `ResizableRegion` and the whole-screen layouts (`NavStack`,
22
+ `SplitView`, `Workbench`, `TabNavigator`) and the `Catalog` shell are
23
+ interaction-/viewport-driven screens rather than component cards — the live UX
24
+ catalog and the app-layouts docs cover those.
25
+
10
26
  ## Layout
11
27
 
12
28
  ```
13
29
  docs/design/templates/
14
- panel-header.svg ← library: every variant, inlined (light)
15
- panel-header-dark.svg ← library: dark theme
16
- panel-header/
17
- icon-summary-actions.svg ← one self-contained variant (light)
18
- icon-summary-actions-dark.svg ← the same variant, dark theme
30
+ toolbar.svg ← library: every variant, composed (light)
31
+ toolbar-dark.svg ← library: dark theme
32
+ toolbar/
19
33
  icon-actions.svg
20
34
  icon-actions-dark.svg
21
35
  …
@@ -34,13 +48,12 @@ docs/design/templates/
34
48
  kerf UI design font stack is system-based, so the picture matches; a viewer
35
49
  without those fonts falls back to its own.
36
50
  - The **library** files (`<component>.svg` light, `<component>-dark.svg` dark) lay
37
- the variants out with captions and embed an inline **copy** of each variant as a
38
- positioned nested `<svg>`. Each is fully self-contained and renders everywhere —
39
- a browser, an `<img>`, GitHub, or a static rasterizer. (External
40
- `<use href="…#id">` and `<image href="…">` references render blank in many SVG
41
- viewers, so the library inlines copies instead. Each copy's local ids and
42
- domotion font-family names are namespaced so the inlined variants don't collide
43
- in the one document; the individual variant files stay individually reusable.)
51
+ the variants out with captions. The generator writes a temporary HTML page whose
52
+ `<img>` elements reference the individual variant SVGs, then captures that page
53
+ with domotion and `--flatten-nested-svg`. The final library is self-contained,
54
+ contains positioned groups rather than nested `<svg>` elements, and remains
55
+ reliable in design tools such as Sketch. The individual variant files stay
56
+ independently reusable.
44
57
 
45
58
  ## Building
46
59
 
@@ -51,15 +64,48 @@ npm run design-templates:build
51
64
  This renders each component's real `SafeHtml` (with its CSS subpaths + `foundation.css`
52
65
  tokens and representative sample data) into a standalone page and captures it with
53
66
  [`domotion-svg`](https://github.com/brianwestphal/domotion)'s `domotion capture`.
67
+ The capture command uses `--flatten-nested-svg`, which converts safely flattenable
68
+ inline SVGs (including component icons) to groups so design tools such as Sketch do
69
+ not have to interpret nested `<svg>` elements.
54
70
  `domotion` must be reachable: it resolves `DOMOTION_BIN`, then a local
55
71
  `node_modules/.bin/domotion`, then a sibling `../domotion` checkout.
56
72
 
73
+ Each manifest entry's `css` list names the stylesheets a template starts from; the
74
+ build expands every component in it through that component's generated browser
75
+ entry (`dist/browser/<name>.js`), which imports every stylesheet the component's
76
+ runtime reaches. A nested component's styles — the `Badge` inside `StateBanner` or
77
+ `ListHeader`, the `Skeleton` inside a placeholder — are therefore loaded exactly as a
78
+ consumer's browser import loads them, instead of depending on a hand-maintained
79
+ list. Run `npm run build` before the template build so those entries exist.
80
+
57
81
  **Keep the templates current as components change.** The variants live in the
58
82
  `COMPONENTS` manifest in `scripts/build-design-templates.mjs` — when a component
59
- gains or changes a presentation combination (e.g. a new `PanelHeader` slot), add
83
+ gains or changes a presentation combination (e.g. a new `Toolbar` slot), add
60
84
  or adjust its variant there and re-run the build. Cover the common cases: if a
61
85
  component can render with or without an icon, include both.
62
86
 
87
+ `npm run check:design-templates` (part of `npm run check`) is an offline gate
88
+ that verifies every component + variant in the manifest has its committed output —
89
+ a light and dark SVG per variant plus the two per-component library files — and
90
+ that no stray template files linger for a removed component. It also rejects any
91
+ variant or library capture that still contains nested `<svg>` elements, guarding
92
+ the Sketch compatibility contract. It does **not**
93
+ re-render (that needs domotion + a browser), so it catches a manifest entry whose
94
+ templates were never generated or a half-regenerated set.
95
+
96
+ Deeper **visual drift** — a component changed but its template was not regenerated —
97
+ is caught by `npm run check:design-templates:drift`, a CI-only gate (it runs in a
98
+ dedicated macOS browser job, **not** in the offline `npm run check`). The committed
99
+ templates use system-font text, whose layout metrics differ by operating system, so
100
+ macOS is the canonical exact-render environment for both generation and comparison.
101
+ The capture fixture also pins its monospace token to `Courier New`; otherwise
102
+ `ui-monospace` resolves to different fonts on developer and hosted macOS machines.
103
+ The gate regenerates every template into a throwaway directory and fails if any
104
+ regenerated SVG differs from the committed one, after normalizing the bits that
105
+ legitimately vary between runs (XML comments and the auto-minted element ids / font
106
+ names). If it fails, run `npm run design-templates:build` on macOS and commit the
107
+ updated SVGs.
108
+
63
109
  ## Templating your own components
64
110
 
65
111
  Apps that build on `@kerfjs/ui` can produce the same design templates for their
@@ -70,14 +116,25 @@ starting point and:
70
116
  sample data (pass icon/action slots as `SafeHtml`, e.g. `LucideIcon({ … })` or
71
117
  `raw('<button …>')` — never plain strings, which kerf escapes).
72
118
  2. List the component's CSS (its `@kerfjs/ui` subpaths plus `foundation.css` for
73
- tokens and `layout.css`), and any of your own component CSS.
119
+ tokens and `layout.css`), and any of your own component CSS. Include the CSS of
120
+ every `@kerfjs/ui` component it renders inside itself (a `Badge`, a `Skeleton`),
121
+ or expand the list the way `resolveTemplateStyles()` does.
74
122
  3. Enumerate the presentation combinations in the per-component manifest.
75
123
  4. Capture each variant with `domotion capture <page.html> --selector <css>
76
- --text-mode system-font -o <variant>.svg`, once per theme with
124
+ --text-mode system-font --flatten-nested-svg -o <variant>.svg`, once per theme with
77
125
  `--color-scheme light` / `--color-scheme dark` (if your components theme with
78
- `light-dark()`), then write a light and a dark library file that each embed an
79
- inline copy of every variant (namespacing each copy's ids/font-family names so
80
- they don't collide) rather than referencing them, so they render everywhere.
126
+ `light-dark()`).
127
+ 5. Build a light and dark HTML library page that references the generated variants
128
+ with `<img src="./component/variant.svg">`, and capture each page with the same
129
+ domotion options, including `--flatten-nested-svg`. Let domotion own embedding,
130
+ id isolation, and flattening instead of hand-assembling SVG markup.
81
131
 
82
132
  Maintaining these next to the components — and reviewing the captured SVGs on
83
133
  every component change — keeps the design source of truth honest.
134
+
135
+ ListItem templates retain the shared 18px leading icon and 44px row target;
136
+ regenerate both themes and library sheets when that geometry changes. The browser
137
+ pane/sidebar geometry checks cover the resulting 43px icon-label offset from the
138
+ section edge (17px content inset + 18px icon + 8px gap).
139
+
140
+ For a focused update, pass component names: `npm run design-templates:build -- toolbar`. Omit them to capture all components. Toolbar width variants use the real `wireToolbarVisibility` helper after rendering typed props. The `ListActionRow` "Trailing overflow menu" variant renders a real `trailingMenu` `PopupMenu`. Its trigger is a native button inside Web Awesome's shadow root, and domotion cannot read that button's author styles. A registered trigger would therefore be captured as a raster image, which also stops the library sheet from flattening. The capture instead leaves the PopupMenu unregistered. The template-only `staticPopupMenuTriggerCss` gives the trigger host the geometry `popup-menu.css` gives its `::part(base)` in a row: a 44px-wide box, as tall as the row, with the 16px icon centered. It also hides the closed menu's items. The icon lands at the same position as in a registered capture.
@@ -18,26 +18,50 @@ A reference image defines hierarchy, relationships, and intended feel. It does n
18
18
 
19
19
  ### Continuity is correctness
20
20
 
21
- Unrelated updates must not close controls, move focus, reset a draft, replace a selection, or jump scroll. Give every durable and transient state an explicit owner. The default owner is the application: domain data and persisted layout preferences — a navigation stack, a selection, a tab order, a pane size, a `collapsed`/`expanded` disclosure flag — are the app's signals, which it reads to render. A `wire…` helper owns only the *ephemeral mechanics* around that state (a push/pop animation, overflow autoscroll, a live resize preview) and reports committed changes through callbacks. A helper takes over a piece of transient state itself only when hand-rolling that behavior is substantial and error-prone enough to cause real, inconsistent variation across apps — `wireTokenSearchFields`'s collapsible reveal/focus/Escape/blur-collapse is the bar; a one-line boolean toggle is not. Preserve DOM identity when meaning has not changed. Distinguish blocking foreground work from background synchronization.
21
+ Unrelated updates must not close controls, move focus, reset a draft, replace a selection, or jump scroll. Give every durable and transient state an explicit owner. The default owner is the application: domain data and persisted layout preferences — a navigation stack, a selection, a tab order, a pane size, a `collapsed`/`expanded` disclosure flag — are the app's signals, which it reads to render. A `wire…` helper owns only the _ephemeral mechanics_ around that state (a push/pop animation, overflow autoscroll, a live resize preview) and reports committed changes through callbacks. A helper takes over a piece of transient state itself only when hand-rolling that behavior is substantial and error-prone enough to cause real, inconsistent variation across apps — `wireTokenSearchFields`'s collapsible reveal/focus/Escape/blur-collapse is the bar; a one-line boolean toggle is not. Preserve DOM identity when meaning has not changed. Distinguish blocking foreground work from background synchronization.
22
22
 
23
23
  ### Hierarchy precedes decoration
24
24
 
25
- Establish one reading order and one dominant action per decision point. Group first with alignment, spacing, typography, and shared surfaces. A border, fill, badge, or nested card must communicate a real distinction.
25
+ Establish one reading order and one dominant action per decision point. Group first with alignment, spacing, typography, and shared surfaces. A border, fill, badge, or nested card must communicate a real distinction. A divider is chrome too: a line between a pane's own header and its list, or under a toolbar whose content already spaces itself, marks nothing and is dropped (`dividerSides=""`), never padded around. Put a control near where its effect appears — a collapsed drawer's restore beside the drawer, not in a distant top toolbar.
26
26
 
27
27
  ### Reach for the primitive, not for CSS
28
28
 
29
- The package is designed to look right *unstyled*. A screen built from the
29
+ The package is designed to look right _unstyled_. A screen built from the
30
30
  primitives, their props, and the semantic tokens should already read well, so
31
- custom CSS is the exception. Before adding any `padding`, `margin`, `width`,
31
+ applications do not carry a component-customization stylesheet. Prefer a Kerf
32
+ UI component over a Web Awesome component over a raw HTML tag, using each for
33
+ what it is good at; a `Discouraged` Web Awesome element is reached only through
34
+ the Kerf component that wraps it (`PopupMenu`, `Select`), never rendered
35
+ directly. Before adding any `padding`, `margin`, `width`,
32
36
  `height`, `border`, `background`, wrapper card, or decoration, check whether the
33
37
  component, the pane, or the content-item already owns it — it almost always does,
34
38
  and adding more usually **double-insets** or fights the component (the most common
35
39
  mistake). Trust component defaults: render a control at its natural size and color
36
40
  and fix the surrounding layout rather than overriding the control. Legitimate
37
- custom CSS is limited to genuinely new structure, and even then may only join a
38
- component's documented `publicClasses` or override documented `--kui-*` tokens at a
39
- real composition boundary — never size, space, or re-skin a primitive by hand, and
40
- never build a heading, toolbar, card, or pane geometry that a primitive provides.
41
+ CSS for genuinely new structure belongs to the application-owned component that
42
+ renders that structure. It must not select a nested Kerf or Web Awesome component;
43
+ configure those children through props and documented tokens instead. Never size,
44
+ space, or re-skin a primitive by hand, and never build a heading, toolbar, card,
45
+ or pane geometry that a primitive provides.
46
+
47
+ ### Components own their styles; configure, never override
48
+
49
+ Every component styles only itself. How it looks and sits is configuration —
50
+ typed props and data attributes such as size, density, inset, presentation,
51
+ tone, `dividerSides`, `ToolbarConfig`, and `PaneConfig` — never a stylesheet
52
+ somewhere else reaching into it. When a component must adapt inside another
53
+ (a `PopupMenu` inside a compact `ToolbarControlGroup`, an `AppTab` in a
54
+ segmented `TabBar`), the **child** styles itself in that context, in its own
55
+ stylesheet; the parent keys only its own elements on a child's state
56
+ (`:has(> .kui-select[open])`) and names kerf children by class, not by `wa-*`
57
+ tag. Values a parent provides to its children are custom properties named after
58
+ the parent. A component never writes another component's private variables and
59
+ never puts a hook class on a child's root to restyle it.
60
+
61
+ The same holds for applications and component packages built on Kerf UI: expose
62
+ configuration on your own components, configure kerf components through their
63
+ props, and treat a missing prop as a component gap to report, not a reason to
64
+ override. `npm run check:css-ownership` enforces this inside the package.
41
65
 
42
66
  ### Panes share one child-owned geometry
43
67
 
@@ -45,21 +69,23 @@ Sidebars, main areas, inspectors, and dialogs use the same unpadded pane. Their
45
69
  children own margin, border, background, padding, and radius, so a transparent
46
70
  surface occupies exactly the same geometry as a visible one. Major content
47
71
  groups use 24px vertical separation; the inside of an item and the gap between
48
- toolbar groups use 8px. Rows and actions keep 44px targets.
72
+ toolbar groups use 8px. Rows and actions keep 44px targets. Align text to text
73
+ and icons to icons: a title, a row label, and bare prose share one text column,
74
+ and a border is decoration, never the alignment anchor — a bordered surface
75
+ extends to the pane gutter rather than being indented so its border lines up
76
+ with a heading's text.
49
77
 
50
78
  Use the package composition so the geometry has one owner:
51
79
 
52
80
  ```tsx
53
- <aside class="kui-pane">
54
- <nav class="kui-pane__content kui-content">
81
+ <Pane element="aside" contentElement="nav" label="Workspace" contentLabel="Workspace pages">
55
82
  <section>
56
- <ListHeader label="Workspace" />
57
- <ListItem action="open" label="Inbox" icon={inboxIcon} />
58
- <ListItem action="open" label="Drafts" />
83
+ <ListHeader label="Workspace" />
84
+ <ListItem action="open" label="Inbox" icon={inboxIcon} />
85
+ <ListItem action="open" label="Drafts" />
59
86
  </section>
60
- <div class="kui-content-item">Panel contents</div>
61
- </nav>
62
- </aside>
87
+ <ContentItem>Panel contents</ContentItem>
88
+ </Pane>
63
89
  ```
64
90
 
65
91
  Do not pad the pane and then pad every wrapper. That duplicates the geometry
@@ -85,13 +111,23 @@ Use the shortest understandable, recoverable interaction. Avoid modes, dialogs,
85
111
 
86
112
  Reuse a component when surfaces share its purpose, anatomy, state model, and interaction behavior—not merely its appearance. Components expose semantic actions and explicit variants. Product-specific copy, transport, persistence, and domain states stay in application adapters.
87
113
 
114
+ ### Words follow one capitalization rule
115
+
116
+ Inconsistent capitalization reads as unfinished. Kerf follows Apple's
117
+ per-element convention: anything that names a command, control, view, or
118
+ field is title style ("Save Draft", "Workspace Settings"), and anything that
119
+ describes, explains, or reports is sentence style ("Saved just now"). Apply it
120
+ the same way on every screen; see [Writing interface copy](./writing.md).
121
+
88
122
  ### Use a finite vocabulary
89
123
 
90
124
  Color, type, spacing, radius, elevation, and motion express semantic roles. Prefer package tokens over raw values in consuming code. State is never communicated by color alone.
91
125
 
92
126
  The default vocabulary is opinionated rather than empty: neutral, brand/info,
93
- success, warning, and danger provide quiet/normal/loud fills, borders, and
94
- foregrounds compatible with Hot Sheet 2 and Web Awesome. Consumers may replace
127
+ pop, success, warning, and danger provide quiet/normal/loud fills, borders, and
128
+ foregrounds compatible with Hot Sheet 2 and Web Awesome. Pop is vibrant,
129
+ non-status emphasis for featured, novel, or celebratory content; never use it as
130
+ a success, warning, or danger substitute. Consumers may replace
95
131
  the global palette, one semantic role, or one component instance through
96
132
  documented custom properties without rewriting component CSS.
97
133
 
@@ -102,13 +138,22 @@ separation, very minor air, standard within a group, between homogeneous groups,
102
138
  and major between heterogeneous groups. Off-scale values (12px, 32px) are
103
139
  deliberate exceptions. See [`layout.md`](layout.md) "Spacing scale".
104
140
 
141
+ Empty space also has a job. Keep related controls and content close, leave more
142
+ room between distinct decisions, and let a short form or sparse state occupy
143
+ only the width it needs. Align neighboring content edges before adjusting gaps.
144
+ Do not fill an open area with a card, divider, label, or evenly stretched row
145
+ merely to use the space. Give the pane, surface, and child layout one owner each;
146
+ avoid a negative margin or spacer that only cancels an inset another component
147
+ already provides. Recheck that rhythm with side rails open and at narrow and
148
+ intermediate widths.
149
+
105
150
  ### Responsive design reprioritizes
106
151
 
107
152
  Protect primary content, readable type, recognizable icons, and usable targets. Relocate secondary information before compressing it below a usable scale. Keep one clear scroll owner per region and test narrow, wide, zoomed, and intermediate layouts.
108
153
 
109
154
  ### Production behavior is proof
110
155
 
111
- The catalog uses the same exports and CSS consumers receive. Its category-grouped master/detail layout keeps one component under review at a time, and its decorative shell consumes the same semantic palette as the component stage. Every public visual primitive has a focused route; composition demos declare their direct dependencies so reviewers can navigate both `Uses` and `Used by` relationships. Every enabled control works. Demonstrations cover meaningful variants and adverse states with realistic enough content to expose wrapping, clipping, density, and state-transition defects.
156
+ The catalog uses the same exports and CSS consumers receive. Its category-grouped master/detail layout keeps one component under review at a time, and its decorative shell consumes the same semantic palette as the component stage. Every public visual primitive has a focused route; composition demos declare their direct dependencies so reviewers can navigate both `Uses` and `Used By` relationships. Every enabled control works. Demonstrations cover meaningful variants and adverse states with realistic enough content to expose wrapping, clipping, density, and state-transition defects.
112
157
 
113
158
  ### Be platform-fluent, not platform-costumed
114
159
 
@@ -7,7 +7,7 @@ the foundation the app/dialog layouts build on (see
7
7
  [`../../docs/23-app-layouts.md`](../../docs/23-app-layouts.md)).
8
8
 
9
9
  ```ts
10
- import { deviceClass } from '@kerfjs/ui/device-class';
10
+ import { deviceClass } from "@kerfjs/ui/device-class";
11
11
 
12
12
  const device = deviceClass(); // ReadonlySignal<DeviceClass>
13
13
 
@@ -19,14 +19,14 @@ effect(() => {
19
19
 
20
20
  ## `DeviceClass`
21
21
 
22
- | Field | Meaning |
23
- | --- | --- |
24
- | `size` | `xs-mobile` \| `mobile` \| `tablet` \| `desktop` \| `xl-desktop` |
25
- | `orientation` | `portrait` \| `landscape` |
22
+ | Field | Meaning |
23
+ | ------------------------------- | -------------------------------------------------------------------------- |
24
+ | `size` | `xs-mobile` \| `mobile` \| `tablet` \| `desktop` \| `xl-desktop` |
25
+ | `orientation` | `portrait` \| `landscape` |
26
26
  | `segments` / `verticalSegments` | viewport segment counts (foldables / dual-screen); `1` on ordinary devices |
27
- | `handset` | `xs-mobile` or `mobile` |
28
- | `compact` | "one pane at a time" — a handset or a portrait tablet |
29
- | `atLeast(size)` | true when the current size is `size` or larger |
27
+ | `handset` | `xs-mobile` or `mobile` |
28
+ | `compact` | "one pane at a time" — a handset or a portrait tablet |
29
+ | `atLeast(size)` | true when the current size is `size` or larger |
30
30
 
31
31
  Reading `device.value` inside an `effect`/`computed` re-runs when the viewport
32
32
  crosses a breakpoint, rotates, or changes its segment count. One shared viewport
@@ -50,5 +50,6 @@ pure, DOM-free bucketing core.
50
50
  ## Server rendering
51
51
 
52
52
  Without a DOM, `deviceClass()` resolves to an SSR default (1024×768, landscape,
53
- one segment) and hydrates to the real class on the client. Override the assumed
53
+ one segment). That signal is a fixed snapshot — there is no hydration step; a
54
+ `deviceClass()` called in the browser reads the real viewport. Override the assumed
54
55
  viewport with `deviceClass({ ssr: { width, height } })`.
@@ -0,0 +1,93 @@
1
+ # Document baseline
2
+
3
+ Import `@kerfjs/ui/document.css` when an application wants Kerf UI to own its
4
+ document-level defaults:
5
+
6
+ ```ts
7
+ import "@kerfjs/ui/document.css";
8
+ ```
9
+
10
+ ```html
11
+ <body>
12
+ <div id="app" class="kui-app-root"></div>
13
+ </body>
14
+ ```
15
+
16
+ The opt-in stylesheet applies `border-box` sizing to every element and
17
+ pseudo-element, removes the body margin, and gives the body the foundation
18
+ font, foreground, lowered surface, and `1.45` line height. Plain links use the
19
+ semantic `--kui-color-text-link` token with zero selector specificity.
20
+ Native table cells (`th`, `td`) and form controls (`button`, `input`, `select`,
21
+ `textarea`) inherit the surrounding font family, size, and line height through
22
+ zero-specificity selectors. Table headers keep their native bold weight and
23
+ alignment, and application styles can override the baseline.
24
+
25
+ Native controls also get semantic cursors, again at zero specificity so a
26
+ component's or application's own cursor wins:
27
+
28
+ - `pointer` on enabled `button`, `a[href]`, `[role="button"]` (unless
29
+ `aria-disabled="true"`), `summary`, `select`, checkbox / radio / color /
30
+ file / button / reset / submit inputs, and a `label` wrapping an enabled
31
+ checkbox or radio;
32
+ - `not-allowed` on disabled `button`, `input`, `select`, and `textarea`, on
33
+ `[role="button"][aria-disabled="true"]`, and on a disabled `wa-button`'s
34
+ `base` part (Web Awesome leaves a pointer there);
35
+ - `text` on enabled `textarea` and text-like inputs (`text`, `search`,
36
+ `email`, `url`, `tel`, `password`, `number`, and untyped).
37
+
38
+ Applications no longer need their own global cursor policy for native
39
+ controls.
40
+
41
+ `html`, `body`, and `.kui-app-root` form a definite `height: 100%` chain. Add
42
+ `.kui-app-root` to the one direct mount container of a full-height application
43
+ whose child is a `Workbench`, `SplitView`, `NavStack`, or another percentage-
44
+ height shell. Ordinary document-flow pages can import the baseline without the
45
+ class. Do not put `.kui-app-root` on several sibling containers: each requests
46
+ the full available document height.
47
+ The class sets `height: 100%`, not a viewport minimum; the direct child shell
48
+ must also fill its parent (for example with its `fill` prop). If the host page
49
+ already supplies a definite height, use that host geometry instead.
50
+
51
+ ### Viewport-locked application shell
52
+
53
+ A shell that fills the whole window (a `Workbench` app such as Hot Sheet) can
54
+ also lock the document to the viewport:
55
+
56
+ ```html
57
+ <body>
58
+ <div id="app" class="kui-app-root" data-viewport="locked"></div>
59
+ </body>
60
+ ```
61
+
62
+ With `data-viewport="locked"` on a `.kui-app-root` that is a direct child of
63
+ `body`, `html`, `body`, and the root take `height: 100dvh` and
64
+ `overflow: clip`:
65
+
66
+ - The **dynamic** viewport height tracks the visible area as mobile browser
67
+ toolbars show and hide (iOS Safari, WKWebView), so the root is never taller
68
+ than what the person can see.
69
+ - `overflow: clip` (rather than `hidden`) leaves the document with no scroll
70
+ container at all. Neither the person, nor `scrollIntoView()`, nor focus can
71
+ leave the page scrolled: only the shell's `Pane`s scroll.
72
+
73
+ **On-screen keyboard.** `100dvh` does not shrink for the on-screen keyboard.
74
+ When a field near the bottom takes focus, iOS pans the _visual_ viewport to
75
+ reveal it and pans back when the keyboard closes; because the document itself
76
+ cannot scroll, there is no leftover document offset to restore. A field
77
+ inside a scrolling `Pane` is revealed by that Pane's own scroll. If the
78
+ layout should instead shrink above the keyboard, add
79
+ `interactive-widget=resizes-content` to the viewport meta tag on engines
80
+ that support it. Do not add scroll-restoration handlers for the document:
81
+ the locked document has no scroll position.
82
+
83
+ Leave the attribute off for document-flow pages and embedded shells; the
84
+ default `height: 100%` chain keeps those scrolling normally.
85
+
86
+ `kui-app-root` is the public class of the component catalog's
87
+ `document-baseline` entry, so `kerf-ui-doctor` and the
88
+ `kerfjs/ui-public-boundaries` ESLint rule accept it (no KUI-L101 finding).
89
+
90
+ The stylesheet is intentionally absent from `@kerfjs/ui/styles.css` and every
91
+ component browser import because its global selectors would otherwise change
92
+ consumer documents implicitly. Import it once and load application overrides
93
+ after it.
@@ -0,0 +1,60 @@
1
+ {
2
+ "$schema": "../../ai/application-ui-profile.schema.json",
3
+ "schemaVersion": 1,
4
+ "scope": "workspace",
5
+ "catalogs": [
6
+ {
7
+ "package": "@kerfjs/ui",
8
+ "selection": {
9
+ "path": "../../ai/component-catalog.json",
10
+ "schemaVersion": 1
11
+ },
12
+ "composition": {
13
+ "path": "../../ai/component-composition.json",
14
+ "schemaVersion": 1
15
+ }
16
+ },
17
+ {
18
+ "package": "@acme/ui",
19
+ "composition": {
20
+ "path": "./component-composition-extension.json",
21
+ "schemaVersion": 1
22
+ }
23
+ }
24
+ ],
25
+ "preferences": {
26
+ "application-shell": {
27
+ "preferred": "@kerfjs/ui:recipe-app-shell",
28
+ "rationale": "The workspace uses the standard resizable three-region shell."
29
+ },
30
+ "record-inspector": {
31
+ "preferred": "@acme/ui:inspector",
32
+ "rationale": "The application-owned inspector maps record policy onto Kerf panel primitives."
33
+ }
34
+ },
35
+ "theme": {
36
+ "colorScheme": "light",
37
+ "allowedColorSchemes": ["light", "dark"],
38
+ "density": "standard",
39
+ "allowedDensities": ["standard"]
40
+ },
41
+ "tokens": {
42
+ "--kui-color-brand-fill-normal": "oklch(0.62 0.16 255)"
43
+ },
44
+ "layout": {
45
+ "shell": "@kerfjs/ui:recipe-app-shell",
46
+ "pane": "@kerfjs/ui:pane",
47
+ "responsiveStrategy": "device-class",
48
+ "compactNavigation": "nav-stack",
49
+ "scrollOwnership": "one-per-pane",
50
+ "spacingScale": "kerf-five-step"
51
+ },
52
+ "exceptions": [
53
+ {
54
+ "id": "legacy-list-header",
55
+ "rules": ["KUI-C103"],
56
+ "target": "src/features/legacy-report/report-list-header.tsx",
57
+ "rationale": "The legacy report adapter owns disclosure content and its expanded state."
58
+ }
59
+ ]
60
+ }
@@ -1,5 +1,7 @@
1
1
  import '@kerfjs/ui/layout.css';
2
2
 
3
+ import { ContentItem } from '@kerfjs/ui/content-item';
4
+ import { Text } from '@kerfjs/ui/text';
3
5
  import { delegate, mount, signal } from 'kerfjs';
4
6
  import { delegateActions } from 'kerfjs/actions';
5
7
 
@@ -26,17 +28,57 @@ export function mountCommandPaletteAdapter(
26
28
  const query = signal('');
27
29
  const render = () => {
28
30
  const needle = query.value.trim().toLocaleLowerCase();
29
- const matches = commands.filter((command) => !needle ||
30
- [command.label, ...(command.keywords ?? [])].some((value) => value.toLocaleLowerCase().includes(needle)));
31
- return <section class="app-command-palette kui-content" aria-label="Command palette">
32
- <div class="kui-content-item"><label for="app-command-query">Search commands</label><input id="app-command-query" type="search" value={query.value} autocomplete="off" data-command-query /></div>
33
- <p class="kui-content-item" aria-live="polite">{matches.length} matching commands</p>
34
- <ul class="kui-content-item" aria-label="Matching commands">{matches.map((command) => <li><button type="button" data-action="run-command" data-command-id={command.id}>{command.label}</button></li>)}</ul>
35
- <footer class="kui-control-cluster kui-content-item" aria-label="Command palette actions">
36
- <button type="button" data-action="clear-query">Clear search</button>
37
- <button type="button" data-action="close-palette">Close</button>
38
- </footer>
39
- </section>;
31
+ const matches = commands.filter(
32
+ (command) =>
33
+ !needle ||
34
+ [command.label, ...(command.keywords ?? [])].some((value) =>
35
+ value.toLocaleLowerCase().includes(needle),
36
+ ),
37
+ );
38
+ return (
39
+ <section
40
+ class="app-command-palette kui-content"
41
+ aria-label="Command Palette"
42
+ >
43
+ <ContentItem>
44
+ <label for="app-command-query">Search commands</label>
45
+ <input
46
+ id="app-command-query"
47
+ type="search"
48
+ value={query.value}
49
+ autocomplete="off"
50
+ data-command-query
51
+ />
52
+ </ContentItem>
53
+ <Text class="kui-content-item" aria-live="polite">
54
+ {matches.length} matching commands
55
+ </Text>
56
+ <ul class="kui-content-item" aria-label="Matching commands">
57
+ {matches.map((command) => (
58
+ <li>
59
+ <button
60
+ type="button"
61
+ data-action="run-command"
62
+ data-command-id={command.id}
63
+ >
64
+ {command.label}
65
+ </button>
66
+ </li>
67
+ ))}
68
+ </ul>
69
+ <footer
70
+ class="kui-control-cluster kui-content-item"
71
+ aria-label="Command Palette Actions"
72
+ >
73
+ <button type="button" data-action="clear-query">
74
+ Clear Search
75
+ </button>
76
+ <button type="button" data-action="close-palette">
77
+ Close
78
+ </button>
79
+ </footer>
80
+ </section>
81
+ );
40
82
  };
41
83
 
42
84
  const stopMount = mount(root, render);
@@ -52,12 +94,22 @@ export function mountCommandPaletteAdapter(
52
94
  },
53
95
  'close-palette': onClose,
54
96
  });
55
- const stopInput = delegate<HTMLInputElement>(root, 'input', '[data-command-query]', (_event, input) => {
56
- query.value = input.value;
57
- });
58
- const stopEscape = delegate(root, 'keydown', '[data-command-query]', (event) => {
59
- if ((event as KeyboardEvent).key === 'Escape') onClose();
60
- });
97
+ const stopInput = delegate<HTMLInputElement>(
98
+ root,
99
+ 'input',
100
+ '[data-command-query]',
101
+ (_event, input) => {
102
+ query.value = input.value;
103
+ },
104
+ );
105
+ const stopEscape = delegate(
106
+ root,
107
+ 'keydown',
108
+ '[data-command-query]',
109
+ (event) => {
110
+ if ((event as KeyboardEvent).key === 'Escape') onClose();
111
+ },
112
+ );
61
113
  let disposed = false;
62
114
  return () => {
63
115
  if (disposed) return;
@@ -0,0 +1,52 @@
1
+ {
2
+ "$schema": "../../ai/component-catalog-extension.schema.json",
3
+ "schemaVersion": 1,
4
+ "package": "@acme/ui",
5
+ "description": "Application-owned components composed with Kerf UI.",
6
+ "entries": [
7
+ {
8
+ "id": "acme-filter-chip",
9
+ "name": "FilterChip",
10
+ "kind": "component",
11
+ "purpose": "A removable application filter displayed inside a token-search workflow.",
12
+ "useWhen": [
13
+ "A saved application filter needs a compact visible label and remove action."
14
+ ],
15
+ "avoidWhen": [
16
+ "The value belongs to TokenSearchField's own controlled token collection."
17
+ ],
18
+ "publicClasses": ["acme-filter-chip"],
19
+ "publicTokens": ["--acme-filter-chip-accent"],
20
+ "uses": ["chip"],
21
+ "source": "src/filter-chip.tsx",
22
+ "styleSources": ["src/filter-chip.css"],
23
+ "demoSource": "ux-demo/demos/filter-chip.tsx",
24
+ "geometry": {
25
+ "margin": "none",
26
+ "border": "self",
27
+ "padding": "self"
28
+ },
29
+ "documentation": "docs/filter-chip.md"
30
+ },
31
+ {
32
+ "id": "acme-inspector",
33
+ "name": "Inspector",
34
+ "kind": "composition",
35
+ "purpose": "An application inspector composed from Kerf panel, content, and value primitives.",
36
+ "useWhen": ["A selected record needs a titled fact-and-action region."],
37
+ "avoidWhen": ["A ValueTable alone expresses the complete interaction."],
38
+ "uses": ["acme-filter-chip", "toolbar", "value-table"],
39
+ "source": "src/inspector.tsx",
40
+ "demoSource": "ux-demo/demos/inspector.tsx",
41
+ "geometry": {
42
+ "margin": "parent",
43
+ "border": "child",
44
+ "padding": "child",
45
+ "notes": [
46
+ "The embedding pane positions the inspector; Toolbar, ValueTable, and action groups retain their own geometry."
47
+ ]
48
+ },
49
+ "documentation": "docs/inspector.md"
50
+ }
51
+ ]
52
+ }