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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (997) hide show
  1. package/README.md +630 -132
  2. package/ai/application-ui-diagnostic-ids-v1.json +114 -0
  3. package/ai/application-ui-profile-sync.cjs +548 -0
  4. package/ai/application-ui-profile.d.mts +1 -0
  5. package/ai/application-ui-profile.d.ts +106 -0
  6. package/ai/application-ui-profile.defaults.json +96 -0
  7. package/ai/application-ui-profile.mjs +653 -0
  8. package/ai/application-ui-profile.schema.json +140 -0
  9. package/ai/catalog-authoring.json +34 -0
  10. package/ai/catalog-authoring.schema.json +105 -0
  11. package/ai/compile-time-contracts-v1.json +149 -0
  12. package/ai/compile-time-contracts-v1.schema.json +52 -0
  13. package/ai/component-catalog-extension.schema.json +104 -0
  14. package/ai/component-catalog.json +6401 -931
  15. package/ai/component-catalog.schema.json +94 -1
  16. package/ai/component-class-owners.cjs +83 -0
  17. package/ai/component-composition-extension.d.ts +7 -0
  18. package/ai/component-composition-extension.schema.json +7 -0
  19. package/ai/component-composition-rules.json +551 -0
  20. package/ai/component-composition.d.ts +132 -0
  21. package/ai/component-composition.json +8729 -0
  22. package/ai/component-composition.schema.json +412 -0
  23. package/ai/components/README.md +185 -0
  24. package/ai/components/anchored-surface.md +99 -0
  25. package/ai/components/application-tabs.md +65 -0
  26. package/ai/components/badge.md +76 -0
  27. package/ai/components/chip.md +76 -0
  28. package/ai/components/choice-chips.md +87 -0
  29. package/ai/components/collapsible-panel.md +103 -0
  30. package/ai/components/column-track.md +78 -0
  31. package/ai/components/combobox.md +88 -0
  32. package/ai/components/composer.md +83 -0
  33. package/ai/components/content-item.md +98 -0
  34. package/ai/components/content-swap.md +78 -0
  35. package/ai/components/corner-status.md +88 -0
  36. package/ai/components/disclosure-arrow.md +77 -0
  37. package/ai/components/document-baseline.md +77 -0
  38. package/ai/components/edge-activity-indicator.md +81 -0
  39. package/ai/components/empty-state.md +80 -0
  40. package/ai/components/feedback.md +71 -0
  41. package/ai/components/file-picker.md +88 -0
  42. package/ai/components/floating-toolbar.md +82 -0
  43. package/ai/components/foundation.md +65 -0
  44. package/ai/components/framed-list.md +80 -0
  45. package/ai/components/grid.md +101 -0
  46. package/ai/components/headers.md +63 -0
  47. package/ai/components/icon-button.md +82 -0
  48. package/ai/components/icon-toggle-button.md +80 -0
  49. package/ai/components/layout.md +75 -0
  50. package/ai/components/list-action-row.md +108 -0
  51. package/ai/components/list-header.md +91 -0
  52. package/ai/components/list-inset-control.md +74 -0
  53. package/ai/components/list-inset-text.md +72 -0
  54. package/ai/components/list-item.md +108 -0
  55. package/ai/components/list.md +125 -0
  56. package/ai/components/loading-spinner.md +73 -0
  57. package/ai/components/lucide-icon.md +97 -0
  58. package/ai/components/nav-stack.md +115 -0
  59. package/ai/components/pane.md +115 -0
  60. package/ai/components/popup-menu.md +171 -0
  61. package/ai/components/recipe-app-shell.md +57 -0
  62. package/ai/components/recipe-collapsible-sidebar.md +57 -0
  63. package/ai/components/recipe-compact-toolbar.md +57 -0
  64. package/ai/components/recipe-composer-form.md +57 -0
  65. package/ai/components/recipe-list-detail-dialog.md +57 -0
  66. package/ai/components/recipe-list-workspace-states.md +57 -0
  67. package/ai/components/recipe-loading-inspector.md +57 -0
  68. package/ai/components/recipe-navigation-sidebar.md +57 -0
  69. package/ai/components/recipe-navigation-stack.md +57 -0
  70. package/ai/components/recipe-workspace-header.md +57 -0
  71. package/ai/components/resize.md +106 -0
  72. package/ai/components/row.md +96 -0
  73. package/ai/components/segmented-control.md +82 -0
  74. package/ai/components/select.md +116 -0
  75. package/ai/components/skeleton.md +84 -0
  76. package/ai/components/spacer.md +86 -0
  77. package/ai/components/split-button.md +80 -0
  78. package/ai/components/split-view.md +105 -0
  79. package/ai/components/state-banner.md +96 -0
  80. package/ai/components/summary-row.md +85 -0
  81. package/ai/components/sunken-panel.md +79 -0
  82. package/ai/components/surface-scaffold.md +105 -0
  83. package/ai/components/tab-bar.md +114 -0
  84. package/ai/components/tab-navigator.md +100 -0
  85. package/ai/components/tabs.md +95 -0
  86. package/ai/components/text.md +90 -0
  87. package/ai/components/token-search-field.md +107 -0
  88. package/ai/components/toolbar-control-group.md +125 -0
  89. package/ai/components/toolbar-text.md +100 -0
  90. package/ai/components/toolbar.md +103 -0
  91. package/ai/components/value-table.md +80 -0
  92. package/ai/components/wa-accordion-item.md +55 -0
  93. package/ai/components/wa-accordion.md +65 -0
  94. package/ai/components/wa-animated-image.md +55 -0
  95. package/ai/components/wa-animation.md +55 -0
  96. package/ai/components/wa-avatar.md +55 -0
  97. package/ai/components/wa-badge.md +55 -0
  98. package/ai/components/wa-breadcrumb-item.md +53 -0
  99. package/ai/components/wa-breadcrumb.md +55 -0
  100. package/ai/components/wa-button-group.md +60 -0
  101. package/ai/components/wa-button.md +59 -0
  102. package/ai/components/wa-callout.md +58 -0
  103. package/ai/components/wa-card.md +59 -0
  104. package/ai/components/wa-carousel-item.md +53 -0
  105. package/ai/components/wa-carousel.md +55 -0
  106. package/ai/components/wa-checkbox-group.md +55 -0
  107. package/ai/components/wa-checkbox.md +55 -0
  108. package/ai/components/wa-color-picker.md +55 -0
  109. package/ai/components/wa-comparison.md +55 -0
  110. package/ai/components/wa-copy-button.md +55 -0
  111. package/ai/components/wa-details.md +61 -0
  112. package/ai/components/wa-dialog.md +59 -0
  113. package/ai/components/wa-divider.md +53 -0
  114. package/ai/components/wa-drawer.md +55 -0
  115. package/ai/components/wa-dropdown-item.md +60 -0
  116. package/ai/components/wa-dropdown.md +60 -0
  117. package/ai/components/wa-format-bytes.md +53 -0
  118. package/ai/components/wa-format-date.md +53 -0
  119. package/ai/components/wa-format-number.md +53 -0
  120. package/ai/components/wa-icon.md +58 -0
  121. package/ai/components/wa-include.md +53 -0
  122. package/ai/components/wa-input.md +59 -0
  123. package/ai/components/wa-intersection-observer.md +53 -0
  124. package/ai/components/wa-known-date.md +53 -0
  125. package/ai/components/wa-markdown.md +53 -0
  126. package/ai/components/wa-mutation-observer.md +53 -0
  127. package/ai/components/wa-number-input.md +55 -0
  128. package/ai/components/wa-option.md +59 -0
  129. package/ai/components/wa-otp-input.md +53 -0
  130. package/ai/components/wa-page.md +53 -0
  131. package/ai/components/wa-pagination.md +55 -0
  132. package/ai/components/wa-popover.md +55 -0
  133. package/ai/components/wa-popup.md +53 -0
  134. package/ai/components/wa-progress-bar.md +53 -0
  135. package/ai/components/wa-progress-ring.md +53 -0
  136. package/ai/components/wa-qr-code.md +53 -0
  137. package/ai/components/wa-radio-group.md +59 -0
  138. package/ai/components/wa-radio.md +55 -0
  139. package/ai/components/wa-random-content.md +53 -0
  140. package/ai/components/wa-rating.md +55 -0
  141. package/ai/components/wa-relative-time.md +53 -0
  142. package/ai/components/wa-resize-observer.md +53 -0
  143. package/ai/components/wa-scroller.md +53 -0
  144. package/ai/components/wa-select.md +63 -0
  145. package/ai/components/wa-skeleton.md +53 -0
  146. package/ai/components/wa-slider.md +55 -0
  147. package/ai/components/wa-spinner.md +58 -0
  148. package/ai/components/wa-split-panel.md +58 -0
  149. package/ai/components/wa-switch.md +53 -0
  150. package/ai/components/wa-tab-group.md +69 -0
  151. package/ai/components/wa-tab-panel.md +60 -0
  152. package/ai/components/wa-tab.md +59 -0
  153. package/ai/components/wa-tag.md +59 -0
  154. package/ai/components/wa-textarea.md +53 -0
  155. package/ai/components/wa-time-input.md +55 -0
  156. package/ai/components/wa-toast-item.md +60 -0
  157. package/ai/components/wa-toast.md +60 -0
  158. package/ai/components/wa-tooltip.md +55 -0
  159. package/ai/components/wa-tree-item.md +55 -0
  160. package/ai/components/wa-tree.md +55 -0
  161. package/ai/components/wa-zoomable-frame.md +55 -0
  162. package/ai/components/workbench.md +120 -0
  163. package/ai/public-api-signatures-v1.md +4261 -459
  164. package/ai/skill.md +441 -63
  165. package/ai/webawesome-jsx-signatures-v1.md +9 -2
  166. package/analyzer/cli.mjs +49 -0
  167. package/analyzer/component-ownership.d.mts +72 -0
  168. package/analyzer/component-ownership.mjs +429 -0
  169. package/analyzer/index.d.mts +53 -0
  170. package/analyzer/index.mjs +2375 -0
  171. package/analyzer/loud-pairs.d.mts +49 -0
  172. package/analyzer/loud-pairs.mjs +357 -0
  173. package/analyzer/report.schema.json +66 -0
  174. package/analyzer/selectors.d.mts +21 -0
  175. package/analyzer/selectors.mjs +212 -0
  176. package/catalog-projection-cli.mjs +96 -0
  177. package/catalog-projection.d.mts +55 -0
  178. package/catalog-projection.mjs +62 -0
  179. package/dist/anchored-surface.d.ts +69 -0
  180. package/dist/anchored-surface.js +3 -0
  181. package/dist/anchored-surface.js.map +1 -0
  182. package/dist/app-tab.d.ts +39 -4
  183. package/dist/app-tab.js +2 -1
  184. package/dist/badge.d.ts +83 -0
  185. package/dist/badge.js +4 -0
  186. package/dist/badge.js.map +1 -0
  187. package/dist/browser/anchored-surface.js +3 -0
  188. package/dist/browser/badge.js +3 -0
  189. package/dist/browser/catalog.js +28 -0
  190. package/dist/browser/chip.js +3 -0
  191. package/dist/browser/choice-chips.js +3 -0
  192. package/dist/browser/collapsible-panel.js +9 -0
  193. package/dist/browser/column-track.js +3 -0
  194. package/dist/browser/combobox.js +3 -0
  195. package/dist/browser/composer.js +4 -0
  196. package/dist/browser/content-item.js +3 -0
  197. package/dist/browser/content-swap.js +3 -0
  198. package/dist/browser/corner-status.js +3 -0
  199. package/dist/browser/edge-activity-indicator.js +3 -0
  200. package/dist/browser/file-picker.js +3 -0
  201. package/dist/browser/floating-toolbar.js +3 -0
  202. package/dist/browser/framed-list.js +3 -0
  203. package/dist/browser/grid.js +3 -0
  204. package/dist/browser/icon-button.js +4 -0
  205. package/dist/browser/icon-toggle-button.js +4 -0
  206. package/dist/browser/list-action-row.js +2 -0
  207. package/dist/browser/list-header.js +3 -1
  208. package/dist/browser/list-inset-control.js +3 -0
  209. package/dist/browser/list-inset-text.js +3 -0
  210. package/dist/browser/list-item.js +1 -0
  211. package/dist/browser/list.js +3 -0
  212. package/dist/browser/nav-stack.js +11 -0
  213. package/dist/browser/pane.js +3 -0
  214. package/dist/browser/popup-menu.js +3 -0
  215. package/dist/browser/row.js +3 -0
  216. package/dist/browser/segmented-control.js +0 -1
  217. package/dist/browser/select.js +2 -1
  218. package/dist/browser/spacer.js +3 -0
  219. package/dist/browser/split-button.js +5 -0
  220. package/dist/browser/split-view.js +13 -0
  221. package/dist/browser/state-banner.js +1 -0
  222. package/dist/browser/summary-row.js +3 -0
  223. package/dist/browser/sunken-panel.js +3 -0
  224. package/dist/browser/surface-scaffold.js +3 -0
  225. package/dist/browser/tab-navigator.js +4 -0
  226. package/dist/browser/text.js +3 -0
  227. package/dist/browser/toolbar-control-group.js +1 -0
  228. package/dist/browser/workbench.js +14 -0
  229. package/dist/catalog-resources.d.ts +50 -0
  230. package/dist/catalog-resources.js +22 -0
  231. package/dist/catalog-resources.js.map +1 -0
  232. package/dist/catalog.d.ts +134 -101
  233. package/dist/catalog.js +668 -105
  234. package/dist/catalog.js.map +1 -1
  235. package/dist/chip.d.ts +69 -0
  236. package/dist/chip.js +3 -0
  237. package/dist/chip.js.map +1 -0
  238. package/dist/choice-chips.d.ts +82 -0
  239. package/dist/choice-chips.js +3 -0
  240. package/dist/choice-chips.js.map +1 -0
  241. package/dist/chunk-2GOCOLQL.js +270 -0
  242. package/dist/chunk-2GOCOLQL.js.map +1 -0
  243. package/dist/chunk-2MSPNRWJ.js +82 -0
  244. package/dist/chunk-2MSPNRWJ.js.map +1 -0
  245. package/dist/chunk-34U4ANDJ.js +119 -0
  246. package/dist/chunk-34U4ANDJ.js.map +1 -0
  247. package/dist/chunk-3GLYIIFR.js +230 -0
  248. package/dist/chunk-3GLYIIFR.js.map +1 -0
  249. package/dist/{chunk-56RJXPHG.js → chunk-3VXDSIBJ.js} +7 -4
  250. package/dist/chunk-3VXDSIBJ.js.map +1 -0
  251. package/dist/chunk-3WYREXW4.js +120 -0
  252. package/dist/chunk-3WYREXW4.js.map +1 -0
  253. package/dist/chunk-4UB5Z3ZZ.js +68 -0
  254. package/dist/chunk-4UB5Z3ZZ.js.map +1 -0
  255. package/dist/chunk-6C6DLP3W.js +31 -0
  256. package/dist/chunk-6C6DLP3W.js.map +1 -0
  257. package/dist/chunk-7IUEBNCO.js +108 -0
  258. package/dist/chunk-7IUEBNCO.js.map +1 -0
  259. package/dist/chunk-AN5IWMTM.js +24 -0
  260. package/dist/chunk-AN5IWMTM.js.map +1 -0
  261. package/dist/chunk-AV7CPAPT.js +82 -0
  262. package/dist/chunk-AV7CPAPT.js.map +1 -0
  263. package/dist/chunk-B53PS2LE.js +34 -0
  264. package/dist/chunk-B53PS2LE.js.map +1 -0
  265. package/dist/chunk-CA7LNX3J.js +44 -0
  266. package/dist/chunk-CA7LNX3J.js.map +1 -0
  267. package/dist/chunk-CEJ5FK6G.js +288 -0
  268. package/dist/chunk-CEJ5FK6G.js.map +1 -0
  269. package/dist/chunk-CMETHPKR.js +175 -0
  270. package/dist/chunk-CMETHPKR.js.map +1 -0
  271. package/dist/chunk-CMLPFIC5.js +46 -0
  272. package/dist/chunk-CMLPFIC5.js.map +1 -0
  273. package/dist/chunk-CVD5IZGB.js +66 -0
  274. package/dist/chunk-CVD5IZGB.js.map +1 -0
  275. package/dist/chunk-CXZXHZTR.js +514 -0
  276. package/dist/chunk-CXZXHZTR.js.map +1 -0
  277. package/dist/chunk-D5RGM3XA.js +38 -0
  278. package/dist/chunk-D5RGM3XA.js.map +1 -0
  279. package/dist/chunk-DZJ4GBSP.js +59 -0
  280. package/dist/chunk-DZJ4GBSP.js.map +1 -0
  281. package/dist/chunk-EIET4QLK.js +51 -0
  282. package/dist/chunk-EIET4QLK.js.map +1 -0
  283. package/dist/chunk-ELCMSQNJ.js +49 -0
  284. package/dist/chunk-ELCMSQNJ.js.map +1 -0
  285. package/dist/chunk-EOO6PYGF.js +162 -0
  286. package/dist/chunk-EOO6PYGF.js.map +1 -0
  287. package/dist/chunk-ETCWQLJV.js +85 -0
  288. package/dist/chunk-ETCWQLJV.js.map +1 -0
  289. package/dist/chunk-FDZNYD4C.js +138 -0
  290. package/dist/chunk-FDZNYD4C.js.map +1 -0
  291. package/dist/chunk-FR76ZJQC.js +90 -0
  292. package/dist/chunk-FR76ZJQC.js.map +1 -0
  293. package/dist/chunk-G3J7JDP6.js +29 -0
  294. package/dist/chunk-G3J7JDP6.js.map +1 -0
  295. package/dist/chunk-GS2QD3N7.js +14 -0
  296. package/dist/chunk-GS2QD3N7.js.map +1 -0
  297. package/dist/chunk-HGV7J4T6.js +86 -0
  298. package/dist/chunk-HGV7J4T6.js.map +1 -0
  299. package/dist/chunk-HLDRH23D.js +84 -0
  300. package/dist/chunk-HLDRH23D.js.map +1 -0
  301. package/dist/chunk-HQZYKJ56.js +302 -0
  302. package/dist/chunk-HQZYKJ56.js.map +1 -0
  303. package/dist/chunk-HZPHCSCS.js +95 -0
  304. package/dist/chunk-HZPHCSCS.js.map +1 -0
  305. package/dist/chunk-IKS72C6P.js +53 -0
  306. package/dist/chunk-IKS72C6P.js.map +1 -0
  307. package/dist/chunk-IM3GKYOG.js +202 -0
  308. package/dist/chunk-IM3GKYOG.js.map +1 -0
  309. package/dist/chunk-INI4WDWC.js +125 -0
  310. package/dist/chunk-INI4WDWC.js.map +1 -0
  311. package/dist/chunk-IQSRHXZR.js +164 -0
  312. package/dist/chunk-IQSRHXZR.js.map +1 -0
  313. package/dist/chunk-JOR5LGYE.js +55 -0
  314. package/dist/chunk-JOR5LGYE.js.map +1 -0
  315. package/dist/chunk-K4AT3V3J.js +545 -0
  316. package/dist/chunk-K4AT3V3J.js.map +1 -0
  317. package/dist/chunk-KCS6NJ3O.js +82 -0
  318. package/dist/chunk-KCS6NJ3O.js.map +1 -0
  319. package/dist/chunk-KH4KEMSP.js +71 -0
  320. package/dist/chunk-KH4KEMSP.js.map +1 -0
  321. package/dist/chunk-LL45C7BB.js +122 -0
  322. package/dist/chunk-LL45C7BB.js.map +1 -0
  323. package/dist/chunk-LOSRXZAH.js +100 -0
  324. package/dist/chunk-LOSRXZAH.js.map +1 -0
  325. package/dist/chunk-MF6ZUUJZ.js +300 -0
  326. package/dist/chunk-MF6ZUUJZ.js.map +1 -0
  327. package/dist/chunk-MHMWQ7RB.js +19 -0
  328. package/dist/chunk-MHMWQ7RB.js.map +1 -0
  329. package/dist/chunk-MJ5RU6XT.js +173 -0
  330. package/dist/chunk-MJ5RU6XT.js.map +1 -0
  331. package/dist/chunk-MXNIVEVL.js +48 -0
  332. package/dist/chunk-MXNIVEVL.js.map +1 -0
  333. package/dist/{chunk-YGN7OMLT.js → chunk-NS2TBYM4.js} +8 -5
  334. package/dist/chunk-NS2TBYM4.js.map +1 -0
  335. package/dist/chunk-PIVY32AE.js +140 -0
  336. package/dist/chunk-PIVY32AE.js.map +1 -0
  337. package/dist/chunk-PYBBYSZ3.js +526 -0
  338. package/dist/chunk-PYBBYSZ3.js.map +1 -0
  339. package/dist/chunk-QDSZTQXL.js +28 -0
  340. package/dist/chunk-QDSZTQXL.js.map +1 -0
  341. package/dist/chunk-QH5KOFNS.js +39 -0
  342. package/dist/chunk-QH5KOFNS.js.map +1 -0
  343. package/dist/chunk-QIG4IGUP.js +139 -0
  344. package/dist/chunk-QIG4IGUP.js.map +1 -0
  345. package/dist/chunk-QLA25V2K.js +493 -0
  346. package/dist/chunk-QLA25V2K.js.map +1 -0
  347. package/dist/chunk-QROYYGWU.js +52 -0
  348. package/dist/chunk-QROYYGWU.js.map +1 -0
  349. package/dist/chunk-QYMJHS4K.js +36 -0
  350. package/dist/chunk-QYMJHS4K.js.map +1 -0
  351. package/dist/chunk-RHD7RKGI.js +176 -0
  352. package/dist/chunk-RHD7RKGI.js.map +1 -0
  353. package/dist/chunk-S2XULQEK.js +52 -0
  354. package/dist/chunk-S2XULQEK.js.map +1 -0
  355. package/dist/chunk-S3ECMF23.js +33 -0
  356. package/dist/chunk-S3ECMF23.js.map +1 -0
  357. package/dist/chunk-S4Y3YTAI.js +35 -0
  358. package/dist/chunk-S4Y3YTAI.js.map +1 -0
  359. package/dist/chunk-S4ZGTDSG.js +18 -0
  360. package/dist/chunk-S4ZGTDSG.js.map +1 -0
  361. package/dist/chunk-T4WJ5VGP.js +165 -0
  362. package/dist/chunk-T4WJ5VGP.js.map +1 -0
  363. package/dist/chunk-TDMHA7C3.js +251 -0
  364. package/dist/chunk-TDMHA7C3.js.map +1 -0
  365. package/dist/chunk-TGLUDQP2.js +138 -0
  366. package/dist/chunk-TGLUDQP2.js.map +1 -0
  367. package/dist/chunk-TLMMFQWM.js +222 -0
  368. package/dist/chunk-TLMMFQWM.js.map +1 -0
  369. package/dist/chunk-U6QYTMDB.js +85 -0
  370. package/dist/chunk-U6QYTMDB.js.map +1 -0
  371. package/dist/chunk-UMKV7YVQ.js +20 -0
  372. package/dist/chunk-UMKV7YVQ.js.map +1 -0
  373. package/dist/chunk-VFYO3UGZ.js +45 -0
  374. package/dist/chunk-VFYO3UGZ.js.map +1 -0
  375. package/dist/chunk-W4IK7AWD.js +73 -0
  376. package/dist/chunk-W4IK7AWD.js.map +1 -0
  377. package/dist/chunk-WVS6CUCT.js +48 -0
  378. package/dist/chunk-WVS6CUCT.js.map +1 -0
  379. package/dist/chunk-Y6KT7ZTR.js +109 -0
  380. package/dist/chunk-Y6KT7ZTR.js.map +1 -0
  381. package/dist/chunk-YMUIQRWK.js +44 -0
  382. package/dist/chunk-YMUIQRWK.js.map +1 -0
  383. package/dist/chunk-YOA5W5ZH.js +807 -0
  384. package/dist/chunk-YOA5W5ZH.js.map +1 -0
  385. package/dist/chunk-YQ2AC4E2.js +59 -0
  386. package/dist/chunk-YQ2AC4E2.js.map +1 -0
  387. package/dist/chunk-ZKKO4MHC.js +25 -0
  388. package/dist/chunk-ZKKO4MHC.js.map +1 -0
  389. package/dist/chunk-ZNROKDSZ.js +54 -0
  390. package/dist/chunk-ZNROKDSZ.js.map +1 -0
  391. package/dist/collapsible-panel.d.ts +96 -17
  392. package/dist/collapsible-panel.js +132 -14
  393. package/dist/collapsible-panel.js.map +1 -1
  394. package/dist/column-track.d.ts +41 -0
  395. package/dist/column-track.js +4 -0
  396. package/dist/column-track.js.map +1 -0
  397. package/dist/combobox.d.ts +40 -0
  398. package/dist/combobox.js +3 -0
  399. package/dist/combobox.js.map +1 -0
  400. package/dist/composer.d.ts +62 -0
  401. package/dist/composer.js +5 -0
  402. package/dist/composer.js.map +1 -0
  403. package/dist/content-item.d.ts +116 -0
  404. package/dist/content-item.js +4 -0
  405. package/dist/content-item.js.map +1 -0
  406. package/dist/content-swap.d.ts +34 -0
  407. package/dist/content-swap.js +3 -0
  408. package/dist/content-swap.js.map +1 -0
  409. package/dist/corner-status.d.ts +36 -0
  410. package/dist/corner-status.js +3 -0
  411. package/dist/corner-status.js.map +1 -0
  412. package/dist/css-values.d.ts +127 -0
  413. package/dist/css-values.js +3 -0
  414. package/dist/css-values.js.map +1 -0
  415. package/dist/device-class.js +34 -6
  416. package/dist/device-class.js.map +1 -1
  417. package/dist/disclosure-arrow.d.ts +6 -1
  418. package/dist/disclosure-arrow.js +2 -1
  419. package/dist/edge-activity-indicator.d.ts +28 -0
  420. package/dist/edge-activity-indicator.js +3 -0
  421. package/dist/edge-activity-indicator.js.map +1 -0
  422. package/dist/empty-state.d.ts +5 -2
  423. package/dist/empty-state.js +2 -1
  424. package/dist/extension-attributes-mu8MFUl0.d.ts +13 -0
  425. package/dist/file-picker.d.ts +47 -0
  426. package/dist/file-picker.js +3 -0
  427. package/dist/file-picker.js.map +1 -0
  428. package/dist/flex-alignment-4ms8ZbV8.d.ts +5 -0
  429. package/dist/floating-toolbar.d.ts +51 -0
  430. package/dist/floating-toolbar.js +3 -0
  431. package/dist/floating-toolbar.js.map +1 -0
  432. package/dist/framed-list.d.ts +47 -0
  433. package/dist/framed-list.js +4 -0
  434. package/dist/framed-list.js.map +1 -0
  435. package/dist/grid.d.ts +58 -0
  436. package/dist/grid.js +6 -0
  437. package/dist/grid.js.map +1 -0
  438. package/dist/help-tags-register.d.ts +13 -0
  439. package/dist/help-tags-register.js +9 -0
  440. package/dist/help-tags-register.js.map +1 -0
  441. package/dist/icon-button.d.ts +46 -0
  442. package/dist/icon-button.js +6 -0
  443. package/dist/icon-button.js.map +1 -0
  444. package/dist/icon-toggle-button.d.ts +42 -0
  445. package/dist/icon-toggle-button.js +6 -0
  446. package/dist/icon-toggle-button.js.map +1 -0
  447. package/dist/index.d.ts +63 -17
  448. package/dist/index.js +66 -23
  449. package/dist/list-action-row.d.ts +69 -12
  450. package/dist/list-action-row.js +5 -1
  451. package/dist/list-header.d.ts +65 -10
  452. package/dist/list-header.js +4 -1
  453. package/dist/list-icon-tile-B8dr97OW.d.ts +18 -0
  454. package/dist/list-inset-control.d.ts +22 -0
  455. package/dist/list-inset-control.js +3 -0
  456. package/dist/list-inset-control.js.map +1 -0
  457. package/dist/list-inset-text.d.ts +30 -0
  458. package/dist/list-inset-text.js +4 -0
  459. package/dist/list-inset-text.js.map +1 -0
  460. package/dist/list-item.d.ts +49 -5
  461. package/dist/list-item.js +4 -1
  462. package/dist/list.d.ts +128 -0
  463. package/dist/list.js +7 -0
  464. package/dist/list.js.map +1 -0
  465. package/dist/loading-spinner.d.ts +12 -2
  466. package/dist/loading-spinner.js +2 -1
  467. package/dist/lucide-icon.d.ts +15 -3
  468. package/dist/lucide-icon.js +2 -1
  469. package/dist/nav-stack-VXTumzKa.d.ts +158 -0
  470. package/dist/nav-stack.d.ts +15 -38
  471. package/dist/nav-stack.js +13 -1
  472. package/dist/pane.d.ts +153 -0
  473. package/dist/pane.js +5 -0
  474. package/dist/pane.js.map +1 -0
  475. package/dist/panel-toolbar-vg6Ir5Dy.d.ts +77 -0
  476. package/dist/popup-menu-register.d.ts +10 -0
  477. package/dist/popup-menu-register.js +336 -0
  478. package/dist/popup-menu-register.js.map +1 -0
  479. package/dist/popup-menu.d.ts +125 -0
  480. package/dist/popup-menu.js +3 -0
  481. package/dist/popup-menu.js.map +1 -0
  482. package/dist/resizable-region.d.ts +32 -3
  483. package/dist/resizable-region.js +1 -1
  484. package/dist/row.d.ts +53 -0
  485. package/dist/row.js +7 -0
  486. package/dist/row.js.map +1 -0
  487. package/dist/scroll-clearance-BikHljTc.d.ts +14 -0
  488. package/dist/segmented-control.d.ts +12 -9
  489. package/dist/segmented-control.js +1 -2
  490. package/dist/select-register.js +255 -3
  491. package/dist/select-register.js.map +1 -1
  492. package/dist/select.d.ts +103 -8
  493. package/dist/select.js +4 -1
  494. package/dist/semantic-content-BbzjvSu9.d.ts +14 -0
  495. package/dist/semantic-tone-CdW013KF.d.ts +4 -0
  496. package/dist/sides-BPSWde0A.d.ts +4 -0
  497. package/dist/skeleton.d.ts +14 -7
  498. package/dist/skeleton.js +2 -1
  499. package/dist/spacer.d.ts +18 -0
  500. package/dist/spacer.js +4 -0
  501. package/dist/spacer.js.map +1 -0
  502. package/dist/split-button.d.ts +57 -0
  503. package/dist/split-button.js +7 -0
  504. package/dist/split-button.js.map +1 -0
  505. package/dist/split-view.d.ts +63 -6
  506. package/dist/split-view.js +149 -10
  507. package/dist/split-view.js.map +1 -1
  508. package/dist/state-banner.d.ts +41 -7
  509. package/dist/state-banner.js +4 -1
  510. package/dist/styles/anchored-surface.css +41 -0
  511. package/dist/styles/app-tab.css +232 -0
  512. package/dist/styles/badge.css +145 -0
  513. package/dist/styles/catalog/components/catalog-example-stack.css +14 -0
  514. package/dist/styles/catalog/components/catalog-example.css +204 -0
  515. package/dist/styles/catalog/components/catalog-stage.css +61 -0
  516. package/dist/styles/catalog/components/catalog.css +26 -0
  517. package/dist/styles/catalog.css +5 -498
  518. package/dist/styles/chip.css +208 -0
  519. package/dist/styles/choice-chips.css +154 -0
  520. package/dist/styles/collapsible-panel.css +450 -16
  521. package/dist/styles/column-track.css +57 -0
  522. package/dist/styles/combobox.css +113 -0
  523. package/dist/styles/components/actions/floating-toolbar/floating-toolbar.css +119 -0
  524. package/dist/styles/components/actions/icon-button/icon-button.css +22 -0
  525. package/dist/styles/components/actions/icon-toggle-button/icon-toggle-button.css +83 -0
  526. package/dist/styles/components/actions/popup-menu/popup-menu.css +370 -0
  527. package/dist/styles/components/actions/split-button/split-button.css +95 -0
  528. package/dist/styles/components/actions/toolbar/toolbar.css +443 -0
  529. package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +1069 -0
  530. package/dist/styles/components/actions/toolbar-text/toolbar-text.css +269 -0
  531. package/dist/styles/components/collections/framed-list/framed-list.css +47 -0
  532. package/dist/styles/components/collections/list/list.css +250 -0
  533. package/dist/styles/components/collections/list-action-row/list-action-row.css +466 -0
  534. package/dist/styles/components/collections/list-header/list-header.css +229 -0
  535. package/dist/styles/components/collections/list-inset-control/list-inset-control.css +30 -0
  536. package/dist/styles/components/collections/list-inset-text/list-inset-text.css +29 -0
  537. package/dist/styles/components/collections/list-item/list-item.css +461 -0
  538. package/dist/styles/components/collections/summary-row/summary-row.css +161 -0
  539. package/dist/styles/components/data-display/value-table/value-table.css +183 -0
  540. package/dist/styles/components/feedback/anchored-surface/anchored-surface.css +41 -0
  541. package/dist/styles/components/feedback/badge/badge.css +145 -0
  542. package/dist/styles/components/feedback/chip/chip.css +208 -0
  543. package/dist/styles/components/feedback/corner-status/corner-status.css +60 -0
  544. package/dist/styles/components/feedback/edge-activity-indicator/edge-activity-indicator.css +127 -0
  545. package/dist/styles/components/feedback/empty-state/empty-state.css +47 -0
  546. package/dist/styles/components/feedback/loading-spinner/loading-spinner.css +25 -0
  547. package/dist/styles/components/feedback/skeleton/skeleton.css +92 -0
  548. package/dist/styles/components/feedback/state-banner/state-banner.css +297 -0
  549. package/dist/styles/components/forms/choice-chips/choice-chips.css +154 -0
  550. package/dist/styles/components/forms/combobox/combobox.css +113 -0
  551. package/dist/styles/components/forms/composer/composer.css +100 -0
  552. package/dist/styles/components/forms/file-picker/file-picker.css +81 -0
  553. package/dist/styles/components/forms/segmented-control/segmented-control.css +196 -0
  554. package/dist/styles/components/forms/select/select.css +455 -0
  555. package/dist/styles/components/forms/token-search-field/token-search-field.css +432 -0
  556. package/dist/styles/components/layout/collapsible-panel/collapsible-panel.css +580 -0
  557. package/dist/styles/components/layout/column-track/column-track.css +57 -0
  558. package/dist/styles/components/layout/content-swap/content-swap.css +154 -0
  559. package/dist/styles/components/layout/grid/grid.css +88 -0
  560. package/dist/styles/components/layout/pane/pane.css +382 -0
  561. package/dist/styles/components/layout/resizable-region/resizable-region.css +545 -0
  562. package/dist/styles/components/layout/row/row.css +114 -0
  563. package/dist/styles/components/layout/spacer/spacer.css +11 -0
  564. package/dist/styles/components/layout/split-view/split-view.css +146 -0
  565. package/dist/styles/components/layout/workbench/workbench.css +1086 -0
  566. package/dist/styles/components/media/lucide-icon/lucide-icon.css +15 -0
  567. package/dist/styles/components/navigation/app-tab/app-tab.css +384 -0
  568. package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +23 -0
  569. package/dist/styles/components/navigation/nav-stack/nav-stack.css +342 -0
  570. package/dist/styles/components/navigation/tab-bar/tab-bar.css +197 -0
  571. package/dist/styles/components/navigation/tab-navigator/tab-navigator.css +325 -0
  572. package/dist/styles/components/surfaces/content-item/content-item.css +138 -0
  573. package/dist/styles/components/surfaces/sunken-panel/sunken-panel.css +31 -0
  574. package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +425 -0
  575. package/dist/styles/components/typography/text/text.css +220 -0
  576. package/dist/styles/composer.css +100 -0
  577. package/dist/styles/content-item.css +138 -0
  578. package/dist/styles/content-swap.css +154 -0
  579. package/dist/styles/corner-status.css +60 -0
  580. package/dist/styles/document.css +98 -0
  581. package/dist/styles/edge-activity-indicator.css +127 -0
  582. package/dist/styles/file-picker.css +81 -0
  583. package/dist/styles/floating-toolbar.css +119 -0
  584. package/dist/styles/foundation.css +261 -45
  585. package/dist/styles/framed-list.css +47 -0
  586. package/dist/styles/grid.css +88 -0
  587. package/dist/styles/icon-button.css +22 -0
  588. package/dist/styles/icon-toggle-button.css +83 -0
  589. package/dist/styles/layout.css +3 -41
  590. package/dist/styles/list-action-row.css +324 -18
  591. package/dist/styles/list-header.css +128 -59
  592. package/dist/styles/list-inset-control.css +30 -0
  593. package/dist/styles/list-inset-text.css +29 -0
  594. package/dist/styles/list-item.css +371 -33
  595. package/dist/styles/list.css +250 -0
  596. package/dist/styles/loading-spinner.css +4 -0
  597. package/dist/styles/lucide-icon.css +9 -0
  598. package/dist/styles/nav-stack.css +280 -49
  599. package/dist/styles/pane.css +382 -0
  600. package/dist/styles/popup-menu.css +370 -0
  601. package/dist/styles/resizable-region.css +438 -4
  602. package/dist/styles/row.css +114 -0
  603. package/dist/styles/segmented-control.css +36 -9
  604. package/dist/styles/select.css +338 -21
  605. package/dist/styles/skeleton.css +64 -3
  606. package/dist/styles/spacer.css +11 -0
  607. package/dist/styles/split-button.css +95 -0
  608. package/dist/styles/split-view.css +114 -3
  609. package/dist/styles/state-banner.css +146 -22
  610. package/dist/styles/styles.css +23 -1
  611. package/dist/styles/summary-row.css +161 -0
  612. package/dist/styles/sunken-panel.css +31 -0
  613. package/dist/styles/surface-scaffold.css +425 -0
  614. package/dist/styles/tab-bar.css +161 -9
  615. package/dist/styles/tab-navigator.css +325 -0
  616. package/dist/styles/text.css +220 -0
  617. package/dist/styles/token-search-field.css +202 -59
  618. package/dist/styles/toolbar-control-group.css +894 -36
  619. package/dist/styles/toolbar-text.css +236 -7
  620. package/dist/styles/toolbar.css +393 -11
  621. package/dist/styles/value-table.css +115 -7
  622. package/dist/styles/webawesome.css +410 -17
  623. package/dist/styles/workbench.css +999 -7
  624. package/dist/summary-row.d.ts +56 -0
  625. package/dist/summary-row.js +4 -0
  626. package/dist/summary-row.js.map +1 -0
  627. package/dist/sunken-panel.d.ts +38 -0
  628. package/dist/sunken-panel.js +4 -0
  629. package/dist/sunken-panel.js.map +1 -0
  630. package/dist/surface-scaffold-register.d.ts +9 -0
  631. package/dist/surface-scaffold-register.js +151 -0
  632. package/dist/surface-scaffold-register.js.map +1 -0
  633. package/dist/surface-scaffold.d.ts +170 -0
  634. package/dist/surface-scaffold.js +4 -0
  635. package/dist/surface-scaffold.js.map +1 -0
  636. package/dist/tab-bar.d.ts +33 -7
  637. package/dist/tab-bar.js +1 -1
  638. package/dist/tab-navigator.d.ts +114 -0
  639. package/dist/tab-navigator.js +102 -0
  640. package/dist/tab-navigator.js.map +1 -0
  641. package/dist/text.d.ts +98 -0
  642. package/dist/text.js +3 -0
  643. package/dist/text.js.map +1 -0
  644. package/dist/token-search-field.d.ts +3 -43
  645. package/dist/token-search-field.js +2 -1
  646. package/dist/token-search-model-aYR0YAei.d.ts +184 -0
  647. package/dist/token-search-model.d.ts +3 -0
  648. package/dist/token-search-model.js +3 -0
  649. package/dist/token-search-model.js.map +1 -0
  650. package/dist/toolbar-control-group.d.ts +96 -7
  651. package/dist/toolbar-control-group.js +3 -1
  652. package/dist/toolbar-text.d.ts +58 -9
  653. package/dist/toolbar-text.js +2 -1
  654. package/dist/toolbar.d.ts +71 -7
  655. package/dist/toolbar.js +1 -1
  656. package/dist/types-CVgIwSdq.d.ts +189 -0
  657. package/dist/value-table.d.ts +30 -4
  658. package/dist/value-table.js +2 -1
  659. package/dist/webawesome.d.ts +8 -1
  660. package/dist/wire-catalog.d.ts +111 -5
  661. package/dist/wire-catalog.js +302 -14
  662. package/dist/wire-catalog.js.map +1 -1
  663. package/dist/wire-comboboxes.d.ts +26 -0
  664. package/dist/wire-comboboxes.js +3 -0
  665. package/dist/wire-comboboxes.js.map +1 -0
  666. package/dist/wire-composers.d.ts +16 -0
  667. package/dist/wire-composers.js +3 -0
  668. package/dist/wire-composers.js.map +1 -0
  669. package/dist/wire-content-items.d.ts +11 -0
  670. package/dist/wire-content-items.js +139 -0
  671. package/dist/wire-content-items.js.map +1 -0
  672. package/dist/wire-corner-status.d.ts +11 -0
  673. package/dist/wire-corner-status.js +3 -0
  674. package/dist/wire-corner-status.js.map +1 -0
  675. package/dist/wire-file-pickers.d.ts +26 -0
  676. package/dist/wire-file-pickers.js +3 -0
  677. package/dist/wire-file-pickers.js.map +1 -0
  678. package/dist/wire-list-focus-scroll.d.ts +16 -0
  679. package/dist/wire-list-focus-scroll.js +3 -0
  680. package/dist/wire-list-focus-scroll.js.map +1 -0
  681. package/dist/wire-list-reorder.d.ts +41 -0
  682. package/dist/wire-list-reorder.js +3 -0
  683. package/dist/wire-list-reorder.js.map +1 -0
  684. package/dist/wire-nav-stack.d.ts +4 -1
  685. package/dist/wire-nav-stack.js +326 -15
  686. package/dist/wire-nav-stack.js.map +1 -1
  687. package/dist/wire-resizable-regions.d.ts +2 -1
  688. package/dist/wire-resizable-regions.js +2 -1
  689. package/dist/wire-scroll-dividers.d.ts +87 -0
  690. package/dist/wire-scroll-dividers.js +3 -0
  691. package/dist/wire-scroll-dividers.js.map +1 -0
  692. package/dist/wire-sidebar.d.ts +24 -4
  693. package/dist/wire-sidebar.js +159 -45
  694. package/dist/wire-sidebar.js.map +1 -1
  695. package/dist/wire-tab-bars.d.ts +6 -2
  696. package/dist/wire-tab-bars.js +1 -1
  697. package/dist/wire-tab-navigator.d.ts +13 -0
  698. package/dist/wire-tab-navigator.js +153 -0
  699. package/dist/wire-tab-navigator.js.map +1 -0
  700. package/dist/wire-token-search-fields.d.ts +28 -10
  701. package/dist/wire-token-search-fields.js +2 -1
  702. package/dist/wire-toolbar-visibility.d.ts +13 -0
  703. package/dist/wire-toolbar-visibility.js +3 -0
  704. package/dist/wire-toolbar-visibility.js.map +1 -0
  705. package/dist/wire-workbench.d.ts +116 -0
  706. package/dist/wire-workbench.js +6 -0
  707. package/dist/wire-workbench.js.map +1 -0
  708. package/dist/workbench.d.ts +253 -10
  709. package/dist/workbench.js +20 -15
  710. package/dist/workbench.js.map +1 -1
  711. package/docs/accessibility.md +640 -33
  712. package/docs/anchored-surface.md +101 -0
  713. package/docs/app-layouts.md +159 -10
  714. package/docs/apple-hig.md +2 -0
  715. package/docs/catalog.md +565 -63
  716. package/docs/collapsible-panel.md +308 -25
  717. package/docs/component-contract.md +816 -53
  718. package/docs/component-integration.md +75 -0
  719. package/docs/component-selection.md +962 -99
  720. package/docs/composer.md +143 -0
  721. package/docs/design/templates/choice-chips/color-palette-dark.svg +1 -0
  722. package/docs/design/templates/choice-chips/color-palette.svg +1 -0
  723. package/docs/design/templates/choice-chips/compact-icons-dark.svg +1 -0
  724. package/docs/design/templates/choice-chips/compact-icons.svg +1 -0
  725. package/docs/design/templates/choice-chips/multiple-dark.svg +1 -0
  726. package/docs/design/templates/choice-chips/multiple.svg +1 -0
  727. package/docs/design/templates/choice-chips-dark.svg +1 -0
  728. package/docs/design/templates/choice-chips.svg +1 -0
  729. package/docs/design/templates/composer/chat-dark.svg +1 -0
  730. package/docs/design/templates/composer/chat.svg +1 -0
  731. package/docs/design/templates/composer/prompt-dark.svg +1 -0
  732. package/docs/design/templates/composer/prompt.svg +1 -0
  733. package/docs/design/templates/composer-dark.svg +1 -0
  734. package/docs/design/templates/composer.svg +1 -0
  735. package/docs/design/templates/empty-state/filtered-dark.svg +1 -0
  736. package/docs/design/templates/empty-state/filtered.svg +1 -0
  737. package/docs/design/templates/empty-state/with-action-dark.svg +1 -0
  738. package/docs/design/templates/empty-state/with-action.svg +1 -0
  739. package/docs/design/templates/empty-state-dark.svg +1 -0
  740. package/docs/design/templates/empty-state.svg +1 -0
  741. package/docs/design/templates/list/compact-dark.svg +1 -0
  742. package/docs/design/templates/list/compact.svg +1 -0
  743. package/docs/design/templates/list/stack-dark.svg +1 -0
  744. package/docs/design/templates/list/stack.svg +1 -0
  745. package/docs/design/templates/list-action-row/default-dark.svg +1 -0
  746. package/docs/design/templates/list-action-row/default.svg +1 -0
  747. package/docs/design/templates/list-action-row/icon-tile-dark.svg +1 -0
  748. package/docs/design/templates/list-action-row/icon-tile.svg +1 -0
  749. package/docs/design/templates/list-action-row/selected-dark.svg +1 -0
  750. package/docs/design/templates/list-action-row/selected.svg +1 -0
  751. package/docs/design/templates/list-action-row/trailing-menu-dark.svg +1 -0
  752. package/docs/design/templates/list-action-row/trailing-menu.svg +1 -0
  753. package/docs/design/templates/list-action-row-dark.svg +1 -0
  754. package/docs/design/templates/list-action-row.svg +1 -0
  755. package/docs/design/templates/list-dark.svg +1 -0
  756. package/docs/design/templates/list-header/action-dark.svg +1 -0
  757. package/docs/design/templates/list-header/action.svg +1 -0
  758. package/docs/design/templates/list-header/count-dark.svg +1 -0
  759. package/docs/design/templates/list-header/count.svg +1 -0
  760. package/docs/design/templates/list-header/inline-action-dark.svg +1 -0
  761. package/docs/design/templates/list-header/inline-action.svg +1 -0
  762. package/docs/design/templates/list-header/size-l-dark.svg +1 -0
  763. package/docs/design/templates/list-header/size-l.svg +1 -0
  764. package/docs/design/templates/list-header/size-m-dark.svg +1 -0
  765. package/docs/design/templates/list-header/size-m.svg +1 -0
  766. package/docs/design/templates/list-header/size-xl-dark.svg +1 -0
  767. package/docs/design/templates/list-header/size-xl.svg +1 -0
  768. package/docs/design/templates/list-header/size-xs-dark.svg +1 -0
  769. package/docs/design/templates/list-header/size-xs.svg +1 -0
  770. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -0
  771. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -0
  772. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -0
  773. package/docs/design/templates/list-header/toggle-expanded.svg +1 -0
  774. package/docs/design/templates/list-header-dark.svg +1 -0
  775. package/docs/design/templates/list-header.svg +1 -0
  776. package/docs/design/templates/list-item/default-dark.svg +1 -0
  777. package/docs/design/templates/list-item/default.svg +1 -0
  778. package/docs/design/templates/list-item/icon-tile-dark.svg +1 -0
  779. package/docs/design/templates/list-item/icon-tile.svg +1 -0
  780. package/docs/design/templates/list-item/multiline-dark.svg +1 -0
  781. package/docs/design/templates/list-item/multiline.svg +1 -0
  782. package/docs/design/templates/list-item/selected-dark.svg +1 -0
  783. package/docs/design/templates/list-item/selected.svg +1 -0
  784. package/docs/design/templates/list-item/trailing-dark.svg +1 -0
  785. package/docs/design/templates/list-item/trailing.svg +1 -0
  786. package/docs/design/templates/list-item-dark.svg +1 -0
  787. package/docs/design/templates/list-item.svg +1 -0
  788. package/docs/design/templates/list.svg +1 -0
  789. package/docs/design/templates/segmented-control/equal-dark.svg +1 -0
  790. package/docs/design/templates/segmented-control/equal.svg +1 -0
  791. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -0
  792. package/docs/design/templates/segmented-control/pill-small.svg +1 -0
  793. package/docs/design/templates/segmented-control-dark.svg +1 -0
  794. package/docs/design/templates/segmented-control.svg +1 -0
  795. package/docs/design/templates/skeleton/avatar-dark.svg +1 -0
  796. package/docs/design/templates/skeleton/avatar.svg +1 -0
  797. package/docs/design/templates/skeleton/block-dark.svg +1 -0
  798. package/docs/design/templates/skeleton/block.svg +1 -0
  799. package/docs/design/templates/skeleton/lines-dark.svg +1 -0
  800. package/docs/design/templates/skeleton/lines.svg +1 -0
  801. package/docs/design/templates/skeleton-dark.svg +1 -0
  802. package/docs/design/templates/skeleton.svg +1 -0
  803. package/docs/design/templates/state-banner/danger-dark.svg +1 -0
  804. package/docs/design/templates/state-banner/danger.svg +1 -0
  805. package/docs/design/templates/state-banner/info-badge-dark.svg +1 -0
  806. package/docs/design/templates/state-banner/info-badge.svg +1 -0
  807. package/docs/design/templates/state-banner/info-dark.svg +1 -0
  808. package/docs/design/templates/state-banner/info.svg +1 -0
  809. package/docs/design/templates/state-banner/strip-dark.svg +1 -0
  810. package/docs/design/templates/state-banner/strip.svg +1 -0
  811. package/docs/design/templates/state-banner/success-dark.svg +1 -0
  812. package/docs/design/templates/state-banner/success.svg +1 -0
  813. package/docs/design/templates/state-banner/warning-dark.svg +1 -0
  814. package/docs/design/templates/state-banner/warning.svg +1 -0
  815. package/docs/design/templates/state-banner-dark.svg +1 -0
  816. package/docs/design/templates/state-banner.svg +1 -0
  817. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -0
  818. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -0
  819. package/docs/design/templates/tab-bar-dark.svg +1 -0
  820. package/docs/design/templates/tab-bar.svg +1 -0
  821. package/docs/design/templates/token-search-field/empty-dark.svg +1 -0
  822. package/docs/design/templates/token-search-field/empty.svg +1 -0
  823. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -0
  824. package/docs/design/templates/token-search-field/tokens.svg +1 -0
  825. package/docs/design/templates/token-search-field-dark.svg +1 -0
  826. package/docs/design/templates/token-search-field.svg +1 -0
  827. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -0
  828. package/docs/design/templates/toolbar/title-and-actions.svg +1 -0
  829. package/docs/design/templates/toolbar/width-visibility-320-dark.svg +1 -0
  830. package/docs/design/templates/toolbar/width-visibility-320.svg +1 -0
  831. package/docs/design/templates/toolbar/width-visibility-600-dark.svg +1 -0
  832. package/docs/design/templates/toolbar/width-visibility-600.svg +1 -0
  833. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -1
  834. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -1
  835. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -1
  836. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -1
  837. package/docs/design/templates/toolbar-control-group/icon-tile-brand-dark.svg +1 -0
  838. package/docs/design/templates/toolbar-control-group/icon-tile-brand.svg +1 -0
  839. package/docs/design/templates/toolbar-control-group/icon-tile-danger-dark.svg +1 -0
  840. package/docs/design/templates/toolbar-control-group/icon-tile-danger.svg +1 -0
  841. package/docs/design/templates/toolbar-control-group/icon-tile-neutral-dark.svg +1 -0
  842. package/docs/design/templates/toolbar-control-group/icon-tile-neutral.svg +1 -0
  843. package/docs/design/templates/toolbar-control-group/icon-tile-success-dark.svg +1 -0
  844. package/docs/design/templates/toolbar-control-group/icon-tile-success.svg +1 -0
  845. package/docs/design/templates/toolbar-control-group/icon-tile-warning-dark.svg +1 -0
  846. package/docs/design/templates/toolbar-control-group/icon-tile-warning.svg +1 -0
  847. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -1
  848. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -1
  849. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
  850. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
  851. package/docs/design/templates/toolbar-control-group-dark.svg +1 -11
  852. package/docs/design/templates/toolbar-control-group.svg +1 -11
  853. package/docs/design/templates/toolbar-dark.svg +1 -0
  854. package/docs/design/templates/toolbar-text/dark-tone-dark.svg +1 -0
  855. package/docs/design/templates/toolbar-text/dark-tone.svg +1 -0
  856. package/docs/design/templates/toolbar-text/default-dark.svg +1 -0
  857. package/docs/design/templates/toolbar-text/default.svg +1 -0
  858. package/docs/design/templates/toolbar-text/large-dark.svg +1 -0
  859. package/docs/design/templates/toolbar-text/large.svg +1 -0
  860. package/docs/design/templates/toolbar-text/small-dark.svg +1 -0
  861. package/docs/design/templates/toolbar-text/small.svg +1 -0
  862. package/docs/design/templates/toolbar-text-dark.svg +1 -0
  863. package/docs/design/templates/toolbar-text.svg +1 -0
  864. package/docs/design/templates/toolbar.svg +1 -0
  865. package/docs/design/templates/value-table/details-dark.svg +1 -0
  866. package/docs/design/templates/value-table/details.svg +1 -0
  867. package/docs/design/templates/value-table-dark.svg +1 -0
  868. package/docs/design/templates/value-table.svg +1 -0
  869. package/docs/design/templates.md +75 -18
  870. package/docs/design-philosophy.md +65 -20
  871. package/docs/device-class.md +10 -9
  872. package/docs/document-baseline.md +93 -0
  873. package/docs/examples/application-ui-profile.json +60 -0
  874. package/docs/examples/command-palette-adapter.tsx +69 -17
  875. package/docs/examples/component-catalog-extension.json +52 -0
  876. package/docs/examples/component-composition-extension.json +80 -0
  877. package/docs/layout.md +796 -53
  878. package/docs/nav-stack.md +287 -14
  879. package/docs/recipes.md +129 -73
  880. package/docs/split-view.md +96 -7
  881. package/docs/sunken-panel.md +106 -0
  882. package/docs/surface-scaffold.md +270 -0
  883. package/docs/tab-navigator.md +255 -0
  884. package/docs/type-contracts.md +137 -0
  885. package/docs/ui-analyzer.md +406 -0
  886. package/docs/ui-doctor.md +281 -0
  887. package/docs/ui-evaluator.md +139 -0
  888. package/docs/ux-demo.md +48 -17
  889. package/docs/webawesome-theme.md +215 -16
  890. package/docs/workbench.md +627 -12
  891. package/docs/writing.md +152 -0
  892. package/doctor/cli.mjs +120 -0
  893. package/doctor/component-style-checks.mjs +457 -0
  894. package/doctor/config.schema.json +94 -0
  895. package/doctor/copy-capitalization-checks.mjs +591 -0
  896. package/doctor/eslint-diagnostics.d.mts +24 -0
  897. package/doctor/eslint-diagnostics.mjs +24 -0
  898. package/doctor/index.d.mts +122 -0
  899. package/doctor/index.mjs +1424 -0
  900. package/doctor/report.schema.json +118 -0
  901. package/evaluator/cli.mjs +89 -0
  902. package/evaluator/index.d.mts +90 -0
  903. package/evaluator/index.mjs +1203 -0
  904. package/evaluator/report.schema.json +152 -0
  905. package/llms.txt +770 -50
  906. package/package.json +345 -27
  907. package/scripts/component-catalog-extension-validation.mjs +28 -0
  908. package/traversal-exclusions.mjs +86 -0
  909. package/ux-demo/recipes/app-shell.tsx +204 -16
  910. package/ux-demo/recipes/collapsible-sidebar.tsx +206 -45
  911. package/ux-demo/recipes/compact-toolbar.tsx +135 -14
  912. package/ux-demo/recipes/composer-form.tsx +133 -21
  913. package/ux-demo/recipes/list-detail-dialog.tsx +255 -14
  914. package/ux-demo/recipes/list-workspace-states.tsx +183 -11
  915. package/ux-demo/recipes/loaders.ts +9 -3
  916. package/ux-demo/recipes/loading-inspector.tsx +162 -39
  917. package/ux-demo/recipes/mount-recipe.ts +26 -10
  918. package/ux-demo/recipes/navigation-sidebar.tsx +137 -11
  919. package/ux-demo/recipes/navigation-stack.tsx +79 -24
  920. package/ux-demo/recipes/types.ts +17 -2
  921. package/ux-demo/recipes/workspace-header.tsx +86 -5
  922. package/vite-ux-review.d.mts +83 -0
  923. package/vite-ux-review.mjs +120 -0
  924. package/dist/browser/panel-header.js +0 -7
  925. package/dist/chunk-2Z5TWHKQ.js +0 -34
  926. package/dist/chunk-2Z5TWHKQ.js.map +0 -1
  927. package/dist/chunk-37T3VNIZ.js +0 -19
  928. package/dist/chunk-37T3VNIZ.js.map +0 -1
  929. package/dist/chunk-55DATV3A.js +0 -10
  930. package/dist/chunk-55DATV3A.js.map +0 -1
  931. package/dist/chunk-56RJXPHG.js.map +0 -1
  932. package/dist/chunk-7BR3DO2A.js +0 -31
  933. package/dist/chunk-7BR3DO2A.js.map +0 -1
  934. package/dist/chunk-7JB7VPRI.js +0 -34
  935. package/dist/chunk-7JB7VPRI.js.map +0 -1
  936. package/dist/chunk-7LDCTU7D.js +0 -134
  937. package/dist/chunk-7LDCTU7D.js.map +0 -1
  938. package/dist/chunk-AQNKJRFH.js +0 -79
  939. package/dist/chunk-AQNKJRFH.js.map +0 -1
  940. package/dist/chunk-AVZHJN6C.js +0 -14
  941. package/dist/chunk-AVZHJN6C.js.map +0 -1
  942. package/dist/chunk-B24C4A6T.js +0 -22
  943. package/dist/chunk-B24C4A6T.js.map +0 -1
  944. package/dist/chunk-BLK3UEEI.js +0 -23
  945. package/dist/chunk-BLK3UEEI.js.map +0 -1
  946. package/dist/chunk-CVZYNJJ5.js +0 -265
  947. package/dist/chunk-CVZYNJJ5.js.map +0 -1
  948. package/dist/chunk-DAFFDO33.js +0 -14
  949. package/dist/chunk-DAFFDO33.js.map +0 -1
  950. package/dist/chunk-I7INRJO4.js +0 -17
  951. package/dist/chunk-I7INRJO4.js.map +0 -1
  952. package/dist/chunk-L4OKFDJY.js +0 -24
  953. package/dist/chunk-L4OKFDJY.js.map +0 -1
  954. package/dist/chunk-LC3YSAZC.js +0 -39
  955. package/dist/chunk-LC3YSAZC.js.map +0 -1
  956. package/dist/chunk-M5JRI6MN.js +0 -27
  957. package/dist/chunk-M5JRI6MN.js.map +0 -1
  958. package/dist/chunk-MFKMHK5W.js +0 -10
  959. package/dist/chunk-MFKMHK5W.js.map +0 -1
  960. package/dist/chunk-RUNWEPR4.js +0 -10
  961. package/dist/chunk-RUNWEPR4.js.map +0 -1
  962. package/dist/chunk-W2FK7ZNY.js +0 -26
  963. package/dist/chunk-W2FK7ZNY.js.map +0 -1
  964. package/dist/chunk-W5EQ3HYQ.js +0 -42
  965. package/dist/chunk-W5EQ3HYQ.js.map +0 -1
  966. package/dist/chunk-WVPYVDXY.js +0 -15
  967. package/dist/chunk-WVPYVDXY.js.map +0 -1
  968. package/dist/chunk-XXMOARTH.js +0 -229
  969. package/dist/chunk-XXMOARTH.js.map +0 -1
  970. package/dist/chunk-Y5MRDTLC.js +0 -20
  971. package/dist/chunk-Y5MRDTLC.js.map +0 -1
  972. package/dist/chunk-YGN7OMLT.js.map +0 -1
  973. package/dist/panel-header.d.ts +0 -36
  974. package/dist/panel-header.js +0 -7
  975. package/dist/panel-header.js.map +0 -1
  976. package/dist/styles/panel-header.css +0 -64
  977. package/dist/styles/tab-scaffold.css +0 -84
  978. package/dist/tab-scaffold.d.ts +0 -30
  979. package/dist/tab-scaffold.js +0 -16
  980. package/dist/tab-scaffold.js.map +0 -1
  981. package/dist/wire-tab-scaffold.d.ts +0 -11
  982. package/dist/wire-tab-scaffold.js +0 -16
  983. package/dist/wire-tab-scaffold.js.map +0 -1
  984. package/docs/design/templates/panel-header/icon-actions-dark.svg +0 -1
  985. package/docs/design/templates/panel-header/icon-actions.svg +0 -1
  986. package/docs/design/templates/panel-header/icon-summary-actions-dark.svg +0 -1
  987. package/docs/design/templates/panel-header/icon-summary-actions.svg +0 -1
  988. package/docs/design/templates/panel-header/no-icon-dark.svg +0 -1
  989. package/docs/design/templates/panel-header/no-icon.svg +0 -1
  990. package/docs/design/templates/panel-header/page-heading-dark.svg +0 -1
  991. package/docs/design/templates/panel-header/page-heading.svg +0 -1
  992. package/docs/design/templates/panel-header/title-only-dark.svg +0 -1
  993. package/docs/design/templates/panel-header/title-only.svg +0 -1
  994. package/docs/design/templates/panel-header-dark.svg +0 -13
  995. package/docs/design/templates/panel-header.svg +0 -13
  996. package/docs/tab-scaffold.md +0 -41
  997. package/ux-demo/recipes/recipes.css +0 -448
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/actions/icon-toggle-button/icon-toggle-button.tsx"],"names":[],"mappings":";;;;AASA,IAAM,mBAAA,uBAA0B,GAAA,CAAI;AAAA,EAClC,gBAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAC,CAAA;AAsCM,SAAS,gBAAA,CAAiB;AAAA,EAC/B,IAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA,GAAQ,MAAA;AAAA,EACR,QAAA,GAAW,KAAA;AAAA,EACX,EAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,iBAAiB,EAAC;AAAA,EAClB;AACF,CAAA,EAA0B;AACxB,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACE,GAAG,oBAAA,CAAqB,cAAA,EAAgB,mBAAmB,CAAA;AAAA,MAC5D,IAAA,EAAK,QAAA;AAAA,MACL,EAAA;AAAA,MACA,KAAA,EAAO,CAAA,uBAAA,EAA0B,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAClD,gBAAA,EAAe,oBAAA;AAAA,MACf,aAAA,EAAa,MAAA;AAAA,MACb,YAAA,EAAY,KAAA;AAAA,MACZ,YAAA,EAAY,KAAA;AAAA,MACZ,cAAA,EAAc,UAAU,MAAA,GAAS,OAAA;AAAA,MACjC,QAAA;AAAA,MACA,IAAA;AAAA,MAEA,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,8BAAA,EAA+B,aAAA,EAAY,MAAA,EACrD,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAY,IAAA,EAAM,QAAA,EAAU,CAAA,EAC1C;AAAA;AAAA,GACF;AAEJ","file":"chunk-CA7LNX3J.js","sourcesContent":["import { filterDataAttributes } from '../../../shared/dom/extension-attributes.js';\nimport {\n LucideIcon,\n type LucideNode,\n} from '../../media/lucide-icon/lucide-icon.js';\n\n/** Corner shape: fully round `pill` (default) or a softer `rounded` square. */\nexport type IconToggleButtonShape = 'pill' | 'rounded';\n\nconst iconToggleProtected = new Set([\n 'data-component',\n 'data-action',\n 'data-shape',\n]);\n\ntype IconToggleButtonRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-component'?: never;\n 'data-action'?: never;\n 'data-shape'?: never;\n }\n>;\n\nexport interface IconToggleButtonProps {\n /** The Lucide-compatible icon node. */\n icon: LucideNode;\n /** The icon's stable name, as `LucideIcon` takes it. */\n iconName: string;\n /** Accessible name and hover help tag; required because no text is shown. */\n label: string;\n /** Pressed state, exposed as `aria-pressed`; the application owns it. */\n pressed: boolean;\n /** Delegated `data-action` the application handles to flip `pressed`. */\n action?: string;\n shape?: IconToggleButtonShape;\n disabled?: boolean;\n id?: string;\n className?: string;\n /** Safe `data-*` metadata; IconToggleButton-owned markers stay protected. */\n rootAttributes?: IconToggleButtonRootAttributes;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\n/**\n * A standalone, icon-only toggle: a native `<button aria-pressed>` with the\n * geometry and pressed chrome of a single contained `ToolbarControlGroup`\n * (44px, a 2px-inset face that rises when pressed), for content and pane\n * footers where no `Toolbar` belongs. Inside a toolbar, use a\n * `ToolbarControlGroup` instead.\n */\nexport function IconToggleButton({\n icon,\n iconName,\n label,\n pressed,\n action,\n shape = 'pill',\n disabled = false,\n id,\n className = '',\n rootAttributes = {},\n slot,\n}: IconToggleButtonProps) {\n return (\n <button\n {...filterDataAttributes(rootAttributes, iconToggleProtected)}\n type=\"button\"\n id={id}\n class={`kui-icon-toggle-button ${className}`.trim()}\n data-component=\"icon-toggle-button\"\n data-action={action}\n data-shape={shape}\n aria-label={label}\n aria-pressed={pressed ? 'true' : 'false'}\n disabled={disabled}\n slot={slot}\n >\n <span class=\"kui-icon-toggle-button__face\" aria-hidden=\"true\">\n <LucideIcon icon={icon} name={iconName} />\n </span>\n </button>\n );\n}\n"]}
@@ -0,0 +1,288 @@
1
+ import { resizeRegionFromPointer, clampRegionSize } from './chunk-Y6KT7ZTR.js';
2
+ import { delegate } from 'kerfjs';
3
+
4
+ var HANDLE_SELECTOR = "[data-kui-resize-handle]";
5
+ var INSET_ATTRIBUTE = "data-handle-inset";
6
+ var REPORTED_ATTRIBUTES = [
7
+ "aria-valuenow",
8
+ "aria-valuemin",
9
+ "aria-valuemax",
10
+ INSET_ATTRIBUTE
11
+ ];
12
+ var HANDLE_OVERHANG = 10;
13
+ function renderedSize(region, handle) {
14
+ const size = Number.parseFloat(
15
+ region.style.getPropertyValue("--kui-resizable-region-size")
16
+ );
17
+ return Number.isFinite(size) ? size : Number(handle.getAttribute("aria-valuenow"));
18
+ }
19
+ function handleInset(state, size) {
20
+ return state.max < state.declaredMax && state.max - size < HANDLE_OVERHANG;
21
+ }
22
+ function setInset(region, inset) {
23
+ if (region.hasAttribute(INSET_ATTRIBUTE) !== inset)
24
+ region.toggleAttribute(INSET_ATTRIBUTE, inset);
25
+ }
26
+ function setAttributeIfChanged(element, name, value) {
27
+ if (element.getAttribute(name) !== value) element.setAttribute(name, value);
28
+ }
29
+ function visibleMax(region, axis, min, max) {
30
+ const property = "--kui-resizable-region-size";
31
+ const previous = region.style.getPropertyValue(property);
32
+ region.style.setProperty(property, `${max}px`);
33
+ const basis = Number.parseFloat(
34
+ globalThis.getComputedStyle(region).flexBasis
35
+ );
36
+ const box = region.getBoundingClientRect();
37
+ region.style.setProperty(property, previous);
38
+ const track = axis === "horizontal" ? box.width : box.height;
39
+ if (!Number.isFinite(basis) || track <= 0 || track >= basis - 0.5) return max;
40
+ return Math.max(min, Math.min(max, Math.floor(track - (basis - max))));
41
+ }
42
+ function shownSize(region, axis, size) {
43
+ const basis = Number.parseFloat(
44
+ globalThis.getComputedStyle(region).flexBasis
45
+ );
46
+ const box = region.getBoundingClientRect();
47
+ const track = axis === "horizontal" ? box.width : box.height;
48
+ if (!Number.isFinite(basis) || track <= 0 || track >= basis - 0.5)
49
+ return void 0;
50
+ return Math.max(0, Math.floor(track - (basis - size)));
51
+ }
52
+ function reported(state) {
53
+ const { squeezed } = state;
54
+ return squeezed === void 0 ? { min: state.min, max: state.max, now: state.size } : { min: squeezed, max: squeezed, now: squeezed };
55
+ }
56
+ function pinned(state) {
57
+ return state.squeezed !== void 0 || state.max <= state.min;
58
+ }
59
+ function applySize(state, size) {
60
+ const value = `${size}px`;
61
+ state.region.style.setProperty("--kui-resizable-region-size", value);
62
+ state.region.style.setProperty("--kui-resizable-region-expanded-size", value);
63
+ if (state.squeezed === void 0)
64
+ state.handle.setAttribute("aria-valuenow", String(size));
65
+ setInset(state.region, handleInset(state, size));
66
+ }
67
+ function wireResizeHandles(root, {
68
+ step = 16,
69
+ largeStep = 64,
70
+ onPreview,
71
+ onCommit
72
+ }, regionSelector, limit) {
73
+ const REGION_SELECTOR = regionSelector;
74
+ let stopPointer;
75
+ const announced = /* @__PURE__ */ new WeakMap();
76
+ function regionState(handle) {
77
+ const region = handle.closest(REGION_SELECTOR);
78
+ if (!(region instanceof HTMLElement) || !(handle instanceof HTMLElement) || handle.parentElement !== region)
79
+ return void 0;
80
+ const id = region.dataset.regionId;
81
+ const axis = region.dataset.axis;
82
+ const edge = region.dataset.edge;
83
+ const valueMin = Number(handle.getAttribute("aria-valuemin"));
84
+ const valueMax = Number(handle.getAttribute("aria-valuemax"));
85
+ const remembered = announced.get(handle);
86
+ const min = remembered?.min === valueMin ? remembered.declaredMin : valueMin;
87
+ const declaredMax = remembered?.max === valueMax ? remembered.declaredMax : valueMax;
88
+ const size = renderedSize(region, handle);
89
+ if (!id || region.dataset.collapsed === "true" || region.dataset.presentation !== "inline" || axis !== "horizontal" && axis !== "vertical" || edge !== "start" && edge !== "end" || !Number.isFinite(min) || !Number.isFinite(declaredMax) || !Number.isFinite(size))
90
+ return void 0;
91
+ const shown = shownSize(region, axis, size);
92
+ const visible = visibleMax(region, axis, min, declaredMax);
93
+ const max = limit ? Math.max(min, Math.min(visible, limit(region, { min, max: visible }))) : visible;
94
+ return {
95
+ region,
96
+ handle,
97
+ id,
98
+ axis,
99
+ edge,
100
+ min,
101
+ declaredMax,
102
+ max,
103
+ size: clampRegionSize(size, min, max),
104
+ squeezed: shown !== void 0 && shown < min ? shown : void 0
105
+ };
106
+ }
107
+ function announce(state) {
108
+ const inset = handleInset(state, state.size);
109
+ const { min, max, now } = reported(state);
110
+ announced.set(state.handle, {
111
+ declaredMin: state.min,
112
+ declaredMax: state.declaredMax,
113
+ min,
114
+ max,
115
+ size: now,
116
+ inset
117
+ });
118
+ setAttributeIfChanged(state.handle, "aria-valuemin", String(min));
119
+ setAttributeIfChanged(state.handle, "aria-valuemax", String(max));
120
+ setAttributeIfChanged(state.handle, "aria-valuenow", String(now));
121
+ setInset(state.region, inset);
122
+ }
123
+ const handleOf = (region) => region.querySelector(`:scope > ${HANDLE_SELECTOR}`);
124
+ function sync(region) {
125
+ if (!region.isConnected || region.dataset.resizing === "true") return;
126
+ const handle = handleOf(region);
127
+ const state = handle ? regionState(handle) : void 0;
128
+ if (state) announce(state);
129
+ }
130
+ function reportedByUs(region) {
131
+ const handle = handleOf(region);
132
+ const remembered = handle ? announced.get(handle) : void 0;
133
+ return remembered !== void 0 && handle?.getAttribute("aria-valuemin") === String(remembered.min) && handle.getAttribute("aria-valuemax") === String(remembered.max) && handle.getAttribute("aria-valuenow") === String(remembered.size) && region.hasAttribute(INSET_ATTRIBUTE) === remembered.inset;
134
+ }
135
+ const observed = /* @__PURE__ */ new Set();
136
+ const resizeObserver = typeof ResizeObserver === "function" ? new ResizeObserver((entries) => {
137
+ const regions = /* @__PURE__ */ new Set();
138
+ for (const { target } of entries) {
139
+ if (target.matches(REGION_SELECTOR))
140
+ regions.add(target);
141
+ for (const child of target.children)
142
+ if (child.matches(REGION_SELECTOR))
143
+ regions.add(child);
144
+ }
145
+ for (const region of regions) sync(region);
146
+ }) : void 0;
147
+ function observeRegions() {
148
+ if (!resizeObserver) return;
149
+ const wanted = /* @__PURE__ */ new Set();
150
+ for (const region of root.querySelectorAll(REGION_SELECTOR)) {
151
+ wanted.add(region);
152
+ wanted.add(region.parentElement);
153
+ }
154
+ for (const element of observed)
155
+ if (!wanted.has(element)) {
156
+ resizeObserver.unobserve(element);
157
+ observed.delete(element);
158
+ }
159
+ for (const element of wanted)
160
+ if (!observed.has(element)) {
161
+ resizeObserver.observe(element);
162
+ observed.add(element);
163
+ }
164
+ }
165
+ const mutationObserver = new MutationObserver((records) => {
166
+ const regions = /* @__PURE__ */ new Set();
167
+ let structural = false;
168
+ for (const record of records) {
169
+ if (record.type === "childList") {
170
+ structural = true;
171
+ continue;
172
+ }
173
+ const target = record.target;
174
+ const region = target.matches(REGION_SELECTOR) ? target : target.matches(HANDLE_SELECTOR) ? target.parentElement?.matches(REGION_SELECTOR) ? target.parentElement : null : null;
175
+ if (region && !reportedByUs(region)) regions.add(region);
176
+ }
177
+ if (structural) observeRegions();
178
+ for (const region of regions) sync(region);
179
+ });
180
+ mutationObserver.observe(root, {
181
+ subtree: true,
182
+ childList: true,
183
+ attributes: true,
184
+ attributeFilter: REPORTED_ATTRIBUTES
185
+ });
186
+ observeRegions();
187
+ function commit(state, change) {
188
+ onCommit(change);
189
+ const settled = state.handle.isConnected ? regionState(state.handle) : void 0;
190
+ if (settled) announce(settled);
191
+ }
192
+ const stopFocus = delegate(
193
+ root,
194
+ "focusin",
195
+ HANDLE_SELECTOR,
196
+ (_event, handle) => {
197
+ const state = regionState(handle);
198
+ if (state) announce(state);
199
+ }
200
+ );
201
+ const stopKeydown = delegate(
202
+ root,
203
+ "keydown",
204
+ HANDLE_SELECTOR,
205
+ (event, handle) => {
206
+ const keyboardEvent = event;
207
+ const state = regionState(handle);
208
+ if (!state) return;
209
+ announce(state);
210
+ let next;
211
+ if (keyboardEvent.key === "Home") next = state.min;
212
+ if (keyboardEvent.key === "End") next = state.max;
213
+ const increment = keyboardEvent.shiftKey ? largeStep : step;
214
+ if (state.axis === "horizontal" && keyboardEvent.key === "ArrowLeft")
215
+ next = resizeRegionFromPointer(state.size, -increment, state.edge);
216
+ if (state.axis === "horizontal" && keyboardEvent.key === "ArrowRight")
217
+ next = resizeRegionFromPointer(state.size, increment, state.edge);
218
+ if (state.axis === "vertical" && keyboardEvent.key === "ArrowUp")
219
+ next = resizeRegionFromPointer(state.size, -increment, state.edge);
220
+ if (state.axis === "vertical" && keyboardEvent.key === "ArrowDown")
221
+ next = resizeRegionFromPointer(state.size, increment, state.edge);
222
+ if (next === void 0) return;
223
+ keyboardEvent.preventDefault();
224
+ if (pinned(state)) return;
225
+ const size = clampRegionSize(next, state.min, state.max);
226
+ applySize(state, size);
227
+ commit(state, { id: state.id, size, source: "keyboard" });
228
+ }
229
+ );
230
+ const stopPointerDown = delegate(
231
+ root,
232
+ "pointerdown",
233
+ HANDLE_SELECTOR,
234
+ (event, handle) => {
235
+ const pointerEvent = event;
236
+ if (pointerEvent.button !== 0) return;
237
+ const state = regionState(handle);
238
+ if (!state) return;
239
+ pointerEvent.preventDefault();
240
+ announce(state);
241
+ if (pinned(state)) return;
242
+ state.handle.setPointerCapture?.(pointerEvent.pointerId);
243
+ const startCoordinate = state.axis === "horizontal" ? pointerEvent.clientX : pointerEvent.clientY;
244
+ let next = state.size;
245
+ const move = (moveEvent) => {
246
+ const coordinate = state.axis === "horizontal" ? moveEvent.clientX : moveEvent.clientY;
247
+ next = clampRegionSize(
248
+ resizeRegionFromPointer(
249
+ state.size,
250
+ coordinate - startCoordinate,
251
+ state.edge
252
+ ),
253
+ state.min,
254
+ state.max
255
+ );
256
+ applySize(state, next);
257
+ onPreview?.({ id: state.id, size: next, source: "pointer" });
258
+ };
259
+ const finish = () => {
260
+ root.removeEventListener("pointermove", move);
261
+ root.removeEventListener("pointerup", finish);
262
+ root.removeEventListener("pointercancel", finish);
263
+ stopPointer = void 0;
264
+ delete state.region.dataset.resizing;
265
+ commit(state, { id: state.id, size: next, source: "pointer" });
266
+ };
267
+ stopPointer?.();
268
+ stopPointer = finish;
269
+ state.region.dataset.resizing = "true";
270
+ root.addEventListener("pointermove", move);
271
+ root.addEventListener("pointerup", finish, { once: true });
272
+ root.addEventListener("pointercancel", finish, { once: true });
273
+ }
274
+ );
275
+ return () => {
276
+ mutationObserver.disconnect();
277
+ resizeObserver?.disconnect();
278
+ observed.clear();
279
+ stopPointer?.();
280
+ stopFocus();
281
+ stopKeydown();
282
+ stopPointerDown();
283
+ };
284
+ }
285
+
286
+ export { wireResizeHandles };
287
+
288
+ //# sourceMappingURL=chunk-CEJ5FK6G.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/layout/resizable-region/internal/resize-wiring.ts"],"names":[],"mappings":"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","file":"chunk-CEJ5FK6G.js","sourcesContent":["import { delegate } from 'kerfjs';\n\nimport {\n clampRegionSize,\n type ResizableRegionAxis,\n type ResizableRegionEdge,\n resizeRegionFromPointer,\n} from '../resizable-region.js';\n\nexport interface ResizeCommit {\n id: string;\n size: number;\n source: 'keyboard' | 'pointer';\n}\n\nexport interface WireResizableRegionsOptions {\n step?: number;\n largeStep?: number;\n onPreview?: (change: ResizeCommit) => void;\n onCommit: (change: ResizeCommit) => void;\n}\n\ninterface RegionState {\n region: HTMLElement;\n handle: HTMLElement;\n id: string;\n axis: ResizableRegionAxis;\n edge: ResizableRegionEdge;\n /** The rendered `min` prop: every size the wiring commits stays at or above it. */\n min: number;\n /** The rendered `max` prop. */\n declaredMax: number;\n /** The largest size the region can actually show: `declaredMax`, or less when a parent clamps the track. */\n max: number;\n /** The shown size, which a parent clamp can hold below the rendered size. */\n size: number;\n /**\n * The size the track shows when its container squeezes it below `min` (a\n * narrowing Workbench shrinks its resizable rails), otherwise undefined.\n */\n squeezed?: number;\n}\n\n/**\n * A composition-specific bound on a region's size, applied after the parent\n * clamp: given the region and its limits, the largest size it may take. A\n * `Workbench` rail uses it to leave the work area its minimum width.\n */\nexport type ResizeLimit = (\n region: HTMLElement,\n limits: { min: number; max: number },\n) => number;\n\nconst HANDLE_SELECTOR = '[data-kui-resize-handle]';\nconst INSET_ATTRIBUTE = 'data-handle-inset';\n/** Attributes a re-render can write back over the reported state. */\nconst REPORTED_ATTRIBUTES = [\n 'aria-valuenow',\n 'aria-valuemin',\n 'aria-valuemax',\n INSET_ATTRIBUTE,\n];\n/**\n * How far the handle's hit target reaches past the separator (the CSS places\n * the 20px handle at `-10px` on the region's edge).\n */\nconst HANDLE_OVERHANG = 10;\n\n/**\n * The size the region renders or was last resized to. The track's custom\n * property is the source, not aria-valuenow, which reports the shown size and\n * can sit below the rendered size while a parent clamps the track.\n */\nfunction renderedSize(region: HTMLElement, handle: HTMLElement) {\n const size = Number.parseFloat(\n region.style.getPropertyValue('--kui-resizable-region-size'),\n );\n return Number.isFinite(size)\n ? size\n : Number(handle.getAttribute('aria-valuenow'));\n}\n\n/**\n * Whether the handle must sit inside the region. When a parent clamps the\n * track, the separator reaches the parent's edge, where a clipping ancestor\n * (an app shell, a scroll frame) would cut off the half of the hit target\n * and its focus ring that overhang the region. With less room past the\n * separator than that overhang, the region carries `data-handle-inset`, and\n * the CSS moves the handle and its ring inside.\n */\nfunction handleInset(state: RegionState, size: number) {\n return state.max < state.declaredMax && state.max - size < HANDLE_OVERHANG;\n}\n\nfunction setInset(region: HTMLElement, inset: boolean) {\n if (region.hasAttribute(INSET_ATTRIBUTE) !== inset)\n region.toggleAttribute(INSET_ATTRIBUTE, inset);\n}\n\nfunction setAttributeIfChanged(\n element: HTMLElement,\n name: string,\n value: string,\n) {\n if (element.getAttribute(name) !== value) element.setAttribute(name, value);\n}\n\n/**\n * The largest size a parent lets the region show. The track is\n * `size + edge extent` (its flex basis), but a parent may clamp it (a\n * `max-width: 100%` stage, a narrow container). Probing the track at the\n * declared maximum for one synchronous layout read measures how much of that\n * size is visible; the probe is restored before anything paints. Without\n * layout (no box yet, or an `auto` basis under a responsive fill) the declared\n * maximum stands.\n */\nfunction visibleMax(\n region: HTMLElement,\n axis: ResizableRegionAxis,\n min: number,\n max: number,\n) {\n const property = '--kui-resizable-region-size';\n const previous = region.style.getPropertyValue(property);\n region.style.setProperty(property, `${max}px`);\n const basis = Number.parseFloat(\n globalThis.getComputedStyle(region).flexBasis,\n );\n const box = region.getBoundingClientRect();\n region.style.setProperty(property, previous);\n const track = axis === 'horizontal' ? box.width : box.height;\n if (!Number.isFinite(basis) || track <= 0 || track >= basis - 0.5) return max;\n return Math.max(min, Math.min(max, Math.floor(track - (basis - max))));\n}\n\n/**\n * The size the track shows at its rendered size, when that is less than the\n * rendered size: a container that lets the region shrink (a narrowing\n * Workbench squeezes its resizable rails in proportion) can show it below its\n * own minimum. Undefined without layout or when the whole size shows.\n */\nfunction shownSize(\n region: HTMLElement,\n axis: ResizableRegionAxis,\n size: number,\n) {\n const basis = Number.parseFloat(\n globalThis.getComputedStyle(region).flexBasis,\n );\n const box = region.getBoundingClientRect();\n const track = axis === 'horizontal' ? box.width : box.height;\n if (!Number.isFinite(basis) || track <= 0 || track >= basis - 0.5)\n return undefined;\n return Math.max(0, Math.floor(track - (basis - size)));\n}\n\n/**\n * The separator's reported range and value. A squeezed region reports the\n * size it actually shows as its value and pins its minimum and maximum there:\n * WAI-ARIA requires the value to sit inside the range, and the separator\n * cannot move a track its container holds below the minimum. The configured\n * limits still bound every size the wiring commits.\n */\nfunction reported(state: RegionState) {\n const { squeezed } = state;\n return squeezed === undefined\n ? { min: state.min, max: state.max, now: state.size }\n : { min: squeezed, max: squeezed, now: squeezed };\n}\n\n/**\n * Whether the separator cannot move its region: the container squeezes the\n * track below its minimum, or the visible range has collapsed to a single\n * size. A pinned separator commits nothing, so a key press or drag never\n * overwrites the app's remembered size (and its storage) with the limit.\n */\nfunction pinned(state: RegionState) {\n return state.squeezed !== undefined || state.max <= state.min;\n}\n\n/**\n * Apply a live size to an expanded region before the app commits it. The\n * collapse-motion content keeps a fixed width from the expanded size so its\n * slide reads as a slide, not a squeeze; it has to follow the live size too, or\n * the content stays at the previous width until the app re-renders.\n */\nfunction applySize(state: RegionState, size: number) {\n const value = `${size}px`;\n state.region.style.setProperty('--kui-resizable-region-size', value);\n state.region.style.setProperty('--kui-resizable-region-expanded-size', value);\n // A squeezed region's container holds it where it is, so its reported\n // value stays the squeezed size.\n if (state.squeezed === undefined)\n state.handle.setAttribute('aria-valuenow', String(size));\n setInset(state.region, handleInset(state, size));\n}\n\n/**\n * Wire pointer and separator-keyboard behavior for every resizable region\n * below root that matches `regionSelector`. A region carries `data-region-id`,\n * `data-axis`, `data-edge`, `data-collapsed`, and `data-presentation`, sizes\n * its track from `--kui-resizable-region-size`, and owns its separator handle\n * as a direct child. `ResizableRegion` renders that contract, and so does a\n * resizable `Workbench` panel; each public wire passes the selector for the\n * regions it owns, so two wires never drive the same handle. An optional\n * `limit` tightens each region's maximum for its composition.\n */\nexport function wireResizeHandles(\n root: HTMLElement,\n {\n step = 16,\n largeStep = 64,\n onPreview,\n onCommit,\n }: WireResizableRegionsOptions,\n regionSelector: string,\n limit?: ResizeLimit,\n) {\n const REGION_SELECTOR = regionSelector;\n let stopPointer: (() => void) | undefined;\n // The handle announces its visible maximum in aria-valuemax, which hides the\n // rendered `max` prop. Remember it per handle; a re-render that writes a\n // different aria-valuemax than the one announced here supersedes it.\n const announced = new WeakMap<\n HTMLElement,\n {\n declaredMin: number;\n declaredMax: number;\n min: number;\n max: number;\n size: number;\n inset: boolean;\n }\n >();\n\n function regionState(handle: Element): RegionState | undefined {\n const region = handle.closest<HTMLElement>(REGION_SELECTOR);\n // A handle belongs only to the region it is a direct child of: a region of\n // another kind that merely contains it (a Workbench panel around a nested\n // ResizableRegion, or the reverse) is not the handle's region.\n if (\n !(region instanceof HTMLElement) ||\n !(handle instanceof HTMLElement) ||\n handle.parentElement !== region\n )\n return undefined;\n const id = region.dataset.regionId;\n const axis = region.dataset.axis;\n const edge = region.dataset.edge;\n const valueMin = Number(handle.getAttribute('aria-valuemin'));\n const valueMax = Number(handle.getAttribute('aria-valuemax'));\n const remembered = announced.get(handle);\n // A squeezed region reports a lowered minimum; the rendered one stands\n // until a re-render writes a different value.\n const min =\n remembered?.min === valueMin ? remembered.declaredMin : valueMin;\n const declaredMax =\n remembered?.max === valueMax ? remembered.declaredMax : valueMax;\n const size = renderedSize(region, handle);\n if (\n !id ||\n region.dataset.collapsed === 'true' ||\n region.dataset.presentation !== 'inline' ||\n (axis !== 'horizontal' && axis !== 'vertical') ||\n (edge !== 'start' && edge !== 'end') ||\n !Number.isFinite(min) ||\n !Number.isFinite(declaredMax) ||\n !Number.isFinite(size)\n )\n return undefined;\n // The shown size is read before the probe, from the layout already in\n // place, so the probe stays the one forced layout.\n const shown = shownSize(region, axis, size);\n const visible = visibleMax(region, axis, min, declaredMax);\n // A composition bound never takes a region below its own minimum.\n const max = limit\n ? Math.max(min, Math.min(visible, limit(region, { min, max: visible })))\n : visible;\n return {\n region,\n handle,\n id,\n axis,\n edge,\n min,\n declaredMax,\n max,\n size: clampRegionSize(size, min, max),\n squeezed: shown !== undefined && shown < min ? shown : undefined,\n };\n }\n\n /**\n * Report what is shown: the visible maximum and the shown size, or the\n * squeezed size a container holds the region at. Nothing is committed — the\n * app's size stays its own until the user resizes.\n */\n function announce(state: RegionState) {\n const inset = handleInset(state, state.size);\n const { min, max, now } = reported(state);\n announced.set(state.handle, {\n declaredMin: state.min,\n declaredMax: state.declaredMax,\n min,\n max,\n size: now,\n inset,\n });\n // Unchanged values are not rewritten, so the observer below never sees\n // its own report as a re-render.\n setAttributeIfChanged(state.handle, 'aria-valuemin', String(min));\n setAttributeIfChanged(state.handle, 'aria-valuemax', String(max));\n setAttributeIfChanged(state.handle, 'aria-valuenow', String(now));\n setInset(state.region, inset);\n }\n\n const handleOf = (region: HTMLElement) =>\n region.querySelector<HTMLElement>(`:scope > ${HANDLE_SELECTOR}`);\n\n /** Re-measure a region at rest and report what it shows. */\n function sync(region: HTMLElement) {\n if (!region.isConnected || region.dataset.resizing === 'true') return;\n const handle = handleOf(region);\n const state = handle ? regionState(handle) : undefined;\n if (state) announce(state);\n }\n\n /** Whether the region still shows the state this wiring last reported. */\n function reportedByUs(region: HTMLElement) {\n const handle = handleOf(region);\n const remembered = handle ? announced.get(handle) : undefined;\n return (\n remembered !== undefined &&\n handle?.getAttribute('aria-valuemin') === String(remembered.min) &&\n handle.getAttribute('aria-valuemax') === String(remembered.max) &&\n handle.getAttribute('aria-valuenow') === String(remembered.size) &&\n region.hasAttribute(INSET_ATTRIBUTE) === remembered.inset\n );\n }\n\n // Keep the reported values current without a focus or an interaction.\n // A ResizeObserver on every region and its parent re-measures when the\n // space changes (a narrowed viewport, a parent that grows back); a\n // MutationObserver catches a re-render that writes the rendered props back\n // over the reported values, and regions a re-render adds or removes. Both\n // measure once per affected region per batch, after layout or in a\n // microtask, never per frame.\n const observed = new Set<Element>();\n const resizeObserver =\n typeof ResizeObserver === 'function'\n ? new ResizeObserver((entries) => {\n const regions = new Set<HTMLElement>();\n for (const { target } of entries) {\n if (target.matches(REGION_SELECTOR))\n regions.add(target as HTMLElement);\n for (const child of target.children)\n if (child.matches(REGION_SELECTOR))\n regions.add(child as HTMLElement);\n }\n for (const region of regions) sync(region);\n })\n : undefined;\n\n /** Observe every region below root and its parent; release the rest. */\n function observeRegions() {\n if (!resizeObserver) return;\n const wanted = new Set<Element>();\n for (const region of root.querySelectorAll(REGION_SELECTOR)) {\n wanted.add(region);\n // A region found below root always has a parent element.\n wanted.add(region.parentElement as Element);\n }\n for (const element of observed)\n if (!wanted.has(element)) {\n resizeObserver.unobserve(element);\n observed.delete(element);\n }\n for (const element of wanted)\n if (!observed.has(element)) {\n resizeObserver.observe(element);\n observed.add(element);\n }\n }\n\n const mutationObserver = new MutationObserver((records) => {\n const regions = new Set<HTMLElement>();\n let structural = false;\n for (const record of records) {\n if (record.type === 'childList') {\n structural = true;\n continue;\n }\n const target = record.target as HTMLElement;\n const region = target.matches(REGION_SELECTOR)\n ? target\n : target.matches(HANDLE_SELECTOR)\n ? target.parentElement?.matches(REGION_SELECTOR)\n ? target.parentElement\n : null\n : null;\n if (region && !reportedByUs(region)) regions.add(region);\n }\n // Newly observed regions are measured by the ResizeObserver's first\n // notification.\n if (structural) observeRegions();\n for (const region of regions) sync(region);\n });\n mutationObserver.observe(root, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: REPORTED_ATTRIBUTES,\n });\n observeRegions();\n\n /**\n * Commit a size, then re-announce: an app that re-renders the committed\n * size synchronously writes the rendered `max` prop back to aria-valuemax.\n */\n function commit(state: RegionState, change: ResizeCommit) {\n onCommit(change);\n const settled = state.handle.isConnected\n ? regionState(state.handle)\n : undefined;\n if (settled) announce(settled);\n }\n\n const stopFocus = delegate(\n root,\n 'focusin',\n HANDLE_SELECTOR,\n (_event, handle) => {\n const state = regionState(handle);\n if (state) announce(state);\n },\n );\n\n const stopKeydown = delegate(\n root,\n 'keydown',\n HANDLE_SELECTOR,\n (event, handle) => {\n const keyboardEvent = event as KeyboardEvent;\n const state = regionState(handle);\n if (!state) return;\n announce(state);\n let next: number | undefined;\n if (keyboardEvent.key === 'Home') next = state.min;\n if (keyboardEvent.key === 'End') next = state.max;\n const increment = keyboardEvent.shiftKey ? largeStep : step;\n if (state.axis === 'horizontal' && keyboardEvent.key === 'ArrowLeft')\n next = resizeRegionFromPointer(state.size, -increment, state.edge);\n if (state.axis === 'horizontal' && keyboardEvent.key === 'ArrowRight')\n next = resizeRegionFromPointer(state.size, increment, state.edge);\n if (state.axis === 'vertical' && keyboardEvent.key === 'ArrowUp')\n next = resizeRegionFromPointer(state.size, -increment, state.edge);\n if (state.axis === 'vertical' && keyboardEvent.key === 'ArrowDown')\n next = resizeRegionFromPointer(state.size, increment, state.edge);\n if (next === undefined) return;\n keyboardEvent.preventDefault();\n if (pinned(state)) return;\n const size = clampRegionSize(next, state.min, state.max);\n applySize(state, size);\n commit(state, { id: state.id, size, source: 'keyboard' });\n },\n );\n\n const stopPointerDown = delegate(\n root,\n 'pointerdown',\n HANDLE_SELECTOR,\n (event, handle) => {\n const pointerEvent = event as PointerEvent;\n if (pointerEvent.button !== 0) return;\n const state = regionState(handle);\n if (!state) return;\n pointerEvent.preventDefault();\n announce(state);\n if (pinned(state)) return;\n state.handle.setPointerCapture?.(pointerEvent.pointerId);\n const startCoordinate =\n state.axis === 'horizontal'\n ? pointerEvent.clientX\n : pointerEvent.clientY;\n let next = state.size;\n const move = (moveEvent: PointerEvent) => {\n const coordinate =\n state.axis === 'horizontal' ? moveEvent.clientX : moveEvent.clientY;\n next = clampRegionSize(\n resizeRegionFromPointer(\n state.size,\n coordinate - startCoordinate,\n state.edge,\n ),\n state.min,\n state.max,\n );\n applySize(state, next);\n onPreview?.({ id: state.id, size: next, source: 'pointer' });\n };\n const finish = () => {\n root.removeEventListener('pointermove', move);\n root.removeEventListener('pointerup', finish);\n root.removeEventListener('pointercancel', finish);\n stopPointer = undefined;\n delete state.region.dataset.resizing;\n commit(state, { id: state.id, size: next, source: 'pointer' });\n };\n stopPointer?.();\n stopPointer = finish;\n state.region.dataset.resizing = 'true';\n root.addEventListener('pointermove', move);\n root.addEventListener('pointerup', finish, { once: true });\n root.addEventListener('pointercancel', finish, { once: true });\n },\n );\n\n return () => {\n mutationObserver.disconnect();\n resizeObserver?.disconnect();\n observed.clear();\n stopPointer?.();\n stopFocus();\n stopKeydown();\n stopPointerDown();\n };\n}\n"]}
@@ -0,0 +1,175 @@
1
+ import { ToolbarText } from './chunk-HGV7J4T6.js';
2
+ import { paneConfigProps } from './chunk-UMKV7YVQ.js';
3
+ import { ToolbarControlGroup } from './chunk-QIG4IGUP.js';
4
+ import { Toolbar } from './chunk-CMLPFIC5.js';
5
+ import { List } from './chunk-HZPHCSCS.js';
6
+ import { Pane } from './chunk-INI4WDWC.js';
7
+ import { LucideIcon } from './chunk-LOSRXZAH.js';
8
+ import { ChevronLeft } from 'lucide';
9
+ import { jsx, jsxs, Fragment } from 'kerfjs/jsx-runtime';
10
+
11
+ var DEFAULT_SAFE_AREA_EDGES = [
12
+ "block-start",
13
+ "inline-start",
14
+ "inline-end"
15
+ ];
16
+ var DEFAULT_BOTTOM_SAFE_AREA_EDGES = [
17
+ "block-end",
18
+ "inline-start",
19
+ "inline-end"
20
+ ];
21
+ function chromeList(content, config) {
22
+ return /* @__PURE__ */ jsx(
23
+ List,
24
+ {
25
+ dividerSides: config?.dividerSides,
26
+ gap: config?.gap,
27
+ hAlign: config?.hAlign,
28
+ vAlign: config?.vAlign,
29
+ textInsets: config?.textInsets,
30
+ controlInsets: config?.controlInsets,
31
+ children: content
32
+ }
33
+ );
34
+ }
35
+ function NavStack({
36
+ id,
37
+ label,
38
+ views,
39
+ backLabel = "Back",
40
+ backIcon,
41
+ backText,
42
+ toolbarConfig = {},
43
+ panelToggle,
44
+ hideToolbar = false,
45
+ bottomToolbar,
46
+ separator = "auto",
47
+ chromeDividers = "scroll",
48
+ chromePresentation = "docked",
49
+ bottomToolbarPresentation = "docked",
50
+ className = "",
51
+ slot
52
+ }) {
53
+ const topIndex = views.length - 1;
54
+ const top = views[topIndex];
55
+ const topToolbar = top?.toolbar;
56
+ const bottom = top?.bottomToolbar ?? bottomToolbar;
57
+ const canPop = views.length > 1;
58
+ const topDensity = topToolbar?.density ?? toolbarConfig.density;
59
+ const centerTitle = canPop && topToolbar?.center === void 0;
60
+ const title = /* @__PURE__ */ jsx(
61
+ ToolbarText,
62
+ {
63
+ text: topToolbar?.title ?? "",
64
+ size: topToolbar?.titleSize ?? toolbarConfig.titleSize ?? (canPop ? "large" : "xlarge"),
65
+ headingLevel: topToolbar?.headingLevel ?? toolbarConfig.headingLevel,
66
+ fill: !centerTitle
67
+ }
68
+ );
69
+ return /* @__PURE__ */ jsxs(
70
+ "section",
71
+ {
72
+ class: `kui-nav-stack ${className}`.trim(),
73
+ id,
74
+ "data-component": "nav-stack",
75
+ "data-nav-stack-id": id,
76
+ "data-depth": String(views.length),
77
+ "data-separator": separator,
78
+ "data-chrome-dividers": chromeDividers === "always" || chromeDividers === "none" ? chromeDividers : void 0,
79
+ "data-chrome-presentation": chromePresentation === "overlay" && !hideToolbar ? "overlay" : void 0,
80
+ "data-bottom-toolbar-presentation": bottomToolbarPresentation === "overlay" ? "overlay" : void 0,
81
+ "aria-label": label,
82
+ slot,
83
+ children: [
84
+ !hideToolbar && /* @__PURE__ */ jsx("div", { class: "kui-nav-stack__chrome", "data-nav-stack-chrome": true, children: /* @__PURE__ */ jsx(
85
+ Toolbar,
86
+ {
87
+ label: topToolbar?.label ?? toolbarConfig.label,
88
+ density: topDensity,
89
+ dividerSides: topToolbar?.dividerSides ?? toolbarConfig.dividerSides,
90
+ centerAlign: centerTitle ? "balanced" : topToolbar?.centerAlign ?? toolbarConfig.centerAlign,
91
+ responsive: topToolbar?.responsive ?? toolbarConfig.responsive,
92
+ responsiveAt: topToolbar?.responsiveAt ?? toolbarConfig.responsiveAt,
93
+ safeAreaEdges: topToolbar?.safeAreaEdges ?? toolbarConfig.safeAreaEdges ?? DEFAULT_SAFE_AREA_EDGES,
94
+ leading: /* @__PURE__ */ jsxs(Fragment, { children: [
95
+ canPop && /* @__PURE__ */ jsx(
96
+ ToolbarControlGroup,
97
+ {
98
+ content: backText ? "mixed" : "icon",
99
+ size: topDensity === "compact" ? "compact" : "default",
100
+ single: true,
101
+ children: /* @__PURE__ */ jsxs(
102
+ "button",
103
+ {
104
+ type: "button",
105
+ class: "kui-nav-stack__back",
106
+ "data-nav-back": true,
107
+ "aria-label": backText ? void 0 : backLabel,
108
+ children: [
109
+ backIcon ?? /* @__PURE__ */ jsx(
110
+ LucideIcon,
111
+ {
112
+ icon: ChevronLeft,
113
+ name: "chevron-left",
114
+ className: "kui-nav-stack__back-icon"
115
+ }
116
+ ),
117
+ backText ? /* @__PURE__ */ jsx("span", { children: backText }) : null
118
+ ]
119
+ }
120
+ )
121
+ }
122
+ ),
123
+ topToolbar?.leading,
124
+ centerTitle ? null : title
125
+ ] }),
126
+ center: centerTitle ? title : topToolbar?.center,
127
+ trailing: /* @__PURE__ */ jsxs(Fragment, { children: [
128
+ topToolbar?.trailing,
129
+ panelToggle
130
+ ] })
131
+ }
132
+ ) }),
133
+ /* @__PURE__ */ jsx("div", { class: "kui-nav-stack__viewport", "data-nav-stack-viewport": true, children: views.map((view, index) => /* @__PURE__ */ jsx(
134
+ "article",
135
+ {
136
+ class: "kui-nav-stack__view",
137
+ "data-key": view.key,
138
+ "data-nav-key": view.key,
139
+ "data-nav-active": String(index === topIndex),
140
+ "aria-hidden": String(index !== topIndex),
141
+ children: view.pane || view.header !== void 0 || view.footer !== void 0 ? /* @__PURE__ */ jsx(
142
+ Pane,
143
+ {
144
+ ...paneConfigProps(view.pane),
145
+ header: view.header === void 0 ? void 0 : /* @__PURE__ */ jsx("div", { "data-nav-stack-header": true, children: chromeList(view.header, view.headerList) }),
146
+ footer: view.footer === void 0 ? void 0 : /* @__PURE__ */ jsx("div", { "data-nav-stack-footer": true, children: chromeList(view.footer, view.footerList) }),
147
+ children: view.content
148
+ }
149
+ ) : view.content
150
+ }
151
+ )) }),
152
+ bottom && /* @__PURE__ */ jsx("footer", { class: "kui-nav-stack__bottom", "data-nav-stack-bottom": true, children: /* @__PURE__ */ jsx(
153
+ Toolbar,
154
+ {
155
+ position: "footer",
156
+ label: bottom.label,
157
+ density: bottom.density,
158
+ dividerSides: bottom.dividerSides,
159
+ centerAlign: bottom.centerAlign,
160
+ responsive: bottom.responsive,
161
+ responsiveAt: bottom.responsiveAt,
162
+ safeAreaEdges: bottom.safeAreaEdges ?? DEFAULT_BOTTOM_SAFE_AREA_EDGES,
163
+ leading: bottom.leading,
164
+ center: bottom.center,
165
+ trailing: bottom.trailing
166
+ }
167
+ ) })
168
+ ]
169
+ }
170
+ );
171
+ }
172
+
173
+ export { NavStack };
174
+
175
+ //# sourceMappingURL=chunk-CMETHPKR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/navigation/nav-stack/nav-stack.tsx"],"names":[],"mappings":"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","file":"chunk-CMETHPKR.js","sourcesContent":["import { ChevronLeft } from 'lucide';\n\nimport type { KerfUiContent } from '../../../shared/content/semantic-content.js';\nimport type { NavPane } from '../../../shared/panels/nav-pane.js';\nimport type { PanelBottomToolbar } from '../../../shared/panels/panel-toolbar.js';\nimport { Toolbar, type ToolbarConfig } from '../../actions/toolbar/toolbar.js';\nimport { ToolbarControlGroup } from '../../actions/toolbar-control-group/toolbar-control-group.js';\nimport {\n type HeadingLevel,\n ToolbarText,\n type ToolbarTextSize,\n} from '../../actions/toolbar-text/toolbar-text.js';\nimport { List, type ListConfig } from '../../collections/list/list.js';\nimport { paneConfigProps } from '../../layout/pane/internal/pane-config-props.js';\nimport { Pane } from '../../layout/pane/pane.js';\nimport { LucideIcon } from '../../media/lucide-icon/lucide-icon.js';\n\n/**\n * One entry in a {@link NavStack}. The app owns the stack as an array (usually a\n * signal); `NavStack` renders it and `wireNavStack` animates the transitions.\n */\nexport interface NavStackView extends NavPane<\n NavStackViewToolbar,\n PanelBottomToolbar\n> {\n /** Stable identity for keyed reconcile and transition direction. */\n key: string;\n}\n\n/** Per-view top toolbar. The stack supplies its back control before `leading`. */\nexport interface NavStackViewToolbar extends NavStackToolbarConfig {\n title?: string;\n leading?: KerfUiContent;\n center?: KerfUiContent;\n trailing?: KerfUiContent;\n}\n\n/** A view's structured bottom toolbar; it cross-fades on navigation. */\nexport type NavStackViewBottomToolbar = PanelBottomToolbar;\n\n/**\n * The top toolbar's configuration. Its `ToolbarConfig` forwards to the real\n * `Toolbar` the stack renders; by default that toolbar draws no divider and\n * claims the top and side safe-area edges the stack still touches.\n */\nexport interface NavStackToolbarConfig extends ToolbarConfig {\n /** Accessible name of the top toolbar (default: none). */\n label?: string;\n /**\n * Size of the view title's `ToolbarText`. Default `xlarge` at the root,\n * where the title is the page heading, and `large` once a back control\n * shares the bar.\n */\n titleSize?: ToolbarTextSize;\n /** Expose the view title as a heading at this level (default: a plain span). */\n headingLevel?: HeadingLevel;\n}\n\n/**\n * How a {@link NavStack}'s top chrome relates to the active view: `docked`\n * above it, or `overlay` laid over its top edge on the translucent chrome\n * material, so the view's content scrolls visibly beneath it.\n */\nexport type NavStackChromePresentation = 'docked' | 'overlay';\n\n/**\n * How a {@link NavStack}'s bottom toolbar relates to the active view:\n * `docked` below it, or `overlay` laid over its bottom edge on the\n * translucent chrome material, so the view's content scrolls visibly beneath\n * it.\n */\nexport type NavStackBottomToolbarPresentation = 'docked' | 'overlay';\n\nexport interface NavStackProps {\n id: string;\n /** Accessible name for the stack region. */\n label: string;\n /** The stack, root first; the last entry is the active top view. */\n views: NavStackView[];\n /** Accessible label for the icon-only back control (default \"Back\"). */\n backLabel?: string;\n /** The back control's icon (default a chevron-left `LucideIcon`). */\n backIcon?: KerfUiContent;\n /**\n * Visible text beside the back icon, such as the previous view's title\n * (default: icon only). When set, the text names the control and\n * `backLabel` is not used.\n */\n backText?: string;\n /** The top toolbar's configuration, forwarded to its `Toolbar`. */\n toolbarConfig?: NavStackToolbarConfig;\n /** Persistent last group in every view's top toolbar, supplied by a hosting panel. */\n panelToggle?: KerfUiContent;\n /** Hide the top toolbar entirely (rare — a fully custom-chrome view). */\n hideToolbar?: boolean;\n /** Optional persistent bottom toolbar used when the active view does not provide one. */\n bottomToolbar?: NavStackViewBottomToolbar;\n /**\n * Stack chrome separator. `auto` (default) draws both available edges\n * against a sunken active Pane and otherwise follows `chromeDividers`;\n * `hidden` suppresses the stack-owned edges.\n */\n separator?: 'auto' | 'hidden';\n /**\n * The line under the top chrome and over the bottom toolbar, where they\n * meet the active view. `scroll` (default) shows the chrome's line only\n * while the view's content is scrolled beneath it, and the bottom\n * toolbar's only while more content lies below — never when the content\n * fits — once `wireScrollDividers` (`@kerfjs/ui/wire-scroll-dividers`) is\n * wired above the stack; unwired, neither shows. `always` shows both\n * without the wiring; `none` neither, even when wired. The line is drawn\n * inside the chrome, so no state moves the chrome or the content. A\n * A sunken active Pane still draws the separator unless\n * `separator=\"hidden\"`. A `toolbarConfig.dividerSides` edge is the Toolbar's\n * own and is unaffected.\n */\n chromeDividers?: 'scroll' | 'always' | 'none';\n /**\n * `docked` (default) gives the top chrome its own band above the active\n * view. `overlay` lays the chrome over the view's top edge on the\n * translucent chrome material (`--kui-chrome-material`, opaque under\n * `prefers-reduced-transparency`, `prefers-contrast: more`, forced colors,\n * or without `backdrop-filter`), so content scrolls visibly beneath it, as\n * an iOS navigation bar does. `wireNavStack` measures the live chrome and\n * hands its height (top safe area included) to the viewport as the\n * block-start `--kui-edge-inset-*` context, so every view clears it with no\n * prop: a plain view, a sole `Pane`'s content (or header), and a nested\n * layout all pad and `scroll-padding` by it, so the first item, and anything\n * focused or scrolled into view, rests clear of the bar. Until then, and\n * with `hideToolbar`, the chrome stays docked. An untoned `ToolbarText` in\n * the chrome lifts its title and description to AA over the content passing\n * beneath it; keep any other quiet copy in the view.\n */\n chromePresentation?: NavStackChromePresentation;\n /**\n * `docked` (default) gives the bottom toolbar its own band below the\n * active view. `overlay` lays it over the view's bottom edge on the\n * translucent chrome material (opaque under the same preferences as\n * `chromePresentation`), so content scrolls visibly beneath it, as under\n * an iOS toolbar. `wireNavStack` measures the live bottom toolbar (never a\n * cross-fading copy) and hands its height (bottom safe area included) to\n * the viewport as the block-end `--kui-edge-inset-*` context, so a plain\n * view, a sole `Pane`'s content (or footer), and a nested layout rest their\n * last item, and anything focused or scrolled into view, clear of it. Until\n * then, and while no bottom toolbar is shown, it stays docked. Independent\n * of `chromePresentation`, which governs only the top chrome. An untoned\n * `ToolbarText` in the toolbar lifts to AA over the content beneath it.\n */\n bottomToolbarPresentation?: NavStackBottomToolbarPresentation;\n className?: string;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\nconst DEFAULT_SAFE_AREA_EDGES = [\n 'block-start',\n 'inline-start',\n 'inline-end',\n] as const;\n\nconst DEFAULT_BOTTOM_SAFE_AREA_EDGES = [\n 'block-end',\n 'inline-start',\n 'inline-end',\n] as const;\n\nfunction chromeList(content: KerfUiContent, config?: ListConfig) {\n return (\n <List\n dividerSides={config?.dividerSides}\n gap={config?.gap}\n hAlign={config?.hAlign}\n vAlign={config?.vAlign}\n textInsets={config?.textInsets}\n controlInsets={config?.controlInsets}\n >\n {content}\n </List>\n );\n}\n\n/**\n * A navigation stack (iOS-style push/pop). Renders every entry stacked, the last\n * one active; `@kerfjs/ui/wire-nav-stack`'s `wireNavStack` slides the content and\n * cross-fades the chrome across a change. Its top chrome is a real `Toolbar`: the\n * back control and title lead, the active view's `toolbar` fills the zones,\n * and `toolbarConfig` supplies defaults. A single-pane\n * layout is a `NavStack` with one entry. See `docs/23-app-layouts.md` §3.1.\n */\nexport function NavStack({\n id,\n label,\n views,\n backLabel = 'Back',\n backIcon,\n backText,\n toolbarConfig = {},\n panelToggle,\n hideToolbar = false,\n bottomToolbar,\n separator = 'auto',\n chromeDividers = 'scroll',\n chromePresentation = 'docked',\n bottomToolbarPresentation = 'docked',\n className = '',\n slot,\n}: NavStackProps) {\n const topIndex = views.length - 1;\n const top = views[topIndex];\n const topToolbar = top?.toolbar;\n const bottom = top?.bottomToolbar ?? bottomToolbar;\n const canPop = views.length > 1;\n const topDensity = topToolbar?.density ?? toolbarConfig.density;\n // With a back control, the title centers on the bar (iOS-style) unless the\n // view owns the center zone; at the root it leads and fills, left-aligned.\n const centerTitle = canPop && topToolbar?.center === undefined;\n const title = (\n <ToolbarText\n text={topToolbar?.title ?? ''}\n size={\n topToolbar?.titleSize ??\n toolbarConfig.titleSize ??\n (canPop ? 'large' : 'xlarge')\n }\n headingLevel={topToolbar?.headingLevel ?? toolbarConfig.headingLevel}\n fill={!centerTitle}\n />\n );\n return (\n <section\n class={`kui-nav-stack ${className}`.trim()}\n id={id}\n data-component=\"nav-stack\"\n data-nav-stack-id={id}\n data-depth={String(views.length)}\n data-separator={separator}\n data-chrome-dividers={\n chromeDividers === 'always' || chromeDividers === 'none'\n ? chromeDividers\n : undefined\n }\n data-chrome-presentation={\n chromePresentation === 'overlay' && !hideToolbar ? 'overlay' : undefined\n }\n data-bottom-toolbar-presentation={\n bottomToolbarPresentation === 'overlay' ? 'overlay' : undefined\n }\n aria-label={label}\n slot={slot}\n >\n {!hideToolbar && (\n <div class=\"kui-nav-stack__chrome\" data-nav-stack-chrome>\n <Toolbar\n label={topToolbar?.label ?? toolbarConfig.label}\n density={topDensity}\n dividerSides={\n topToolbar?.dividerSides ?? toolbarConfig.dividerSides\n }\n centerAlign={\n centerTitle\n ? 'balanced'\n : (topToolbar?.centerAlign ?? toolbarConfig.centerAlign)\n }\n responsive={topToolbar?.responsive ?? toolbarConfig.responsive}\n responsiveAt={\n topToolbar?.responsiveAt ?? toolbarConfig.responsiveAt\n }\n safeAreaEdges={\n topToolbar?.safeAreaEdges ??\n toolbarConfig.safeAreaEdges ??\n DEFAULT_SAFE_AREA_EDGES\n }\n leading={\n <>\n {canPop && (\n <ToolbarControlGroup\n content={backText ? 'mixed' : 'icon'}\n size={topDensity === 'compact' ? 'compact' : 'default'}\n single\n >\n <button\n type=\"button\"\n class=\"kui-nav-stack__back\"\n data-nav-back\n aria-label={backText ? undefined : backLabel}\n >\n {backIcon ?? (\n <LucideIcon\n icon={ChevronLeft}\n name=\"chevron-left\"\n className=\"kui-nav-stack__back-icon\"\n />\n )}\n {backText ? <span>{backText}</span> : null}\n </button>\n </ToolbarControlGroup>\n )}\n {topToolbar?.leading}\n {centerTitle ? null : title}\n </>\n }\n center={centerTitle ? title : topToolbar?.center}\n trailing={\n <>\n {topToolbar?.trailing}\n {panelToggle}\n </>\n }\n />\n </div>\n )}\n <div class=\"kui-nav-stack__viewport\" data-nav-stack-viewport>\n {views.map((view, index) => (\n <article\n class=\"kui-nav-stack__view\"\n data-key={view.key}\n data-nav-key={view.key}\n data-nav-active={String(index === topIndex)}\n aria-hidden={String(index !== topIndex)}\n >\n {view.pane ||\n view.header !== undefined ||\n view.footer !== undefined ? (\n <Pane\n {...paneConfigProps(view.pane)}\n header={\n view.header === undefined ? undefined : (\n <div data-nav-stack-header>\n {chromeList(view.header, view.headerList)}\n </div>\n )\n }\n footer={\n view.footer === undefined ? undefined : (\n <div data-nav-stack-footer>\n {chromeList(view.footer, view.footerList)}\n </div>\n )\n }\n >\n {view.content}\n </Pane>\n ) : (\n view.content\n )}\n </article>\n ))}\n </div>\n {bottom && (\n <footer class=\"kui-nav-stack__bottom\" data-nav-stack-bottom>\n <Toolbar\n position=\"footer\"\n label={bottom.label}\n density={bottom.density}\n dividerSides={bottom.dividerSides}\n centerAlign={bottom.centerAlign}\n responsive={bottom.responsive}\n responsiveAt={bottom.responsiveAt}\n safeAreaEdges={\n bottom.safeAreaEdges ?? DEFAULT_BOTTOM_SAFE_AREA_EDGES\n }\n leading={bottom.leading}\n center={bottom.center}\n trailing={bottom.trailing}\n />\n </footer>\n )}\n </section>\n );\n}\n"]}
@@ -0,0 +1,46 @@
1
+ import { jsx, jsxs, Fragment } from 'kerfjs/jsx-runtime';
2
+
3
+ // src/components/actions/toolbar/toolbar.tsx
4
+ var claim = (edges, side) => edges?.includes(side) ? "true" : void 0;
5
+ function Toolbar({
6
+ leading,
7
+ center,
8
+ trailing,
9
+ label,
10
+ position = "header",
11
+ density = "default",
12
+ dividerSides = "",
13
+ centerAlign = "center",
14
+ responsive = "none",
15
+ responsiveAt = "narrow",
16
+ safeAreaEdges,
17
+ className = "",
18
+ slot
19
+ }) {
20
+ const attributes = {
21
+ class: `kui-toolbar ${className}`.trim(),
22
+ "data-component": "toolbar",
23
+ "data-density": density === "compact" ? "compact" : void 0,
24
+ "divider-sides": dividerSides || void 0,
25
+ "data-has-center": String(Boolean(center)),
26
+ "data-center-align": centerAlign,
27
+ "data-responsive": responsive,
28
+ "data-responsive-at": responsiveAt,
29
+ "data-safe-area-block-start": claim(safeAreaEdges, "block-start"),
30
+ "data-safe-area-block-end": claim(safeAreaEdges, "block-end"),
31
+ "data-safe-area-inline-start": claim(safeAreaEdges, "inline-start"),
32
+ "data-safe-area-inline-end": claim(safeAreaEdges, "inline-end"),
33
+ "aria-label": label,
34
+ slot
35
+ };
36
+ const zones = /* @__PURE__ */ jsxs(Fragment, { children: [
37
+ /* @__PURE__ */ jsx("div", { class: "kui-toolbar__leading", children: leading }),
38
+ /* @__PURE__ */ jsx("div", { class: "kui-toolbar__center", children: center }),
39
+ /* @__PURE__ */ jsx("div", { class: "kui-toolbar__trailing", children: trailing })
40
+ ] });
41
+ return position === "footer" ? /* @__PURE__ */ jsx("footer", { ...attributes, children: zones }) : /* @__PURE__ */ jsx("header", { ...attributes, children: zones });
42
+ }
43
+
44
+ export { Toolbar };
45
+
46
+ //# sourceMappingURL=chunk-CMLPFIC5.js.map