@kerfjs/ui 5.0.0-beta.11 → 5.0.0-beta.110

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 (1358) hide show
  1. package/README.md +707 -160
  2. package/ai/application-ui-diagnostic-ids-v1.json +115 -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 +222 -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 +9111 -1376
  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 +570 -0
  20. package/ai/component-composition.d.ts +143 -0
  21. package/ai/component-composition.json +10437 -0
  22. package/ai/component-composition.schema.json +444 -0
  23. package/ai/components/README.md +206 -0
  24. package/ai/components/anchored-surface.md +99 -0
  25. package/ai/components/application-tabs.md +65 -0
  26. package/ai/components/backdrop-image.md +84 -0
  27. package/ai/components/badge.md +77 -0
  28. package/ai/components/button.md +94 -0
  29. package/ai/components/checkbox-group.md +89 -0
  30. package/ai/components/checkbox.md +90 -0
  31. package/ai/components/chip.md +80 -0
  32. package/ai/components/choice-chips.md +93 -0
  33. package/ai/components/collapsible-panel.md +103 -0
  34. package/ai/components/color-field.md +92 -0
  35. package/ai/components/color-picker.md +93 -0
  36. package/ai/components/color-swatches.md +82 -0
  37. package/ai/components/column-track.md +78 -0
  38. package/ai/components/combobox.md +90 -0
  39. package/ai/components/content-item.md +101 -0
  40. package/ai/components/content-swap.md +78 -0
  41. package/ai/components/corner-status.md +88 -0
  42. package/ai/components/disclosure-arrow.md +77 -0
  43. package/ai/components/disclosure.md +88 -0
  44. package/ai/components/document-baseline.md +77 -0
  45. package/ai/components/edge-activity-indicator.md +81 -0
  46. package/ai/components/empty-state.md +80 -0
  47. package/ai/components/feedback.md +71 -0
  48. package/ai/components/file-picker.md +89 -0
  49. package/ai/components/floating-toolbar.md +82 -0
  50. package/ai/components/foundation.md +65 -0
  51. package/ai/components/framed-list.md +80 -0
  52. package/ai/components/grid.md +101 -0
  53. package/ai/components/headers.md +63 -0
  54. package/ai/components/layout.md +75 -0
  55. package/ai/components/list-action-row.md +108 -0
  56. package/ai/components/list-detail-dialog.md +90 -0
  57. package/ai/components/list-header.md +91 -0
  58. package/ai/components/list-inset-control.md +74 -0
  59. package/ai/components/list-inset-text.md +72 -0
  60. package/ai/components/list-item.md +108 -0
  61. package/ai/components/list.md +127 -0
  62. package/ai/components/loading-spinner.md +73 -0
  63. package/ai/components/lucide-icon.md +99 -0
  64. package/ai/components/message-composer.md +85 -0
  65. package/ai/components/nav-stack.md +120 -0
  66. package/ai/components/pane.md +127 -0
  67. package/ai/components/popup-menu.md +174 -0
  68. package/ai/components/progress-bar.md +82 -0
  69. package/ai/components/progress-ring.md +80 -0
  70. package/ai/components/radio-group.md +89 -0
  71. package/ai/components/recipe-app-shell.md +57 -0
  72. package/ai/components/recipe-collapsible-sidebar.md +57 -0
  73. package/ai/components/recipe-compact-toolbar.md +57 -0
  74. package/ai/components/recipe-composer-form.md +57 -0
  75. package/ai/components/recipe-list-detail-dialog.md +57 -0
  76. package/ai/components/recipe-list-workspace-states.md +57 -0
  77. package/ai/components/recipe-loading-inspector.md +57 -0
  78. package/ai/components/recipe-media-detail.md +57 -0
  79. package/ai/components/recipe-navigation-sidebar.md +57 -0
  80. package/ai/components/recipe-navigation-stack.md +57 -0
  81. package/ai/components/recipe-workspace-header.md +57 -0
  82. package/ai/components/resize.md +106 -0
  83. package/ai/components/row.md +96 -0
  84. package/ai/components/search-field.md +108 -0
  85. package/ai/components/segmented-control.md +83 -0
  86. package/ai/components/select.md +118 -0
  87. package/ai/components/skeleton.md +84 -0
  88. package/ai/components/slider.md +84 -0
  89. package/ai/components/spacer.md +86 -0
  90. package/ai/components/split-button.md +83 -0
  91. package/ai/components/split-view.md +105 -0
  92. package/ai/components/state-banner.md +96 -0
  93. package/ai/components/summary-row.md +85 -0
  94. package/ai/components/sunken-panel.md +79 -0
  95. package/ai/components/surface-scaffold.md +117 -0
  96. package/ai/components/switch.md +81 -0
  97. package/ai/components/tab-bar.md +114 -0
  98. package/ai/components/tab-navigator.md +105 -0
  99. package/ai/components/tabs.md +95 -0
  100. package/ai/components/tag-field.md +86 -0
  101. package/ai/components/text-field.md +102 -0
  102. package/ai/components/text.md +93 -0
  103. package/ai/components/toast.md +85 -0
  104. package/ai/components/toolbar-control-group.md +127 -0
  105. package/ai/components/toolbar-text.md +100 -0
  106. package/ai/components/toolbar.md +103 -0
  107. package/ai/components/tooltip.md +81 -0
  108. package/ai/components/value-table.md +80 -0
  109. package/ai/components/wa-accordion-item.md +61 -0
  110. package/ai/components/wa-accordion.md +71 -0
  111. package/ai/components/wa-animated-image.md +56 -0
  112. package/ai/components/wa-animation.md +56 -0
  113. package/ai/components/wa-avatar.md +56 -0
  114. package/ai/components/wa-badge.md +62 -0
  115. package/ai/components/wa-breadcrumb-item.md +54 -0
  116. package/ai/components/wa-breadcrumb.md +56 -0
  117. package/ai/components/wa-button-group.md +62 -0
  118. package/ai/components/wa-button.md +61 -0
  119. package/ai/components/wa-callout.md +60 -0
  120. package/ai/components/wa-card.md +67 -0
  121. package/ai/components/wa-carousel-item.md +54 -0
  122. package/ai/components/wa-carousel.md +56 -0
  123. package/ai/components/wa-checkbox-group.md +62 -0
  124. package/ai/components/wa-checkbox.md +61 -0
  125. package/ai/components/wa-color-picker.md +63 -0
  126. package/ai/components/wa-comparison.md +56 -0
  127. package/ai/components/wa-copy-button.md +56 -0
  128. package/ai/components/wa-details.md +67 -0
  129. package/ai/components/wa-dialog.md +65 -0
  130. package/ai/components/wa-divider.md +54 -0
  131. package/ai/components/wa-drawer.md +62 -0
  132. package/ai/components/wa-dropdown-item.md +62 -0
  133. package/ai/components/wa-dropdown.md +62 -0
  134. package/ai/components/wa-format-bytes.md +54 -0
  135. package/ai/components/wa-format-date.md +54 -0
  136. package/ai/components/wa-format-number.md +54 -0
  137. package/ai/components/wa-icon.md +59 -0
  138. package/ai/components/wa-include.md +55 -0
  139. package/ai/components/wa-input.md +62 -0
  140. package/ai/components/wa-intersection-observer.md +54 -0
  141. package/ai/components/wa-known-date.md +54 -0
  142. package/ai/components/wa-markdown.md +54 -0
  143. package/ai/components/wa-mutation-observer.md +54 -0
  144. package/ai/components/wa-number-input.md +56 -0
  145. package/ai/components/wa-option.md +61 -0
  146. package/ai/components/wa-otp-input.md +54 -0
  147. package/ai/components/wa-page.md +62 -0
  148. package/ai/components/wa-pagination.md +56 -0
  149. package/ai/components/wa-popover.md +61 -0
  150. package/ai/components/wa-popup.md +60 -0
  151. package/ai/components/wa-progress-bar.md +60 -0
  152. package/ai/components/wa-progress-ring.md +60 -0
  153. package/ai/components/wa-qr-code.md +54 -0
  154. package/ai/components/wa-radio-group.md +67 -0
  155. package/ai/components/wa-radio.md +61 -0
  156. package/ai/components/wa-random-content.md +54 -0
  157. package/ai/components/wa-rating.md +56 -0
  158. package/ai/components/wa-relative-time.md +54 -0
  159. package/ai/components/wa-resize-observer.md +54 -0
  160. package/ai/components/wa-scroller.md +61 -0
  161. package/ai/components/wa-select.md +65 -0
  162. package/ai/components/wa-skeleton.md +60 -0
  163. package/ai/components/wa-slider.md +61 -0
  164. package/ai/components/wa-spinner.md +60 -0
  165. package/ai/components/wa-split-panel.md +60 -0
  166. package/ai/components/wa-step.md +56 -0
  167. package/ai/components/wa-stepper.md +56 -0
  168. package/ai/components/wa-switch.md +60 -0
  169. package/ai/components/wa-tab-group.md +71 -0
  170. package/ai/components/wa-tab-panel.md +62 -0
  171. package/ai/components/wa-tab.md +61 -0
  172. package/ai/components/wa-tag-input.md +62 -0
  173. package/ai/components/wa-tag.md +62 -0
  174. package/ai/components/wa-textarea.md +60 -0
  175. package/ai/components/wa-time-input.md +56 -0
  176. package/ai/components/wa-toast-item.md +62 -0
  177. package/ai/components/wa-toast.md +62 -0
  178. package/ai/components/wa-tooltip.md +61 -0
  179. package/ai/components/wa-tree-item.md +56 -0
  180. package/ai/components/wa-tree.md +56 -0
  181. package/ai/components/wa-zoomable-frame.md +56 -0
  182. package/ai/components/workbench-dialog.md +90 -0
  183. package/ai/components/workbench.md +120 -0
  184. package/ai/public-api-signatures-v1.md +6114 -445
  185. package/ai/skill.md +545 -65
  186. package/ai/webawesome-jsx-signatures-v1.md +12 -2
  187. package/analyzer/cli.mjs +49 -0
  188. package/analyzer/component-ownership.d.mts +72 -0
  189. package/analyzer/component-ownership.mjs +429 -0
  190. package/analyzer/index.d.mts +53 -0
  191. package/analyzer/index.mjs +2375 -0
  192. package/analyzer/loud-pairs.d.mts +49 -0
  193. package/analyzer/loud-pairs.mjs +357 -0
  194. package/analyzer/report.schema.json +66 -0
  195. package/analyzer/selectors.d.mts +21 -0
  196. package/analyzer/selectors.mjs +212 -0
  197. package/catalog-projection-cli.mjs +96 -0
  198. package/catalog-projection.d.mts +55 -0
  199. package/catalog-projection.mjs +62 -0
  200. package/dist/anchored-surface.d.ts +69 -0
  201. package/dist/anchored-surface.js +3 -0
  202. package/dist/anchored-surface.js.map +1 -0
  203. package/dist/backdrop-image.d.ts +132 -0
  204. package/dist/backdrop-image.js +5 -0
  205. package/dist/backdrop-image.js.map +1 -0
  206. package/dist/badge.d.ts +91 -0
  207. package/dist/badge.js +4 -0
  208. package/dist/badge.js.map +1 -0
  209. package/dist/browser/anchored-surface.js +3 -0
  210. package/dist/browser/backdrop-image.js +3 -0
  211. package/dist/browser/badge.js +3 -0
  212. package/dist/browser/button.js +5 -0
  213. package/dist/browser/catalog.js +29 -0
  214. package/dist/browser/checkbox-group.js +5 -0
  215. package/dist/browser/checkbox.js +4 -0
  216. package/dist/browser/chip.js +3 -0
  217. package/dist/browser/choice-chips.js +3 -0
  218. package/dist/browser/collapsible-panel.js +9 -0
  219. package/dist/browser/color-field.js +4 -0
  220. package/dist/browser/color-picker.js +5 -0
  221. package/dist/browser/color-swatches.js +3 -0
  222. package/dist/browser/column-track.js +3 -0
  223. package/dist/browser/combobox.js +3 -0
  224. package/dist/browser/content-item.js +3 -0
  225. package/dist/browser/content-swap.js +3 -0
  226. package/dist/browser/corner-status.js +3 -0
  227. package/dist/browser/disclosure.js +5 -0
  228. package/dist/browser/edge-activity-indicator.js +3 -0
  229. package/dist/browser/file-picker.js +3 -0
  230. package/dist/browser/framed-list.js +3 -0
  231. package/dist/browser/grid.js +3 -0
  232. package/dist/browser/list-action-row.js +3 -0
  233. package/dist/browser/list-detail-dialog.js +14 -0
  234. package/dist/browser/list-header.js +3 -1
  235. package/dist/browser/list-inset-control.js +3 -0
  236. package/dist/browser/list-inset-text.js +3 -0
  237. package/dist/browser/list-item.js +1 -0
  238. package/dist/browser/list.js +3 -0
  239. package/dist/browser/message-composer.js +5 -0
  240. package/dist/browser/nav-stack.js +11 -0
  241. package/dist/browser/pane.js +3 -0
  242. package/dist/browser/popup-menu.js +4 -0
  243. package/dist/browser/progress-bar.js +3 -0
  244. package/dist/browser/progress-ring.js +3 -0
  245. package/dist/browser/radio-group.js +3 -0
  246. package/dist/browser/row.js +3 -0
  247. package/dist/browser/search-field.js +4 -0
  248. package/dist/browser/segmented-control.js +0 -1
  249. package/dist/browser/select.js +2 -1
  250. package/dist/browser/slider.js +3 -0
  251. package/dist/browser/spacer.js +3 -0
  252. package/dist/browser/split-button.js +5 -0
  253. package/dist/browser/split-view.js +13 -0
  254. package/dist/browser/state-banner.js +1 -0
  255. package/dist/browser/summary-row.js +3 -0
  256. package/dist/browser/sunken-panel.js +3 -0
  257. package/dist/browser/surface-scaffold.js +4 -0
  258. package/dist/browser/switch.js +3 -0
  259. package/dist/browser/tab-bar-item.js +4 -0
  260. package/dist/browser/tab-navigator.js +4 -0
  261. package/dist/browser/tag-field.js +5 -0
  262. package/dist/browser/text-field.js +4 -0
  263. package/dist/browser/text.js +3 -0
  264. package/dist/browser/toolbar-control-group.js +1 -0
  265. package/dist/browser/workbench-dialog.js +15 -0
  266. package/dist/browser/workbench.js +14 -0
  267. package/dist/button.d.ts +121 -0
  268. package/dist/button.js +7 -0
  269. package/dist/button.js.map +1 -0
  270. package/dist/catalog-resources.d.ts +50 -0
  271. package/dist/catalog-resources.js +22 -0
  272. package/dist/catalog-resources.js.map +1 -0
  273. package/dist/catalog.d.ts +134 -101
  274. package/dist/catalog.js +700 -108
  275. package/dist/catalog.js.map +1 -1
  276. package/dist/checkbox-group.d.ts +70 -0
  277. package/dist/checkbox-group.js +7 -0
  278. package/dist/checkbox-group.js.map +1 -0
  279. package/dist/checkbox.d.ts +45 -0
  280. package/dist/checkbox.js +6 -0
  281. package/dist/checkbox.js.map +1 -0
  282. package/dist/chip.d.ts +117 -0
  283. package/dist/chip.js +4 -0
  284. package/dist/chip.js.map +1 -0
  285. package/dist/choice-chips.d.ts +116 -0
  286. package/dist/choice-chips.js +3 -0
  287. package/dist/choice-chips.js.map +1 -0
  288. package/dist/chunk-2FW7D4IG.js +52 -0
  289. package/dist/chunk-2FW7D4IG.js.map +1 -0
  290. package/dist/chunk-2GOCOLQL.js +270 -0
  291. package/dist/chunk-2GOCOLQL.js.map +1 -0
  292. package/dist/chunk-2LM3PYHA.js +300 -0
  293. package/dist/chunk-2LM3PYHA.js.map +1 -0
  294. package/dist/chunk-36HVQ72F.js +123 -0
  295. package/dist/chunk-36HVQ72F.js.map +1 -0
  296. package/dist/chunk-3GLYIIFR.js +230 -0
  297. package/dist/chunk-3GLYIIFR.js.map +1 -0
  298. package/dist/chunk-3VZ6SFD4.js +8 -0
  299. package/dist/chunk-3VZ6SFD4.js.map +1 -0
  300. package/dist/chunk-3WYREXW4.js +120 -0
  301. package/dist/chunk-3WYREXW4.js.map +1 -0
  302. package/dist/chunk-3Z7N2NAZ.js +385 -0
  303. package/dist/chunk-3Z7N2NAZ.js.map +1 -0
  304. package/dist/chunk-4OV272LF.js +93 -0
  305. package/dist/chunk-4OV272LF.js.map +1 -0
  306. package/dist/chunk-4RECPEHI.js +67 -0
  307. package/dist/chunk-4RECPEHI.js.map +1 -0
  308. package/dist/chunk-4UB5Z3ZZ.js +68 -0
  309. package/dist/chunk-4UB5Z3ZZ.js.map +1 -0
  310. package/dist/chunk-5J6Z4BWY.js +141 -0
  311. package/dist/chunk-5J6Z4BWY.js.map +1 -0
  312. package/dist/chunk-5USKCWGL.js +113 -0
  313. package/dist/chunk-5USKCWGL.js.map +1 -0
  314. package/dist/chunk-6C6DLP3W.js +31 -0
  315. package/dist/chunk-6C6DLP3W.js.map +1 -0
  316. package/dist/chunk-6CDILXF4.js +204 -0
  317. package/dist/chunk-6CDILXF4.js.map +1 -0
  318. package/dist/chunk-6VVIW7VB.js +69 -0
  319. package/dist/chunk-6VVIW7VB.js.map +1 -0
  320. package/dist/chunk-7AK5I7U7.js +55 -0
  321. package/dist/chunk-7AK5I7U7.js.map +1 -0
  322. package/dist/chunk-7K6U6FCN.js +122 -0
  323. package/dist/chunk-7K6U6FCN.js.map +1 -0
  324. package/dist/chunk-AMIHGFLP.js +59 -0
  325. package/dist/chunk-AMIHGFLP.js.map +1 -0
  326. package/dist/chunk-AN5IWMTM.js +24 -0
  327. package/dist/chunk-AN5IWMTM.js.map +1 -0
  328. package/dist/chunk-ATGAJVZ6.js +268 -0
  329. package/dist/chunk-ATGAJVZ6.js.map +1 -0
  330. package/dist/chunk-AYPGXR2E.js +20 -0
  331. package/dist/chunk-AYPGXR2E.js.map +1 -0
  332. package/dist/chunk-B53PS2LE.js +34 -0
  333. package/dist/chunk-B53PS2LE.js.map +1 -0
  334. package/dist/chunk-BKUMG2KB.js +95 -0
  335. package/dist/chunk-BKUMG2KB.js.map +1 -0
  336. package/dist/chunk-C26Q6P4Q.js +76 -0
  337. package/dist/chunk-C26Q6P4Q.js.map +1 -0
  338. package/dist/chunk-CEJ5FK6G.js +288 -0
  339. package/dist/chunk-CEJ5FK6G.js.map +1 -0
  340. package/dist/chunk-CIAUILRR.js +222 -0
  341. package/dist/chunk-CIAUILRR.js.map +1 -0
  342. package/dist/chunk-CNM6ZWP2.js +38 -0
  343. package/dist/chunk-CNM6ZWP2.js.map +1 -0
  344. package/dist/chunk-CPSGUGAY.js +527 -0
  345. package/dist/chunk-CPSGUGAY.js.map +1 -0
  346. package/dist/chunk-CTQUDCY5.js +26 -0
  347. package/dist/chunk-CTQUDCY5.js.map +1 -0
  348. package/dist/chunk-CVD5IZGB.js +66 -0
  349. package/dist/chunk-CVD5IZGB.js.map +1 -0
  350. package/dist/chunk-D4MXSAMI.js +50 -0
  351. package/dist/chunk-D4MXSAMI.js.map +1 -0
  352. package/dist/chunk-D5RGM3XA.js +38 -0
  353. package/dist/chunk-D5RGM3XA.js.map +1 -0
  354. package/dist/chunk-DZJ4GBSP.js +59 -0
  355. package/dist/chunk-DZJ4GBSP.js.map +1 -0
  356. package/dist/chunk-EIET4QLK.js +51 -0
  357. package/dist/chunk-EIET4QLK.js.map +1 -0
  358. package/dist/chunk-EKHDLBRP.js +86 -0
  359. package/dist/chunk-EKHDLBRP.js.map +1 -0
  360. package/dist/chunk-EYDXFOSH.js +457 -0
  361. package/dist/chunk-EYDXFOSH.js.map +1 -0
  362. package/dist/chunk-G3J7JDP6.js +29 -0
  363. package/dist/chunk-G3J7JDP6.js.map +1 -0
  364. package/dist/chunk-GS2QD3N7.js +14 -0
  365. package/dist/chunk-GS2QD3N7.js.map +1 -0
  366. package/dist/chunk-GXSX6Q6O.js +42 -0
  367. package/dist/chunk-GXSX6Q6O.js.map +1 -0
  368. package/dist/chunk-HDXUHLTQ.js +90 -0
  369. package/dist/chunk-HDXUHLTQ.js.map +1 -0
  370. package/dist/chunk-HJXVVFBT.js +108 -0
  371. package/dist/chunk-HJXVVFBT.js.map +1 -0
  372. package/dist/chunk-HQZG3OFL.js +158 -0
  373. package/dist/chunk-HQZG3OFL.js.map +1 -0
  374. package/dist/chunk-HTERKONR.js +49 -0
  375. package/dist/chunk-HTERKONR.js.map +1 -0
  376. package/dist/chunk-HU5IHXCI.js +73 -0
  377. package/dist/chunk-HU5IHXCI.js.map +1 -0
  378. package/dist/chunk-IKS72C6P.js +53 -0
  379. package/dist/chunk-IKS72C6P.js.map +1 -0
  380. package/dist/chunk-IO27YTL3.js +73 -0
  381. package/dist/chunk-IO27YTL3.js.map +1 -0
  382. package/dist/chunk-IQSRHXZR.js +164 -0
  383. package/dist/chunk-IQSRHXZR.js.map +1 -0
  384. package/dist/chunk-ITUQC4FW.js +163 -0
  385. package/dist/chunk-ITUQC4FW.js.map +1 -0
  386. package/dist/chunk-JCCN3U6X.js +176 -0
  387. package/dist/chunk-JCCN3U6X.js.map +1 -0
  388. package/dist/chunk-K57NINLH.js +137 -0
  389. package/dist/chunk-K57NINLH.js.map +1 -0
  390. package/dist/chunk-KC6WUSNS.js +34 -0
  391. package/dist/chunk-KC6WUSNS.js.map +1 -0
  392. package/dist/chunk-KCS6NJ3O.js +82 -0
  393. package/dist/chunk-KCS6NJ3O.js.map +1 -0
  394. package/dist/chunk-KDQZ3E5C.js +75 -0
  395. package/dist/chunk-KDQZ3E5C.js.map +1 -0
  396. package/dist/chunk-KH4KEMSP.js +71 -0
  397. package/dist/chunk-KH4KEMSP.js.map +1 -0
  398. package/dist/chunk-KK3S5OTW.js +98 -0
  399. package/dist/chunk-KK3S5OTW.js.map +1 -0
  400. package/dist/chunk-KPINJHIC.js +122 -0
  401. package/dist/chunk-KPINJHIC.js.map +1 -0
  402. package/dist/chunk-LMHN2TJL.js +167 -0
  403. package/dist/chunk-LMHN2TJL.js.map +1 -0
  404. package/dist/chunk-LTBVP6VN.js +59 -0
  405. package/dist/chunk-LTBVP6VN.js.map +1 -0
  406. package/dist/{chunk-YGN7OMLT.js → chunk-LZUUUHNH.js} +13 -6
  407. package/dist/chunk-LZUUUHNH.js.map +1 -0
  408. package/dist/chunk-MHMWQ7RB.js +19 -0
  409. package/dist/chunk-MHMWQ7RB.js.map +1 -0
  410. package/dist/chunk-MJ5RU6XT.js +173 -0
  411. package/dist/chunk-MJ5RU6XT.js.map +1 -0
  412. package/dist/chunk-MVKHSAKE.js +169 -0
  413. package/dist/chunk-MVKHSAKE.js.map +1 -0
  414. package/dist/chunk-NB6POCFH.js +103 -0
  415. package/dist/chunk-NB6POCFH.js.map +1 -0
  416. package/dist/chunk-NR6O74ST.js +169 -0
  417. package/dist/chunk-NR6O74ST.js.map +1 -0
  418. package/dist/chunk-OHPYT2BH.js +82 -0
  419. package/dist/chunk-OHPYT2BH.js.map +1 -0
  420. package/dist/chunk-OQP3PFKQ.js +341 -0
  421. package/dist/chunk-OQP3PFKQ.js.map +1 -0
  422. package/dist/chunk-OZ6X76G5.js +547 -0
  423. package/dist/chunk-OZ6X76G5.js.map +1 -0
  424. package/dist/chunk-P7EJ4CAD.js +147 -0
  425. package/dist/chunk-P7EJ4CAD.js.map +1 -0
  426. package/dist/chunk-QDSZTQXL.js +28 -0
  427. package/dist/chunk-QDSZTQXL.js.map +1 -0
  428. package/dist/chunk-QH5KOFNS.js +39 -0
  429. package/dist/chunk-QH5KOFNS.js.map +1 -0
  430. package/dist/chunk-QPTJ5DOO.js +87 -0
  431. package/dist/chunk-QPTJ5DOO.js.map +1 -0
  432. package/dist/chunk-QYMJHS4K.js +36 -0
  433. package/dist/chunk-QYMJHS4K.js.map +1 -0
  434. package/dist/chunk-RMWNO6BA.js +89 -0
  435. package/dist/chunk-RMWNO6BA.js.map +1 -0
  436. package/dist/chunk-S2XULQEK.js +52 -0
  437. package/dist/chunk-S2XULQEK.js.map +1 -0
  438. package/dist/chunk-S3ECMF23.js +33 -0
  439. package/dist/chunk-S3ECMF23.js.map +1 -0
  440. package/dist/chunk-S4Y3YTAI.js +35 -0
  441. package/dist/chunk-S4Y3YTAI.js.map +1 -0
  442. package/dist/chunk-S4ZGTDSG.js +18 -0
  443. package/dist/chunk-S4ZGTDSG.js.map +1 -0
  444. package/dist/chunk-SCDWURBO.js +136 -0
  445. package/dist/chunk-SCDWURBO.js.map +1 -0
  446. package/dist/chunk-SOFPUW3O.js +196 -0
  447. package/dist/chunk-SOFPUW3O.js.map +1 -0
  448. package/dist/chunk-SQ5DH66U.js +37 -0
  449. package/dist/chunk-SQ5DH66U.js.map +1 -0
  450. package/dist/chunk-T74YB76U.js +547 -0
  451. package/dist/chunk-T74YB76U.js.map +1 -0
  452. package/dist/chunk-TI2GV36S.js +90 -0
  453. package/dist/chunk-TI2GV36S.js.map +1 -0
  454. package/dist/{chunk-56RJXPHG.js → chunk-TKNVL53O.js} +7 -4
  455. package/dist/chunk-TKNVL53O.js.map +1 -0
  456. package/dist/chunk-TNJLNLVE.js +115 -0
  457. package/dist/chunk-TNJLNLVE.js.map +1 -0
  458. package/dist/chunk-TUID42UE.js +15 -0
  459. package/dist/chunk-TUID42UE.js.map +1 -0
  460. package/dist/chunk-UMNHJSIO.js +848 -0
  461. package/dist/chunk-UMNHJSIO.js.map +1 -0
  462. package/dist/chunk-VEME3D7K.js +298 -0
  463. package/dist/chunk-VEME3D7K.js.map +1 -0
  464. package/dist/chunk-WPNIKZMJ.js +507 -0
  465. package/dist/chunk-WPNIKZMJ.js.map +1 -0
  466. package/dist/chunk-WSEJ2FDE.js +162 -0
  467. package/dist/chunk-WSEJ2FDE.js.map +1 -0
  468. package/dist/chunk-WVS6CUCT.js +48 -0
  469. package/dist/chunk-WVS6CUCT.js.map +1 -0
  470. package/dist/chunk-XWNXGFX3.js +381 -0
  471. package/dist/chunk-XWNXGFX3.js.map +1 -0
  472. package/dist/chunk-Y6KT7ZTR.js +109 -0
  473. package/dist/chunk-Y6KT7ZTR.js.map +1 -0
  474. package/dist/chunk-YMUIQRWK.js +44 -0
  475. package/dist/chunk-YMUIQRWK.js.map +1 -0
  476. package/dist/chunk-ZCDRLN3B.js +138 -0
  477. package/dist/chunk-ZCDRLN3B.js.map +1 -0
  478. package/dist/chunk-ZKKO4MHC.js +25 -0
  479. package/dist/chunk-ZKKO4MHC.js.map +1 -0
  480. package/dist/chunk-ZN7KUMPY.js +48 -0
  481. package/dist/chunk-ZN7KUMPY.js.map +1 -0
  482. package/dist/chunk-ZNROKDSZ.js +54 -0
  483. package/dist/chunk-ZNROKDSZ.js.map +1 -0
  484. package/dist/chunk-ZX2QQJXD.js +249 -0
  485. package/dist/chunk-ZX2QQJXD.js.map +1 -0
  486. package/dist/collapsible-panel.d.ts +96 -17
  487. package/dist/collapsible-panel.js +133 -14
  488. package/dist/collapsible-panel.js.map +1 -1
  489. package/dist/color-field.d.ts +51 -0
  490. package/dist/color-field.js +92 -0
  491. package/dist/color-field.js.map +1 -0
  492. package/dist/color-picker.d.ts +113 -0
  493. package/dist/color-picker.js +8 -0
  494. package/dist/color-picker.js.map +1 -0
  495. package/dist/color-swatches.d.ts +56 -0
  496. package/dist/color-swatches.js +4 -0
  497. package/dist/color-swatches.js.map +1 -0
  498. package/dist/column-track.d.ts +41 -0
  499. package/dist/column-track.js +4 -0
  500. package/dist/column-track.js.map +1 -0
  501. package/dist/combobox.d.ts +40 -0
  502. package/dist/combobox.js +3 -0
  503. package/dist/combobox.js.map +1 -0
  504. package/dist/content-item.d.ts +128 -0
  505. package/dist/content-item.js +4 -0
  506. package/dist/content-item.js.map +1 -0
  507. package/dist/content-swap.d.ts +34 -0
  508. package/dist/content-swap.js +3 -0
  509. package/dist/content-swap.js.map +1 -0
  510. package/dist/corner-status.d.ts +36 -0
  511. package/dist/corner-status.js +3 -0
  512. package/dist/corner-status.js.map +1 -0
  513. package/dist/css-values.d.ts +127 -0
  514. package/dist/css-values.js +3 -0
  515. package/dist/css-values.js.map +1 -0
  516. package/dist/device-class.js +34 -6
  517. package/dist/device-class.js.map +1 -1
  518. package/dist/disclosure-arrow.d.ts +6 -1
  519. package/dist/disclosure-arrow.js +2 -1
  520. package/dist/disclosure.d.ts +66 -0
  521. package/dist/disclosure.js +51 -0
  522. package/dist/disclosure.js.map +1 -0
  523. package/dist/edge-activity-indicator.d.ts +28 -0
  524. package/dist/edge-activity-indicator.js +3 -0
  525. package/dist/edge-activity-indicator.js.map +1 -0
  526. package/dist/empty-state.d.ts +5 -2
  527. package/dist/empty-state.js +2 -1
  528. package/dist/extension-attributes-mu8MFUl0.d.ts +13 -0
  529. package/dist/file-picker.d.ts +54 -0
  530. package/dist/file-picker.js +3 -0
  531. package/dist/file-picker.js.map +1 -0
  532. package/dist/flex-alignment-4ms8ZbV8.d.ts +5 -0
  533. package/dist/floating-toolbar.d.ts +29 -6
  534. package/dist/floating-toolbar.js +1 -1
  535. package/dist/framed-list.d.ts +47 -0
  536. package/dist/framed-list.js +4 -0
  537. package/dist/framed-list.js.map +1 -0
  538. package/dist/grid.d.ts +58 -0
  539. package/dist/grid.js +6 -0
  540. package/dist/grid.js.map +1 -0
  541. package/dist/help-tags-register.d.ts +13 -0
  542. package/dist/help-tags-register.js +10 -0
  543. package/dist/help-tags-register.js.map +1 -0
  544. package/dist/index.d.ts +72 -17
  545. package/dist/index.js +84 -25
  546. package/dist/list-action-row.d.ts +69 -12
  547. package/dist/list-action-row.js +8 -1
  548. package/dist/list-detail-dialog.d.ts +123 -0
  549. package/dist/list-detail-dialog.js +167 -0
  550. package/dist/list-detail-dialog.js.map +1 -0
  551. package/dist/list-header.d.ts +72 -10
  552. package/dist/list-header.js +4 -1
  553. package/dist/list-icon-tile-B8dr97OW.d.ts +18 -0
  554. package/dist/list-inset-control.d.ts +22 -0
  555. package/dist/list-inset-control.js +3 -0
  556. package/dist/list-inset-control.js.map +1 -0
  557. package/dist/list-inset-text.d.ts +30 -0
  558. package/dist/list-inset-text.js +4 -0
  559. package/dist/list-inset-text.js.map +1 -0
  560. package/dist/list-item.d.ts +49 -5
  561. package/dist/list-item.js +4 -1
  562. package/dist/list.d.ts +149 -0
  563. package/dist/list.js +7 -0
  564. package/dist/list.js.map +1 -0
  565. package/dist/loading-spinner.d.ts +12 -2
  566. package/dist/loading-spinner.js +2 -1
  567. package/dist/lucide-icon.d.ts +23 -3
  568. package/dist/lucide-icon.js +2 -1
  569. package/dist/message-composer.d.ts +70 -0
  570. package/dist/message-composer.js +6 -0
  571. package/dist/message-composer.js.map +1 -0
  572. package/dist/nav-stack-CU_0dKtI.d.ts +194 -0
  573. package/dist/nav-stack.d.ts +15 -38
  574. package/dist/nav-stack.js +14 -1
  575. package/dist/pane.d.ts +258 -0
  576. package/dist/pane.js +6 -0
  577. package/dist/pane.js.map +1 -0
  578. package/dist/panel-toolbar-vg6Ir5Dy.d.ts +77 -0
  579. package/dist/popup-menu-register.d.ts +11 -0
  580. package/dist/popup-menu-register.js +13 -0
  581. package/dist/popup-menu-register.js.map +1 -0
  582. package/dist/popup-menu.d.ts +153 -0
  583. package/dist/popup-menu.js +7 -0
  584. package/dist/popup-menu.js.map +1 -0
  585. package/dist/progress-bar.d.ts +52 -0
  586. package/dist/progress-bar.js +68 -0
  587. package/dist/progress-bar.js.map +1 -0
  588. package/dist/progress-ring.d.ts +44 -0
  589. package/dist/progress-ring.js +73 -0
  590. package/dist/progress-ring.js.map +1 -0
  591. package/dist/radio-group.d.ts +62 -0
  592. package/dist/radio-group.js +4 -0
  593. package/dist/radio-group.js.map +1 -0
  594. package/dist/resizable-region.d.ts +32 -3
  595. package/dist/resizable-region.js +1 -1
  596. package/dist/row.d.ts +53 -0
  597. package/dist/row.js +7 -0
  598. package/dist/row.js.map +1 -0
  599. package/dist/scroll-clearance-BikHljTc.d.ts +14 -0
  600. package/dist/search-field-CrGTN5sa.d.ts +208 -0
  601. package/dist/search-field-model.d.ts +3 -0
  602. package/dist/search-field-model.js +3 -0
  603. package/dist/search-field-model.js.map +1 -0
  604. package/dist/search-field.d.ts +3 -0
  605. package/dist/search-field.js +5 -0
  606. package/dist/search-field.js.map +1 -0
  607. package/dist/segmented-control.d.ts +14 -9
  608. package/dist/segmented-control.js +1 -2
  609. package/dist/select-register.d.ts +6 -3
  610. package/dist/select-register.js +402 -8
  611. package/dist/select-register.js.map +1 -1
  612. package/dist/select.d.ts +128 -9
  613. package/dist/select.js +6 -1
  614. package/dist/selection.d.ts +54 -0
  615. package/dist/selection.js +3 -0
  616. package/dist/selection.js.map +1 -0
  617. package/dist/semantic-content-BbzjvSu9.d.ts +14 -0
  618. package/dist/semantic-tone-CdW013KF.d.ts +4 -0
  619. package/dist/sides-BPSWde0A.d.ts +4 -0
  620. package/dist/skeleton.d.ts +14 -7
  621. package/dist/skeleton.js +2 -1
  622. package/dist/slider.d.ts +74 -0
  623. package/dist/slider.js +103 -0
  624. package/dist/slider.js.map +1 -0
  625. package/dist/spacer.d.ts +18 -0
  626. package/dist/spacer.js +4 -0
  627. package/dist/spacer.js.map +1 -0
  628. package/dist/split-button.d.ts +69 -0
  629. package/dist/split-button.js +7 -0
  630. package/dist/split-button.js.map +1 -0
  631. package/dist/split-view.d.ts +66 -6
  632. package/dist/split-view.js +14 -15
  633. package/dist/split-view.js.map +1 -1
  634. package/dist/state-banner.d.ts +41 -7
  635. package/dist/state-banner.js +4 -1
  636. package/dist/styles/anchored-surface.css +44 -0
  637. package/dist/styles/backdrop-image.css +241 -0
  638. package/dist/styles/badge.css +157 -0
  639. package/dist/styles/button.css +293 -0
  640. package/dist/styles/catalog/components/catalog-example-stack.css +14 -0
  641. package/dist/styles/catalog/components/catalog-example.css +250 -0
  642. package/dist/styles/catalog/components/catalog-stage.css +61 -0
  643. package/dist/styles/catalog/components/catalog.css +26 -0
  644. package/dist/styles/catalog.css +5 -522
  645. package/dist/styles/checkbox-group.css +63 -0
  646. package/dist/styles/checkbox.css +122 -0
  647. package/dist/styles/chip.css +234 -0
  648. package/dist/styles/choice-chips.css +205 -0
  649. package/dist/styles/collapsible-panel.css +450 -16
  650. package/dist/styles/color-field.css +125 -0
  651. package/dist/styles/color-picker.css +366 -0
  652. package/dist/styles/color-swatches.css +122 -0
  653. package/dist/styles/column-track.css +57 -0
  654. package/dist/styles/combobox.css +115 -0
  655. package/dist/styles/components/actions/button/button.css +293 -0
  656. package/dist/styles/components/actions/floating-toolbar/floating-toolbar.css +119 -0
  657. package/dist/styles/components/actions/popup-menu/popup-menu.css +498 -0
  658. package/dist/styles/components/actions/split-button/split-button.css +141 -0
  659. package/dist/styles/components/actions/toolbar/toolbar.css +483 -0
  660. package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +1188 -0
  661. package/dist/styles/components/actions/toolbar-text/toolbar-text.css +256 -0
  662. package/dist/styles/components/collections/framed-list/framed-list.css +53 -0
  663. package/dist/styles/components/collections/list/list.css +293 -0
  664. package/dist/styles/components/collections/list-action-row/list-action-row.css +466 -0
  665. package/dist/styles/components/collections/list-header/list-header.css +236 -0
  666. package/dist/styles/components/collections/list-inset-control/list-inset-control.css +30 -0
  667. package/dist/styles/components/collections/list-inset-text/list-inset-text.css +29 -0
  668. package/dist/styles/components/collections/list-item/list-item.css +461 -0
  669. package/dist/styles/components/collections/summary-row/summary-row.css +161 -0
  670. package/dist/styles/components/data-display/value-table/value-table.css +183 -0
  671. package/dist/styles/components/feedback/anchored-surface/anchored-surface.css +44 -0
  672. package/dist/styles/components/feedback/badge/badge.css +157 -0
  673. package/dist/styles/components/feedback/chip/chip.css +234 -0
  674. package/dist/styles/components/feedback/corner-status/corner-status.css +60 -0
  675. package/dist/styles/components/feedback/edge-activity-indicator/edge-activity-indicator.css +127 -0
  676. package/dist/styles/components/feedback/empty-state/empty-state.css +47 -0
  677. package/dist/styles/components/feedback/loading-spinner/loading-spinner.css +25 -0
  678. package/dist/styles/components/feedback/progress-bar/progress-bar.css +168 -0
  679. package/dist/styles/components/feedback/progress-ring/progress-ring.css +91 -0
  680. package/dist/styles/components/feedback/skeleton/skeleton.css +92 -0
  681. package/dist/styles/components/feedback/state-banner/state-banner.css +312 -0
  682. package/dist/styles/components/forms/checkbox/checkbox.css +122 -0
  683. package/dist/styles/components/forms/checkbox-group/checkbox-group.css +63 -0
  684. package/dist/styles/components/forms/choice-chips/choice-chips.css +205 -0
  685. package/dist/styles/components/forms/color-field/color-field.css +125 -0
  686. package/dist/styles/components/forms/color-picker/color-picker.css +366 -0
  687. package/dist/styles/components/forms/color-swatches/color-swatches.css +122 -0
  688. package/dist/styles/components/forms/combobox/combobox.css +115 -0
  689. package/dist/styles/components/forms/file-picker/file-picker.css +81 -0
  690. package/dist/styles/components/forms/message-composer/message-composer.css +84 -0
  691. package/dist/styles/components/forms/radio-group/radio-group.css +158 -0
  692. package/dist/styles/components/forms/search-field/search-field.css +441 -0
  693. package/dist/styles/components/forms/segmented-control/segmented-control.css +196 -0
  694. package/dist/styles/components/forms/select/select.css +580 -0
  695. package/dist/styles/components/forms/slider/slider.css +241 -0
  696. package/dist/styles/components/forms/switch/switch.css +132 -0
  697. package/dist/styles/components/forms/tag-field/tag-field.css +8 -0
  698. package/dist/styles/components/forms/text-field/text-field.css +193 -0
  699. package/dist/styles/components/layout/collapsible-panel/collapsible-panel.css +580 -0
  700. package/dist/styles/components/layout/column-track/column-track.css +57 -0
  701. package/dist/styles/components/layout/content-swap/content-swap.css +154 -0
  702. package/dist/styles/components/layout/grid/grid.css +88 -0
  703. package/dist/styles/components/layout/pane/pane.css +780 -0
  704. package/dist/styles/components/layout/resizable-region/resizable-region.css +546 -0
  705. package/dist/styles/components/layout/row/row.css +125 -0
  706. package/dist/styles/components/layout/spacer/spacer.css +11 -0
  707. package/dist/styles/components/layout/split-view/split-view.css +171 -0
  708. package/dist/styles/components/layout/workbench/workbench.css +1098 -0
  709. package/dist/styles/components/media/lucide-icon/lucide-icon.css +15 -0
  710. package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +43 -0
  711. package/dist/styles/components/navigation/nav-stack/nav-stack.css +619 -0
  712. package/dist/styles/components/navigation/tab-bar/tab-bar.css +203 -0
  713. package/dist/styles/components/navigation/tab-bar-item/tab-bar-item.css +389 -0
  714. package/dist/styles/components/navigation/tab-navigator/tab-navigator.css +460 -0
  715. package/dist/styles/components/surfaces/backdrop-image/backdrop-image.css +241 -0
  716. package/dist/styles/components/surfaces/content-item/content-item.css +168 -0
  717. package/dist/styles/components/surfaces/disclosure/disclosure.css +136 -0
  718. package/dist/styles/components/surfaces/sunken-panel/sunken-panel.css +34 -0
  719. package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +744 -0
  720. package/dist/styles/components/typography/text/text.css +232 -0
  721. package/dist/styles/content-item.css +168 -0
  722. package/dist/styles/content-swap.css +154 -0
  723. package/dist/styles/corner-status.css +60 -0
  724. package/dist/styles/disclosure-arrow.css +20 -0
  725. package/dist/styles/disclosure.css +136 -0
  726. package/dist/styles/document.css +98 -0
  727. package/dist/styles/edge-activity-indicator.css +127 -0
  728. package/dist/styles/file-picker.css +81 -0
  729. package/dist/styles/floating-toolbar.css +87 -6
  730. package/dist/styles/foundation.css +490 -50
  731. package/dist/styles/framed-list.css +53 -0
  732. package/dist/styles/grid.css +88 -0
  733. package/dist/styles/layout.css +3 -41
  734. package/dist/styles/list-action-row.css +324 -18
  735. package/dist/styles/list-detail-dialog.css +11 -0
  736. package/dist/styles/list-header.css +135 -59
  737. package/dist/styles/list-inset-control.css +30 -0
  738. package/dist/styles/list-inset-text.css +29 -0
  739. package/dist/styles/list-item.css +371 -33
  740. package/dist/styles/list.css +293 -0
  741. package/dist/styles/loading-spinner.css +4 -0
  742. package/dist/styles/lucide-icon.css +9 -0
  743. package/dist/styles/message-composer.css +84 -0
  744. package/dist/styles/nav-stack.css +555 -47
  745. package/dist/styles/overlay-sheet.css +211 -0
  746. package/dist/styles/overlay-toast.css +149 -0
  747. package/dist/styles/overlay-tooltip.css +55 -0
  748. package/dist/styles/pane.css +780 -0
  749. package/dist/styles/popup-menu.css +498 -0
  750. package/dist/styles/progress-bar.css +168 -0
  751. package/dist/styles/progress-ring.css +91 -0
  752. package/dist/styles/radio-group.css +158 -0
  753. package/dist/styles/resizable-region.css +439 -4
  754. package/dist/styles/row.css +125 -0
  755. package/dist/styles/search-field.css +441 -0
  756. package/dist/styles/segmented-control.css +36 -9
  757. package/dist/styles/select.css +516 -74
  758. package/dist/styles/skeleton.css +64 -3
  759. package/dist/styles/slider.css +241 -0
  760. package/dist/styles/spacer.css +11 -0
  761. package/dist/styles/split-button.css +141 -0
  762. package/dist/styles/split-view.css +139 -3
  763. package/dist/styles/state-banner.css +164 -25
  764. package/dist/styles/styles.css +38 -3
  765. package/dist/styles/summary-row.css +161 -0
  766. package/dist/styles/sunken-panel.css +34 -0
  767. package/dist/styles/surface-scaffold.css +744 -0
  768. package/dist/styles/switch.css +132 -0
  769. package/dist/styles/tab-bar-item.css +389 -0
  770. package/dist/styles/tab-bar.css +167 -9
  771. package/dist/styles/tab-navigator.css +460 -0
  772. package/dist/styles/tag-field.css +8 -0
  773. package/dist/styles/text-field.css +193 -0
  774. package/dist/styles/text.css +232 -0
  775. package/dist/styles/toolbar-control-group.css +1000 -37
  776. package/dist/styles/toolbar-text.css +223 -7
  777. package/dist/styles/toolbar.css +433 -11
  778. package/dist/styles/value-table.css +115 -7
  779. package/dist/styles/webawesome.css +474 -18
  780. package/dist/styles/workbench-dialog.css +10 -0
  781. package/dist/styles/workbench.css +1011 -7
  782. package/dist/summary-row.d.ts +56 -0
  783. package/dist/summary-row.js +4 -0
  784. package/dist/summary-row.js.map +1 -0
  785. package/dist/sunken-panel.d.ts +38 -0
  786. package/dist/sunken-panel.js +4 -0
  787. package/dist/sunken-panel.js.map +1 -0
  788. package/dist/surface-scaffold-register.d.ts +12 -0
  789. package/dist/surface-scaffold-register.js +10 -0
  790. package/dist/surface-scaffold-register.js.map +1 -0
  791. package/dist/surface-scaffold.d.ts +280 -0
  792. package/dist/surface-scaffold.js +8 -0
  793. package/dist/surface-scaffold.js.map +1 -0
  794. package/dist/switch.d.ts +38 -0
  795. package/dist/switch.js +4 -0
  796. package/dist/switch.js.map +1 -0
  797. package/dist/tab-bar-item.d.ts +65 -0
  798. package/dist/tab-bar-item.js +6 -0
  799. package/dist/tab-bar-item.js.map +1 -0
  800. package/dist/tab-bar.d.ts +33 -7
  801. package/dist/tab-bar.js +1 -1
  802. package/dist/tab-navigator.d.ts +154 -0
  803. package/dist/tab-navigator.js +131 -0
  804. package/dist/tab-navigator.js.map +1 -0
  805. package/dist/tag-field.d.ts +52 -0
  806. package/dist/tag-field.js +6 -0
  807. package/dist/tag-field.js.map +1 -0
  808. package/dist/text-field.d.ts +91 -0
  809. package/dist/text-field.js +6 -0
  810. package/dist/text-field.js.map +1 -0
  811. package/dist/text.d.ts +103 -0
  812. package/dist/text.js +3 -0
  813. package/dist/text.js.map +1 -0
  814. package/dist/toolbar-control-group.d.ts +112 -8
  815. package/dist/toolbar-control-group.js +3 -1
  816. package/dist/toolbar-text.d.ts +63 -9
  817. package/dist/toolbar-text.js +2 -1
  818. package/dist/toolbar.d.ts +77 -7
  819. package/dist/toolbar.js +1 -1
  820. package/dist/types-DmHWkSd6.d.ts +207 -0
  821. package/dist/value-table.d.ts +30 -4
  822. package/dist/value-table.js +2 -1
  823. package/dist/webawesome.d.ts +11 -1
  824. package/dist/wire-catalog.d.ts +117 -5
  825. package/dist/wire-catalog.js +314 -14
  826. package/dist/wire-catalog.js.map +1 -1
  827. package/dist/wire-checkboxes.d.ts +10 -0
  828. package/dist/wire-checkboxes.js +3 -0
  829. package/dist/{wire-token-search-fields.js.map → wire-checkboxes.js.map} +1 -1
  830. package/dist/wire-choice-chips.d.ts +17 -0
  831. package/dist/wire-choice-chips.js +4 -0
  832. package/dist/wire-choice-chips.js.map +1 -0
  833. package/dist/wire-color-fields.d.ts +33 -0
  834. package/dist/wire-color-fields.js +82 -0
  835. package/dist/wire-color-fields.js.map +1 -0
  836. package/dist/wire-color-pickers.d.ts +35 -0
  837. package/dist/wire-color-pickers.js +9 -0
  838. package/dist/wire-color-pickers.js.map +1 -0
  839. package/dist/wire-comboboxes.d.ts +26 -0
  840. package/dist/wire-comboboxes.js +4 -0
  841. package/dist/wire-comboboxes.js.map +1 -0
  842. package/dist/wire-content-items.d.ts +15 -0
  843. package/dist/wire-content-items.js +208 -0
  844. package/dist/wire-content-items.js.map +1 -0
  845. package/dist/wire-corner-status.d.ts +11 -0
  846. package/dist/wire-corner-status.js +3 -0
  847. package/dist/wire-corner-status.js.map +1 -0
  848. package/dist/wire-file-pickers.d.ts +27 -0
  849. package/dist/wire-file-pickers.js +3 -0
  850. package/dist/wire-file-pickers.js.map +1 -0
  851. package/dist/wire-list-focus-scroll.d.ts +16 -0
  852. package/dist/wire-list-focus-scroll.js +3 -0
  853. package/dist/wire-list-focus-scroll.js.map +1 -0
  854. package/dist/wire-list-reorder.d.ts +41 -0
  855. package/dist/wire-list-reorder.js +3 -0
  856. package/dist/wire-list-reorder.js.map +1 -0
  857. package/dist/wire-message-composers.d.ts +17 -0
  858. package/dist/wire-message-composers.js +3 -0
  859. package/dist/wire-message-composers.js.map +1 -0
  860. package/dist/wire-nav-stack.d.ts +4 -1
  861. package/dist/wire-nav-stack.js +352 -15
  862. package/dist/wire-nav-stack.js.map +1 -1
  863. package/dist/wire-overlay-sheets.d.ts +20 -0
  864. package/dist/wire-overlay-sheets.js +4 -0
  865. package/dist/wire-overlay-sheets.js.map +1 -0
  866. package/dist/wire-pane-chrome.d.ts +21 -0
  867. package/dist/wire-pane-chrome.js +67 -0
  868. package/dist/wire-pane-chrome.js.map +1 -0
  869. package/dist/wire-resizable-regions.d.ts +2 -1
  870. package/dist/wire-resizable-regions.js +2 -1
  871. package/dist/wire-scroll-dividers.d.ts +87 -0
  872. package/dist/wire-scroll-dividers.js +3 -0
  873. package/dist/wire-scroll-dividers.js.map +1 -0
  874. package/dist/{wire-token-search-fields.d.ts → wire-search-fields.d.ts} +34 -25
  875. package/dist/wire-search-fields.js +6 -0
  876. package/dist/wire-search-fields.js.map +1 -0
  877. package/dist/wire-sidebar.d.ts +24 -4
  878. package/dist/wire-sidebar.js +159 -45
  879. package/dist/wire-sidebar.js.map +1 -1
  880. package/dist/wire-sliders.d.ts +12 -0
  881. package/dist/wire-sliders.js +31 -0
  882. package/dist/wire-sliders.js.map +1 -0
  883. package/dist/wire-tab-bars.d.ts +6 -2
  884. package/dist/wire-tab-bars.js +1 -1
  885. package/dist/wire-tab-navigator.d.ts +13 -0
  886. package/dist/wire-tab-navigator.js +153 -0
  887. package/dist/wire-tab-navigator.js.map +1 -0
  888. package/dist/wire-tag-fields.d.ts +41 -0
  889. package/dist/wire-tag-fields.js +258 -0
  890. package/dist/wire-tag-fields.js.map +1 -0
  891. package/dist/wire-text-fields.d.ts +12 -0
  892. package/dist/wire-text-fields.js +3 -0
  893. package/dist/wire-text-fields.js.map +1 -0
  894. package/dist/wire-toolbar-visibility.d.ts +13 -0
  895. package/dist/wire-toolbar-visibility.js +3 -0
  896. package/dist/wire-toolbar-visibility.js.map +1 -0
  897. package/dist/wire-workbench.d.ts +116 -0
  898. package/dist/wire-workbench.js +6 -0
  899. package/dist/wire-workbench.js.map +1 -0
  900. package/dist/workbench-dialog.d.ts +106 -0
  901. package/dist/workbench-dialog.js +127 -0
  902. package/dist/workbench-dialog.js.map +1 -0
  903. package/dist/workbench.d.ts +258 -10
  904. package/dist/workbench.js +21 -15
  905. package/dist/workbench.js.map +1 -1
  906. package/docs/accessibility.md +829 -41
  907. package/docs/anchored-surface.md +107 -0
  908. package/docs/app-layouts.md +200 -10
  909. package/docs/apple-hig.md +2 -0
  910. package/docs/backdrop-image.md +128 -0
  911. package/docs/catalog.md +599 -63
  912. package/docs/collapsible-panel.md +308 -25
  913. package/docs/color-field.md +65 -0
  914. package/docs/color-picker.md +102 -0
  915. package/docs/color-swatches.md +46 -0
  916. package/docs/component-contract.md +865 -57
  917. package/docs/component-integration.md +75 -0
  918. package/docs/component-selection.md +1124 -108
  919. package/docs/design/templates/button/emphasis-dark.svg +1 -0
  920. package/docs/design/templates/button/emphasis.svg +1 -0
  921. package/docs/design/templates/button/full-width-dark.svg +1 -0
  922. package/docs/design/templates/button/full-width.svg +1 -0
  923. package/docs/design/templates/button/icons-dark.svg +1 -0
  924. package/docs/design/templates/button/icons.svg +1 -0
  925. package/docs/design/templates/button/pill-dark.svg +1 -0
  926. package/docs/design/templates/button/pill.svg +1 -0
  927. package/docs/design/templates/button/states-dark.svg +1 -0
  928. package/docs/design/templates/button/states.svg +1 -0
  929. package/docs/design/templates/button/toggles-dark.svg +1 -0
  930. package/docs/design/templates/button/toggles.svg +1 -0
  931. package/docs/design/templates/button/tones-dark.svg +1 -0
  932. package/docs/design/templates/button/tones.svg +1 -0
  933. package/docs/design/templates/button-dark.svg +1 -0
  934. package/docs/design/templates/button.svg +1 -0
  935. package/docs/design/templates/checkbox/compact-dark.svg +1 -0
  936. package/docs/design/templates/checkbox/compact.svg +1 -0
  937. package/docs/design/templates/checkbox/error-dark.svg +1 -0
  938. package/docs/design/templates/checkbox/error.svg +1 -0
  939. package/docs/design/templates/checkbox/mixed-dark.svg +1 -0
  940. package/docs/design/templates/checkbox/mixed.svg +1 -0
  941. package/docs/design/templates/checkbox/states-dark.svg +1 -0
  942. package/docs/design/templates/checkbox/states.svg +1 -0
  943. package/docs/design/templates/checkbox-dark.svg +1 -0
  944. package/docs/design/templates/checkbox-group/horizontal-dark.svg +1 -0
  945. package/docs/design/templates/checkbox-group/horizontal.svg +1 -0
  946. package/docs/design/templates/checkbox-group/vertical-dark.svg +1 -0
  947. package/docs/design/templates/checkbox-group/vertical.svg +1 -0
  948. package/docs/design/templates/checkbox-group-dark.svg +1 -0
  949. package/docs/design/templates/checkbox-group.svg +1 -0
  950. package/docs/design/templates/checkbox.svg +1 -0
  951. package/docs/design/templates/chip/action-filters-dark.svg +1 -0
  952. package/docs/design/templates/chip/action-filters.svg +1 -0
  953. package/docs/design/templates/chip/tags-dark.svg +1 -0
  954. package/docs/design/templates/chip/tags.svg +1 -0
  955. package/docs/design/templates/chip-dark.svg +1 -0
  956. package/docs/design/templates/chip.svg +1 -0
  957. package/docs/design/templates/choice-chips/color-palette-dark.svg +1 -0
  958. package/docs/design/templates/choice-chips/color-palette.svg +1 -0
  959. package/docs/design/templates/choice-chips/compact-icons-dark.svg +1 -0
  960. package/docs/design/templates/choice-chips/compact-icons.svg +1 -0
  961. package/docs/design/templates/choice-chips/multiple-dark.svg +1 -0
  962. package/docs/design/templates/choice-chips/multiple.svg +1 -0
  963. package/docs/design/templates/choice-chips-dark.svg +1 -0
  964. package/docs/design/templates/choice-chips.svg +1 -0
  965. package/docs/design/templates/color-field/compact-dark.svg +1 -0
  966. package/docs/design/templates/color-field/compact.svg +1 -0
  967. package/docs/design/templates/color-field/error-dark.svg +1 -0
  968. package/docs/design/templates/color-field/error.svg +1 -0
  969. package/docs/design/templates/color-field/hint-dark.svg +1 -0
  970. package/docs/design/templates/color-field/hint.svg +1 -0
  971. package/docs/design/templates/color-field-dark.svg +1 -0
  972. package/docs/design/templates/color-field.svg +1 -0
  973. package/docs/design/templates/color-picker/gray-dark.svg +1 -0
  974. package/docs/design/templates/color-picker/gray.svg +1 -0
  975. package/docs/design/templates/color-picker/hsb-dark.svg +1 -0
  976. package/docs/design/templates/color-picker/hsb.svg +1 -0
  977. package/docs/design/templates/color-picker/rgb-dark.svg +1 -0
  978. package/docs/design/templates/color-picker/rgb.svg +1 -0
  979. package/docs/design/templates/color-picker-dark.svg +1 -0
  980. package/docs/design/templates/color-picker.svg +1 -0
  981. package/docs/design/templates/color-swatches/palette-dark.svg +1 -0
  982. package/docs/design/templates/color-swatches/palette.svg +1 -0
  983. package/docs/design/templates/color-swatches-dark.svg +1 -0
  984. package/docs/design/templates/color-swatches.svg +1 -0
  985. package/docs/design/templates/disclosure/embedded-dark.svg +1 -0
  986. package/docs/design/templates/disclosure/embedded.svg +1 -0
  987. package/docs/design/templates/disclosure/framed-sunken-dark.svg +1 -0
  988. package/docs/design/templates/disclosure/framed-sunken.svg +1 -0
  989. package/docs/design/templates/disclosure/plain-dark.svg +1 -0
  990. package/docs/design/templates/disclosure/plain.svg +1 -0
  991. package/docs/design/templates/disclosure-dark.svg +1 -0
  992. package/docs/design/templates/disclosure.svg +1 -0
  993. package/docs/design/templates/empty-state/filtered-dark.svg +1 -1
  994. package/docs/design/templates/empty-state/filtered.svg +1 -1
  995. package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
  996. package/docs/design/templates/empty-state/with-action.svg +1 -1
  997. package/docs/design/templates/empty-state-dark.svg +1 -7
  998. package/docs/design/templates/empty-state.svg +1 -7
  999. package/docs/design/templates/list/compact-dark.svg +1 -0
  1000. package/docs/design/templates/list/compact.svg +1 -0
  1001. package/docs/design/templates/list/stack-dark.svg +1 -0
  1002. package/docs/design/templates/list/stack.svg +1 -0
  1003. package/docs/design/templates/list-action-row/default-dark.svg +1 -1
  1004. package/docs/design/templates/list-action-row/default.svg +1 -1
  1005. package/docs/design/templates/list-action-row/icon-tile-dark.svg +1 -0
  1006. package/docs/design/templates/list-action-row/icon-tile.svg +1 -0
  1007. package/docs/design/templates/list-action-row/selected-dark.svg +1 -1
  1008. package/docs/design/templates/list-action-row/selected.svg +1 -1
  1009. package/docs/design/templates/list-action-row/trailing-menu-dark.svg +1 -0
  1010. package/docs/design/templates/list-action-row/trailing-menu.svg +1 -0
  1011. package/docs/design/templates/list-action-row-dark.svg +1 -7
  1012. package/docs/design/templates/list-action-row.svg +1 -7
  1013. package/docs/design/templates/list-dark.svg +1 -0
  1014. package/docs/design/templates/list-header/action-dark.svg +1 -1
  1015. package/docs/design/templates/list-header/action.svg +1 -1
  1016. package/docs/design/templates/list-header/count-dark.svg +1 -1
  1017. package/docs/design/templates/list-header/count.svg +1 -1
  1018. package/docs/design/templates/list-header/inline-action-dark.svg +1 -0
  1019. package/docs/design/templates/list-header/inline-action.svg +1 -0
  1020. package/docs/design/templates/list-header/size-l-dark.svg +1 -0
  1021. package/docs/design/templates/list-header/size-l.svg +1 -0
  1022. package/docs/design/templates/list-header/size-m-dark.svg +1 -0
  1023. package/docs/design/templates/list-header/size-m.svg +1 -0
  1024. package/docs/design/templates/list-header/size-xl-dark.svg +1 -0
  1025. package/docs/design/templates/list-header/size-xl.svg +1 -0
  1026. package/docs/design/templates/list-header/size-xs-dark.svg +1 -0
  1027. package/docs/design/templates/list-header/size-xs.svg +1 -0
  1028. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -1
  1029. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -1
  1030. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -1
  1031. package/docs/design/templates/list-header/toggle-expanded.svg +1 -1
  1032. package/docs/design/templates/list-header-dark.svg +1 -11
  1033. package/docs/design/templates/list-header.svg +1 -11
  1034. package/docs/design/templates/list-item/default-dark.svg +1 -1
  1035. package/docs/design/templates/list-item/default.svg +1 -1
  1036. package/docs/design/templates/list-item/icon-tile-dark.svg +1 -0
  1037. package/docs/design/templates/list-item/icon-tile.svg +1 -0
  1038. package/docs/design/templates/list-item/multiline-dark.svg +1 -1
  1039. package/docs/design/templates/list-item/multiline.svg +1 -1
  1040. package/docs/design/templates/list-item/selected-dark.svg +1 -1
  1041. package/docs/design/templates/list-item/selected.svg +1 -1
  1042. package/docs/design/templates/list-item/trailing-dark.svg +1 -1
  1043. package/docs/design/templates/list-item/trailing.svg +1 -1
  1044. package/docs/design/templates/list-item-dark.svg +1 -11
  1045. package/docs/design/templates/list-item.svg +1 -11
  1046. package/docs/design/templates/list.svg +1 -0
  1047. package/docs/design/templates/message-composer/chat-dark.svg +1 -0
  1048. package/docs/design/templates/message-composer/chat.svg +1 -0
  1049. package/docs/design/templates/message-composer/prompt-dark.svg +1 -0
  1050. package/docs/design/templates/message-composer/prompt.svg +1 -0
  1051. package/docs/design/templates/message-composer-dark.svg +1 -0
  1052. package/docs/design/templates/message-composer.svg +1 -0
  1053. package/docs/design/templates/progress-bar/determinate-dark.svg +1 -0
  1054. package/docs/design/templates/progress-bar/determinate.svg +1 -0
  1055. package/docs/design/templates/progress-bar/tones-dark.svg +1 -0
  1056. package/docs/design/templates/progress-bar/tones.svg +1 -0
  1057. package/docs/design/templates/progress-bar-dark.svg +1 -0
  1058. package/docs/design/templates/progress-bar.svg +1 -0
  1059. package/docs/design/templates/progress-ring/sizes-dark.svg +1 -0
  1060. package/docs/design/templates/progress-ring/sizes.svg +1 -0
  1061. package/docs/design/templates/progress-ring/tones-dark.svg +1 -0
  1062. package/docs/design/templates/progress-ring/tones.svg +1 -0
  1063. package/docs/design/templates/progress-ring-dark.svg +1 -0
  1064. package/docs/design/templates/progress-ring.svg +1 -0
  1065. package/docs/design/templates/radio-group/horizontal-dark.svg +1 -0
  1066. package/docs/design/templates/radio-group/horizontal.svg +1 -0
  1067. package/docs/design/templates/radio-group/vertical-dark.svg +1 -0
  1068. package/docs/design/templates/radio-group/vertical.svg +1 -0
  1069. package/docs/design/templates/radio-group-dark.svg +1 -0
  1070. package/docs/design/templates/radio-group.svg +1 -0
  1071. package/docs/design/templates/search-field/empty-dark.svg +1 -0
  1072. package/docs/design/templates/search-field/empty.svg +1 -0
  1073. package/docs/design/templates/search-field/tokens-dark.svg +1 -0
  1074. package/docs/design/templates/search-field/tokens.svg +1 -0
  1075. package/docs/design/templates/search-field-dark.svg +1 -0
  1076. package/docs/design/templates/search-field.svg +1 -0
  1077. package/docs/design/templates/segmented-control/equal-dark.svg +1 -1
  1078. package/docs/design/templates/segmented-control/equal.svg +1 -1
  1079. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -1
  1080. package/docs/design/templates/segmented-control/pill-small.svg +1 -1
  1081. package/docs/design/templates/segmented-control-dark.svg +1 -7
  1082. package/docs/design/templates/segmented-control.svg +1 -7
  1083. package/docs/design/templates/select/compact-dark.svg +1 -0
  1084. package/docs/design/templates/select/compact.svg +1 -0
  1085. package/docs/design/templates/select/form-dark.svg +1 -0
  1086. package/docs/design/templates/select/form.svg +1 -0
  1087. package/docs/design/templates/select/icons-dark.svg +1 -0
  1088. package/docs/design/templates/select/icons.svg +1 -0
  1089. package/docs/design/templates/select-dark.svg +1 -0
  1090. package/docs/design/templates/select.svg +1 -0
  1091. package/docs/design/templates/skeleton-dark.svg +1 -9
  1092. package/docs/design/templates/skeleton.svg +1 -9
  1093. package/docs/design/templates/slider/compact-dark.svg +1 -0
  1094. package/docs/design/templates/slider/compact.svg +1 -0
  1095. package/docs/design/templates/slider/readout-dark.svg +1 -0
  1096. package/docs/design/templates/slider/readout.svg +1 -0
  1097. package/docs/design/templates/slider/ticks-dark.svg +1 -0
  1098. package/docs/design/templates/slider/ticks.svg +1 -0
  1099. package/docs/design/templates/slider-dark.svg +1 -0
  1100. package/docs/design/templates/slider.svg +1 -0
  1101. package/docs/design/templates/split-button/full-width-dark.svg +1 -0
  1102. package/docs/design/templates/split-button/full-width.svg +1 -0
  1103. package/docs/design/templates/split-button/pill-dark.svg +1 -0
  1104. package/docs/design/templates/split-button/pill.svg +1 -0
  1105. package/docs/design/templates/split-button/states-dark.svg +1 -0
  1106. package/docs/design/templates/split-button/states.svg +1 -0
  1107. package/docs/design/templates/split-button/tones-dark.svg +1 -0
  1108. package/docs/design/templates/split-button/tones.svg +1 -0
  1109. package/docs/design/templates/split-button-dark.svg +1 -0
  1110. package/docs/design/templates/split-button.svg +1 -0
  1111. package/docs/design/templates/state-banner/danger-dark.svg +1 -1
  1112. package/docs/design/templates/state-banner/danger.svg +1 -1
  1113. package/docs/design/templates/state-banner/info-badge-dark.svg +1 -0
  1114. package/docs/design/templates/state-banner/info-badge.svg +1 -0
  1115. package/docs/design/templates/state-banner/info-dark.svg +1 -1
  1116. package/docs/design/templates/state-banner/info.svg +1 -1
  1117. package/docs/design/templates/state-banner/strip-dark.svg +1 -0
  1118. package/docs/design/templates/state-banner/strip.svg +1 -0
  1119. package/docs/design/templates/state-banner/success-dark.svg +1 -1
  1120. package/docs/design/templates/state-banner/success.svg +1 -1
  1121. package/docs/design/templates/state-banner/warning-dark.svg +1 -1
  1122. package/docs/design/templates/state-banner/warning.svg +1 -1
  1123. package/docs/design/templates/state-banner-dark.svg +1 -11
  1124. package/docs/design/templates/state-banner.svg +1 -11
  1125. package/docs/design/templates/switch/compact-dark.svg +1 -0
  1126. package/docs/design/templates/switch/compact.svg +1 -0
  1127. package/docs/design/templates/switch/states-dark.svg +1 -0
  1128. package/docs/design/templates/switch/states.svg +1 -0
  1129. package/docs/design/templates/switch-dark.svg +1 -0
  1130. package/docs/design/templates/switch.svg +1 -0
  1131. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
  1132. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
  1133. package/docs/design/templates/tab-bar-dark.svg +1 -5
  1134. package/docs/design/templates/tab-bar.svg +1 -5
  1135. package/docs/design/templates/tag-field/error-dark.svg +1 -0
  1136. package/docs/design/templates/tag-field/error.svg +1 -0
  1137. package/docs/design/templates/tag-field/tags-dark.svg +1 -0
  1138. package/docs/design/templates/tag-field/tags.svg +1 -0
  1139. package/docs/design/templates/tag-field-dark.svg +1 -0
  1140. package/docs/design/templates/tag-field.svg +1 -0
  1141. package/docs/design/templates/text-field/compact-dark.svg +1 -0
  1142. package/docs/design/templates/text-field/compact.svg +1 -0
  1143. package/docs/design/templates/text-field/error-dark.svg +1 -0
  1144. package/docs/design/templates/text-field/error.svg +1 -0
  1145. package/docs/design/templates/text-field/labeled-dark.svg +1 -0
  1146. package/docs/design/templates/text-field/labeled.svg +1 -0
  1147. package/docs/design/templates/text-field/multiline-dark.svg +1 -0
  1148. package/docs/design/templates/text-field/multiline.svg +1 -0
  1149. package/docs/design/templates/text-field/number-dark.svg +1 -0
  1150. package/docs/design/templates/text-field/number.svg +1 -0
  1151. package/docs/design/templates/text-field/search-dark.svg +1 -0
  1152. package/docs/design/templates/text-field/search.svg +1 -0
  1153. package/docs/design/templates/text-field-dark.svg +1 -0
  1154. package/docs/design/templates/text-field.svg +1 -0
  1155. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
  1156. package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
  1157. package/docs/design/templates/toolbar/width-visibility-320-dark.svg +1 -0
  1158. package/docs/design/templates/toolbar/width-visibility-320.svg +1 -0
  1159. package/docs/design/templates/toolbar/width-visibility-600-dark.svg +1 -0
  1160. package/docs/design/templates/toolbar/width-visibility-600.svg +1 -0
  1161. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -1
  1162. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -1
  1163. package/docs/design/templates/toolbar-control-group/glass-dark.svg +1 -0
  1164. package/docs/design/templates/toolbar-control-group/glass.svg +1 -0
  1165. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -1
  1166. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -1
  1167. package/docs/design/templates/toolbar-control-group/icon-tile-brand-dark.svg +1 -0
  1168. package/docs/design/templates/toolbar-control-group/icon-tile-brand.svg +1 -0
  1169. package/docs/design/templates/toolbar-control-group/icon-tile-danger-dark.svg +1 -0
  1170. package/docs/design/templates/toolbar-control-group/icon-tile-danger.svg +1 -0
  1171. package/docs/design/templates/toolbar-control-group/icon-tile-neutral-dark.svg +1 -0
  1172. package/docs/design/templates/toolbar-control-group/icon-tile-neutral.svg +1 -0
  1173. package/docs/design/templates/toolbar-control-group/icon-tile-success-dark.svg +1 -0
  1174. package/docs/design/templates/toolbar-control-group/icon-tile-success.svg +1 -0
  1175. package/docs/design/templates/toolbar-control-group/icon-tile-warning-dark.svg +1 -0
  1176. package/docs/design/templates/toolbar-control-group/icon-tile-warning.svg +1 -0
  1177. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -1
  1178. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -1
  1179. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
  1180. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
  1181. package/docs/design/templates/toolbar-control-group-dark.svg +1 -11
  1182. package/docs/design/templates/toolbar-control-group.svg +1 -11
  1183. package/docs/design/templates/toolbar-dark.svg +1 -5
  1184. package/docs/design/templates/toolbar-text/dark-tone-dark.svg +1 -0
  1185. package/docs/design/templates/toolbar-text/dark-tone.svg +1 -0
  1186. package/docs/design/templates/toolbar-text/default-dark.svg +1 -1
  1187. package/docs/design/templates/toolbar-text/default.svg +1 -1
  1188. package/docs/design/templates/toolbar-text/large-dark.svg +1 -1
  1189. package/docs/design/templates/toolbar-text/large.svg +1 -1
  1190. package/docs/design/templates/toolbar-text/small-dark.svg +1 -1
  1191. package/docs/design/templates/toolbar-text/small.svg +1 -1
  1192. package/docs/design/templates/toolbar-text-dark.svg +1 -9
  1193. package/docs/design/templates/toolbar-text.svg +1 -9
  1194. package/docs/design/templates/toolbar.svg +1 -5
  1195. package/docs/design/templates/value-table/details-dark.svg +1 -1
  1196. package/docs/design/templates/value-table/details.svg +1 -1
  1197. package/docs/design/templates/value-table-dark.svg +1 -5
  1198. package/docs/design/templates/value-table.svg +1 -5
  1199. package/docs/design/templates.md +87 -33
  1200. package/docs/design-philosophy.md +65 -20
  1201. package/docs/device-class.md +10 -9
  1202. package/docs/disclosure.md +97 -0
  1203. package/docs/document-baseline.md +93 -0
  1204. package/docs/examples/application-ui-profile.json +60 -0
  1205. package/docs/examples/command-palette-adapter.tsx +69 -17
  1206. package/docs/examples/component-catalog-extension.json +52 -0
  1207. package/docs/examples/component-composition-extension.json +80 -0
  1208. package/docs/layout.md +946 -53
  1209. package/docs/list-detail-dialog.md +100 -0
  1210. package/docs/manual-test-plan.md +29 -0
  1211. package/docs/message-composer.md +156 -0
  1212. package/docs/nav-stack.md +327 -14
  1213. package/docs/overlay-toast.md +62 -0
  1214. package/docs/overlay-tooltip.md +53 -0
  1215. package/docs/progress.md +62 -0
  1216. package/docs/recipes.md +147 -73
  1217. package/docs/slider.md +64 -0
  1218. package/docs/split-view.md +96 -7
  1219. package/docs/sunken-panel.md +106 -0
  1220. package/docs/surface-scaffold.md +487 -0
  1221. package/docs/tab-navigator.md +291 -0
  1222. package/docs/tag-field.md +66 -0
  1223. package/docs/type-contracts.md +137 -0
  1224. package/docs/ui-analyzer.md +406 -0
  1225. package/docs/ui-doctor.md +298 -0
  1226. package/docs/ui-evaluator.md +139 -0
  1227. package/docs/ux-demo.md +58 -17
  1228. package/docs/webawesome-migration.md +82 -0
  1229. package/docs/webawesome-theme.md +306 -47
  1230. package/docs/workbench-dialog.md +88 -0
  1231. package/docs/workbench.md +637 -12
  1232. package/docs/writing.md +154 -0
  1233. package/doctor/cli.mjs +120 -0
  1234. package/doctor/component-style-checks.mjs +457 -0
  1235. package/doctor/config.schema.json +94 -0
  1236. package/doctor/copy-capitalization-checks.mjs +603 -0
  1237. package/doctor/eslint-diagnostics.d.mts +24 -0
  1238. package/doctor/eslint-diagnostics.mjs +24 -0
  1239. package/doctor/index.d.mts +122 -0
  1240. package/doctor/index.mjs +1424 -0
  1241. package/doctor/report.schema.json +118 -0
  1242. package/evaluator/cli.mjs +89 -0
  1243. package/evaluator/index.d.mts +90 -0
  1244. package/evaluator/index.mjs +1203 -0
  1245. package/evaluator/report.schema.json +152 -0
  1246. package/llms.txt +940 -54
  1247. package/package.json +488 -43
  1248. package/scripts/component-catalog-extension-validation.mjs +28 -0
  1249. package/traversal-exclusions.mjs +86 -0
  1250. package/ux-demo/recipes/app-shell.tsx +204 -16
  1251. package/ux-demo/recipes/collapsible-sidebar.tsx +206 -45
  1252. package/ux-demo/recipes/compact-toolbar.tsx +135 -14
  1253. package/ux-demo/recipes/composer-form.tsx +135 -24
  1254. package/ux-demo/recipes/list-detail-dialog.tsx +155 -21
  1255. package/ux-demo/recipes/list-workspace-states.tsx +183 -11
  1256. package/ux-demo/recipes/loaders.ts +11 -3
  1257. package/ux-demo/recipes/loading-inspector.tsx +162 -39
  1258. package/ux-demo/recipes/media-detail.tsx +272 -0
  1259. package/ux-demo/recipes/mount-recipe.ts +28 -11
  1260. package/ux-demo/recipes/navigation-sidebar.tsx +137 -11
  1261. package/ux-demo/recipes/navigation-stack.tsx +79 -24
  1262. package/ux-demo/recipes/types.ts +18 -2
  1263. package/ux-demo/recipes/workspace-header.tsx +86 -5
  1264. package/vite-ux-review.d.mts +83 -0
  1265. package/vite-ux-review.mjs +120 -0
  1266. package/dist/app-tab.d.ts +0 -30
  1267. package/dist/app-tab.js +0 -5
  1268. package/dist/app-tab.js.map +0 -1
  1269. package/dist/browser/app-tab.js +0 -4
  1270. package/dist/browser/panel-header.js +0 -7
  1271. package/dist/browser/token-search-field.js +0 -4
  1272. package/dist/chunk-2Z5TWHKQ.js +0 -34
  1273. package/dist/chunk-2Z5TWHKQ.js.map +0 -1
  1274. package/dist/chunk-37T3VNIZ.js +0 -19
  1275. package/dist/chunk-37T3VNIZ.js.map +0 -1
  1276. package/dist/chunk-55DATV3A.js +0 -10
  1277. package/dist/chunk-55DATV3A.js.map +0 -1
  1278. package/dist/chunk-56RJXPHG.js.map +0 -1
  1279. package/dist/chunk-5ATCDSQS.js +0 -42
  1280. package/dist/chunk-5ATCDSQS.js.map +0 -1
  1281. package/dist/chunk-5E2HVJ33.js +0 -10
  1282. package/dist/chunk-5E2HVJ33.js.map +0 -1
  1283. package/dist/chunk-7BR3DO2A.js +0 -31
  1284. package/dist/chunk-7BR3DO2A.js.map +0 -1
  1285. package/dist/chunk-7JB7VPRI.js +0 -34
  1286. package/dist/chunk-7JB7VPRI.js.map +0 -1
  1287. package/dist/chunk-7LDCTU7D.js +0 -134
  1288. package/dist/chunk-7LDCTU7D.js.map +0 -1
  1289. package/dist/chunk-AQNKJRFH.js +0 -79
  1290. package/dist/chunk-AQNKJRFH.js.map +0 -1
  1291. package/dist/chunk-AVZHJN6C.js +0 -14
  1292. package/dist/chunk-AVZHJN6C.js.map +0 -1
  1293. package/dist/chunk-B24C4A6T.js +0 -22
  1294. package/dist/chunk-B24C4A6T.js.map +0 -1
  1295. package/dist/chunk-BLK3UEEI.js +0 -23
  1296. package/dist/chunk-BLK3UEEI.js.map +0 -1
  1297. package/dist/chunk-CH4SQ6H5.js +0 -39
  1298. package/dist/chunk-CH4SQ6H5.js.map +0 -1
  1299. package/dist/chunk-DAFFDO33.js +0 -14
  1300. package/dist/chunk-DAFFDO33.js.map +0 -1
  1301. package/dist/chunk-I7INRJO4.js +0 -17
  1302. package/dist/chunk-I7INRJO4.js.map +0 -1
  1303. package/dist/chunk-L4OKFDJY.js +0 -24
  1304. package/dist/chunk-L4OKFDJY.js.map +0 -1
  1305. package/dist/chunk-LCOBDOCC.js +0 -265
  1306. package/dist/chunk-LCOBDOCC.js.map +0 -1
  1307. package/dist/chunk-M5JRI6MN.js +0 -27
  1308. package/dist/chunk-M5JRI6MN.js.map +0 -1
  1309. package/dist/chunk-RNPGFQ33.js +0 -10
  1310. package/dist/chunk-RNPGFQ33.js.map +0 -1
  1311. package/dist/chunk-RUNWEPR4.js +0 -10
  1312. package/dist/chunk-RUNWEPR4.js.map +0 -1
  1313. package/dist/chunk-W2FK7ZNY.js +0 -26
  1314. package/dist/chunk-W2FK7ZNY.js.map +0 -1
  1315. package/dist/chunk-WVPYVDXY.js +0 -15
  1316. package/dist/chunk-WVPYVDXY.js.map +0 -1
  1317. package/dist/chunk-XE5ZLPCC.js +0 -20
  1318. package/dist/chunk-XE5ZLPCC.js.map +0 -1
  1319. package/dist/chunk-XXMOARTH.js +0 -229
  1320. package/dist/chunk-XXMOARTH.js.map +0 -1
  1321. package/dist/chunk-YGN7OMLT.js.map +0 -1
  1322. package/dist/panel-header.d.ts +0 -36
  1323. package/dist/panel-header.js +0 -7
  1324. package/dist/panel-header.js.map +0 -1
  1325. package/dist/styles/app-tab.css +0 -152
  1326. package/dist/styles/panel-header.css +0 -64
  1327. package/dist/styles/tab-scaffold.css +0 -84
  1328. package/dist/styles/token-search-field.css +0 -289
  1329. package/dist/tab-scaffold.d.ts +0 -30
  1330. package/dist/tab-scaffold.js +0 -16
  1331. package/dist/tab-scaffold.js.map +0 -1
  1332. package/dist/token-search-field.d.ts +0 -43
  1333. package/dist/token-search-field.js +0 -4
  1334. package/dist/token-search-field.js.map +0 -1
  1335. package/dist/wire-tab-scaffold.d.ts +0 -11
  1336. package/dist/wire-tab-scaffold.js +0 -16
  1337. package/dist/wire-tab-scaffold.js.map +0 -1
  1338. package/dist/wire-token-search-fields.js +0 -5
  1339. package/docs/design/templates/panel-header/icon-actions-dark.svg +0 -1
  1340. package/docs/design/templates/panel-header/icon-actions.svg +0 -1
  1341. package/docs/design/templates/panel-header/icon-summary-actions-dark.svg +0 -1
  1342. package/docs/design/templates/panel-header/icon-summary-actions.svg +0 -1
  1343. package/docs/design/templates/panel-header/no-icon-dark.svg +0 -1
  1344. package/docs/design/templates/panel-header/no-icon.svg +0 -1
  1345. package/docs/design/templates/panel-header/page-heading-dark.svg +0 -1
  1346. package/docs/design/templates/panel-header/page-heading.svg +0 -1
  1347. package/docs/design/templates/panel-header/title-only-dark.svg +0 -1
  1348. package/docs/design/templates/panel-header/title-only.svg +0 -1
  1349. package/docs/design/templates/panel-header-dark.svg +0 -13
  1350. package/docs/design/templates/panel-header.svg +0 -13
  1351. package/docs/design/templates/token-search-field/empty-dark.svg +0 -1
  1352. package/docs/design/templates/token-search-field/empty.svg +0 -1
  1353. package/docs/design/templates/token-search-field/tokens-dark.svg +0 -1
  1354. package/docs/design/templates/token-search-field/tokens.svg +0 -1
  1355. package/docs/design/templates/token-search-field-dark.svg +0 -7
  1356. package/docs/design/templates/token-search-field.svg +0 -7
  1357. package/docs/tab-scaffold.md +0 -41
  1358. package/ux-demo/recipes/recipes.css +0 -448
