@kerfjs/ui 4.5.0-beta.1 → 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 (980) hide show
  1. package/README.md +461 -116
  2. package/ai/application-ui-diagnostic-ids-v1.json +23 -1
  3. package/ai/application-ui-profile-sync.cjs +21 -2
  4. package/ai/application-ui-profile.d.ts +4 -0
  5. package/ai/application-ui-profile.defaults.json +63 -8
  6. package/ai/application-ui-profile.mjs +28 -1
  7. package/ai/application-ui-profile.schema.json +10 -0
  8. package/ai/catalog-authoring.json +13 -4
  9. package/ai/catalog-authoring.schema.json +52 -8
  10. package/ai/compile-time-contracts-v1.json +63 -16
  11. package/ai/compile-time-contracts-v1.schema.json +4 -1
  12. package/ai/component-catalog-extension.schema.json +25 -0
  13. package/ai/component-catalog.json +5585 -1175
  14. package/ai/component-catalog.schema.json +78 -1
  15. package/ai/component-class-owners.cjs +83 -0
  16. package/ai/component-composition-extension.d.ts +7 -0
  17. package/ai/component-composition-extension.schema.json +7 -0
  18. package/ai/{component-catalog-v2-overrides.json → component-composition-rules.json} +281 -49
  19. package/ai/component-composition.d.ts +132 -0
  20. package/ai/component-composition.json +8729 -0
  21. package/ai/component-composition.schema.json +412 -0
  22. package/ai/components/README.md +185 -0
  23. package/ai/components/anchored-surface.md +99 -0
  24. package/ai/components/application-tabs.md +65 -0
  25. package/ai/components/badge.md +76 -0
  26. package/ai/components/chip.md +76 -0
  27. package/ai/components/choice-chips.md +87 -0
  28. package/ai/components/collapsible-panel.md +103 -0
  29. package/ai/components/column-track.md +78 -0
  30. package/ai/components/combobox.md +88 -0
  31. package/ai/components/composer.md +83 -0
  32. package/ai/components/content-item.md +98 -0
  33. package/ai/components/content-swap.md +78 -0
  34. package/ai/components/corner-status.md +88 -0
  35. package/ai/components/disclosure-arrow.md +77 -0
  36. package/ai/components/document-baseline.md +77 -0
  37. package/ai/components/edge-activity-indicator.md +81 -0
  38. package/ai/components/empty-state.md +80 -0
  39. package/ai/components/feedback.md +71 -0
  40. package/ai/components/file-picker.md +88 -0
  41. package/ai/components/floating-toolbar.md +82 -0
  42. package/ai/components/foundation.md +65 -0
  43. package/ai/components/framed-list.md +80 -0
  44. package/ai/components/grid.md +101 -0
  45. package/ai/components/headers.md +63 -0
  46. package/ai/components/icon-button.md +82 -0
  47. package/ai/components/icon-toggle-button.md +80 -0
  48. package/ai/components/layout.md +75 -0
  49. package/ai/components/list-action-row.md +108 -0
  50. package/ai/components/list-header.md +91 -0
  51. package/ai/components/list-inset-control.md +74 -0
  52. package/ai/components/list-inset-text.md +72 -0
  53. package/ai/components/list-item.md +108 -0
  54. package/ai/components/list.md +125 -0
  55. package/ai/components/loading-spinner.md +73 -0
  56. package/ai/components/lucide-icon.md +97 -0
  57. package/ai/components/nav-stack.md +115 -0
  58. package/ai/components/pane.md +115 -0
  59. package/ai/components/popup-menu.md +171 -0
  60. package/ai/components/recipe-app-shell.md +57 -0
  61. package/ai/components/recipe-collapsible-sidebar.md +57 -0
  62. package/ai/components/recipe-compact-toolbar.md +57 -0
  63. package/ai/components/recipe-composer-form.md +57 -0
  64. package/ai/components/recipe-list-detail-dialog.md +57 -0
  65. package/ai/components/recipe-list-workspace-states.md +57 -0
  66. package/ai/components/recipe-loading-inspector.md +57 -0
  67. package/ai/components/recipe-navigation-sidebar.md +57 -0
  68. package/ai/components/recipe-navigation-stack.md +57 -0
  69. package/ai/components/recipe-workspace-header.md +57 -0
  70. package/ai/components/resize.md +106 -0
  71. package/ai/components/row.md +96 -0
  72. package/ai/components/segmented-control.md +82 -0
  73. package/ai/components/select.md +116 -0
  74. package/ai/components/skeleton.md +84 -0
  75. package/ai/components/spacer.md +86 -0
  76. package/ai/components/split-button.md +80 -0
  77. package/ai/components/split-view.md +105 -0
  78. package/ai/components/state-banner.md +96 -0
  79. package/ai/components/summary-row.md +85 -0
  80. package/ai/components/sunken-panel.md +79 -0
  81. package/ai/components/surface-scaffold.md +105 -0
  82. package/ai/components/tab-bar.md +114 -0
  83. package/ai/components/tab-navigator.md +100 -0
  84. package/ai/components/tabs.md +95 -0
  85. package/ai/components/text.md +90 -0
  86. package/ai/components/token-search-field.md +107 -0
  87. package/ai/components/toolbar-control-group.md +125 -0
  88. package/ai/components/toolbar-text.md +100 -0
  89. package/ai/components/toolbar.md +103 -0
  90. package/ai/components/value-table.md +80 -0
  91. package/ai/components/wa-accordion-item.md +55 -0
  92. package/ai/components/wa-accordion.md +65 -0
  93. package/ai/components/wa-animated-image.md +55 -0
  94. package/ai/components/wa-animation.md +55 -0
  95. package/ai/components/wa-avatar.md +55 -0
  96. package/ai/components/wa-badge.md +55 -0
  97. package/ai/components/wa-breadcrumb-item.md +53 -0
  98. package/ai/components/wa-breadcrumb.md +55 -0
  99. package/ai/components/wa-button-group.md +60 -0
  100. package/ai/components/wa-button.md +59 -0
  101. package/ai/components/wa-callout.md +58 -0
  102. package/ai/components/wa-card.md +59 -0
  103. package/ai/components/wa-carousel-item.md +53 -0
  104. package/ai/components/wa-carousel.md +55 -0
  105. package/ai/components/wa-checkbox-group.md +55 -0
  106. package/ai/components/wa-checkbox.md +55 -0
  107. package/ai/components/wa-color-picker.md +55 -0
  108. package/ai/components/wa-comparison.md +55 -0
  109. package/ai/components/wa-copy-button.md +55 -0
  110. package/ai/components/wa-details.md +61 -0
  111. package/ai/components/wa-dialog.md +59 -0
  112. package/ai/components/wa-divider.md +53 -0
  113. package/ai/components/wa-drawer.md +55 -0
  114. package/ai/components/wa-dropdown-item.md +60 -0
  115. package/ai/components/wa-dropdown.md +60 -0
  116. package/ai/components/wa-format-bytes.md +53 -0
  117. package/ai/components/wa-format-date.md +53 -0
  118. package/ai/components/wa-format-number.md +53 -0
  119. package/ai/components/wa-icon.md +58 -0
  120. package/ai/components/wa-include.md +53 -0
  121. package/ai/components/wa-input.md +59 -0
  122. package/ai/components/wa-intersection-observer.md +53 -0
  123. package/ai/components/wa-known-date.md +53 -0
  124. package/ai/components/wa-markdown.md +53 -0
  125. package/ai/components/wa-mutation-observer.md +53 -0
  126. package/ai/components/wa-number-input.md +55 -0
  127. package/ai/components/wa-option.md +59 -0
  128. package/ai/components/wa-otp-input.md +53 -0
  129. package/ai/components/wa-page.md +53 -0
  130. package/ai/components/wa-pagination.md +55 -0
  131. package/ai/components/wa-popover.md +55 -0
  132. package/ai/components/wa-popup.md +53 -0
  133. package/ai/components/wa-progress-bar.md +53 -0
  134. package/ai/components/wa-progress-ring.md +53 -0
  135. package/ai/components/wa-qr-code.md +53 -0
  136. package/ai/components/wa-radio-group.md +59 -0
  137. package/ai/components/wa-radio.md +55 -0
  138. package/ai/components/wa-random-content.md +53 -0
  139. package/ai/components/wa-rating.md +55 -0
  140. package/ai/components/wa-relative-time.md +53 -0
  141. package/ai/components/wa-resize-observer.md +53 -0
  142. package/ai/components/wa-scroller.md +53 -0
  143. package/ai/components/wa-select.md +63 -0
  144. package/ai/components/wa-skeleton.md +53 -0
  145. package/ai/components/wa-slider.md +55 -0
  146. package/ai/components/wa-spinner.md +58 -0
  147. package/ai/components/wa-split-panel.md +58 -0
  148. package/ai/components/wa-switch.md +53 -0
  149. package/ai/components/wa-tab-group.md +69 -0
  150. package/ai/components/wa-tab-panel.md +60 -0
  151. package/ai/components/wa-tab.md +59 -0
  152. package/ai/components/wa-tag.md +59 -0
  153. package/ai/components/wa-textarea.md +53 -0
  154. package/ai/components/wa-time-input.md +55 -0
  155. package/ai/components/wa-toast-item.md +60 -0
  156. package/ai/components/wa-toast.md +60 -0
  157. package/ai/components/wa-tooltip.md +55 -0
  158. package/ai/components/wa-tree-item.md +55 -0
  159. package/ai/components/wa-tree.md +55 -0
  160. package/ai/components/wa-zoomable-frame.md +55 -0
  161. package/ai/components/workbench.md +120 -0
  162. package/ai/public-api-signatures-v1.md +3851 -441
  163. package/ai/skill.md +402 -70
  164. package/ai/webawesome-jsx-signatures-v1.md +9 -2
  165. package/analyzer/cli.mjs +5 -2
  166. package/analyzer/component-ownership.d.mts +72 -0
  167. package/analyzer/component-ownership.mjs +429 -0
  168. package/analyzer/index.d.mts +8 -0
  169. package/analyzer/index.mjs +1687 -49
  170. package/analyzer/loud-pairs.d.mts +49 -0
  171. package/analyzer/loud-pairs.mjs +357 -0
  172. package/analyzer/selectors.d.mts +21 -0
  173. package/analyzer/selectors.mjs +212 -0
  174. package/catalog-projection-cli.mjs +96 -0
  175. package/catalog-projection.d.mts +55 -0
  176. package/catalog-projection.mjs +62 -0
  177. package/dist/anchored-surface.d.ts +69 -0
  178. package/dist/anchored-surface.js +3 -0
  179. package/dist/anchored-surface.js.map +1 -0
  180. package/dist/app-tab.d.ts +39 -4
  181. package/dist/app-tab.js +2 -1
  182. package/dist/badge.d.ts +83 -0
  183. package/dist/badge.js +4 -0
  184. package/dist/badge.js.map +1 -0
  185. package/dist/browser/anchored-surface.js +3 -0
  186. package/dist/browser/badge.js +3 -0
  187. package/dist/browser/catalog.js +28 -0
  188. package/dist/browser/chip.js +3 -0
  189. package/dist/browser/choice-chips.js +3 -0
  190. package/dist/browser/collapsible-panel.js +9 -0
  191. package/dist/browser/column-track.js +3 -0
  192. package/dist/browser/combobox.js +3 -0
  193. package/dist/browser/composer.js +4 -0
  194. package/dist/browser/content-item.js +3 -0
  195. package/dist/browser/content-swap.js +3 -0
  196. package/dist/browser/corner-status.js +3 -0
  197. package/dist/browser/edge-activity-indicator.js +3 -0
  198. package/dist/browser/file-picker.js +3 -0
  199. package/dist/browser/framed-list.js +3 -0
  200. package/dist/browser/grid.js +3 -0
  201. package/dist/browser/icon-button.js +4 -0
  202. package/dist/browser/icon-toggle-button.js +4 -0
  203. package/dist/browser/list-action-row.js +2 -0
  204. package/dist/browser/list-header.js +3 -1
  205. package/dist/browser/list-item.js +1 -0
  206. package/dist/browser/nav-stack.js +11 -0
  207. package/dist/browser/popup-menu.js +3 -0
  208. package/dist/browser/row.js +3 -0
  209. package/dist/browser/segmented-control.js +0 -1
  210. package/dist/browser/select.js +2 -1
  211. package/dist/browser/spacer.js +3 -0
  212. package/dist/browser/split-button.js +5 -0
  213. package/dist/browser/split-view.js +13 -0
  214. package/dist/browser/state-banner.js +1 -0
  215. package/dist/browser/summary-row.js +3 -0
  216. package/dist/browser/surface-scaffold.js +3 -0
  217. package/dist/browser/tab-navigator.js +4 -0
  218. package/dist/browser/text.js +3 -0
  219. package/dist/browser/toolbar-control-group.js +1 -0
  220. package/dist/browser/workbench.js +14 -0
  221. package/dist/catalog-resources.d.ts +17 -1
  222. package/dist/catalog-resources.js +5 -5
  223. package/dist/catalog-resources.js.map +1 -1
  224. package/dist/catalog.d.ts +123 -121
  225. package/dist/catalog.js +598 -269
  226. package/dist/catalog.js.map +1 -1
  227. package/dist/chip.d.ts +69 -0
  228. package/dist/chip.js +3 -0
  229. package/dist/chip.js.map +1 -0
  230. package/dist/choice-chips.d.ts +82 -0
  231. package/dist/choice-chips.js +3 -0
  232. package/dist/choice-chips.js.map +1 -0
  233. package/dist/chunk-2GOCOLQL.js +270 -0
  234. package/dist/chunk-2GOCOLQL.js.map +1 -0
  235. package/dist/chunk-2MSPNRWJ.js +82 -0
  236. package/dist/chunk-2MSPNRWJ.js.map +1 -0
  237. package/dist/chunk-34U4ANDJ.js +119 -0
  238. package/dist/chunk-34U4ANDJ.js.map +1 -0
  239. package/dist/chunk-3GLYIIFR.js +230 -0
  240. package/dist/chunk-3GLYIIFR.js.map +1 -0
  241. package/dist/{chunk-Y6LYKFXY.js → chunk-3VXDSIBJ.js} +7 -4
  242. package/dist/chunk-3VXDSIBJ.js.map +1 -0
  243. package/dist/chunk-3WYREXW4.js +120 -0
  244. package/dist/chunk-3WYREXW4.js.map +1 -0
  245. package/dist/chunk-4UB5Z3ZZ.js +68 -0
  246. package/dist/chunk-4UB5Z3ZZ.js.map +1 -0
  247. package/dist/chunk-6C6DLP3W.js +31 -0
  248. package/dist/chunk-6C6DLP3W.js.map +1 -0
  249. package/dist/chunk-7IUEBNCO.js +108 -0
  250. package/dist/chunk-7IUEBNCO.js.map +1 -0
  251. package/dist/{chunk-QO55FN2Y.js → chunk-AN5IWMTM.js} +7 -3
  252. package/dist/chunk-AN5IWMTM.js.map +1 -0
  253. package/dist/chunk-AV7CPAPT.js +82 -0
  254. package/dist/chunk-AV7CPAPT.js.map +1 -0
  255. package/dist/{chunk-PX3YSS5C.js → chunk-B53PS2LE.js} +5 -3
  256. package/dist/chunk-B53PS2LE.js.map +1 -0
  257. package/dist/chunk-CA7LNX3J.js +44 -0
  258. package/dist/chunk-CA7LNX3J.js.map +1 -0
  259. package/dist/chunk-CEJ5FK6G.js +288 -0
  260. package/dist/chunk-CEJ5FK6G.js.map +1 -0
  261. package/dist/chunk-CMETHPKR.js +175 -0
  262. package/dist/chunk-CMETHPKR.js.map +1 -0
  263. package/dist/chunk-CMLPFIC5.js +46 -0
  264. package/dist/chunk-CMLPFIC5.js.map +1 -0
  265. package/dist/{chunk-RKVQEH4J.js → chunk-CVD5IZGB.js} +10 -5
  266. package/dist/chunk-CVD5IZGB.js.map +1 -0
  267. package/dist/chunk-CXZXHZTR.js +514 -0
  268. package/dist/chunk-CXZXHZTR.js.map +1 -0
  269. package/dist/chunk-D5RGM3XA.js +38 -0
  270. package/dist/chunk-D5RGM3XA.js.map +1 -0
  271. package/dist/{chunk-KWWR5VMS.js → chunk-DZJ4GBSP.js} +19 -5
  272. package/dist/chunk-DZJ4GBSP.js.map +1 -0
  273. package/dist/chunk-EIET4QLK.js +51 -0
  274. package/dist/chunk-EIET4QLK.js.map +1 -0
  275. package/dist/chunk-ELCMSQNJ.js +49 -0
  276. package/dist/chunk-ELCMSQNJ.js.map +1 -0
  277. package/dist/chunk-EOO6PYGF.js +162 -0
  278. package/dist/chunk-EOO6PYGF.js.map +1 -0
  279. package/dist/chunk-ETCWQLJV.js +85 -0
  280. package/dist/chunk-ETCWQLJV.js.map +1 -0
  281. package/dist/chunk-FDZNYD4C.js +138 -0
  282. package/dist/chunk-FDZNYD4C.js.map +1 -0
  283. package/dist/chunk-FR76ZJQC.js +90 -0
  284. package/dist/chunk-FR76ZJQC.js.map +1 -0
  285. package/dist/chunk-G3J7JDP6.js +29 -0
  286. package/dist/chunk-G3J7JDP6.js.map +1 -0
  287. package/dist/chunk-GS2QD3N7.js +14 -0
  288. package/dist/chunk-GS2QD3N7.js.map +1 -0
  289. package/dist/chunk-HGV7J4T6.js +86 -0
  290. package/dist/chunk-HGV7J4T6.js.map +1 -0
  291. package/dist/chunk-HLDRH23D.js +84 -0
  292. package/dist/chunk-HLDRH23D.js.map +1 -0
  293. package/dist/chunk-HQZYKJ56.js +302 -0
  294. package/dist/chunk-HQZYKJ56.js.map +1 -0
  295. package/dist/chunk-HZPHCSCS.js +95 -0
  296. package/dist/chunk-HZPHCSCS.js.map +1 -0
  297. package/dist/chunk-IKS72C6P.js +53 -0
  298. package/dist/chunk-IKS72C6P.js.map +1 -0
  299. package/dist/chunk-IM3GKYOG.js +202 -0
  300. package/dist/chunk-IM3GKYOG.js.map +1 -0
  301. package/dist/{chunk-JRKSK2HX.js → chunk-INI4WDWC.js} +53 -7
  302. package/dist/chunk-INI4WDWC.js.map +1 -0
  303. package/dist/chunk-IQSRHXZR.js +164 -0
  304. package/dist/chunk-IQSRHXZR.js.map +1 -0
  305. package/dist/{chunk-M7JBER5U.js → chunk-JOR5LGYE.js} +18 -4
  306. package/dist/chunk-JOR5LGYE.js.map +1 -0
  307. package/dist/chunk-K4AT3V3J.js +545 -0
  308. package/dist/chunk-K4AT3V3J.js.map +1 -0
  309. package/dist/chunk-KCS6NJ3O.js +82 -0
  310. package/dist/chunk-KCS6NJ3O.js.map +1 -0
  311. package/dist/{chunk-SRSJO5QE.js → chunk-KH4KEMSP.js} +34 -3
  312. package/dist/chunk-KH4KEMSP.js.map +1 -0
  313. package/dist/chunk-LL45C7BB.js +122 -0
  314. package/dist/chunk-LL45C7BB.js.map +1 -0
  315. package/dist/chunk-LOSRXZAH.js +100 -0
  316. package/dist/chunk-LOSRXZAH.js.map +1 -0
  317. package/dist/{chunk-7KEUJIIC.js → chunk-MF6ZUUJZ.js} +93 -11
  318. package/dist/chunk-MF6ZUUJZ.js.map +1 -0
  319. package/dist/chunk-MHMWQ7RB.js +19 -0
  320. package/dist/chunk-MHMWQ7RB.js.map +1 -0
  321. package/dist/chunk-MJ5RU6XT.js +173 -0
  322. package/dist/chunk-MJ5RU6XT.js.map +1 -0
  323. package/dist/chunk-MXNIVEVL.js +48 -0
  324. package/dist/chunk-MXNIVEVL.js.map +1 -0
  325. package/dist/{chunk-IJBSZ4NX.js → chunk-NS2TBYM4.js} +8 -5
  326. package/dist/chunk-NS2TBYM4.js.map +1 -0
  327. package/dist/chunk-PIVY32AE.js +140 -0
  328. package/dist/chunk-PIVY32AE.js.map +1 -0
  329. package/dist/chunk-PYBBYSZ3.js +526 -0
  330. package/dist/chunk-PYBBYSZ3.js.map +1 -0
  331. package/dist/chunk-QDSZTQXL.js +28 -0
  332. package/dist/chunk-QDSZTQXL.js.map +1 -0
  333. package/dist/chunk-QH5KOFNS.js +39 -0
  334. package/dist/chunk-QH5KOFNS.js.map +1 -0
  335. package/dist/chunk-QIG4IGUP.js +139 -0
  336. package/dist/chunk-QIG4IGUP.js.map +1 -0
  337. package/dist/chunk-QLA25V2K.js +493 -0
  338. package/dist/chunk-QLA25V2K.js.map +1 -0
  339. package/dist/chunk-QROYYGWU.js +52 -0
  340. package/dist/chunk-QROYYGWU.js.map +1 -0
  341. package/dist/chunk-QYMJHS4K.js +36 -0
  342. package/dist/chunk-QYMJHS4K.js.map +1 -0
  343. package/dist/chunk-RHD7RKGI.js +176 -0
  344. package/dist/chunk-RHD7RKGI.js.map +1 -0
  345. package/dist/chunk-S2XULQEK.js +52 -0
  346. package/dist/chunk-S2XULQEK.js.map +1 -0
  347. package/dist/{chunk-LPOMRC4C.js → chunk-S3ECMF23.js} +11 -3
  348. package/dist/chunk-S3ECMF23.js.map +1 -0
  349. package/dist/chunk-S4Y3YTAI.js +35 -0
  350. package/dist/chunk-S4Y3YTAI.js.map +1 -0
  351. package/dist/chunk-S4ZGTDSG.js +18 -0
  352. package/dist/chunk-S4ZGTDSG.js.map +1 -0
  353. package/dist/{chunk-PSKN344N.js → chunk-T4WJ5VGP.js} +63 -12
  354. package/dist/chunk-T4WJ5VGP.js.map +1 -0
  355. package/dist/chunk-TDMHA7C3.js +251 -0
  356. package/dist/chunk-TDMHA7C3.js.map +1 -0
  357. package/dist/{chunk-Y45PPBDV.js → chunk-TGLUDQP2.js} +47 -14
  358. package/dist/chunk-TGLUDQP2.js.map +1 -0
  359. package/dist/chunk-TLMMFQWM.js +222 -0
  360. package/dist/chunk-TLMMFQWM.js.map +1 -0
  361. package/dist/chunk-U6QYTMDB.js +85 -0
  362. package/dist/chunk-U6QYTMDB.js.map +1 -0
  363. package/dist/chunk-UMKV7YVQ.js +20 -0
  364. package/dist/chunk-UMKV7YVQ.js.map +1 -0
  365. package/dist/chunk-VFYO3UGZ.js +45 -0
  366. package/dist/chunk-VFYO3UGZ.js.map +1 -0
  367. package/dist/chunk-W4IK7AWD.js +73 -0
  368. package/dist/chunk-W4IK7AWD.js.map +1 -0
  369. package/dist/chunk-WVS6CUCT.js +48 -0
  370. package/dist/chunk-WVS6CUCT.js.map +1 -0
  371. package/dist/chunk-Y6KT7ZTR.js +109 -0
  372. package/dist/chunk-Y6KT7ZTR.js.map +1 -0
  373. package/dist/chunk-YMUIQRWK.js +44 -0
  374. package/dist/chunk-YMUIQRWK.js.map +1 -0
  375. package/dist/chunk-YOA5W5ZH.js +807 -0
  376. package/dist/chunk-YOA5W5ZH.js.map +1 -0
  377. package/dist/chunk-YQ2AC4E2.js +59 -0
  378. package/dist/chunk-YQ2AC4E2.js.map +1 -0
  379. package/dist/chunk-ZKKO4MHC.js +25 -0
  380. package/dist/chunk-ZKKO4MHC.js.map +1 -0
  381. package/dist/chunk-ZNROKDSZ.js +54 -0
  382. package/dist/chunk-ZNROKDSZ.js.map +1 -0
  383. package/dist/collapsible-panel.d.ts +96 -17
  384. package/dist/collapsible-panel.js +104 -27
  385. package/dist/collapsible-panel.js.map +1 -1
  386. package/dist/column-track.d.ts +41 -0
  387. package/dist/column-track.js +4 -0
  388. package/dist/column-track.js.map +1 -0
  389. package/dist/combobox.d.ts +40 -0
  390. package/dist/combobox.js +3 -0
  391. package/dist/combobox.js.map +1 -0
  392. package/dist/composer.d.ts +62 -0
  393. package/dist/composer.js +5 -0
  394. package/dist/composer.js.map +1 -0
  395. package/dist/content-item.d.ts +116 -0
  396. package/dist/content-item.js +4 -0
  397. package/dist/content-item.js.map +1 -0
  398. package/dist/content-swap.d.ts +34 -0
  399. package/dist/content-swap.js +3 -0
  400. package/dist/content-swap.js.map +1 -0
  401. package/dist/corner-status.d.ts +36 -0
  402. package/dist/corner-status.js +3 -0
  403. package/dist/corner-status.js.map +1 -0
  404. package/dist/css-values.d.ts +127 -0
  405. package/dist/css-values.js +3 -0
  406. package/dist/css-values.js.map +1 -0
  407. package/dist/device-class.js +1 -1
  408. package/dist/device-class.js.map +1 -1
  409. package/dist/disclosure-arrow.d.ts +6 -1
  410. package/dist/disclosure-arrow.js +2 -1
  411. package/dist/edge-activity-indicator.d.ts +28 -0
  412. package/dist/edge-activity-indicator.js +3 -0
  413. package/dist/edge-activity-indicator.js.map +1 -0
  414. package/dist/empty-state.d.ts +5 -2
  415. package/dist/empty-state.js +2 -1
  416. package/dist/extension-attributes-mu8MFUl0.d.ts +13 -0
  417. package/dist/file-picker.d.ts +47 -0
  418. package/dist/file-picker.js +3 -0
  419. package/dist/file-picker.js.map +1 -0
  420. package/dist/flex-alignment-4ms8ZbV8.d.ts +5 -0
  421. package/dist/floating-toolbar.d.ts +29 -6
  422. package/dist/floating-toolbar.js +1 -1
  423. package/dist/framed-list.d.ts +47 -0
  424. package/dist/framed-list.js +4 -0
  425. package/dist/framed-list.js.map +1 -0
  426. package/dist/grid.d.ts +58 -0
  427. package/dist/grid.js +6 -0
  428. package/dist/grid.js.map +1 -0
  429. package/dist/help-tags-register.d.ts +13 -0
  430. package/dist/help-tags-register.js +9 -0
  431. package/dist/help-tags-register.js.map +1 -0
  432. package/dist/icon-button.d.ts +46 -0
  433. package/dist/icon-button.js +6 -0
  434. package/dist/icon-button.js.map +1 -0
  435. package/dist/icon-toggle-button.d.ts +42 -0
  436. package/dist/icon-toggle-button.js +6 -0
  437. package/dist/icon-toggle-button.js.map +1 -0
  438. package/dist/index.d.ts +59 -20
  439. package/dist/index.js +66 -29
  440. package/dist/list-action-row.d.ts +69 -12
  441. package/dist/list-action-row.js +5 -1
  442. package/dist/list-header.d.ts +36 -2
  443. package/dist/list-header.js +4 -1
  444. package/dist/list-icon-tile-B8dr97OW.d.ts +18 -0
  445. package/dist/list-inset-control.d.ts +10 -4
  446. package/dist/list-inset-control.js +1 -1
  447. package/dist/list-inset-text.d.ts +17 -12
  448. package/dist/list-inset-text.js +2 -1
  449. package/dist/list-item.d.ts +49 -5
  450. package/dist/list-item.js +4 -1
  451. package/dist/list.d.ts +121 -12
  452. package/dist/list.js +5 -1
  453. package/dist/loading-spinner.d.ts +12 -2
  454. package/dist/loading-spinner.js +2 -1
  455. package/dist/lucide-icon.d.ts +15 -3
  456. package/dist/lucide-icon.js +2 -1
  457. package/dist/nav-stack-VXTumzKa.d.ts +158 -0
  458. package/dist/nav-stack.d.ts +15 -38
  459. package/dist/nav-stack.js +13 -1
  460. package/dist/pane.d.ts +111 -7
  461. package/dist/pane.js +2 -1
  462. package/dist/panel-toolbar-vg6Ir5Dy.d.ts +77 -0
  463. package/dist/popup-menu-register.d.ts +10 -0
  464. package/dist/popup-menu-register.js +336 -0
  465. package/dist/popup-menu-register.js.map +1 -0
  466. package/dist/popup-menu.d.ts +125 -0
  467. package/dist/popup-menu.js +3 -0
  468. package/dist/popup-menu.js.map +1 -0
  469. package/dist/resizable-region.d.ts +32 -3
  470. package/dist/resizable-region.js +1 -1
  471. package/dist/row.d.ts +53 -0
  472. package/dist/row.js +7 -0
  473. package/dist/row.js.map +1 -0
  474. package/dist/scroll-clearance-BikHljTc.d.ts +14 -0
  475. package/dist/segmented-control.d.ts +7 -4
  476. package/dist/segmented-control.js +1 -2
  477. package/dist/select-register.js +255 -3
  478. package/dist/select-register.js.map +1 -1
  479. package/dist/select.d.ts +95 -6
  480. package/dist/select.js +4 -1
  481. package/dist/semantic-content-BbzjvSu9.d.ts +14 -0
  482. package/dist/semantic-tone-CdW013KF.d.ts +4 -0
  483. package/dist/sides-BPSWde0A.d.ts +4 -0
  484. package/dist/skeleton.d.ts +14 -7
  485. package/dist/skeleton.js +2 -1
  486. package/dist/spacer.d.ts +18 -0
  487. package/dist/spacer.js +4 -0
  488. package/dist/spacer.js.map +1 -0
  489. package/dist/split-button.d.ts +57 -0
  490. package/dist/split-button.js +7 -0
  491. package/dist/split-button.js.map +1 -0
  492. package/dist/split-view.d.ts +63 -6
  493. package/dist/split-view.js +88 -9
  494. package/dist/split-view.js.map +1 -1
  495. package/dist/state-banner.d.ts +37 -6
  496. package/dist/state-banner.js +4 -1
  497. package/dist/styles/anchored-surface.css +41 -0
  498. package/dist/styles/app-tab.css +232 -0
  499. package/dist/styles/badge.css +145 -0
  500. package/dist/styles/catalog/components/catalog-example-stack.css +14 -0
  501. package/dist/styles/catalog/components/catalog-example.css +204 -0
  502. package/dist/styles/catalog/components/catalog-stage.css +61 -0
  503. package/dist/styles/catalog/components/catalog.css +26 -0
  504. package/dist/styles/catalog.css +5 -575
  505. package/dist/styles/chip.css +208 -0
  506. package/dist/styles/choice-chips.css +154 -0
  507. package/dist/styles/collapsible-panel.css +450 -16
  508. package/dist/styles/column-track.css +57 -0
  509. package/dist/styles/combobox.css +113 -0
  510. package/dist/styles/components/actions/floating-toolbar/floating-toolbar.css +119 -0
  511. package/dist/styles/components/actions/icon-button/icon-button.css +22 -0
  512. package/dist/styles/components/actions/icon-toggle-button/icon-toggle-button.css +83 -0
  513. package/dist/styles/components/actions/popup-menu/popup-menu.css +370 -0
  514. package/dist/styles/components/actions/split-button/split-button.css +95 -0
  515. package/dist/styles/components/actions/toolbar/toolbar.css +443 -0
  516. package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +1069 -0
  517. package/dist/styles/components/actions/toolbar-text/toolbar-text.css +269 -0
  518. package/dist/styles/components/collections/framed-list/framed-list.css +47 -0
  519. package/dist/styles/components/collections/list/list.css +250 -0
  520. package/dist/styles/components/collections/list-action-row/list-action-row.css +466 -0
  521. package/dist/styles/components/collections/list-header/list-header.css +229 -0
  522. package/dist/styles/components/collections/list-inset-control/list-inset-control.css +30 -0
  523. package/dist/styles/components/collections/list-inset-text/list-inset-text.css +29 -0
  524. package/dist/styles/components/collections/list-item/list-item.css +461 -0
  525. package/dist/styles/components/collections/summary-row/summary-row.css +161 -0
  526. package/dist/styles/components/data-display/value-table/value-table.css +183 -0
  527. package/dist/styles/components/feedback/anchored-surface/anchored-surface.css +41 -0
  528. package/dist/styles/components/feedback/badge/badge.css +145 -0
  529. package/dist/styles/components/feedback/chip/chip.css +208 -0
  530. package/dist/styles/components/feedback/corner-status/corner-status.css +60 -0
  531. package/dist/styles/components/feedback/edge-activity-indicator/edge-activity-indicator.css +127 -0
  532. package/dist/styles/components/feedback/empty-state/empty-state.css +47 -0
  533. package/dist/styles/components/feedback/loading-spinner/loading-spinner.css +25 -0
  534. package/dist/styles/components/feedback/skeleton/skeleton.css +92 -0
  535. package/dist/styles/components/feedback/state-banner/state-banner.css +297 -0
  536. package/dist/styles/components/forms/choice-chips/choice-chips.css +154 -0
  537. package/dist/styles/components/forms/combobox/combobox.css +113 -0
  538. package/dist/styles/components/forms/composer/composer.css +100 -0
  539. package/dist/styles/components/forms/file-picker/file-picker.css +81 -0
  540. package/dist/styles/components/forms/segmented-control/segmented-control.css +196 -0
  541. package/dist/styles/components/forms/select/select.css +455 -0
  542. package/dist/styles/components/forms/token-search-field/token-search-field.css +432 -0
  543. package/dist/styles/components/layout/collapsible-panel/collapsible-panel.css +580 -0
  544. package/dist/styles/components/layout/column-track/column-track.css +57 -0
  545. package/dist/styles/components/layout/content-swap/content-swap.css +154 -0
  546. package/dist/styles/components/layout/grid/grid.css +88 -0
  547. package/dist/styles/components/layout/pane/pane.css +382 -0
  548. package/dist/styles/components/layout/resizable-region/resizable-region.css +545 -0
  549. package/dist/styles/components/layout/row/row.css +114 -0
  550. package/dist/styles/components/layout/spacer/spacer.css +11 -0
  551. package/dist/styles/components/layout/split-view/split-view.css +146 -0
  552. package/dist/styles/components/layout/workbench/workbench.css +1086 -0
  553. package/dist/styles/components/media/lucide-icon/lucide-icon.css +15 -0
  554. package/dist/styles/components/navigation/app-tab/app-tab.css +384 -0
  555. package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +23 -0
  556. package/dist/styles/components/navigation/nav-stack/nav-stack.css +342 -0
  557. package/dist/styles/components/navigation/tab-bar/tab-bar.css +197 -0
  558. package/dist/styles/components/navigation/tab-navigator/tab-navigator.css +325 -0
  559. package/dist/styles/components/surfaces/content-item/content-item.css +138 -0
  560. package/dist/styles/components/surfaces/sunken-panel/sunken-panel.css +31 -0
  561. package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +425 -0
  562. package/dist/styles/components/typography/text/text.css +220 -0
  563. package/dist/styles/composer.css +100 -0
  564. package/dist/styles/content-item.css +138 -0
  565. package/dist/styles/content-swap.css +154 -0
  566. package/dist/styles/corner-status.css +60 -0
  567. package/dist/styles/document.css +98 -0
  568. package/dist/styles/edge-activity-indicator.css +127 -0
  569. package/dist/styles/file-picker.css +81 -0
  570. package/dist/styles/floating-toolbar.css +87 -6
  571. package/dist/styles/foundation.css +254 -53
  572. package/dist/styles/framed-list.css +47 -0
  573. package/dist/styles/grid.css +88 -0
  574. package/dist/styles/icon-button.css +22 -0
  575. package/dist/styles/icon-toggle-button.css +83 -0
  576. package/dist/styles/layout.css +1 -21
  577. package/dist/styles/list-action-row.css +323 -17
  578. package/dist/styles/list-header.css +128 -59
  579. package/dist/styles/list-inset-control.css +25 -2
  580. package/dist/styles/list-inset-text.css +27 -12
  581. package/dist/styles/list-item.css +371 -33
  582. package/dist/styles/list.css +214 -7
  583. package/dist/styles/loading-spinner.css +4 -0
  584. package/dist/styles/lucide-icon.css +9 -0
  585. package/dist/styles/nav-stack.css +280 -49
  586. package/dist/styles/pane.css +322 -2
  587. package/dist/styles/popup-menu.css +370 -0
  588. package/dist/styles/resizable-region.css +438 -4
  589. package/dist/styles/row.css +114 -0
  590. package/dist/styles/segmented-control.css +34 -3
  591. package/dist/styles/select.css +338 -23
  592. package/dist/styles/skeleton.css +64 -3
  593. package/dist/styles/spacer.css +11 -0
  594. package/dist/styles/split-button.css +95 -0
  595. package/dist/styles/split-view.css +114 -3
  596. package/dist/styles/state-banner.css +141 -42
  597. package/dist/styles/styles.css +22 -1
  598. package/dist/styles/summary-row.css +161 -0
  599. package/dist/styles/sunken-panel.css +13 -4
  600. package/dist/styles/surface-scaffold.css +425 -0
  601. package/dist/styles/tab-bar.css +161 -9
  602. package/dist/styles/tab-navigator.css +325 -0
  603. package/dist/styles/text.css +220 -0
  604. package/dist/styles/token-search-field.css +202 -59
  605. package/dist/styles/toolbar-control-group.css +886 -42
  606. package/dist/styles/toolbar-text.css +184 -7
  607. package/dist/styles/toolbar.css +363 -17
  608. package/dist/styles/value-table.css +115 -7
  609. package/dist/styles/webawesome.css +282 -20
  610. package/dist/styles/workbench.css +999 -7
  611. package/dist/summary-row.d.ts +56 -0
  612. package/dist/summary-row.js +4 -0
  613. package/dist/summary-row.js.map +1 -0
  614. package/dist/sunken-panel.d.ts +23 -4
  615. package/dist/sunken-panel.js +2 -1
  616. package/dist/surface-scaffold-register.d.ts +9 -0
  617. package/dist/surface-scaffold-register.js +151 -0
  618. package/dist/surface-scaffold-register.js.map +1 -0
  619. package/dist/surface-scaffold.d.ts +170 -0
  620. package/dist/surface-scaffold.js +4 -0
  621. package/dist/surface-scaffold.js.map +1 -0
  622. package/dist/tab-bar.d.ts +31 -6
  623. package/dist/tab-bar.js +1 -1
  624. package/dist/tab-navigator.d.ts +114 -0
  625. package/dist/tab-navigator.js +102 -0
  626. package/dist/tab-navigator.js.map +1 -0
  627. package/dist/text.d.ts +98 -0
  628. package/dist/text.js +3 -0
  629. package/dist/text.js.map +1 -0
  630. package/dist/token-search-field.d.ts +3 -59
  631. package/dist/token-search-field.js +2 -1
  632. package/dist/token-search-model-aYR0YAei.d.ts +184 -0
  633. package/dist/token-search-model.d.ts +3 -0
  634. package/dist/token-search-model.js +3 -0
  635. package/dist/token-search-model.js.map +1 -0
  636. package/dist/toolbar-control-group.d.ts +87 -4
  637. package/dist/toolbar-control-group.js +3 -1
  638. package/dist/toolbar-text.d.ts +46 -12
  639. package/dist/toolbar-text.js +2 -1
  640. package/dist/toolbar.d.ts +71 -9
  641. package/dist/toolbar.js +1 -1
  642. package/dist/types-CVgIwSdq.d.ts +189 -0
  643. package/dist/value-table.d.ts +30 -4
  644. package/dist/value-table.js +2 -1
  645. package/dist/webawesome.d.ts +8 -1
  646. package/dist/wire-catalog.d.ts +88 -13
  647. package/dist/wire-catalog.js +240 -206
  648. package/dist/wire-catalog.js.map +1 -1
  649. package/dist/wire-comboboxes.d.ts +26 -0
  650. package/dist/wire-comboboxes.js +3 -0
  651. package/dist/wire-comboboxes.js.map +1 -0
  652. package/dist/wire-composers.d.ts +16 -0
  653. package/dist/wire-composers.js +3 -0
  654. package/dist/wire-composers.js.map +1 -0
  655. package/dist/wire-content-items.d.ts +11 -0
  656. package/dist/wire-content-items.js +139 -0
  657. package/dist/wire-content-items.js.map +1 -0
  658. package/dist/wire-corner-status.d.ts +11 -0
  659. package/dist/wire-corner-status.js +3 -0
  660. package/dist/wire-corner-status.js.map +1 -0
  661. package/dist/wire-file-pickers.d.ts +26 -0
  662. package/dist/wire-file-pickers.js +3 -0
  663. package/dist/wire-file-pickers.js.map +1 -0
  664. package/dist/wire-list-focus-scroll.d.ts +16 -0
  665. package/dist/wire-list-focus-scroll.js +3 -0
  666. package/dist/wire-list-focus-scroll.js.map +1 -0
  667. package/dist/wire-list-reorder.d.ts +41 -0
  668. package/dist/wire-list-reorder.js +3 -0
  669. package/dist/wire-list-reorder.js.map +1 -0
  670. package/dist/wire-nav-stack.d.ts +4 -1
  671. package/dist/wire-nav-stack.js +312 -16
  672. package/dist/wire-nav-stack.js.map +1 -1
  673. package/dist/wire-resizable-regions.d.ts +2 -1
  674. package/dist/wire-resizable-regions.js +2 -1
  675. package/dist/wire-scroll-dividers.d.ts +87 -0
  676. package/dist/wire-scroll-dividers.js +3 -0
  677. package/dist/wire-scroll-dividers.js.map +1 -0
  678. package/dist/wire-sidebar.d.ts +24 -4
  679. package/dist/wire-sidebar.js +122 -19
  680. package/dist/wire-sidebar.js.map +1 -1
  681. package/dist/wire-tab-bars.d.ts +1 -0
  682. package/dist/wire-tab-bars.js +1 -1
  683. package/dist/wire-tab-navigator.d.ts +13 -0
  684. package/dist/wire-tab-navigator.js +153 -0
  685. package/dist/wire-tab-navigator.js.map +1 -0
  686. package/dist/wire-token-search-fields.d.ts +5 -1
  687. package/dist/wire-token-search-fields.js +2 -1
  688. package/dist/wire-toolbar-visibility.d.ts +13 -0
  689. package/dist/wire-toolbar-visibility.js +3 -0
  690. package/dist/wire-toolbar-visibility.js.map +1 -0
  691. package/dist/wire-workbench.d.ts +116 -0
  692. package/dist/wire-workbench.js +6 -0
  693. package/dist/wire-workbench.js.map +1 -0
  694. package/dist/workbench.d.ts +253 -10
  695. package/dist/workbench.js +20 -62
  696. package/dist/workbench.js.map +1 -1
  697. package/docs/accessibility.md +617 -32
  698. package/docs/anchored-surface.md +101 -0
  699. package/docs/app-layouts.md +159 -10
  700. package/docs/apple-hig.md +2 -0
  701. package/docs/catalog.md +403 -110
  702. package/docs/collapsible-panel.md +272 -16
  703. package/docs/component-contract.md +700 -79
  704. package/docs/component-integration.md +75 -0
  705. package/docs/component-selection.md +908 -79
  706. package/docs/composer.md +143 -0
  707. package/docs/design/templates/choice-chips/color-palette-dark.svg +1 -0
  708. package/docs/design/templates/choice-chips/color-palette.svg +1 -0
  709. package/docs/design/templates/choice-chips/compact-icons-dark.svg +1 -0
  710. package/docs/design/templates/choice-chips/compact-icons.svg +1 -0
  711. package/docs/design/templates/choice-chips/multiple-dark.svg +1 -0
  712. package/docs/design/templates/choice-chips/multiple.svg +1 -0
  713. package/docs/design/templates/choice-chips-dark.svg +1 -0
  714. package/docs/design/templates/choice-chips.svg +1 -0
  715. package/docs/design/templates/composer/chat-dark.svg +1 -0
  716. package/docs/design/templates/composer/chat.svg +1 -0
  717. package/docs/design/templates/composer/prompt-dark.svg +1 -0
  718. package/docs/design/templates/composer/prompt.svg +1 -0
  719. package/docs/design/templates/composer-dark.svg +1 -0
  720. package/docs/design/templates/composer.svg +1 -0
  721. package/docs/design/templates/empty-state/filtered-dark.svg +1 -1
  722. package/docs/design/templates/empty-state/filtered.svg +1 -1
  723. package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
  724. package/docs/design/templates/empty-state/with-action.svg +1 -1
  725. package/docs/design/templates/empty-state-dark.svg +1 -1
  726. package/docs/design/templates/empty-state.svg +1 -1
  727. package/docs/design/templates/list/compact-dark.svg +1 -1
  728. package/docs/design/templates/list/compact.svg +1 -1
  729. package/docs/design/templates/list/stack-dark.svg +1 -1
  730. package/docs/design/templates/list/stack.svg +1 -1
  731. package/docs/design/templates/list-action-row/default-dark.svg +1 -1
  732. package/docs/design/templates/list-action-row/default.svg +1 -1
  733. package/docs/design/templates/list-action-row/icon-tile-dark.svg +1 -0
  734. package/docs/design/templates/list-action-row/icon-tile.svg +1 -0
  735. package/docs/design/templates/list-action-row/selected-dark.svg +1 -1
  736. package/docs/design/templates/list-action-row/selected.svg +1 -1
  737. package/docs/design/templates/list-action-row/trailing-menu-dark.svg +1 -0
  738. package/docs/design/templates/list-action-row/trailing-menu.svg +1 -0
  739. package/docs/design/templates/list-action-row-dark.svg +1 -1
  740. package/docs/design/templates/list-action-row.svg +1 -1
  741. package/docs/design/templates/list-dark.svg +1 -1
  742. package/docs/design/templates/list-header/action-dark.svg +1 -1
  743. package/docs/design/templates/list-header/action.svg +1 -1
  744. package/docs/design/templates/list-header/count-dark.svg +1 -1
  745. package/docs/design/templates/list-header/count.svg +1 -1
  746. package/docs/design/templates/list-header/inline-action-dark.svg +1 -0
  747. package/docs/design/templates/list-header/inline-action.svg +1 -0
  748. package/docs/design/templates/list-header/size-l-dark.svg +1 -0
  749. package/docs/design/templates/list-header/size-l.svg +1 -0
  750. package/docs/design/templates/list-header/size-m-dark.svg +1 -0
  751. package/docs/design/templates/list-header/size-m.svg +1 -0
  752. package/docs/design/templates/list-header/size-xl-dark.svg +1 -0
  753. package/docs/design/templates/list-header/size-xl.svg +1 -0
  754. package/docs/design/templates/list-header/size-xs-dark.svg +1 -0
  755. package/docs/design/templates/list-header/size-xs.svg +1 -0
  756. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -1
  757. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -1
  758. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -1
  759. package/docs/design/templates/list-header/toggle-expanded.svg +1 -1
  760. package/docs/design/templates/list-header-dark.svg +1 -1
  761. package/docs/design/templates/list-header.svg +1 -1
  762. package/docs/design/templates/list-item/default-dark.svg +1 -1
  763. package/docs/design/templates/list-item/default.svg +1 -1
  764. package/docs/design/templates/list-item/icon-tile-dark.svg +1 -0
  765. package/docs/design/templates/list-item/icon-tile.svg +1 -0
  766. package/docs/design/templates/list-item/multiline-dark.svg +1 -1
  767. package/docs/design/templates/list-item/multiline.svg +1 -1
  768. package/docs/design/templates/list-item/selected-dark.svg +1 -1
  769. package/docs/design/templates/list-item/selected.svg +1 -1
  770. package/docs/design/templates/list-item/trailing-dark.svg +1 -1
  771. package/docs/design/templates/list-item/trailing.svg +1 -1
  772. package/docs/design/templates/list-item-dark.svg +1 -1
  773. package/docs/design/templates/list-item.svg +1 -1
  774. package/docs/design/templates/list.svg +1 -1
  775. package/docs/design/templates/segmented-control/equal-dark.svg +1 -1
  776. package/docs/design/templates/segmented-control/equal.svg +1 -1
  777. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -1
  778. package/docs/design/templates/segmented-control/pill-small.svg +1 -1
  779. package/docs/design/templates/segmented-control-dark.svg +1 -1
  780. package/docs/design/templates/segmented-control.svg +1 -1
  781. package/docs/design/templates/skeleton-dark.svg +1 -1
  782. package/docs/design/templates/skeleton.svg +1 -1
  783. package/docs/design/templates/state-banner/danger-dark.svg +1 -1
  784. package/docs/design/templates/state-banner/danger.svg +1 -1
  785. package/docs/design/templates/state-banner/info-badge-dark.svg +1 -1
  786. package/docs/design/templates/state-banner/info-badge.svg +1 -1
  787. package/docs/design/templates/state-banner/info-dark.svg +1 -1
  788. package/docs/design/templates/state-banner/info.svg +1 -1
  789. package/docs/design/templates/state-banner/strip-dark.svg +1 -0
  790. package/docs/design/templates/state-banner/strip.svg +1 -0
  791. package/docs/design/templates/state-banner/success-dark.svg +1 -1
  792. package/docs/design/templates/state-banner/success.svg +1 -1
  793. package/docs/design/templates/state-banner/warning-dark.svg +1 -1
  794. package/docs/design/templates/state-banner/warning.svg +1 -1
  795. package/docs/design/templates/state-banner-dark.svg +1 -1
  796. package/docs/design/templates/state-banner.svg +1 -1
  797. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
  798. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
  799. package/docs/design/templates/tab-bar-dark.svg +1 -1
  800. package/docs/design/templates/tab-bar.svg +1 -1
  801. package/docs/design/templates/token-search-field/empty-dark.svg +1 -1
  802. package/docs/design/templates/token-search-field/empty.svg +1 -1
  803. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -1
  804. package/docs/design/templates/token-search-field/tokens.svg +1 -1
  805. package/docs/design/templates/token-search-field-dark.svg +1 -1
  806. package/docs/design/templates/token-search-field.svg +1 -1
  807. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
  808. package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
  809. package/docs/design/templates/toolbar/width-visibility-320-dark.svg +1 -0
  810. package/docs/design/templates/toolbar/width-visibility-320.svg +1 -0
  811. package/docs/design/templates/toolbar/width-visibility-600-dark.svg +1 -0
  812. package/docs/design/templates/toolbar/width-visibility-600.svg +1 -0
  813. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -1
  814. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -1
  815. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -1
  816. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -1
  817. package/docs/design/templates/toolbar-control-group/icon-tile-brand-dark.svg +1 -0
  818. package/docs/design/templates/toolbar-control-group/icon-tile-brand.svg +1 -0
  819. package/docs/design/templates/toolbar-control-group/icon-tile-danger-dark.svg +1 -0
  820. package/docs/design/templates/toolbar-control-group/icon-tile-danger.svg +1 -0
  821. package/docs/design/templates/toolbar-control-group/icon-tile-neutral-dark.svg +1 -0
  822. package/docs/design/templates/toolbar-control-group/icon-tile-neutral.svg +1 -0
  823. package/docs/design/templates/toolbar-control-group/icon-tile-success-dark.svg +1 -0
  824. package/docs/design/templates/toolbar-control-group/icon-tile-success.svg +1 -0
  825. package/docs/design/templates/toolbar-control-group/icon-tile-warning-dark.svg +1 -0
  826. package/docs/design/templates/toolbar-control-group/icon-tile-warning.svg +1 -0
  827. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -1
  828. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -1
  829. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
  830. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
  831. package/docs/design/templates/toolbar-control-group-dark.svg +1 -1
  832. package/docs/design/templates/toolbar-control-group.svg +1 -1
  833. package/docs/design/templates/toolbar-dark.svg +1 -1
  834. package/docs/design/templates/toolbar-text/dark-tone-dark.svg +1 -0
  835. package/docs/design/templates/toolbar-text/dark-tone.svg +1 -0
  836. package/docs/design/templates/toolbar-text/default-dark.svg +1 -1
  837. package/docs/design/templates/toolbar-text/default.svg +1 -1
  838. package/docs/design/templates/toolbar-text/large-dark.svg +1 -1
  839. package/docs/design/templates/toolbar-text/large.svg +1 -1
  840. package/docs/design/templates/toolbar-text/small-dark.svg +1 -1
  841. package/docs/design/templates/toolbar-text/small.svg +1 -1
  842. package/docs/design/templates/toolbar-text-dark.svg +1 -1
  843. package/docs/design/templates/toolbar-text.svg +1 -1
  844. package/docs/design/templates/toolbar.svg +1 -1
  845. package/docs/design/templates/value-table/details-dark.svg +1 -1
  846. package/docs/design/templates/value-table/details.svg +1 -1
  847. package/docs/design/templates/value-table-dark.svg +1 -1
  848. package/docs/design/templates/value-table.svg +1 -1
  849. package/docs/design/templates.md +19 -9
  850. package/docs/design-philosophy.md +58 -11
  851. package/docs/device-class.md +2 -1
  852. package/docs/document-baseline.md +93 -0
  853. package/docs/examples/application-ui-profile.json +8 -8
  854. package/docs/examples/command-palette-adapter.tsx +9 -7
  855. package/docs/examples/component-catalog-extension.json +8 -1
  856. package/docs/examples/{component-catalog-extension-v2.json → component-composition-extension.json} +8 -9
  857. package/docs/layout.md +764 -40
  858. package/docs/nav-stack.md +275 -11
  859. package/docs/recipes.md +125 -69
  860. package/docs/split-view.md +94 -5
  861. package/docs/sunken-panel.md +54 -1
  862. package/docs/surface-scaffold.md +270 -0
  863. package/docs/tab-navigator.md +255 -0
  864. package/docs/type-contracts.md +57 -22
  865. package/docs/ui-analyzer.md +334 -14
  866. package/docs/ui-doctor.md +207 -10
  867. package/docs/ui-evaluator.md +17 -0
  868. package/docs/ux-demo.md +47 -16
  869. package/docs/webawesome-theme.md +148 -14
  870. package/docs/workbench.md +600 -11
  871. package/docs/writing.md +152 -0
  872. package/doctor/cli.mjs +5 -0
  873. package/doctor/component-style-checks.mjs +457 -0
  874. package/doctor/config.schema.json +26 -0
  875. package/doctor/copy-capitalization-checks.mjs +591 -0
  876. package/doctor/eslint-diagnostics.d.mts +16 -0
  877. package/doctor/eslint-diagnostics.mjs +17 -0
  878. package/doctor/index.d.mts +6 -0
  879. package/doctor/index.mjs +214 -47
  880. package/evaluator/index.mjs +73 -8
  881. package/llms.txt +702 -56
  882. package/package.json +256 -25
  883. package/scripts/component-catalog-extension-validation.mjs +28 -0
  884. package/traversal-exclusions.mjs +60 -1
  885. package/ux-demo/recipes/app-shell.tsx +181 -189
  886. package/ux-demo/recipes/collapsible-sidebar.tsx +177 -139
  887. package/ux-demo/recipes/compact-toolbar.tsx +120 -101
  888. package/ux-demo/recipes/composer-form.tsx +86 -62
  889. package/ux-demo/recipes/list-detail-dialog.tsx +219 -114
  890. package/ux-demo/recipes/list-workspace-states.tsx +95 -80
  891. package/ux-demo/recipes/loaders.ts +5 -2
  892. package/ux-demo/recipes/loading-inspector.tsx +157 -117
  893. package/ux-demo/recipes/mount-recipe.ts +0 -5
  894. package/ux-demo/recipes/navigation-sidebar.tsx +98 -83
  895. package/ux-demo/recipes/navigation-stack.tsx +42 -29
  896. package/ux-demo/recipes/types.ts +14 -1
  897. package/ux-demo/recipes/workspace-header.tsx +77 -51
  898. package/vite-ux-review.d.mts +83 -0
  899. package/vite-ux-review.mjs +120 -0
  900. package/ai/component-catalog-extension-v2.d.ts +0 -7
  901. package/ai/component-catalog-extension-v2.schema.json +0 -7
  902. package/ai/component-catalog-v2.d.ts +0 -67
  903. package/ai/component-catalog-v2.json +0 -4675
  904. package/ai/component-catalog-v2.schema.json +0 -246
  905. package/dist/browser/panel-header.js +0 -7
  906. package/dist/chunk-5VTB2BKP.js +0 -35
  907. package/dist/chunk-5VTB2BKP.js.map +0 -1
  908. package/dist/chunk-6WTETUZ6.js +0 -21
  909. package/dist/chunk-6WTETUZ6.js.map +0 -1
  910. package/dist/chunk-7KEUJIIC.js.map +0 -1
  911. package/dist/chunk-7XRDUG4Y.js +0 -58
  912. package/dist/chunk-7XRDUG4Y.js.map +0 -1
  913. package/dist/chunk-B3A3IVO5.js +0 -83
  914. package/dist/chunk-B3A3IVO5.js.map +0 -1
  915. package/dist/chunk-DPDBVKNA.js +0 -113
  916. package/dist/chunk-DPDBVKNA.js.map +0 -1
  917. package/dist/chunk-FEAMR7S4.js +0 -68
  918. package/dist/chunk-FEAMR7S4.js.map +0 -1
  919. package/dist/chunk-FEY65TBV.js +0 -15
  920. package/dist/chunk-FEY65TBV.js.map +0 -1
  921. package/dist/chunk-IJBSZ4NX.js.map +0 -1
  922. package/dist/chunk-J5BFYY7Q.js +0 -35
  923. package/dist/chunk-J5BFYY7Q.js.map +0 -1
  924. package/dist/chunk-JRKSK2HX.js.map +0 -1
  925. package/dist/chunk-KWWR5VMS.js.map +0 -1
  926. package/dist/chunk-LPOMRC4C.js.map +0 -1
  927. package/dist/chunk-M7JBER5U.js.map +0 -1
  928. package/dist/chunk-NENBUYX5.js +0 -79
  929. package/dist/chunk-NENBUYX5.js.map +0 -1
  930. package/dist/chunk-NWSEP5RT.js +0 -117
  931. package/dist/chunk-NWSEP5RT.js.map +0 -1
  932. package/dist/chunk-OJWWHFH3.js +0 -426
  933. package/dist/chunk-OJWWHFH3.js.map +0 -1
  934. package/dist/chunk-PSKN344N.js.map +0 -1
  935. package/dist/chunk-PX3YSS5C.js.map +0 -1
  936. package/dist/chunk-QO55FN2Y.js.map +0 -1
  937. package/dist/chunk-R7ZWUN64.js +0 -38
  938. package/dist/chunk-R7ZWUN64.js.map +0 -1
  939. package/dist/chunk-RKVQEH4J.js.map +0 -1
  940. package/dist/chunk-SRSJO5QE.js.map +0 -1
  941. package/dist/chunk-SYDMYBPG.js +0 -31
  942. package/dist/chunk-SYDMYBPG.js.map +0 -1
  943. package/dist/chunk-TB6DY7H5.js +0 -25
  944. package/dist/chunk-TB6DY7H5.js.map +0 -1
  945. package/dist/chunk-UFZKLBCF.js +0 -108
  946. package/dist/chunk-UFZKLBCF.js.map +0 -1
  947. package/dist/chunk-UKKSMZYT.js +0 -281
  948. package/dist/chunk-UKKSMZYT.js.map +0 -1
  949. package/dist/chunk-W2FK7ZNY.js +0 -26
  950. package/dist/chunk-W2FK7ZNY.js.map +0 -1
  951. package/dist/chunk-W5L2JSBY.js +0 -40
  952. package/dist/chunk-W5L2JSBY.js.map +0 -1
  953. package/dist/chunk-Y45PPBDV.js.map +0 -1
  954. package/dist/chunk-Y6LYKFXY.js.map +0 -1
  955. package/dist/divider-sides-267FA7sY.d.ts +0 -4
  956. package/dist/panel-header.d.ts +0 -42
  957. package/dist/panel-header.js +0 -7
  958. package/dist/panel-header.js.map +0 -1
  959. package/dist/styles/panel-header.css +0 -64
  960. package/dist/styles/tab-scaffold.css +0 -84
  961. package/dist/tab-scaffold.d.ts +0 -30
  962. package/dist/tab-scaffold.js +0 -51
  963. package/dist/tab-scaffold.js.map +0 -1
  964. package/dist/wire-tab-scaffold.d.ts +0 -11
  965. package/dist/wire-tab-scaffold.js +0 -21
  966. package/dist/wire-tab-scaffold.js.map +0 -1
  967. package/docs/design/templates/panel-header/icon-actions-dark.svg +0 -1
  968. package/docs/design/templates/panel-header/icon-actions.svg +0 -1
  969. package/docs/design/templates/panel-header/icon-summary-actions-dark.svg +0 -1
  970. package/docs/design/templates/panel-header/icon-summary-actions.svg +0 -1
  971. package/docs/design/templates/panel-header/no-icon-dark.svg +0 -1
  972. package/docs/design/templates/panel-header/no-icon.svg +0 -1
  973. package/docs/design/templates/panel-header/page-heading-dark.svg +0 -1
  974. package/docs/design/templates/panel-header/page-heading.svg +0 -1
  975. package/docs/design/templates/panel-header/title-only-dark.svg +0 -1
  976. package/docs/design/templates/panel-header/title-only.svg +0 -1
  977. package/docs/design/templates/panel-header-dark.svg +0 -1
  978. package/docs/design/templates/panel-header.svg +0 -1
  979. package/docs/tab-scaffold.md +0 -50
  980. package/ux-demo/recipes/recipes.css +0 -448
@@ -1,31 +0,0 @@
1
- import { jsxs, jsx } from 'kerfjs/jsx-runtime';
2
-
3
- // src/toolbar.tsx
4
- function Toolbar({
5
- leading,
6
- center,
7
- trailing,
8
- label,
9
- dividerSides = "b",
10
- className = ""
11
- }) {
12
- return /* @__PURE__ */ jsxs(
13
- "header",
14
- {
15
- class: `kui-toolbar ${className}`.trim(),
16
- "data-component": "toolbar",
17
- "divider-sides": dividerSides || void 0,
18
- "data-has-center": String(Boolean(center)),
19
- "aria-label": label,
20
- children: [
21
- /* @__PURE__ */ jsx("div", { class: "kui-toolbar__leading", children: leading }),
22
- /* @__PURE__ */ jsx("div", { class: "kui-toolbar__center", children: center }),
23
- /* @__PURE__ */ jsx("div", { class: "kui-toolbar__trailing", children: trailing })
24
- ]
25
- }
26
- );
27
- }
28
-
29
- export { Toolbar };
30
-
31
- //# sourceMappingURL=chunk-SYDMYBPG.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/toolbar.tsx"],"names":[],"mappings":";;;AAcO,SAAS,OAAA,CAAQ;AAAA,EACtB,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA,GAAe,GAAA;AAAA,EACf,SAAA,GAAY;AACd,CAAA,EAAiB;AACf,EAAA,uBACE,IAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,YAAA,EAAe,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MACvC,gBAAA,EAAe,SAAA;AAAA,MACf,iBAAe,YAAA,IAAgB,MAAA;AAAA,MAC/B,iBAAA,EAAiB,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,MACvC,YAAA,EAAY,KAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,sBAAA,EAAwB,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,wBAC3C,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,qBAAA,EAAuB,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,wBACzC,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,uBAAA,EAAyB,QAAA,EAAA,QAAA,EAAS;AAAA;AAAA;AAAA,GAC/C;AAEJ","file":"chunk-SYDMYBPG.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport type { DividerSides } from './divider-sides.js';\n\nexport interface ToolbarProps {\n leading?: SafeHtml;\n center?: SafeHtml;\n trailing?: SafeHtml;\n label?: string;\n /** Physical divider edges in canonical top/right/bottom/left order. Defaults to bottom. */\n dividerSides?: DividerSides;\n className?: string;\n}\n\nexport function Toolbar({\n leading,\n center,\n trailing,\n label,\n dividerSides = 'b',\n className = '',\n}: ToolbarProps) {\n return (\n <header\n class={`kui-toolbar ${className}`.trim()}\n data-component=\"toolbar\"\n divider-sides={dividerSides || undefined}\n data-has-center={String(Boolean(center))}\n aria-label={label}\n >\n <div class=\"kui-toolbar__leading\">{leading}</div>\n <div class=\"kui-toolbar__center\">{center}</div>\n <div class=\"kui-toolbar__trailing\">{trailing}</div>\n </header>\n );\n}\n\nexport type { DividerSides } from './divider-sides.js';\n"]}
@@ -1,25 +0,0 @@
1
- import { jsx } from 'kerfjs/jsx-runtime';
2
-
3
- // src/sunken-panel.tsx
4
- function SunkenPanel({
5
- children,
6
- ariaLabel,
7
- shape = "rounded",
8
- className = ""
9
- }) {
10
- return /* @__PURE__ */ jsx(
11
- "div",
12
- {
13
- class: `kui-sunken-panel ${className}`.trim(),
14
- "data-component": "sunken-panel",
15
- "data-shape": shape,
16
- role: ariaLabel ? "region" : void 0,
17
- "aria-label": ariaLabel,
18
- children
19
- }
20
- );
21
- }
22
-
23
- export { SunkenPanel };
24
-
25
- //# sourceMappingURL=chunk-TB6DY7H5.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/sunken-panel.tsx"],"names":[],"mappings":";;;AAkBO,SAAS,WAAA,CAAY;AAAA,EAC1B,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA,GAAQ,SAAA;AAAA,EACR,SAAA,GAAY;AACd,CAAA,EAAqB;AACnB,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAC5C,gBAAA,EAAe,cAAA;AAAA,MACf,YAAA,EAAY,KAAA;AAAA,MACZ,IAAA,EAAM,YAAY,QAAA,GAAW,MAAA;AAAA,MAC7B,YAAA,EAAY,SAAA;AAAA,MAEX;AAAA;AAAA,GACH;AAEJ","file":"chunk-TB6DY7H5.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nexport type SunkenPanelShape = 'rounded' | 'square';\n\nexport interface SunkenPanelProps {\n children?: SafeHtml | readonly SafeHtml[];\n /** Optional accessible landmark name for a distinct application region. */\n ariaLabel?: string;\n /** Corner shape: a rounded rectangle (default) or square corners. */\n shape?: SunkenPanelShape;\n className?: string;\n}\n\n/**\n * A lowered application surface with one compact inset and a vertical content\n * stack. The panel owns its background and padding; children own their own\n * borders and internal geometry.\n */\nexport function SunkenPanel({\n children,\n ariaLabel,\n shape = 'rounded',\n className = '',\n}: SunkenPanelProps) {\n return (\n <div\n class={`kui-sunken-panel ${className}`.trim()}\n data-component=\"sunken-panel\"\n data-shape={shape}\n role={ariaLabel ? 'region' : undefined}\n aria-label={ariaLabel}\n >\n {children}\n </div>\n );\n}\n"]}
@@ -1,108 +0,0 @@
1
- import { filterDataAttributes, filterControlAttributes } from './chunk-SRSJO5QE.js';
2
- import { Skeleton } from './chunk-RKVQEH4J.js';
3
- import { jsxs, jsx } from 'kerfjs/jsx-runtime';
4
-
5
- var PROTECTED_ROOT_DATA_ATTRIBUTES = /* @__PURE__ */ new Set([
6
- "data-component",
7
- "data-action",
8
- "data-item-id",
9
- "data-has-icon",
10
- "data-multiline",
11
- "data-state",
12
- "data-selected",
13
- "data-pressed"
14
- ]);
15
- var PROTECTED_TRAILING_DATA_ATTRIBUTES = /* @__PURE__ */ new Set([
16
- "data-component",
17
- "data-action",
18
- "data-item-id"
19
- ]);
20
- function ListActionRow({
21
- label,
22
- icon,
23
- action,
24
- itemId,
25
- selected = false,
26
- pressed,
27
- accessibleLabel,
28
- title,
29
- multiline = false,
30
- state,
31
- disabled = false,
32
- tabIndex,
33
- placeholder = false,
34
- trailingAction,
35
- trailingActionLabel,
36
- trailingActionIcon,
37
- trailingActionDisabled = false,
38
- trailingActionTitle,
39
- className = "",
40
- style,
41
- rootAttributes = {},
42
- trailingActionAttributes = {}
43
- }) {
44
- const extensionRootAttributes = filterDataAttributes(
45
- rootAttributes,
46
- PROTECTED_ROOT_DATA_ATTRIBUTES
47
- );
48
- const extensionTrailingAttributes = filterControlAttributes(
49
- trailingActionAttributes,
50
- PROTECTED_TRAILING_DATA_ATTRIBUTES
51
- );
52
- return /* @__PURE__ */ jsxs(
53
- "div",
54
- {
55
- ...extensionRootAttributes,
56
- class: `kui-list-action-row ${className}`.trim(),
57
- style,
58
- "data-component": "list-action-row",
59
- "data-item-id": itemId,
60
- "data-has-icon": String(Boolean(icon)),
61
- "data-multiline": multiline ? "true" : void 0,
62
- "data-state": state,
63
- "data-selected": String(selected),
64
- "data-pressed": pressed === void 0 ? void 0 : String(pressed),
65
- "data-placeholder": placeholder ? "true" : void 0,
66
- "aria-busy": placeholder ? "true" : void 0,
67
- children: [
68
- /* @__PURE__ */ jsxs(
69
- "button",
70
- {
71
- type: "button",
72
- class: "kui-list-action-row__primary",
73
- title: placeholder ? void 0 : title,
74
- disabled: disabled || placeholder,
75
- tabindex: placeholder ? -1 : tabIndex,
76
- "data-action": placeholder ? void 0 : action,
77
- "data-item-id": itemId,
78
- "aria-label": accessibleLabel,
79
- "aria-current": selected ? "page" : void 0,
80
- "aria-pressed": pressed === void 0 ? void 0 : String(pressed),
81
- children: [
82
- icon && /* @__PURE__ */ jsx("span", { class: "kui-list-action-row__icon", children: placeholder ? /* @__PURE__ */ jsx(Skeleton, { width: "1em", height: "1em" }) : icon }),
83
- /* @__PURE__ */ jsx("span", { class: "kui-list-action-row__label", children: placeholder ? /* @__PURE__ */ jsx(Skeleton, { width: "9em" }) : label })
84
- ]
85
- }
86
- ),
87
- /* @__PURE__ */ jsx(
88
- "button",
89
- {
90
- ...extensionTrailingAttributes,
91
- type: "button",
92
- class: "kui-list-action-row__trailing-action",
93
- "data-action": placeholder ? void 0 : trailingAction,
94
- "data-item-id": itemId,
95
- "aria-label": trailingActionLabel,
96
- title: trailingActionTitle ?? trailingActionLabel,
97
- disabled: trailingActionDisabled || placeholder || void 0,
98
- children: trailingActionIcon
99
- }
100
- )
101
- ]
102
- }
103
- );
104
- }
105
-
106
- export { ListActionRow };
107
-
108
- //# sourceMappingURL=chunk-UFZKLBCF.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/list-action-row.tsx"],"names":[],"mappings":"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","file":"chunk-UFZKLBCF.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport {\n filterControlAttributes,\n filterDataAttributes,\n} from './extension-attributes.js';\nimport { Skeleton } from './skeleton.js';\n\nconst PROTECTED_ROOT_DATA_ATTRIBUTES = new Set([\n 'data-component',\n 'data-action',\n 'data-item-id',\n 'data-has-icon',\n 'data-multiline',\n 'data-state',\n 'data-selected',\n 'data-pressed',\n]);\nconst PROTECTED_TRAILING_DATA_ATTRIBUTES = new Set([\n 'data-component',\n 'data-action',\n 'data-item-id',\n]);\n\ntype ListActionRowRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-component'?: never;\n 'data-action'?: never;\n 'data-item-id'?: never;\n 'data-has-icon'?: never;\n 'data-multiline'?: never;\n 'data-state'?: never;\n 'data-selected'?: never;\n 'data-pressed'?: never;\n }\n>;\n\ntype ListActionRowTrailingAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-component'?: never;\n 'data-action'?: never;\n 'data-item-id'?: never;\n popoverTarget?: string;\n popoverTargetAction?: 'toggle' | 'show' | 'hide';\n 'aria-controls'?: string;\n 'aria-haspopup'?: 'dialog' | 'menu' | 'listbox' | 'tree' | 'grid' | 'true';\n }\n>;\n\nexport interface ListActionRowProps {\n /** Visible dormant content for the primary button. Must not contain interactive descendants. */\n label: string | SafeHtml;\n /** Decorative dormant content for the primary button. Must not contain interactive descendants. */\n icon?: SafeHtml;\n action: string;\n itemId?: string;\n selected?: boolean;\n pressed?: boolean;\n accessibleLabel?: string;\n title?: string;\n multiline?: boolean;\n state?: string;\n disabled?: boolean;\n tabIndex?: number;\n /** Render as an unanimated loading skeleton, disabling both actions. */\n placeholder?: boolean;\n trailingAction: string;\n trailingActionLabel: string;\n /** Decorative dormant content for the trailing button. Must not contain interactive descendants. */\n trailingActionIcon: SafeHtml;\n trailingActionDisabled?: boolean;\n trailingActionTitle?: string;\n className?: string;\n style?: string;\n rootAttributes?: ListActionRowRootAttributes;\n trailingActionAttributes?: ListActionRowTrailingAttributes;\n}\n\nexport function ListActionRow({\n label,\n icon,\n action,\n itemId,\n selected = false,\n pressed,\n accessibleLabel,\n title,\n multiline = false,\n state,\n disabled = false,\n tabIndex,\n placeholder = false,\n trailingAction,\n trailingActionLabel,\n trailingActionIcon,\n trailingActionDisabled = false,\n trailingActionTitle,\n className = '',\n style,\n rootAttributes = {},\n trailingActionAttributes = {},\n}: ListActionRowProps) {\n const extensionRootAttributes = filterDataAttributes(\n rootAttributes,\n PROTECTED_ROOT_DATA_ATTRIBUTES,\n );\n const extensionTrailingAttributes = filterControlAttributes(\n trailingActionAttributes,\n PROTECTED_TRAILING_DATA_ATTRIBUTES,\n );\n\n return (\n <div\n {...extensionRootAttributes}\n class={`kui-list-action-row ${className}`.trim()}\n style={style}\n data-component=\"list-action-row\"\n data-item-id={itemId}\n data-has-icon={String(Boolean(icon))}\n data-multiline={multiline ? 'true' : undefined}\n data-state={state}\n data-selected={String(selected)}\n data-pressed={pressed === undefined ? undefined : String(pressed)}\n data-placeholder={placeholder ? 'true' : undefined}\n aria-busy={placeholder ? 'true' : undefined}\n >\n <button\n type=\"button\"\n class=\"kui-list-action-row__primary\"\n title={placeholder ? undefined : title}\n disabled={disabled || placeholder}\n tabindex={placeholder ? -1 : tabIndex}\n data-action={placeholder ? undefined : action}\n data-item-id={itemId}\n aria-label={accessibleLabel}\n aria-current={selected ? 'page' : undefined}\n aria-pressed={pressed === undefined ? undefined : String(pressed)}\n >\n {icon && (\n <span class=\"kui-list-action-row__icon\">\n {placeholder ? <Skeleton width=\"1em\" height=\"1em\" /> : icon}\n </span>\n )}\n <span class=\"kui-list-action-row__label\">\n {placeholder ? <Skeleton width=\"9em\" /> : label}\n </span>\n </button>\n <button\n {...extensionTrailingAttributes}\n type=\"button\"\n class=\"kui-list-action-row__trailing-action\"\n data-action={placeholder ? undefined : trailingAction}\n data-item-id={itemId}\n aria-label={trailingActionLabel}\n title={trailingActionTitle ?? trailingActionLabel}\n disabled={trailingActionDisabled || placeholder || undefined}\n >\n {trailingActionIcon}\n </button>\n </div>\n );\n}\n"]}
@@ -1,281 +0,0 @@
1
- // src/wire-tab-bars.ts
2
- var AUTO_SCROLL_EDGE_PX = 56;
3
- var AUTO_SCROLL_MIN_PX_PER_SECOND = 180;
4
- var AUTO_SCROLL_MAX_PX_PER_SECOND = 900;
5
- function reorderTabs(items, getId, sourceId, targetId, position) {
6
- if (sourceId === targetId) return [...items];
7
- const source = items.find((item) => getId(item) === sourceId);
8
- if (!source || !items.some((item) => getId(item) === targetId))
9
- return [...items];
10
- const remaining = items.filter((item) => getId(item) !== sourceId);
11
- const targetIndex = remaining.findIndex((item) => getId(item) === targetId);
12
- remaining.splice(targetIndex + (position === "after" ? 1 : 0), 0, source);
13
- return remaining;
14
- }
15
- function tabRoot(target) {
16
- return target instanceof Element ? target.closest('[data-component="app-tab"]') ?? void 0 : void 0;
17
- }
18
- function tabBar(tab) {
19
- return tab.closest('[data-component="tab-bar"]') ?? void 0;
20
- }
21
- function tabId(tab) {
22
- return tab.dataset.tabId || void 0;
23
- }
24
- function barId(bar) {
25
- return bar.dataset.tabBarId || void 0;
26
- }
27
- function positionFor(event, tab) {
28
- const bounds = tab.getBoundingClientRect();
29
- return event.clientX < bounds.left + bounds.width / 2 ? "before" : "after";
30
- }
31
- function tabsIn(bar) {
32
- return [
33
- ...bar.querySelectorAll(
34
- '[data-kui-tab-list] [role="tab"]'
35
- )
36
- ];
37
- }
38
- function reveal(tab) {
39
- tab?.scrollIntoView({ block: "nearest", inline: "nearest" });
40
- }
41
- function wireTabBars(root, { onReorder, activation = "automatic" }) {
42
- const ownerDocument = root.nodeType === 9 ? root : root.ownerDocument;
43
- const view = ownerDocument.defaultView;
44
- let autoScroll;
45
- const stopAutoScroll = () => {
46
- if (!autoScroll) return;
47
- if (autoScroll.frame !== void 0)
48
- view.cancelAnimationFrame(autoScroll.frame);
49
- delete autoScroll.strip.dataset.tabAutoscroll;
50
- autoScroll = void 0;
51
- };
52
- const runAutoScroll = (time) => {
53
- const current = autoScroll;
54
- if (!current) return;
55
- current.frame = void 0;
56
- const elapsed = current.previousTime === void 0 ? 1e3 / 60 : Math.min(40, Math.max(1, time - current.previousTime));
57
- current.previousTime = time;
58
- const maximum = Math.max(
59
- 0,
60
- current.strip.scrollWidth - current.strip.clientWidth
61
- );
62
- const previous = current.strip.scrollLeft;
63
- current.strip.scrollLeft = Math.max(
64
- 0,
65
- Math.min(maximum, previous + current.velocity * elapsed / 1e3)
66
- );
67
- if (current.strip.scrollLeft === previous) {
68
- stopAutoScroll();
69
- return;
70
- }
71
- current.frame = view.requestAnimationFrame(runAutoScroll);
72
- };
73
- const updateAutoScroll = (event, strip) => {
74
- if (strip.scrollWidth <= strip.clientWidth) {
75
- stopAutoScroll();
76
- return;
77
- }
78
- const bounds = strip.getBoundingClientRect();
79
- const edge = Math.min(AUTO_SCROLL_EDGE_PX, bounds.width / 3);
80
- const startDistance = event.clientX - bounds.left;
81
- const endDistance = bounds.right - event.clientX;
82
- let direction = 0;
83
- let strength = 0;
84
- if (startDistance >= 0 && startDistance < edge) {
85
- direction = -1;
86
- strength = 1 - startDistance / edge;
87
- } else if (endDistance >= 0 && endDistance < edge) {
88
- direction = 1;
89
- strength = 1 - endDistance / edge;
90
- }
91
- if (direction === 0) {
92
- stopAutoScroll();
93
- return;
94
- }
95
- const maximum = Math.max(0, strip.scrollWidth - strip.clientWidth);
96
- if (direction < 0 && strip.scrollLeft <= 0 || direction > 0 && strip.scrollLeft >= maximum) {
97
- stopAutoScroll();
98
- return;
99
- }
100
- const speed = AUTO_SCROLL_MIN_PX_PER_SECOND + (AUTO_SCROLL_MAX_PX_PER_SECOND - AUTO_SCROLL_MIN_PX_PER_SECOND) * strength * strength;
101
- if (autoScroll?.strip !== strip) stopAutoScroll();
102
- autoScroll ??= {
103
- strip,
104
- velocity: 0,
105
- frame: void 0,
106
- previousTime: void 0
107
- };
108
- autoScroll.velocity = direction * speed;
109
- strip.dataset.tabAutoscroll = direction < 0 ? "start" : "end";
110
- autoScroll.frame ??= view.requestAnimationFrame(runAutoScroll);
111
- };
112
- let dragged;
113
- const clearDropPositions = () => root.querySelectorAll("[data-tab-drop-position]").forEach((tab) => delete tab.dataset.tabDropPosition);
114
- const clear = () => {
115
- stopAutoScroll();
116
- dragged = void 0;
117
- root.querySelectorAll(
118
- "[data-tab-dragging], [data-tab-drop-position]"
119
- ).forEach((tab) => {
120
- delete tab.dataset.tabDragging;
121
- delete tab.dataset.tabDropPosition;
122
- });
123
- };
124
- let disposed = false;
125
- const afterControlledRender = (sourceBarId, sourceTabId) => globalThis.queueMicrotask(() => {
126
- if (disposed) return;
127
- const tab = [
128
- ...root.querySelectorAll('[data-component="app-tab"]')
129
- ].find((candidate) => {
130
- const candidateBar = tabBar(candidate);
131
- return tabId(candidate) === sourceTabId && candidateBar !== void 0 && barId(candidateBar) === sourceBarId;
132
- });
133
- const button = tab?.querySelector('[role="tab"]');
134
- button?.focus();
135
- reveal(button);
136
- });
137
- const onDragStart = (event) => {
138
- const dragEvent = event;
139
- const tab = tabRoot(event.target);
140
- const bar = tab && tabBar(tab);
141
- const sourceId = tab && tabId(tab);
142
- const sourceBarId = bar && barId(bar);
143
- if (!tab || tab.getAttribute("draggable") !== "true" || !sourceId || !sourceBarId)
144
- return;
145
- dragged = { barId: sourceBarId, tabId: sourceId };
146
- tab.dataset.tabDragging = "true";
147
- if (dragEvent.dataTransfer) {
148
- dragEvent.dataTransfer.effectAllowed = "move";
149
- dragEvent.dataTransfer.setData(
150
- "application/x-kerf-tab",
151
- `${sourceBarId}:${sourceId}`
152
- );
153
- }
154
- };
155
- const onDragOver = (event) => {
156
- const dragEvent = event;
157
- const tab = tabRoot(event.target);
158
- const bar = event.target instanceof Element ? event.target.closest('[data-component="tab-bar"]') ?? void 0 : void 0;
159
- const targetId = tab && tabId(tab);
160
- const targetBarId = bar && barId(bar);
161
- if (!dragged || !bar || targetBarId !== dragged.barId) {
162
- stopAutoScroll();
163
- clearDropPositions();
164
- return;
165
- }
166
- dragEvent.preventDefault();
167
- const strip = bar.querySelector("[data-kui-tab-list]");
168
- if (strip) updateAutoScroll(dragEvent, strip);
169
- else stopAutoScroll();
170
- clearDropPositions();
171
- if (!tab || !targetId || targetId === dragged.tabId) return;
172
- tab.dataset.tabDropPosition = positionFor(dragEvent, tab);
173
- if (dragEvent.dataTransfer) dragEvent.dataTransfer.dropEffect = "move";
174
- };
175
- const onDrop = (event) => {
176
- const dragEvent = event;
177
- const tab = tabRoot(event.target);
178
- const bar = tab && tabBar(tab);
179
- const targetId = tab && tabId(tab);
180
- const targetBarId = bar && barId(bar);
181
- if (!dragged || !tab || !targetId || targetId === dragged.tabId || targetBarId !== dragged.barId) {
182
- clear();
183
- return;
184
- }
185
- dragEvent.preventDefault();
186
- const change = {
187
- barId: dragged.barId,
188
- sourceId: dragged.tabId,
189
- targetId,
190
- position: positionFor(dragEvent, tab),
191
- source: "pointer"
192
- };
193
- clear();
194
- onReorder(change);
195
- afterControlledRender(change.barId, change.sourceId);
196
- };
197
- const onKeyDown = (event) => {
198
- const keyboardEvent = event;
199
- const button = event.target instanceof Element ? event.target.closest('[role="tab"]') : null;
200
- const tab = button && tabRoot(button);
201
- const bar = tab && tabBar(tab);
202
- if (!button || !tab || !bar) return;
203
- if (keyboardEvent.key === "Delete" || keyboardEvent.key === "Backspace") {
204
- const close = tab.querySelector(".kui-app-tab__close");
205
- if (!close) return;
206
- keyboardEvent.preventDefault();
207
- close.click();
208
- return;
209
- }
210
- const tabs = tabsIn(bar);
211
- const current = tabs.indexOf(button);
212
- if (current < 0) return;
213
- if (keyboardEvent.altKey && keyboardEvent.shiftKey && (keyboardEvent.key === "ArrowLeft" || keyboardEvent.key === "ArrowRight")) {
214
- const target2 = tabs[current + (keyboardEvent.key === "ArrowLeft" ? -1 : 1)];
215
- const sourceId = tabId(tab);
216
- const targetRoot = target2 && tabRoot(target2);
217
- const targetId = targetRoot && tabId(targetRoot);
218
- const sourceBarId = barId(bar);
219
- if (!target2 || !sourceId || !targetId || !sourceBarId || tab.getAttribute("draggable") !== "true")
220
- return;
221
- keyboardEvent.preventDefault();
222
- onReorder({
223
- barId: sourceBarId,
224
- sourceId,
225
- targetId,
226
- position: keyboardEvent.key === "ArrowLeft" ? "before" : "after",
227
- source: "keyboard"
228
- });
229
- afterControlledRender(sourceBarId, sourceId);
230
- return;
231
- }
232
- let next;
233
- if (keyboardEvent.key === "ArrowRight") next = (current + 1) % tabs.length;
234
- else if (keyboardEvent.key === "ArrowLeft")
235
- next = (current - 1 + tabs.length) % tabs.length;
236
- else if (keyboardEvent.key === "Home") next = 0;
237
- else if (keyboardEvent.key === "End") next = tabs.length - 1;
238
- if (next === void 0) return;
239
- keyboardEvent.preventDefault();
240
- const perBar = bar.dataset.tabActivation;
241
- const mode = perBar === "manual" || perBar === "automatic" ? perBar : activation;
242
- const target = tabs[next];
243
- target.focus();
244
- if (mode === "automatic") {
245
- target.click();
246
- if (!target.isConnected)
247
- afterControlledRender(
248
- bar.dataset.tabBarId,
249
- tabRoot(target).dataset.tabId
250
- );
251
- }
252
- reveal(target);
253
- };
254
- const onFocusIn = (event) => {
255
- const tab = event.target instanceof HTMLElement && event.target.matches('[role="tab"]') ? event.target : void 0;
256
- reveal(tab);
257
- };
258
- root.addEventListener("dragstart", onDragStart);
259
- root.addEventListener("dragover", onDragOver);
260
- root.addEventListener("drop", onDrop);
261
- root.addEventListener("dragend", clear);
262
- root.addEventListener("keydown", onKeyDown);
263
- root.addEventListener("focusin", onFocusIn);
264
- root.querySelectorAll(
265
- '[data-kui-tab-list] [role="tab"][aria-selected="true"]'
266
- ).forEach(reveal);
267
- return () => {
268
- disposed = true;
269
- clear();
270
- root.removeEventListener("dragstart", onDragStart);
271
- root.removeEventListener("dragover", onDragOver);
272
- root.removeEventListener("drop", onDrop);
273
- root.removeEventListener("dragend", clear);
274
- root.removeEventListener("keydown", onKeyDown);
275
- root.removeEventListener("focusin", onFocusIn);
276
- };
277
- }
278
-
279
- export { reorderTabs, wireTabBars };
280
-
281
- //# sourceMappingURL=chunk-UKKSMZYT.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/wire-tab-bars.ts"],"names":["target"],"mappings":"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","file":"chunk-UKKSMZYT.js","sourcesContent":["import type { TabActivation } from './tab-bar.js';\n\nexport type TabReorderSource = 'pointer' | 'keyboard';\nexport type TabDropPosition = 'before' | 'after';\n\nexport interface TabReorder {\n barId: string;\n sourceId: string;\n targetId: string;\n position: TabDropPosition;\n source: TabReorderSource;\n}\n\nexport type { TabActivation } from './tab-bar.js';\n\nexport interface WireTabBarsOptions {\n onReorder: (change: TabReorder) => void;\n /**\n * How arrow / Home / End keys activate tabs (default `'automatic'`):\n * - `'automatic'` moves roving focus **and** selects the focused tab (clicks it).\n * - `'manual'` moves roving focus only; the user selects with Enter / Space / click\n * (the ARIA Tabs manual-activation pattern). Use this when activation is a heavy or\n * side-effecting action (e.g. a tab that loads a project) so arrowing through the\n * strip doesn't trigger it on every tab.\n *\n * A per-bar `data-tab-activation=\"manual\" | \"automatic\"` attribute (see the `TabBar`\n * `activation` prop) overrides this option for that strip.\n */\n activation?: TabActivation;\n}\n\ntype TabRoot = HTMLElement;\ntype TabBarRoot = HTMLElement;\n\nconst AUTO_SCROLL_EDGE_PX = 56;\nconst AUTO_SCROLL_MIN_PX_PER_SECOND = 180;\nconst AUTO_SCROLL_MAX_PX_PER_SECOND = 900;\n\nexport function reorderTabs<T>(\n items: readonly T[],\n getId: (item: T) => string,\n sourceId: string,\n targetId: string,\n position: TabDropPosition,\n): T[] {\n if (sourceId === targetId) return [...items];\n const source = items.find((item) => getId(item) === sourceId);\n if (!source || !items.some((item) => getId(item) === targetId))\n return [...items];\n const remaining = items.filter((item) => getId(item) !== sourceId);\n const targetIndex = remaining.findIndex((item) => getId(item) === targetId);\n remaining.splice(targetIndex + (position === 'after' ? 1 : 0), 0, source);\n return remaining;\n}\n\nfunction tabRoot(target: EventTarget | null): TabRoot | undefined {\n return target instanceof Element\n ? (target.closest<TabRoot>('[data-component=\"app-tab\"]') ?? undefined)\n : undefined;\n}\n\nfunction tabBar(tab: TabRoot): TabBarRoot | undefined {\n return tab.closest<TabBarRoot>('[data-component=\"tab-bar\"]') ?? undefined;\n}\n\nfunction tabId(tab: TabRoot): string | undefined {\n return tab.dataset.tabId || undefined;\n}\n\nfunction barId(bar: TabBarRoot): string | undefined {\n return bar.dataset.tabBarId || undefined;\n}\n\nfunction positionFor(event: DragEvent, tab: TabRoot): TabDropPosition {\n const bounds = tab.getBoundingClientRect();\n return event.clientX < bounds.left + bounds.width / 2 ? 'before' : 'after';\n}\n\nfunction tabsIn(bar: TabBarRoot): HTMLButtonElement[] {\n return [\n ...bar.querySelectorAll<HTMLButtonElement>(\n '[data-kui-tab-list] [role=\"tab\"]',\n ),\n ];\n}\n\nfunction reveal(tab: HTMLElement | null | undefined): void {\n tab?.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n}\n\n/** Wire reordering and keyboard navigation while leaving controlled state in the application. */\nexport function wireTabBars(\n root: HTMLElement | Document,\n { onReorder, activation = 'automatic' }: WireTabBarsOptions,\n): () => void {\n const ownerDocument = (\n root.nodeType === 9 ? (root as Document) : root.ownerDocument\n )!;\n const view = ownerDocument.defaultView!;\n let autoScroll:\n | {\n strip: HTMLElement;\n velocity: number;\n frame: number | undefined;\n previousTime: number | undefined;\n }\n | undefined;\n const stopAutoScroll = () => {\n if (!autoScroll) return;\n if (autoScroll.frame !== undefined)\n view.cancelAnimationFrame(autoScroll.frame);\n delete autoScroll.strip.dataset.tabAutoscroll;\n autoScroll = undefined;\n };\n const runAutoScroll = (time: number) => {\n const current = autoScroll;\n if (!current) return;\n current.frame = undefined;\n const elapsed =\n current.previousTime === undefined\n ? 1000 / 60\n : Math.min(40, Math.max(1, time - current.previousTime));\n current.previousTime = time;\n const maximum = Math.max(\n 0,\n current.strip.scrollWidth - current.strip.clientWidth,\n );\n const previous = current.strip.scrollLeft;\n current.strip.scrollLeft = Math.max(\n 0,\n Math.min(maximum, previous + (current.velocity * elapsed) / 1000),\n );\n if (current.strip.scrollLeft === previous) {\n stopAutoScroll();\n return;\n }\n current.frame = view.requestAnimationFrame(runAutoScroll);\n };\n const updateAutoScroll = (event: DragEvent, strip: HTMLElement) => {\n if (strip.scrollWidth <= strip.clientWidth) {\n stopAutoScroll();\n return;\n }\n const bounds = strip.getBoundingClientRect();\n const edge = Math.min(AUTO_SCROLL_EDGE_PX, bounds.width / 3);\n const startDistance = event.clientX - bounds.left;\n const endDistance = bounds.right - event.clientX;\n let direction = 0;\n let strength = 0;\n if (startDistance >= 0 && startDistance < edge) {\n direction = -1;\n strength = 1 - startDistance / edge;\n } else if (endDistance >= 0 && endDistance < edge) {\n direction = 1;\n strength = 1 - endDistance / edge;\n }\n if (direction === 0) {\n stopAutoScroll();\n return;\n }\n const maximum = Math.max(0, strip.scrollWidth - strip.clientWidth);\n if (\n (direction < 0 && strip.scrollLeft <= 0) ||\n (direction > 0 && strip.scrollLeft >= maximum)\n ) {\n stopAutoScroll();\n return;\n }\n const speed =\n AUTO_SCROLL_MIN_PX_PER_SECOND +\n (AUTO_SCROLL_MAX_PX_PER_SECOND - AUTO_SCROLL_MIN_PX_PER_SECOND) *\n strength *\n strength;\n if (autoScroll?.strip !== strip) stopAutoScroll();\n autoScroll ??= {\n strip,\n velocity: 0,\n frame: undefined,\n previousTime: undefined,\n };\n autoScroll.velocity = direction * speed;\n strip.dataset.tabAutoscroll = direction < 0 ? 'start' : 'end';\n autoScroll.frame ??= view.requestAnimationFrame(runAutoScroll);\n };\n let dragged: { barId: string; tabId: string } | undefined;\n const clearDropPositions = () =>\n root\n .querySelectorAll<HTMLElement>('[data-tab-drop-position]')\n .forEach((tab) => delete tab.dataset.tabDropPosition);\n const clear = () => {\n stopAutoScroll();\n dragged = undefined;\n root\n .querySelectorAll<HTMLElement>(\n '[data-tab-dragging], [data-tab-drop-position]',\n )\n .forEach((tab) => {\n delete tab.dataset.tabDragging;\n delete tab.dataset.tabDropPosition;\n });\n };\n let disposed = false;\n const afterControlledRender = (sourceBarId: string, sourceTabId: string) =>\n globalThis.queueMicrotask(() => {\n if (disposed) return;\n const tab = [\n ...root.querySelectorAll<TabRoot>('[data-component=\"app-tab\"]'),\n ].find((candidate) => {\n const candidateBar = tabBar(candidate);\n return (\n tabId(candidate) === sourceTabId &&\n candidateBar !== undefined &&\n barId(candidateBar) === sourceBarId\n );\n });\n const button = tab?.querySelector<HTMLButtonElement>('[role=\"tab\"]');\n button?.focus();\n reveal(button);\n });\n\n const onDragStart = (event: Event) => {\n const dragEvent = event as DragEvent;\n const tab = tabRoot(event.target);\n const bar = tab && tabBar(tab);\n const sourceId = tab && tabId(tab);\n const sourceBarId = bar && barId(bar);\n if (\n !tab ||\n tab.getAttribute('draggable') !== 'true' ||\n !sourceId ||\n !sourceBarId\n )\n return;\n dragged = { barId: sourceBarId, tabId: sourceId };\n tab.dataset.tabDragging = 'true';\n if (dragEvent.dataTransfer) {\n dragEvent.dataTransfer.effectAllowed = 'move';\n dragEvent.dataTransfer.setData(\n 'application/x-kerf-tab',\n `${sourceBarId}:${sourceId}`,\n );\n }\n };\n const onDragOver = (event: Event) => {\n const dragEvent = event as DragEvent;\n const tab = tabRoot(event.target);\n const bar =\n event.target instanceof Element\n ? (event.target.closest<TabBarRoot>('[data-component=\"tab-bar\"]') ??\n undefined)\n : undefined;\n const targetId = tab && tabId(tab);\n const targetBarId = bar && barId(bar);\n if (!dragged || !bar || targetBarId !== dragged.barId) {\n stopAutoScroll();\n clearDropPositions();\n return;\n }\n dragEvent.preventDefault();\n const strip = bar.querySelector<HTMLElement>('[data-kui-tab-list]');\n if (strip) updateAutoScroll(dragEvent, strip);\n else stopAutoScroll();\n clearDropPositions();\n if (!tab || !targetId || targetId === dragged.tabId) return;\n tab.dataset.tabDropPosition = positionFor(dragEvent, tab);\n if (dragEvent.dataTransfer) dragEvent.dataTransfer.dropEffect = 'move';\n };\n const onDrop = (event: Event) => {\n const dragEvent = event as DragEvent;\n const tab = tabRoot(event.target);\n const bar = tab && tabBar(tab);\n const targetId = tab && tabId(tab);\n const targetBarId = bar && barId(bar);\n if (\n !dragged ||\n !tab ||\n !targetId ||\n targetId === dragged.tabId ||\n targetBarId !== dragged.barId\n ) {\n clear();\n return;\n }\n dragEvent.preventDefault();\n const change: TabReorder = {\n barId: dragged.barId,\n sourceId: dragged.tabId,\n targetId,\n position: positionFor(dragEvent, tab),\n source: 'pointer',\n };\n clear();\n onReorder(change);\n afterControlledRender(change.barId, change.sourceId);\n };\n const onKeyDown = (event: Event) => {\n const keyboardEvent = event as KeyboardEvent;\n const button =\n event.target instanceof Element\n ? event.target.closest<HTMLButtonElement>('[role=\"tab\"]')\n : null;\n const tab = button && tabRoot(button);\n const bar = tab && tabBar(tab);\n if (!button || !tab || !bar) return;\n if (keyboardEvent.key === 'Delete' || keyboardEvent.key === 'Backspace') {\n const close = tab.querySelector<HTMLButtonElement>('.kui-app-tab__close');\n if (!close) return;\n keyboardEvent.preventDefault();\n close.click();\n return;\n }\n const tabs = tabsIn(bar);\n const current = tabs.indexOf(button);\n if (current < 0) return;\n if (\n keyboardEvent.altKey &&\n keyboardEvent.shiftKey &&\n (keyboardEvent.key === 'ArrowLeft' || keyboardEvent.key === 'ArrowRight')\n ) {\n const target =\n tabs[current + (keyboardEvent.key === 'ArrowLeft' ? -1 : 1)];\n const sourceId = tabId(tab);\n const targetRoot = target && tabRoot(target);\n const targetId = targetRoot && tabId(targetRoot);\n const sourceBarId = barId(bar);\n if (\n !target ||\n !sourceId ||\n !targetId ||\n !sourceBarId ||\n tab.getAttribute('draggable') !== 'true'\n )\n return;\n keyboardEvent.preventDefault();\n onReorder({\n barId: sourceBarId,\n sourceId,\n targetId,\n position: keyboardEvent.key === 'ArrowLeft' ? 'before' : 'after',\n source: 'keyboard',\n });\n afterControlledRender(sourceBarId, sourceId);\n return;\n }\n let next: number | undefined;\n if (keyboardEvent.key === 'ArrowRight') next = (current + 1) % tabs.length;\n else if (keyboardEvent.key === 'ArrowLeft')\n next = (current - 1 + tabs.length) % tabs.length;\n else if (keyboardEvent.key === 'Home') next = 0;\n else if (keyboardEvent.key === 'End') next = tabs.length - 1;\n if (next === undefined) return;\n keyboardEvent.preventDefault();\n // A per-bar data-tab-activation attribute overrides the wireTabBars option.\n const perBar = bar.dataset.tabActivation;\n const mode: TabActivation =\n perBar === 'manual' || perBar === 'automatic' ? perBar : activation;\n const target = tabs[next]!;\n target.focus();\n // Manual activation moves roving focus only; the user selects with Enter / Space\n // (native on the tab <button>) or click. Automatic also selects the focused tab.\n if (mode === 'automatic') {\n target.click();\n // Activation can synchronously replace the controlled strip. Resolve the\n // logical tab again after rendering instead of leaving focus on a dead node.\n if (!target.isConnected)\n afterControlledRender(\n bar.dataset.tabBarId!,\n tabRoot(target)!.dataset.tabId!,\n );\n }\n reveal(target);\n };\n const onFocusIn = (event: Event) => {\n const tab =\n event.target instanceof HTMLElement &&\n event.target.matches('[role=\"tab\"]')\n ? event.target\n : undefined;\n reveal(tab);\n };\n\n root.addEventListener('dragstart', onDragStart);\n root.addEventListener('dragover', onDragOver);\n root.addEventListener('drop', onDrop);\n root.addEventListener('dragend', clear);\n root.addEventListener('keydown', onKeyDown);\n root.addEventListener('focusin', onFocusIn);\n root\n .querySelectorAll<HTMLElement>(\n '[data-kui-tab-list] [role=\"tab\"][aria-selected=\"true\"]',\n )\n .forEach(reveal);\n\n return () => {\n disposed = true;\n clear();\n root.removeEventListener('dragstart', onDragStart);\n root.removeEventListener('dragover', onDragOver);\n root.removeEventListener('drop', onDrop);\n root.removeEventListener('dragend', clear);\n root.removeEventListener('keydown', onKeyDown);\n root.removeEventListener('focusin', onFocusIn);\n };\n}\n"]}
@@ -1,26 +0,0 @@
1
- import { jsx } from 'kerfjs/jsx-runtime';
2
-
3
- // src/lucide-icon.tsx
4
- function LucideIcon({ icon, name, className, label }) {
5
- return /* @__PURE__ */ jsx(
6
- "svg",
7
- {
8
- class: className,
9
- "data-lucide": name,
10
- role: label ? "img" : void 0,
11
- "aria-label": label,
12
- "aria-hidden": label ? void 0 : "true",
13
- viewBox: "0 0 24 24",
14
- fill: "none",
15
- stroke: "currentColor",
16
- "stroke-width": "2",
17
- "stroke-linecap": "round",
18
- "stroke-linejoin": "round",
19
- children: icon.map(([tag, attrs]) => jsx(tag, attrs))
20
- }
21
- );
22
- }
23
-
24
- export { LucideIcon };
25
-
26
- //# sourceMappingURL=chunk-W2FK7ZNY.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lucide-icon.tsx"],"names":["jsx"],"mappings":";;;AAaO,SAAS,WAAW,EAAE,IAAA,EAAM,IAAA,EAAM,SAAA,EAAW,OAAM,EAAoB;AAC5E,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,SAAA;AAAA,MACP,aAAA,EAAa,IAAA;AAAA,MACb,IAAA,EAAM,QAAQ,KAAA,GAAQ,MAAA;AAAA,MACtB,YAAA,EAAY,KAAA;AAAA,MACZ,aAAA,EAAa,QAAQ,MAAA,GAAY,MAAA;AAAA,MACjC,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,cAAA,EAAa,GAAA;AAAA,MACb,gBAAA,EAAe,OAAA;AAAA,MACf,iBAAA,EAAgB,OAAA;AAAA,MAEf,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,GAAA,CAAI,GAAA,EAAK,KAAK,CAAC;AAAA;AAAA,GAC7C;AAEJ","file":"chunk-W2FK7ZNY.js","sourcesContent":["import { jsx } from 'kerfjs/jsx-runtime';\nimport type { IconNode } from 'lucide';\n\nexport type LucideNode = IconNode;\n\nexport interface LucideIconProps {\n icon: LucideNode;\n name: string;\n className?: string;\n label?: string;\n}\n\n/** Render a Lucide-compatible icon node without copying icon SVG strings. */\nexport function LucideIcon({ icon, name, className, label }: LucideIconProps) {\n return (\n <svg\n class={className}\n data-lucide={name}\n role={label ? 'img' : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : 'true'}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n {icon.map(([tag, attrs]) => jsx(tag, attrs))}\n </svg>\n );\n}\n"]}
@@ -1,40 +0,0 @@
1
- import { Skeleton } from './chunk-RKVQEH4J.js';
2
- import { jsxs, jsx } from 'kerfjs/jsx-runtime';
3
-
4
- function StateBanner({
5
- title,
6
- detail,
7
- badge,
8
- icon,
9
- action,
10
- tone = "info",
11
- urgency = "status",
12
- className = "",
13
- placeholder = false
14
- }) {
15
- return /* @__PURE__ */ jsxs(
16
- "section",
17
- {
18
- class: `kui-state-banner ${className}`.trim(),
19
- "data-component": "state-banner",
20
- "data-tone": tone,
21
- "data-placeholder": placeholder ? "true" : void 0,
22
- role: urgency,
23
- "aria-live": urgency === "alert" ? "assertive" : "polite",
24
- "aria-busy": placeholder ? "true" : void 0,
25
- children: [
26
- icon && /* @__PURE__ */ jsx("span", { class: "kui-state-banner__icon", children: icon }),
27
- /* @__PURE__ */ jsxs("div", { class: "kui-state-banner__copy", children: [
28
- /* @__PURE__ */ jsx("strong", { children: placeholder ? /* @__PURE__ */ jsx(Skeleton, { width: "10em" }) : title }),
29
- badge && /* @__PURE__ */ jsx("span", { class: "kui-state-banner__badge", children: placeholder ? /* @__PURE__ */ jsx(Skeleton, { width: "1.75em" }) : badge }),
30
- (placeholder || detail) && /* @__PURE__ */ jsx("span", { class: "kui-state-banner__detail", children: placeholder ? /* @__PURE__ */ jsx(Skeleton, { width: "16em" }) : detail })
31
- ] }),
32
- action && /* @__PURE__ */ jsx("div", { class: "kui-state-banner__action", children: action })
33
- ]
34
- }
35
- );
36
- }
37
-
38
- export { StateBanner };
39
-
40
- //# sourceMappingURL=chunk-W5L2JSBY.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/state-banner.tsx"],"names":[],"mappings":";;;AAsBO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA,GAAO,MAAA;AAAA,EACP,OAAA,GAAU,QAAA;AAAA,EACV,SAAA,GAAY,EAAA;AAAA,EACZ,WAAA,GAAc;AAChB,CAAA,EAAqB;AACnB,EAAA,uBACE,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAC5C,gBAAA,EAAe,cAAA;AAAA,MACf,WAAA,EAAW,IAAA;AAAA,MACX,kBAAA,EAAkB,cAAc,MAAA,GAAS,MAAA;AAAA,MACzC,IAAA,EAAM,OAAA;AAAA,MACN,WAAA,EAAW,OAAA,KAAY,OAAA,GAAU,WAAA,GAAc,QAAA;AAAA,MAC/C,WAAA,EAAW,cAAc,MAAA,GAAS,MAAA;AAAA,MAEjC,QAAA,EAAA;AAAA,QAAA,IAAA,oBAAQ,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,wBAAA,EAA0B,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,wBACpD,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,wBAAA,EACT,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,YAAQ,QAAA,EAAA,WAAA,mBAAc,GAAA,CAAC,YAAS,KAAA,EAAM,MAAA,EAAO,IAAK,KAAA,EAAM,CAAA;AAAA,UACxD,KAAA,oBACC,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,yBAAA,EACT,QAAA,EAAA,WAAA,mBAAc,GAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAM,QAAA,EAAS,CAAA,GAAK,KAAA,EAC/C,CAAA;AAAA,UAAA,CAEA,WAAA,IAAe,MAAA,qBACf,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,0BAAA,EACT,QAAA,EAAA,WAAA,mBAAc,GAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAM,MAAA,EAAO,CAAA,GAAK,MAAA,EAC7C;AAAA,SAAA,EAEJ,CAAA;AAAA,QACC,MAAA,oBAAU,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAA4B,QAAA,EAAA,MAAA,EAAO;AAAA;AAAA;AAAA,GAC3D;AAEJ","file":"chunk-W5L2JSBY.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport { Skeleton } from './skeleton.js';\n\nexport type StateBannerTone =\n 'neutral' | 'info' | 'success' | 'warning' | 'danger';\nexport type StateBannerUrgency = 'status' | 'alert';\n\nexport interface StateBannerProps {\n title: string;\n detail?: string;\n /** Optional compact status or count shown beside the title. */\n badge?: string;\n icon?: SafeHtml;\n action?: SafeHtml;\n tone?: StateBannerTone;\n urgency?: StateBannerUrgency;\n className?: string;\n /** Render the title, badge, and detail as unanimated loading skeletons, keeping the icon and tone. */\n placeholder?: boolean;\n}\n\nexport function StateBanner({\n title,\n detail,\n badge,\n icon,\n action,\n tone = 'info',\n urgency = 'status',\n className = '',\n placeholder = false,\n}: StateBannerProps) {\n return (\n <section\n class={`kui-state-banner ${className}`.trim()}\n data-component=\"state-banner\"\n data-tone={tone}\n data-placeholder={placeholder ? 'true' : undefined}\n role={urgency}\n aria-live={urgency === 'alert' ? 'assertive' : 'polite'}\n aria-busy={placeholder ? 'true' : undefined}\n >\n {icon && <span class=\"kui-state-banner__icon\">{icon}</span>}\n <div class=\"kui-state-banner__copy\">\n <strong>{placeholder ? <Skeleton width=\"10em\" /> : title}</strong>\n {badge && (\n <span class=\"kui-state-banner__badge\">\n {placeholder ? <Skeleton width=\"1.75em\" /> : badge}\n </span>\n )}\n {(placeholder || detail) && (\n <span class=\"kui-state-banner__detail\">\n {placeholder ? <Skeleton width=\"16em\" /> : detail}\n </span>\n )}\n </div>\n {action && <div class=\"kui-state-banner__action\">{action}</div>}\n </section>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/app-tab.tsx"],"names":[],"mappings":"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","file":"chunk-Y45PPBDV.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport { filterDataAttributes } from './extension-attributes.js';\nimport { Skeleton } from './skeleton.js';\n\nconst PROTECTED_ROOT_DATA_ATTRIBUTES = new Set([\n 'data-component',\n 'data-action',\n 'data-tab-id',\n 'data-selected',\n 'data-tab-dragging',\n 'data-tab-drop-position',\n]);\n\ntype AppTabRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-component'?: never;\n 'data-action'?: never;\n 'data-tab-id'?: never;\n 'data-selected'?: never;\n 'data-tab-dragging'?: never;\n 'data-tab-drop-position'?: never;\n }\n>;\n\nexport interface AppTabProps {\n id: string;\n name: string;\n selected?: boolean;\n closable?: boolean;\n draggable?: boolean;\n leading?: SafeHtml;\n trailing?: SafeHtml;\n /** Decorative dormant content for the close button. Must not contain interactive descendants. */\n closeIcon?: SafeHtml;\n selectAction?: string;\n closeAction?: string;\n className?: string;\n /** Render as an unanimated loading skeleton, disabling select/close and dragging. */\n placeholder?: boolean;\n rootAttributes?: AppTabRootAttributes;\n}\n\nfunction CloseIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.25\"\n stroke-linecap=\"round\"\n >\n <path d=\"m7 7 10 10\"></path>\n <path d=\"M17 7 7 17\"></path>\n </svg>\n );\n}\n\nexport function AppTab({\n id,\n name,\n selected = false,\n closable = true,\n draggable = false,\n leading,\n trailing,\n closeIcon,\n selectAction = 'select-tab',\n closeAction = 'close-tab',\n className = '',\n placeholder = false,\n rootAttributes = {},\n}: AppTabProps) {\n const keyshortcuts = [\n closable ? 'Delete Backspace' : '',\n draggable ? 'Alt+Shift+ArrowLeft Alt+Shift+ArrowRight' : '',\n ]\n .filter(Boolean)\n .join(' ');\n const extensionAttributes = filterDataAttributes(\n rootAttributes,\n PROTECTED_ROOT_DATA_ATTRIBUTES,\n );\n return (\n <div\n {...extensionAttributes}\n class={`kui-app-tab ${className}`.trim()}\n data-component=\"app-tab\"\n data-tab-id={id}\n data-selected={String(selected)}\n data-placeholder={placeholder ? 'true' : undefined}\n draggable={placeholder ? 'false' : draggable ? 'true' : 'false'}\n aria-busy={placeholder ? 'true' : undefined}\n >\n {closable && (\n <button\n type=\"button\"\n tabindex=\"-1\"\n class=\"kui-app-tab__close\"\n data-action={placeholder ? undefined : closeAction}\n data-tab-id={id}\n disabled={placeholder || undefined}\n aria-label={`Close ${name}`}\n title={`Close ${name}`}\n >\n <span class=\"kui-app-tab__close-icon\" aria-hidden=\"true\">\n {closeIcon ?? <CloseIcon />}\n </span>\n </button>\n )}\n <button\n type=\"button\"\n class=\"kui-app-tab__select\"\n role=\"tab\"\n aria-selected={String(selected)}\n aria-keyshortcuts={placeholder ? undefined : keyshortcuts || undefined}\n data-action={placeholder ? undefined : selectAction}\n data-tab-id={id}\n disabled={placeholder || undefined}\n tabindex={placeholder ? '-1' : selected ? '0' : '-1'}\n >\n {leading}\n <span class=\"kui-app-tab__name\">\n {placeholder ? <Skeleton width=\"7em\" /> : name}\n </span>\n {closable || trailing ? (\n <span class=\"kui-app-tab__trailing\">{trailing}</span>\n ) : undefined}\n </button>\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/disclosure-arrow.tsx"],"names":[],"mappings":";;;;AAgBA,IAAM,kBAAA,GAA0D;AAAA,EAC9D,KAAA,EAAO,CAAA;AAAA,EACP,IAAA,EAAM,EAAA;AAAA,EACN,IAAA,EAAM,GAAA;AAAA,EACN,EAAA,EAAI;AACN,CAAA;AAEA,SAAS,gBAAA,CACP,IAAA,EACA,aAAA,EACA,eAAA,EACA;AACA,EAAA,MAAM,cAAA,GAAiB,mBAAmB,eAAe,CAAA;AACzD,EAAA,IAAI,CAAC,MAAM,OAAO,cAAA;AAElB,EAAA,MAAM,YAAA,GAAe,mBAAmB,aAAa,CAAA;AACrD,EAAA,MAAM,aAAA,GAAA,CAAkB,YAAA,GAAe,cAAA,GAAiB,GAAA,IAAO,GAAA,GAAO,GAAA;AACtE,EAAA,OAAO,cAAA,GAAiB,aAAA;AAC1B;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,IAAA;AAAA,EACA,aAAA,GAAgB,MAAA;AAAA,EAChB,eAAA,GAAkB,OAAA;AAAA,EAClB,IAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAyB;AACvB,EAAA,MAAM,SAAA,GAAY,OAAO,aAAA,GAAgB,eAAA;AACzC,EAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,IAAA,EAAM,aAAA,EAAe,eAAe,CAAA;AACtE,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,qBAAA,EAAwB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAChD,KAAA,EAAO,oCAAoC,QAAQ,CAAA,GAAA,CAAA;AAAA,MACnD,gBAAA,EAAe,kBAAA;AAAA,MACf,WAAA,EAAW,OAAO,IAAI,CAAA;AAAA,MACtB,gBAAA,EAAgB,SAAA;AAAA,MAChB,aAAA,EAAY,MAAA;AAAA,MAEX,kCAAQ,GAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAM,YAAA,EAAc,MAAK,eAAA,EAAgB;AAAA;AAAA,GAChE;AAEJ","file":"chunk-Y6LYKFXY.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\nimport { ChevronRight } from 'lucide';\n\nimport { LucideIcon } from './lucide-icon.js';\n\nexport type DisclosureDirection = 'up' | 'down' | 'left' | 'right';\n\nexport interface DisclosureArrowProps {\n open: boolean;\n openDirection?: DisclosureDirection;\n closedDirection?: DisclosureDirection;\n /** Replacement icons should use right as their unrotated orientation. */\n icon?: SafeHtml;\n className?: string;\n}\n\nconst directionRotations: Record<DisclosureDirection, number> = {\n right: 0,\n down: 90,\n left: 180,\n up: 270,\n};\n\nfunction rotationForState(\n open: boolean,\n openDirection: DisclosureDirection,\n closedDirection: DisclosureDirection,\n) {\n const closedRotation = directionRotations[closedDirection];\n if (!open) return closedRotation;\n\n const openRotation = directionRotations[openDirection];\n const shortestDelta = ((openRotation - closedRotation + 540) % 360) - 180;\n return closedRotation + shortestDelta;\n}\n\nexport function DisclosureArrow({\n open,\n openDirection = 'down',\n closedDirection = 'right',\n icon,\n className = '',\n}: DisclosureArrowProps) {\n const direction = open ? openDirection : closedDirection;\n const rotation = rotationForState(open, openDirection, closedDirection);\n return (\n <span\n class={`kui-disclosure-arrow ${className}`.trim()}\n style={`--_kui-disclosure-arrow-rotation:${rotation}deg`}\n data-component=\"disclosure-arrow\"\n data-open={String(open)}\n data-direction={direction}\n aria-hidden=\"true\"\n >\n {icon ?? <LucideIcon icon={ChevronRight} name=\"chevron-right\" />}\n </span>\n );\n}\n"]}