package/docs/workbench.md CHANGED
@@ -8,15 +8,42 @@ sidebar. One of the opt-in app layouts (see
8
8
  desktop-class devices.
9
9
 
10
10
  ```ts
11
- import { Workbench } from '@kerfjs/ui/workbench';
12
- import '@kerfjs/ui/workbench.css';
11
+ import { Workbench } from "@kerfjs/ui/workbench";
13
12
  ```
14
13
 
14
+ In a browser bundler that honors the `browser` export condition (Vite, esbuild, and
15
+ webpack do by default), the import above also
16
+ loads Workbench's stylesheet and those of the components it renders internally
17
+ (`Pane`, `NavStack`, `Toolbar`, `ToolbarControlGroup`, `FloatingToolbar`,
18
+ `ResizableRegion`, `List`, `LucideIcon`). Without that condition, import the manual stylesheets instead:
19
+ `@kerfjs/ui/workbench.css` plus those components' CSS, or `@kerfjs/ui/styles.css`.
20
+
21
+ A top-level `Workbench` needs a definite containing height. Import the opt-in
22
+ `@kerfjs/ui/document.css` baseline and add `.kui-app-root` to the direct mount
23
+ container, or provide an equivalent definite height in application-owned
24
+ layout. The component intentionally uses `height: 100%` rather than `100dvh` so
25
+ it can also be embedded. See [Document baseline](document-baseline.md).
26
+
15
27
  ## State lives in the app
16
28
 
17
29
  `Workbench` is declarative and the collapse is **pure CSS** — no wire. The app
18
30
  owns each panel's `collapsed` flag (usually a signal) and toggles it; the panel
19
- animates itself.
31
+ animates itself. Panels are fixed-size by default; a panel can opt in to drag
32
+ and keyboard resizing (see [Resizable panels](#resizable-panels)), and
33
+ `wireWorkbench` can make overlay panels transient (see
34
+ [Transient overlays](#transient-overlays)).
35
+
36
+ A collapsed panel renders `inert` and `aria-hidden="true"` on the rail or
37
+ drawer itself, and `inert` on its content, straight from `collapsed`, so
38
+ neither Tab nor assistive technology reaches controls that have slid out of
39
+ view, none of them can scroll back into view, and no empty labeled landmark
40
+ stays behind. The slide-out still animates,
41
+ and the panel's `restoreControl` lives outside the inert content, so it stays
42
+ reachable. Expanding the panel makes its content reachable again in the same
43
+ render. When the panel closes with focus inside it, `wireWorkbench` (given the
44
+ panel's `collapsed` signal) moves focus back out (see
45
+ [Transient overlays](#transient-overlays)); without it, that focus move is the
46
+ app's.
20
47
 
21
48
  ```tsx
22
49
  const navCollapsed = signal(false);
@@ -25,23 +52,621 @@ const navCollapsed = signal(false);
25
52
  id="studio"
26
53
  label="Studio"
27
54
  main={<Editor />}
28
- leftRail={{ content: <Navigator />, label: 'Navigator', collapsed: navCollapsed.value, size: 280 }}
29
- rightRail={{ content: <Inspector />, label: 'Inspector', collapsed: inspectorCollapsed.value }}
30
- bottomDrawer={{ content: <Console />, label: 'Console', collapsed: consoleCollapsed.value }}
55
+ leftRail={{
56
+ content: <Navigator />,
57
+ label: "Navigator",
58
+ collapsed: navCollapsed.value,
59
+ size: 280,
60
+ }}
61
+ rightRail={{
62
+ content: <Inspector />,
63
+ label: "Inspector",
64
+ collapsed: inspectorCollapsed.value,
65
+ }}
66
+ bottomDrawer={{
67
+ content: <Console />,
68
+ label: "Console",
69
+ collapsed: consoleCollapsed.value,
70
+ }}
31
71
  />;
32
72
  ```
33
73
 
34
- Each `WorkbenchPanel` takes `content`, an optional `collapsed`, an optional
74
+ ## Focusable regions
75
+
76
+ Set `mainTabIndex={0}` for a Tab stop on the central work area, or `-1` to
77
+ focus it from application code. `mainOutlined` keeps the standard focus ring
78
+ visible as an application-controlled state, such as a drop target. Keyboard
79
+ focus shows the same ring. Each rail or drawer accepts its own `tabIndex` and
80
+ `outlined`; a collapsed or hidden panel cannot become a Tab stop and its
81
+ outline is hidden until it expands. `mainPane` and a panel's `pane` forward the
82
+ same options to an inner Pane when that is the intended focus owner. Give
83
+ the central region `mainLabel` when it needs its own named landmark; panel
84
+ regions use their `label`.
85
+ When a sole Pane fills the main region, the Workbench ring paints above opaque
86
+ edge-to-edge Pane content without blocking pointer input in that content.
87
+
88
+ Each static `WorkbenchPanel` takes `content`, an optional `toolbar` and `footer` (see
89
+ [Panel toolbars](#panel-toolbars)), an optional `collapsed`, an optional
35
90
  `size` (rail width or drawer height in px, overriding the CSS default —
36
91
  `--kui-workbench-rail-width` 280px, `--kui-workbench-drawer-height` 220px), and
37
- an optional `label`.
92
+ an optional `label`. Common shell behavior is configured rather than restyled:
93
+
94
+ - `separator: "auto" | "hidden"` controls the owned dock-edge separator;
95
+ - `collapseMotion: "slide" | "fade-slide" | "none"` keeps the track change
96
+ instant while choosing composited content motion;
97
+ - `contentOverflow: "clip" | "auto" | "visible"` chooses the resting overflow
98
+ policy. A `PopupMenu` opens in the browser top layer, which no clipping
99
+ reaches; an open raw Web Awesome dropdown temporarily releases rail/drawer
100
+ clipping and raises its popup layer automatically;
101
+ - `presentation: "inline" | "overlay" | "hidden"` supports compact overlays
102
+ or a responsive replacement. An overlay rail spans the Workbench height at
103
+ its side and an overlay drawer spans the work-area column at the bottom,
104
+ each exactly at its configured size (its separator border included, as in
105
+ flow) up to the viewport-relative overlay maximum; the content fills the
106
+ panel inside its border, so it is clamped with it;
107
+ - `overlayBackdrop` on the Workbench opts in to a `--kui-color-scrim` backdrop
108
+ whenever a static or responsive rail/drawer overlay is open. It sits below
109
+ the panel and above the work area, absorbs an outside press, and lets
110
+ `wireWorkbench` close the overlay without activating the control underneath.
111
+ It is off by default; without it, the compact rail's dismiss strip remains
112
+ transparent. Pair it with `wireWorkbench` for outside-press dismissal;
113
+ - `responsiveOverlayAt: "narrow" | "compact" | "never" | number` presents a rail or the
114
+ bottom drawer as an overlay below a Workbench container breakpoint — 704px
115
+ or less for `narrow`, 448px or less for `compact`, the breakpoints of
116
+ `ResizableRegion`'s `responsiveFillAt` — and inline above it. A positive
117
+ number such as `1024` uses that many CSS pixels of Workbench width. Numeric
118
+ thresholds require `wireWorkbench` with that panel's `collapsed` signal;
119
+ its resize observer applies the overlay layout and the collapse/restore
120
+ transition together. **Rails
121
+ default to `narrow`**, so on a small screen a sidebar covers the work area
122
+ (and an open drawer) instead of squeezing it; pass `never` to keep a rail
123
+ inline. The drawer stays inline unless it opts in. On a compact (448px or
124
+ less) Workbench an overlay rail fills the Workbench less a dismiss strip on
125
+ the side away from its edge — `--kui-workbench-overlay-dismiss-margin`,
126
+ 44px, one touch target — so a press beside it closes it;
127
+ `compactOverlay: "full"` (per rail) fills the Workbench instead, which
128
+ usually wants app-level handling of its own. Pass each rail's `collapsed`
129
+ signal to `wireWorkbench` so only one overlay is open at a time and a press
130
+ outside closes it. The CSS
131
+ decides, so the app needs no `deviceClass` check for presentation; a
132
+ collapsed overlay drops its surface and shadow so nothing covers the work
133
+ area, and the work area keeps the safe-area inset of the edge the overlay
134
+ covers. When overlays meet, the order is fixed rather than by which opened
135
+ last: both rails stack above the drawer, as inline rails span the
136
+ Workbench's full height beside the drawer's column, and the right rail
137
+ stacks above the left. Rails take `--kui-workbench-overlay-z` (41) and the
138
+ drawer one less. Restore controls take `--kui-workbench-restore-z`, which
139
+ defaults to two less than the overlay z-index (39), so they sit beneath
140
+ every overlay: an open overlay covers another panel's restore control as
141
+ it covers the rest of the work area, and a collapsed overlay, which drops
142
+ its pointer events, leaves the control beneath it usable. While a rail
143
+ overlay is open (static, or a responsive one whose breakpoint applies), the
144
+ work area's floating controls — restore corners and any `FloatingToolbar`
145
+ in `main` — are also hidden outright (out of the tab order and the
146
+ accessibility tree), so they can never paint over the rail whatever
147
+ stacking context the app gives the work area; they return as it closes.
148
+ The rail's own floating controls stay, and a drawer overlay hides nothing;
149
+ - `restoreControl` places an application-owned restore affordance in a
150
+ corner of the Workbench itself while the panel is collapsed. Prefer a
151
+ `toolbar.toggle`, which the Workbench relocates for you; keep
152
+ `restoreControl` for a custom affordance. `restorePosition` chooses the
153
+ corner, inset by
154
+ `--kui-workbench-restore-inset` (16px) plus the unsafe area of each edge the
155
+ corner reaches. A rail's control sits in the Workbench's corner; the
156
+ drawer's sits in the corner of the work-area column it restores into, so it
157
+ never lands on an expanded rail. A collapsed rail's control floats the
158
+ same inset above the top edge of an expanded inline bottom drawer, which
159
+ spans the column reaching that corner once the rail collapses, so it never
160
+ covers the drawer's content; it returns to the corner when the drawer
161
+ collapses (the drawer publishes its edge as a CSS anchor scoped to its own
162
+ Workbench; without anchor positioning the control keeps the corner). An
163
+ overlay drawer publishes no edge: an open one covers the control, as every
164
+ open overlay does. Because it is anchored to the Workbench
165
+ rather than the viewport, an embedded Workbench never floats it over page
166
+ chrome outside it, and it scrolls with the Workbench. Compose it from the
167
+ package controls — a `single` `ToolbarControlGroup` around one icon button
168
+ carrying `collapsiblePanelToggleIcon(side, true)` — rather than a bare
169
+ button. To give it `FloatingToolbar`'s toolbar role and floating look, wrap
170
+ that group in a `FloatingToolbar` whose `position` matches the corner: the
171
+ corner owns the inset (it zeroes the toolbar's default inset), so omit
172
+ `inset` there and the toolbar floats from the corner instead of doubling it.
173
+
174
+ - `resizable: true | { min, max }` opts the panel in to drag and keyboard
175
+ resizing, driven by `wireWorkbench` (off by default).
176
+
177
+ The same policy props are available on `ResizableRegion` and
178
+ `CollapsiblePanel`, so a resizable application shell does not need to reach
179
+ into `.kui-resizable-region__content`.
180
+
181
+ ## Panel toolbars
182
+
183
+ A panel with `navStack` hosts a controlled `NavStack` in place of the static
184
+ `content` and `Pane` slots. Give it a `toolbar` with a `toggle`; each
185
+ `navStack.views` entry then supplies its own structured `toolbar` with a title
186
+ and leading/center/trailing groups, optional `header` / `footer` and `pane`
187
+ configuration, and scrolling `content`. The active view's toolbar is
188
+ the panel's only toolbar row, with the standard toggle always last. On
189
+ collapse, marked groups from the active view and the toggle relocate to the
190
+ work-area toolbar; the view stack stays mounted. The app owns the view array
191
+ and calls `wireNavStack` for animated push/pop and focus movement. See
192
+ [Navigation stack](nav-stack.md) and the catalog's navigation ticket rail.
193
+
194
+ ```tsx
195
+ <Workbench
196
+ id="tickets"
197
+ label="Tickets workspace"
198
+ main={<Workspace />}
199
+ rightRail={{
200
+ label: "Tickets",
201
+ collapsed: ticketsCollapsed.value,
202
+ toolbar: { toggle: { action: "toggle-tickets", name: "Tickets" } },
203
+ navStack: { id: "ticket-stack", label: "Tickets", views: ticketViews.value },
204
+ }}
205
+ />
206
+ ```
207
+
208
+ A panel's controls follow it open and closed when the Workbench composes the
209
+ toolbars. Give a panel a `toolbar` and the work area a `mainToolbar` (and, for
210
+ a drawer, optionally a `mainBottomToolbar`); the Workbench renders each as a
211
+ standard `Toolbar` over a `Pane`, and moves groups between them as panels open
212
+ and close. A panel's `toolbar` has these parts:
213
+
214
+ - `title` — the panel's `ToolbarText` (the quiet default size in a rail).
215
+ - `leading`, `center`, and `trailing` — the open panel's toolbar zones. Put
216
+ `ToolbarControlGroup`s in any order in these zones. Mark a group with
217
+ `relocateOnCollapse` to make it available in the work area while the panel
218
+ is closed; unmarked groups remain in the inert panel. Pass marked groups
219
+ directly or in arrays, including nested arrays, rather than JSX fragments
220
+ so their render-time annotation remains available.
221
+ - `toggle: { action, name, showLabel?, hideLabel? }` — the standard collapse
222
+ toggle, which the Workbench renders: the per-side panel glyph,
223
+ `aria-controls` naming the panel, `aria-expanded`, a "Show …"/"Hide …"
224
+ label (or your localized `showLabel` / `hideLabel`), and the `data-action`
225
+ the app handles. It is always the last group. `name` is the panel's
226
+ title-style name ("Navigator", "Build Output"): it becomes the toggle
227
+ group's accessible name and completes the "Show Navigator" / "Hide
228
+ Navigator" label, so it follows [the capitalization rule](./writing.md#capitalization).
229
+
230
+ While a panel is closed, marked groups follow their open-panel zone order
231
+ (`leading`, `center`, `trailing`), followed by its toggle:
232
+
233
+ | Panel | Where they go |
234
+ | ------------- | --------------------------------------------------------------------------------------------------------------- |
235
+ | Left rail | The leading edge of `mainToolbar`, before its `title` |
236
+ | Right rail | The trailing edge of `mainToolbar`, after its `trailing` groups and before any `end` groups |
237
+ | Bottom drawer | The trailing edge of `mainBottomToolbar`; without one, a `FloatingToolbar` in the work area's bottom-end corner |
238
+
239
+ `mainToolbar.end` takes groups that stay outermost, after a closed right
240
+ rail's toggle, such as a dialog's close control (`WorkbenchDialog` uses it).
241
+
242
+ A rail with no `mainToolbar` floats its groups in its corner the same way, so
243
+ a closed panel can always be reopened. An open overlay panel carries its own
244
+ toggle, so it never depends on a control it covers. An app's own
245
+ `restoreControl` still wins over the floating fallback.
246
+
247
+ ```tsx
248
+ <Workbench
249
+ id="studio"
250
+ label="Studio"
251
+ mainToolbar={{ label: "Editor", title: <ToolbarText text="Editor" size="xlarge" /> }}
252
+ main={<Editor />}
253
+ leftRail={{
254
+ label: "Navigator",
255
+ toolbar: {
256
+ label: "Navigator",
257
+ title: <ToolbarText text="Navigator" />,
258
+ leading: <NewFileGroup />,
259
+ trailing: <ToolbarControlGroup relocateOnCollapse label="Search Files"><SearchButton /></ToolbarControlGroup>,
260
+ toggle: { action: "toggle-navigator", name: "Navigator" },
261
+ },
262
+ content: <Files />,
263
+ collapsed: navCollapsed.value,
264
+ }}
265
+ />
266
+ ```
267
+
268
+ The work area's `Pane` can carry more fixed chrome: `mainHeader` renders under
269
+ `mainToolbar` (supporting copy) and `mainFooter` over `mainBottomToolbar` (a status
270
+ line or a resource toolbar), each divided from the scrolling `main`.
271
+ `mainHeaderPlacement` and `mainFooterPlacement` (`"fixed"` by default, or
272
+ `"scroll"`) let that header or footer chrome scroll away with `main` instead —
273
+ useful where large text would leave pinned chrome little room. `"auto"` keeps
274
+ it pinned while the work area is tall enough and lets it scroll with `main`
275
+ when the work area is short (the Pane's `chromePlacement="auto"`; it applies to
276
+ the pinned header and footer together).
277
+
278
+ A toolbar panel has the same fixed chrome sequence: `toolbar`, optional
279
+ `header`, scrolling `content`, optional `footer`, and optional
280
+ `bottomToolbar`. `header` sits below the panel toolbar, so an inspector can
281
+ keep its title, notices, and section tabs visible while its detail content
282
+ scrolls in the one `Pane` scroll owner. `headerList` and `footerList` configure
283
+ their `List` wrappers. `headerPlacement` and `footerPlacement` accept
284
+ `"fixed"` (default), `"scroll"`, or `"auto"` with the same behavior as the
285
+ work area's placement props. The panel's bottom toolbar renders a semantic
286
+ `footer`. These panel slots apply only when the panel has a `toolbar`; a panel
287
+ without one continues to render `content` as supplied.
288
+
289
+ Every toolbar the Workbench composes — `mainToolbar`, `mainBottomToolbar`, and
290
+ each panel's `toolbar` — takes the `Toolbar`'s configuration (`ToolbarConfig`):
291
+ `dividerSides`, `centerAlign`, `responsive`, `responsiveAt`, and
292
+ `safeAreaEdges`. Configure the toolbar through these props rather than styling
293
+ it. No toolbar draws a divider by default: each `Pane` draws one line under
294
+ its header chrome and one over its footer chrome, wherever that chrome ends,
295
+ only while its content is scrolled beneath it (see
296
+ [Scroll dividers](./layout.md#scroll-dividers) — call `wireScrollDividers`
297
+ once at the app root). Set `dividerSides` only for a permanent separator edge,
298
+ or `chromeDividers: "always"` on the pane for a line that never hides.
299
+ `responsive: "wrap"` keeps a long title whole and wraps its actions
300
+ below it. `mainBottomToolbar` also takes a `center`. A panel's
301
+ `restorePosition` also places its floating restore controls.
302
+
303
+ The `Pane`s and `List`s the Workbench composes around your content are
304
+ configurable the same way:
305
+
306
+ - `mainPane` (`PaneConfig`: `contentElement`, `contentLabel`, `separators`,
307
+ `safeAreaEdges`, `chromeDividers`, `appearance`, `deepInset`,
308
+ `scrollClearance`, `headerPresentation`, `tabIndex`, `outlined`) configures the work area's
309
+ `Pane`, which exists whenever the work area has a toolbar, `mainHeader`, or
310
+ `mainFooter`. Without that chrome, `appearance: "sunken"` paints the main
311
+ region's own scroll surface;
312
+ - a panel's `pane` configures the `Pane` a `toolbar` panel's `content` renders
313
+ in — for example `{ contentElement: "nav", contentLabel: "Files" }` for a
314
+ navigator rail. Without a toolbar, `appearance: "sunken"` paints the panel
315
+ scroll region;
316
+ - `mainHeaderList` / `mainFooterList` and a panel's `headerList` /
317
+ `footerList` (`ListConfig`: `gap`, `hAlign`,
318
+ `vAlign`, `dividerSides`, `textInsets`, `controlInsets`) configure the
319
+ `List`s holding `mainHeader` / `mainFooter`.
320
+
321
+ An omitted or `undefined` field keeps the default, including the scroll
322
+ dividers described above.
323
+
324
+ Size a rail so its title and groups fit at its narrowest (a resizable rail's
325
+ `min`); a toolbar that cannot hold them drops the title rather than
326
+ truncating it. Relocated content renders in both places while the panel is
327
+ closed (the panel's copy is inert), so give it no `id`s. With `wireWorkbench`
328
+ given the panel's `collapsed` signal, focus follows the toggle: closing a
329
+ panel from its own toggle focuses the relocated toggle in the work area, and
330
+ opening it from there focuses the panel's own toggle. A panel's optional
331
+ `footer` renders below its content, for a sidebar's bottom toolbar. Without a
332
+ `toolbar` or `mainToolbar`, `content` and `main` render exactly as given.
333
+
334
+ ## Resizable panels
335
+
336
+ Resizing is **opt-in per panel**. Give a panel `resizable` — `true` for the
337
+ default limits (rails 180–480px, drawer 120–480px) or `{ min, max }` — and
338
+ render its `size` from an app-owned signal. The panel then owns a separator on
339
+ its inner edge (the left rail's end, the right rail's start, the drawer's top)
340
+ with the same focusable `role="separator"` contract as a `ResizableRegion`
341
+ handle. `wireWorkbench` drives it:
342
+
343
+ ```tsx
344
+ import { wireWorkbench } from "@kerfjs/ui/wire-workbench";
345
+
346
+ const navSize = signal(280);
347
+ const consoleSize = signal(200);
348
+
349
+ <Workbench
350
+ id="studio"
351
+ label="Studio"
352
+ main={<Editor />}
353
+ mainMinSize={320} // the default: the editor never drops below 320px wide
354
+ mainMinHeight={120} // the default: the drawer leaves it 120px of height
355
+ leftRail={{
356
+ content: <Navigator />,
357
+ label: "Navigator",
358
+ collapsed: navCollapsed.value,
359
+ size: navSize.value,
360
+ resizable: { min: 200, max: 420 },
361
+ responsiveOverlayAt: "narrow", // an overlay when the Workbench is 704px or narrower
362
+ }}
363
+ bottomDrawer={{
364
+ content: <Console />,
365
+ label: "Console",
366
+ size: consoleSize.value,
367
+ resizable: true,
368
+ }}
369
+ />;
370
+
371
+ // once, after mount:
372
+ const stop = wireWorkbench(root, {
373
+ id: "studio",
374
+ panels: {
375
+ leftRail: {
376
+ size: navSize,
377
+ storageKey: "studio.nav-width",
378
+ collapsed: navCollapsed, // a transient overlay: takes focus, closes on Escape / outside press
379
+ },
380
+ bottomDrawer: { size: consoleSize, storageKey: "studio.console-height" },
381
+ },
382
+ });
383
+ ```
384
+
385
+ - **Pointer:** dragging the separator resizes the panel live (the wire marks
386
+ the rail or drawer `data-resizing` and suppresses its content transform
387
+ transition) and commits the final size to the signal on release.
388
+ - **Keyboard:** focus the separator; arrow keys resize by `step` (16px),
389
+ Shift+arrow by `largeStep` (64px), Home/End jump to `min`/`max`. The
390
+ separator's `aria-valuenow`/`aria-valuemin`/`aria-valuemax` report the size
391
+ and limits.
392
+ - **Limits:** every size — dragged, typed, restored from storage, or passed
393
+ by the app — is clamped to `min`/`max` when rendered.
394
+ - **Work-area minimum:** beside its inline rails, fixed or resizable, the work
395
+ area keeps at least `mainMinSize` px of width (a `Workbench` prop, default
396
+ 320; `0` turns it off), and above an inline bottom drawer at least
397
+ `mainMinHeight` px of height (default 120; `0` turns it off). A dragged or
398
+ keyed rail stops growing where the work area would drop below its width,
399
+ and the drawer where it would drop below its height, so wide rails or a tall
400
+ drawer cannot crowd out the editor; `aria-valuemax` reports that reachable
401
+ maximum. When the Workbench itself narrows, the rails shrink in proportion
402
+ to their sizes, and when it gets shorter the drawer shrinks (their content
403
+ follows the shown size) while the work area holds its minimum; a squeezed
404
+ panel can still be made smaller, never larger, and never below its own
405
+ `min`. Two fixed 280px rails in a 720px Workbench show 200px each rather
406
+ than leaving the editor 160px. Each minimum applies only to a Workbench with a
407
+ panel on its axis, and never exceeds the Workbench itself.
408
+ - **Squeezed below `min`:** when the Workbench is too narrow for a rail's
409
+ `min` beside the work-area minimum, the rail shows less than its `min` (a
410
+ 172px Navigator whose `min` is 180). Its separator then reports that shown
411
+ width in `aria-valuenow`, and `aria-valuemin`/`aria-valuemax` pin to the
412
+ same value: the WAI-ARIA window splitter's value is the separator's actual
413
+ position, and the range must contain it, so a screen reader hears the width
414
+ on screen rather than a configured limit the layout cannot honor — and a
415
+ range that does not move, because the separator cannot move a rail the
416
+ container holds. A pinned separator commits nothing: arrow keys, Home/End,
417
+ and drags leave the rail's remembered size (and its storage) alone, so a
418
+ rail remembered at 280px returns at 280px, with the configured range, once
419
+ there is room.
420
+ - **Small Workbenches:** inline panels have no shrink floor of their own, by
421
+ design; the work area's minimums win, so in a very small Workbench a rail or
422
+ the drawer can become a sliver. Do not add your own `min-width` /
423
+ `min-height` to hold a panel open. Give the panel
424
+ `responsiveOverlayAt: "narrow"` (704px of Workbench width or less) or
425
+ `"compact"` (448px or less) instead: below that breakpoint it presents as a
426
+ full-size overlay over the work area rather than squeezing beside it (see
427
+ the catalog's resizable and responsive-drawer Workbench examples).
428
+ A numeric value measures the Workbench container, not the viewport. If the
429
+ app has no numeric Workbench breakpoint, the overlay wiring does not measure
430
+ the Workbench on ordinary panel updates. For numeric breakpoints the wiring
431
+ mirrors the active panel state onto the Workbench root, keeping work-area
432
+ styles local to actual overlay transitions. If the rest of an app switches
433
+ by viewport width and its Workbench can be narrower
434
+ than the viewport, keep the app's viewport decision in
435
+ `presentation: "overlay"` and pass its `collapsed` signals to
436
+ `wireWorkbench`. On entering that mode, collapse the panels; after leaving,
437
+ restore their preferred inline state once the inline presentation has
438
+ rendered, so exclusive overlay handling cannot close a sibling rail.
439
+ - **Collapse:** `collapsed` never changes a size. A collapsed panel keeps its
440
+ size (its content slides out at that width), its separator leaves the tab
441
+ order, and expanding it returns it at the size it had.
442
+ - **Persistence:** with a `storageKey`, the size is loaded from `storage`
443
+ (default `localStorage`) at wire-up and saved on every change, like
444
+ `wireSidebar`'s collapsed state.
445
+ - **Overlays never resize:** an overlay or hidden panel — including a rail
446
+ whose `responsiveOverlayAt` breakpoint currently applies — hides its
447
+ separator and is never resizable, and it leaves the work-area minimum to the
448
+ rails still in flow. With `responsiveOverlayAt` no device check is needed;
449
+ otherwise pass `deviceClass` and resizing is suspended while `compact` is
450
+ true, where rails present as overlay drawers or are replaced.
451
+ - `wireWorkbench` drives only the panels it is given, matched by the
452
+ Workbench `id`, so it never double-drives a `ResizableRegion` (or another
453
+ Workbench) under the same root. `onResize({ panel, size, source })` reports
454
+ each committed resize.
455
+
456
+ ## Transient overlays
457
+
458
+ An overlay panel covers the work area, so it should open only when the user
459
+ asks for it and close as easily as it opened. Give `wireWorkbench` a panel's
460
+ app-owned `collapsed` signal (`size` is optional, so a panel need not be
461
+ resizable) and it treats the panel as a transient overlay whenever it
462
+ presents as one, mirroring `wireSidebar`'s compact overlay:
463
+
464
+ - **Collapsed on entering the breakpoint:** when a panel's
465
+ `responsiveOverlayAt` breakpoint begins to apply — at wire-up, when the
466
+ Workbench first renders, or when it narrows across the breakpoint — the
467
+ wiring remembers the panel's inline `collapsed` state and collapses it, so
468
+ nothing covers the work area until the user opens it. When the breakpoint
469
+ stops applying (and on disposal) the remembered inline state comes back.
470
+ These presentation changes skip the collapse motion.
471
+ - **Focus moves in, and Tab stays in:** a panel that opens while it presents
472
+ as an overlay takes focus on its first focusable control (typically the
473
+ close control in its header), because it covers the work area and the
474
+ control that opened it. That holds whichever control opens it: the
475
+ Workbench's own relocating toggle, or a persistent toggle outside the
476
+ Workbench (an app-bar button whose `aria-controls` names the panel) that
477
+ stays where it is. Focus moves in as soon as the panel can take it, even
478
+ when the app's render shows the panel a frame after the `collapsed` signal
479
+ changes; focus the person has moved elsewhere in the meantime stays put.
480
+ While it is open, Tab and Shift+Tab cycle through
481
+ its controls and never reach the covered work area; Escape, its own close
482
+ control, or an outside press leaves it. This is the ARIA dialog pattern
483
+ `wireSidebar`'s compact overlay follows. A panel opening inline never moves
484
+ focus.
485
+ - **Escape** closes the open overlay panel that holds focus, else the most
486
+ recently opened one. An Escape another handler already handled
487
+ (`defaultPrevented`) is left alone.
488
+ - **Outside press:** a pointer press that starts and ends outside an open
489
+ overlay panel closes it. The app's own toggle still works: its click closes
490
+ the panel before the wiring looks, and the press that opens a panel never
491
+ closes it. For a body-level menu, dialog, or other portal opened from a
492
+ panel, set that panel's `keepOpenOn: (target) => target === portalRoot` in
493
+ `wireWorkbench`. The predicate receives each node in the press's composed
494
+ path, so matching the portal root keeps the panel open when the press starts
495
+ or ends anywhere inside the portal. Escape and Tab inside that portal remain
496
+ with its own keyboard handler. Other outside presses still close the panel.
497
+ - **Focus:** when a panel closes with focus inside it — whatever closed it,
498
+ including the app's own control inside the panel — focus returns to the
499
+ control that had it when the panel opened (typically its toggle; one inside
500
+ another panel that has closed since is skipped), else to
501
+ the first focusable control in the panel's `restoreControl`, else to a
502
+ focusable control outside the panel whose `aria-controls` names the panel
503
+ (or an element inside it). The last is what a panel already open at
504
+ wire-up relies on, since nothing opened it: give the app's toggle
505
+ `aria-controls` naming the panel. A pointer press inside the panel that
506
+ drops focus to the page counts as focus inside: Safari never focuses a
507
+ clicked button, so pressing the panel's own Hide control blurs the focused
508
+ control before the click closes it, and focus still returns. Focus the user
509
+ has moved to another element since is left alone. Each panel's `id` derives from the
510
+ Workbench's — `<id>-left-rail`, `<id>-right-rail`, `<id>-bottom-drawer`:
511
+
512
+ ```tsx
513
+ <button
514
+ data-action="toggle-navigator"
515
+ aria-controls="editor-left-rail"
516
+ aria-expanded={String(!navCollapsed.value)}
517
+ aria-label={navCollapsed.value ? "Show Navigator" : "Hide Navigator"}
518
+ >
519
+ <LucideIcon {...collapsiblePanelToggleIcon("left", navCollapsed.value)} />
520
+ </button>
521
+ ```
522
+
523
+ An open overlay can cover the control that opened it: a narrow Workbench's
524
+ right-rail overlay spans the full height at the end edge, over the trailing
525
+ end of the work area's toolbar, where its toggle usually sits. Escape and an
526
+ outside press still close it, but neither is a visible, pointer-reachable
527
+ control. So give every panel that may present as an overlay its own close
528
+ control, as a `CollapsiblePanel` puts its collapse toggle in its own header:
529
+ render the panel content as a `Pane` whose header `Toolbar` holds the title
530
+ and a `single`, borderless `ToolbarControlGroup` around one icon button
531
+ carrying `collapsiblePanelToggleIcon(side, false)`. The work area's toggle
532
+ stays the always-visible way to show the panel. The catalog's resizable
533
+ example does this for both rails.
534
+
535
+ The drawer works the same way. The catalog's responsive overlay drawer
536
+ example is the whole pattern for a bottom drawer:
537
+
538
+ ```tsx
539
+ const outputCollapsed = signal(false); // open inline by default
540
+
541
+ <Workbench
542
+ id="editor"
543
+ label="Editor"
544
+ main={<Editor />} // its toolbar toggles `outputCollapsed`
545
+ bottomDrawer={{
546
+ label: "Output",
547
+ content: <OutputPane />, // a Pane whose header holds its close control
548
+ collapsed: outputCollapsed.value,
549
+ size: 180,
550
+ responsiveOverlayAt: "narrow",
551
+ }}
552
+ />;
553
+
554
+ wireWorkbench(root, {
555
+ id: "editor",
556
+ panels: { bottomDrawer: { collapsed: outputCollapsed } },
557
+ });
558
+ ```
559
+
560
+ Above 704px of Workbench width the drawer takes its own track below the
561
+ editor. At 704px or less it overlays the bottom of the full-height editor,
562
+ starts hidden, and closes from its own header, on Escape, or on a press
563
+ outside it; widening the Workbench again brings it back inline in the state
564
+ it had before.
565
+
566
+ Escape and outside-press dismissal apply to static `presentation: "overlay"`
567
+ panels too; entering and leaving the collapsed state around a breakpoint is
568
+ only for `responsiveOverlayAt`, because a static presentation is the app's
569
+ choice. Inline panels are never touched. Pass `dismissOverlays: false` to
570
+ leave every `collapsed` write, and all focus handling, to the app.
571
+
572
+ Overlays are exclusive by default, like `wireSidebar`'s compact overlays:
573
+ opening a panel while it presents as an overlay closes every other open
574
+ overlay panel, the bottom drawer included. At a narrow width two rails are
575
+ wider than the Workbench, so without this the right rail would cover the
576
+ navigator's own close control. Panels presenting inline are never closed by
577
+ it, so a wide Workbench keeps both rails open. Pass `exclusiveOverlays: false`
578
+ to let overlays stay open together; they then stack in the fixed order above,
579
+ and Tab stays in the one that holds focus (else the most recently opened
580
+ one).
581
+
582
+ Where the browser supports `overflow-clip-margin`, the 20px hit target
583
+ straddles the panel's separator line like a `ResizableRegion` handle;
584
+ elsewhere it sits just inside the panel's inner edge, because the panel clips
585
+ its sliding content.
586
+
587
+ ## Resizable application-shell migration
588
+
589
+ An application such as Hot Sheet can replace its shell descendant overrides
590
+ with state-derived props:
591
+
592
+ ```tsx
593
+ <ResizableRegion
594
+ id="terminal-drawer"
595
+ label="Terminal drawer"
596
+ axis="vertical"
597
+ edge="start"
598
+ size={drawerSize.value}
599
+ min={180}
600
+ max={520}
601
+ collapsed={!drawerVisible.value}
602
+ separator={magnified.value ? "hidden" : "auto"}
603
+ collapseMotion="fade-slide"
604
+ presentation={mobile.value ? "overlay" : "inline"}
605
+ restoreControl={
606
+ <ToolbarControlGroup label="Terminals" single>
607
+ <button data-action="show-drawer" aria-label="Show terminals">
608
+ <LucideIcon {...collapsiblePanelToggleIcon("bottom", true)} />
609
+ </button>
610
+ </ToolbarControlGroup>
611
+ }
612
+ >
613
+ <TerminalDrawer />
614
+ </ResizableRegion>
615
+ ```
616
+
617
+ `wireResizableRegions` marks the active region with `data-resizing` and the
618
+ package CSS suppresses content motion during pointer resize. It applies the
619
+ live size to both the track and the slide-motion content, so content fills the
620
+ region throughout a drag, including any safe-area edge extent, and a later
621
+ collapse slides it out at the resized width. A collapsed,
622
+ overlay, or hidden region is not resizeable. Together these policies replace
623
+ app CSS for separator suppression, instant-track/composited-content collapse,
624
+ popup overflow, mobile overlay/hidden replacement, resize-transition guards,
625
+ and safe-area restore placement. A descendant `PopupMenu` shows in the top
626
+ layer, and a raw Web Awesome dropdown with `open` releases clipping for its
627
+ lifecycle, so menu events need not rerender the region. The app still owns the other signals and decides when
628
+ each policy applies.
629
+
630
+ ## Public styling boundary
631
+
632
+ The component subpath's browser build loads `workbench.css`; import
633
+ `@kerfjs/ui/workbench.css` manually only without the `browser` condition. Applications may
634
+ set `--kui-workbench-rail-width` and `--kui-workbench-drawer-height` on a
635
+ Workbench instance. The supported composition classes are `.kui-workbench`,
636
+ `.kui-workbench__rail`, `.kui-workbench__rail--left`,
637
+ `.kui-workbench__rail--right`, `.kui-workbench__center`,
638
+ `.kui-workbench__main`, `.kui-workbench__drawer`,
639
+ `.kui-workbench__panel-content`, `.kui-workbench__handle`,
640
+ `.kui-workbench__handle-icon`, and `.kui-workbench__restore`; these exact hooks are cataloged for tools that
641
+ must classify public application selectors. Prefer the component props and two
642
+ size tokens before selecting internal anatomy, and do not target its data
643
+ attributes or descendant tags as styling contracts.
644
+
645
+ ## Safe areas
646
+
647
+ Each rail and the drawer grows by the unsafe inset of the screen edge it docks
648
+ to, so its surface and separator paint through while its content keeps the
649
+ configured size and is padded for the edges it touches. The main area pads for
650
+ the edges it reaches, inside its scroller: an expanded inline rail or drawer
651
+ takes that edge away, and collapsing it (or presenting it as an overlay) hands
652
+ the edge back. A region whose only child is a `Pane` or layout lets that child
653
+ own the insets. See [Choosing an app layout › Safe areas](app-layouts.md#safe-areas).
654
+
655
+ Workbench projects panel presentation, collapse, and responsive breakpoint
656
+ state onto its own region attributes. Its stylesheet then matches those local
657
+ attributes instead of searching descendants during list updates. It clears the
658
+ edge context on each region, while a sole Pane or layout child receives the
659
+ insets it owns. Applications still pass arbitrary `main` and panel content;
660
+ they need no marker classes or extra wrappers.
38
661
 
39
662
  ## How the collapse animates
40
663
 
41
664
  Collapsing snaps the panel's flex track to zero in a single reflow (so the work
42
665
  area relayouts once, not per frame) while the panel's fixed-size content slides
43
666
  out via a composited `transform` — a rail slides horizontally, the drawer
44
- vertically — clipped by the shell's overflow. It honors `prefers-reduced-motion`
45
- (the slide collapses to instant). On smaller device classes, present the rails'
46
- contents through a `NavStack` or overlay drawers rather than shrinking the
47
- three-panel shell.
667
+ vertically — clipped by the shell's overflow. The drawer content is positioned
668
+ against the shell's stable bottom edge, so opening and closing move monotonically
669
+ through the transform rather than inheriting a changing normal-flow origin. It
670
+ honors `prefers-reduced-motion` (the slide collapses to instant). On smaller
671
+ device classes, present the rails' contents through a `NavStack` or overlay
672
+ drawers rather than shrinking the three-panel shell.