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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (997) hide show
  1. package/README.md +630 -132
  2. package/ai/application-ui-diagnostic-ids-v1.json +114 -0
  3. package/ai/application-ui-profile-sync.cjs +548 -0
  4. package/ai/application-ui-profile.d.mts +1 -0
  5. package/ai/application-ui-profile.d.ts +106 -0
  6. package/ai/application-ui-profile.defaults.json +96 -0
  7. package/ai/application-ui-profile.mjs +653 -0
  8. package/ai/application-ui-profile.schema.json +140 -0
  9. package/ai/catalog-authoring.json +34 -0
  10. package/ai/catalog-authoring.schema.json +105 -0
  11. package/ai/compile-time-contracts-v1.json +149 -0
  12. package/ai/compile-time-contracts-v1.schema.json +52 -0
  13. package/ai/component-catalog-extension.schema.json +104 -0
  14. package/ai/component-catalog.json +6401 -931
  15. package/ai/component-catalog.schema.json +94 -1
  16. package/ai/component-class-owners.cjs +83 -0
  17. package/ai/component-composition-extension.d.ts +7 -0
  18. package/ai/component-composition-extension.schema.json +7 -0
  19. package/ai/component-composition-rules.json +551 -0
  20. package/ai/component-composition.d.ts +132 -0
  21. package/ai/component-composition.json +8729 -0
  22. package/ai/component-composition.schema.json +412 -0
  23. package/ai/components/README.md +185 -0
  24. package/ai/components/anchored-surface.md +99 -0
  25. package/ai/components/application-tabs.md +65 -0
  26. package/ai/components/badge.md +76 -0
  27. package/ai/components/chip.md +76 -0
  28. package/ai/components/choice-chips.md +87 -0
  29. package/ai/components/collapsible-panel.md +103 -0
  30. package/ai/components/column-track.md +78 -0
  31. package/ai/components/combobox.md +88 -0
  32. package/ai/components/composer.md +83 -0
  33. package/ai/components/content-item.md +98 -0
  34. package/ai/components/content-swap.md +78 -0
  35. package/ai/components/corner-status.md +88 -0
  36. package/ai/components/disclosure-arrow.md +77 -0
  37. package/ai/components/document-baseline.md +77 -0
  38. package/ai/components/edge-activity-indicator.md +81 -0
  39. package/ai/components/empty-state.md +80 -0
  40. package/ai/components/feedback.md +71 -0
  41. package/ai/components/file-picker.md +88 -0
  42. package/ai/components/floating-toolbar.md +82 -0
  43. package/ai/components/foundation.md +65 -0
  44. package/ai/components/framed-list.md +80 -0
  45. package/ai/components/grid.md +101 -0
  46. package/ai/components/headers.md +63 -0
  47. package/ai/components/icon-button.md +82 -0
  48. package/ai/components/icon-toggle-button.md +80 -0
  49. package/ai/components/layout.md +75 -0
  50. package/ai/components/list-action-row.md +108 -0
  51. package/ai/components/list-header.md +91 -0
  52. package/ai/components/list-inset-control.md +74 -0
  53. package/ai/components/list-inset-text.md +72 -0
  54. package/ai/components/list-item.md +108 -0
  55. package/ai/components/list.md +125 -0
  56. package/ai/components/loading-spinner.md +73 -0
  57. package/ai/components/lucide-icon.md +97 -0
  58. package/ai/components/nav-stack.md +115 -0
  59. package/ai/components/pane.md +115 -0
  60. package/ai/components/popup-menu.md +171 -0
  61. package/ai/components/recipe-app-shell.md +57 -0
  62. package/ai/components/recipe-collapsible-sidebar.md +57 -0
  63. package/ai/components/recipe-compact-toolbar.md +57 -0
  64. package/ai/components/recipe-composer-form.md +57 -0
  65. package/ai/components/recipe-list-detail-dialog.md +57 -0
  66. package/ai/components/recipe-list-workspace-states.md +57 -0
  67. package/ai/components/recipe-loading-inspector.md +57 -0
  68. package/ai/components/recipe-navigation-sidebar.md +57 -0
  69. package/ai/components/recipe-navigation-stack.md +57 -0
  70. package/ai/components/recipe-workspace-header.md +57 -0
  71. package/ai/components/resize.md +106 -0
  72. package/ai/components/row.md +96 -0
  73. package/ai/components/segmented-control.md +82 -0
  74. package/ai/components/select.md +116 -0
  75. package/ai/components/skeleton.md +84 -0
  76. package/ai/components/spacer.md +86 -0
  77. package/ai/components/split-button.md +80 -0
  78. package/ai/components/split-view.md +105 -0
  79. package/ai/components/state-banner.md +96 -0
  80. package/ai/components/summary-row.md +85 -0
  81. package/ai/components/sunken-panel.md +79 -0
  82. package/ai/components/surface-scaffold.md +105 -0
  83. package/ai/components/tab-bar.md +114 -0
  84. package/ai/components/tab-navigator.md +100 -0
  85. package/ai/components/tabs.md +95 -0
  86. package/ai/components/text.md +90 -0
  87. package/ai/components/token-search-field.md +107 -0
  88. package/ai/components/toolbar-control-group.md +125 -0
  89. package/ai/components/toolbar-text.md +100 -0
  90. package/ai/components/toolbar.md +103 -0
  91. package/ai/components/value-table.md +80 -0
  92. package/ai/components/wa-accordion-item.md +55 -0
  93. package/ai/components/wa-accordion.md +65 -0
  94. package/ai/components/wa-animated-image.md +55 -0
  95. package/ai/components/wa-animation.md +55 -0
  96. package/ai/components/wa-avatar.md +55 -0
  97. package/ai/components/wa-badge.md +55 -0
  98. package/ai/components/wa-breadcrumb-item.md +53 -0
  99. package/ai/components/wa-breadcrumb.md +55 -0
  100. package/ai/components/wa-button-group.md +60 -0
  101. package/ai/components/wa-button.md +59 -0
  102. package/ai/components/wa-callout.md +58 -0
  103. package/ai/components/wa-card.md +59 -0
  104. package/ai/components/wa-carousel-item.md +53 -0
  105. package/ai/components/wa-carousel.md +55 -0
  106. package/ai/components/wa-checkbox-group.md +55 -0
  107. package/ai/components/wa-checkbox.md +55 -0
  108. package/ai/components/wa-color-picker.md +55 -0
  109. package/ai/components/wa-comparison.md +55 -0
  110. package/ai/components/wa-copy-button.md +55 -0
  111. package/ai/components/wa-details.md +61 -0
  112. package/ai/components/wa-dialog.md +59 -0
  113. package/ai/components/wa-divider.md +53 -0
  114. package/ai/components/wa-drawer.md +55 -0
  115. package/ai/components/wa-dropdown-item.md +60 -0
  116. package/ai/components/wa-dropdown.md +60 -0
  117. package/ai/components/wa-format-bytes.md +53 -0
  118. package/ai/components/wa-format-date.md +53 -0
  119. package/ai/components/wa-format-number.md +53 -0
  120. package/ai/components/wa-icon.md +58 -0
  121. package/ai/components/wa-include.md +53 -0
  122. package/ai/components/wa-input.md +59 -0
  123. package/ai/components/wa-intersection-observer.md +53 -0
  124. package/ai/components/wa-known-date.md +53 -0
  125. package/ai/components/wa-markdown.md +53 -0
  126. package/ai/components/wa-mutation-observer.md +53 -0
  127. package/ai/components/wa-number-input.md +55 -0
  128. package/ai/components/wa-option.md +59 -0
  129. package/ai/components/wa-otp-input.md +53 -0
  130. package/ai/components/wa-page.md +53 -0
  131. package/ai/components/wa-pagination.md +55 -0
  132. package/ai/components/wa-popover.md +55 -0
  133. package/ai/components/wa-popup.md +53 -0
  134. package/ai/components/wa-progress-bar.md +53 -0
  135. package/ai/components/wa-progress-ring.md +53 -0
  136. package/ai/components/wa-qr-code.md +53 -0
  137. package/ai/components/wa-radio-group.md +59 -0
  138. package/ai/components/wa-radio.md +55 -0
  139. package/ai/components/wa-random-content.md +53 -0
  140. package/ai/components/wa-rating.md +55 -0
  141. package/ai/components/wa-relative-time.md +53 -0
  142. package/ai/components/wa-resize-observer.md +53 -0
  143. package/ai/components/wa-scroller.md +53 -0
  144. package/ai/components/wa-select.md +63 -0
  145. package/ai/components/wa-skeleton.md +53 -0
  146. package/ai/components/wa-slider.md +55 -0
  147. package/ai/components/wa-spinner.md +58 -0
  148. package/ai/components/wa-split-panel.md +58 -0
  149. package/ai/components/wa-switch.md +53 -0
  150. package/ai/components/wa-tab-group.md +69 -0
  151. package/ai/components/wa-tab-panel.md +60 -0
  152. package/ai/components/wa-tab.md +59 -0
  153. package/ai/components/wa-tag.md +59 -0
  154. package/ai/components/wa-textarea.md +53 -0
  155. package/ai/components/wa-time-input.md +55 -0
  156. package/ai/components/wa-toast-item.md +60 -0
  157. package/ai/components/wa-toast.md +60 -0
  158. package/ai/components/wa-tooltip.md +55 -0
  159. package/ai/components/wa-tree-item.md +55 -0
  160. package/ai/components/wa-tree.md +55 -0
  161. package/ai/components/wa-zoomable-frame.md +55 -0
  162. package/ai/components/workbench.md +120 -0
  163. package/ai/public-api-signatures-v1.md +4261 -459
  164. package/ai/skill.md +441 -63
  165. package/ai/webawesome-jsx-signatures-v1.md +9 -2
  166. package/analyzer/cli.mjs +49 -0
  167. package/analyzer/component-ownership.d.mts +72 -0
  168. package/analyzer/component-ownership.mjs +429 -0
  169. package/analyzer/index.d.mts +53 -0
  170. package/analyzer/index.mjs +2375 -0
  171. package/analyzer/loud-pairs.d.mts +49 -0
  172. package/analyzer/loud-pairs.mjs +357 -0
  173. package/analyzer/report.schema.json +66 -0
  174. package/analyzer/selectors.d.mts +21 -0
  175. package/analyzer/selectors.mjs +212 -0
  176. package/catalog-projection-cli.mjs +96 -0
  177. package/catalog-projection.d.mts +55 -0
  178. package/catalog-projection.mjs +62 -0
  179. package/dist/anchored-surface.d.ts +69 -0
  180. package/dist/anchored-surface.js +3 -0
  181. package/dist/anchored-surface.js.map +1 -0
  182. package/dist/app-tab.d.ts +39 -4
  183. package/dist/app-tab.js +2 -1
  184. package/dist/badge.d.ts +83 -0
  185. package/dist/badge.js +4 -0
  186. package/dist/badge.js.map +1 -0
  187. package/dist/browser/anchored-surface.js +3 -0
  188. package/dist/browser/badge.js +3 -0
  189. package/dist/browser/catalog.js +28 -0
  190. package/dist/browser/chip.js +3 -0
  191. package/dist/browser/choice-chips.js +3 -0
  192. package/dist/browser/collapsible-panel.js +9 -0
  193. package/dist/browser/column-track.js +3 -0
  194. package/dist/browser/combobox.js +3 -0
  195. package/dist/browser/composer.js +4 -0
  196. package/dist/browser/content-item.js +3 -0
  197. package/dist/browser/content-swap.js +3 -0
  198. package/dist/browser/corner-status.js +3 -0
  199. package/dist/browser/edge-activity-indicator.js +3 -0
  200. package/dist/browser/file-picker.js +3 -0
  201. package/dist/browser/floating-toolbar.js +3 -0
  202. package/dist/browser/framed-list.js +3 -0
  203. package/dist/browser/grid.js +3 -0
  204. package/dist/browser/icon-button.js +4 -0
  205. package/dist/browser/icon-toggle-button.js +4 -0
  206. package/dist/browser/list-action-row.js +2 -0
  207. package/dist/browser/list-header.js +3 -1
  208. package/dist/browser/list-inset-control.js +3 -0
  209. package/dist/browser/list-inset-text.js +3 -0
  210. package/dist/browser/list-item.js +1 -0
  211. package/dist/browser/list.js +3 -0
  212. package/dist/browser/nav-stack.js +11 -0
  213. package/dist/browser/pane.js +3 -0
  214. package/dist/browser/popup-menu.js +3 -0
  215. package/dist/browser/row.js +3 -0
  216. package/dist/browser/segmented-control.js +0 -1
  217. package/dist/browser/select.js +2 -1
  218. package/dist/browser/spacer.js +3 -0
  219. package/dist/browser/split-button.js +5 -0
  220. package/dist/browser/split-view.js +13 -0
  221. package/dist/browser/state-banner.js +1 -0
  222. package/dist/browser/summary-row.js +3 -0
  223. package/dist/browser/sunken-panel.js +3 -0
  224. package/dist/browser/surface-scaffold.js +3 -0
  225. package/dist/browser/tab-navigator.js +4 -0
  226. package/dist/browser/text.js +3 -0
  227. package/dist/browser/toolbar-control-group.js +1 -0
  228. package/dist/browser/workbench.js +14 -0
  229. package/dist/catalog-resources.d.ts +50 -0
  230. package/dist/catalog-resources.js +22 -0
  231. package/dist/catalog-resources.js.map +1 -0
  232. package/dist/catalog.d.ts +134 -101
  233. package/dist/catalog.js +668 -105
  234. package/dist/catalog.js.map +1 -1
  235. package/dist/chip.d.ts +69 -0
  236. package/dist/chip.js +3 -0
  237. package/dist/chip.js.map +1 -0
  238. package/dist/choice-chips.d.ts +82 -0
  239. package/dist/choice-chips.js +3 -0
  240. package/dist/choice-chips.js.map +1 -0
  241. package/dist/chunk-2GOCOLQL.js +270 -0
  242. package/dist/chunk-2GOCOLQL.js.map +1 -0
  243. package/dist/chunk-2MSPNRWJ.js +82 -0
  244. package/dist/chunk-2MSPNRWJ.js.map +1 -0
  245. package/dist/chunk-34U4ANDJ.js +119 -0
  246. package/dist/chunk-34U4ANDJ.js.map +1 -0
  247. package/dist/chunk-3GLYIIFR.js +230 -0
  248. package/dist/chunk-3GLYIIFR.js.map +1 -0
  249. package/dist/{chunk-56RJXPHG.js → chunk-3VXDSIBJ.js} +7 -4
  250. package/dist/chunk-3VXDSIBJ.js.map +1 -0
  251. package/dist/chunk-3WYREXW4.js +120 -0
  252. package/dist/chunk-3WYREXW4.js.map +1 -0
  253. package/dist/chunk-4UB5Z3ZZ.js +68 -0
  254. package/dist/chunk-4UB5Z3ZZ.js.map +1 -0
  255. package/dist/chunk-6C6DLP3W.js +31 -0
  256. package/dist/chunk-6C6DLP3W.js.map +1 -0
  257. package/dist/chunk-7IUEBNCO.js +108 -0
  258. package/dist/chunk-7IUEBNCO.js.map +1 -0
  259. package/dist/chunk-AN5IWMTM.js +24 -0
  260. package/dist/chunk-AN5IWMTM.js.map +1 -0
  261. package/dist/chunk-AV7CPAPT.js +82 -0
  262. package/dist/chunk-AV7CPAPT.js.map +1 -0
  263. package/dist/chunk-B53PS2LE.js +34 -0
  264. package/dist/chunk-B53PS2LE.js.map +1 -0
  265. package/dist/chunk-CA7LNX3J.js +44 -0
  266. package/dist/chunk-CA7LNX3J.js.map +1 -0
  267. package/dist/chunk-CEJ5FK6G.js +288 -0
  268. package/dist/chunk-CEJ5FK6G.js.map +1 -0
  269. package/dist/chunk-CMETHPKR.js +175 -0
  270. package/dist/chunk-CMETHPKR.js.map +1 -0
  271. package/dist/chunk-CMLPFIC5.js +46 -0
  272. package/dist/chunk-CMLPFIC5.js.map +1 -0
  273. package/dist/chunk-CVD5IZGB.js +66 -0
  274. package/dist/chunk-CVD5IZGB.js.map +1 -0
  275. package/dist/chunk-CXZXHZTR.js +514 -0
  276. package/dist/chunk-CXZXHZTR.js.map +1 -0
  277. package/dist/chunk-D5RGM3XA.js +38 -0
  278. package/dist/chunk-D5RGM3XA.js.map +1 -0
  279. package/dist/chunk-DZJ4GBSP.js +59 -0
  280. package/dist/chunk-DZJ4GBSP.js.map +1 -0
  281. package/dist/chunk-EIET4QLK.js +51 -0
  282. package/dist/chunk-EIET4QLK.js.map +1 -0
  283. package/dist/chunk-ELCMSQNJ.js +49 -0
  284. package/dist/chunk-ELCMSQNJ.js.map +1 -0
  285. package/dist/chunk-EOO6PYGF.js +162 -0
  286. package/dist/chunk-EOO6PYGF.js.map +1 -0
  287. package/dist/chunk-ETCWQLJV.js +85 -0
  288. package/dist/chunk-ETCWQLJV.js.map +1 -0
  289. package/dist/chunk-FDZNYD4C.js +138 -0
  290. package/dist/chunk-FDZNYD4C.js.map +1 -0
  291. package/dist/chunk-FR76ZJQC.js +90 -0
  292. package/dist/chunk-FR76ZJQC.js.map +1 -0
  293. package/dist/chunk-G3J7JDP6.js +29 -0
  294. package/dist/chunk-G3J7JDP6.js.map +1 -0
  295. package/dist/chunk-GS2QD3N7.js +14 -0
  296. package/dist/chunk-GS2QD3N7.js.map +1 -0
  297. package/dist/chunk-HGV7J4T6.js +86 -0
  298. package/dist/chunk-HGV7J4T6.js.map +1 -0
  299. package/dist/chunk-HLDRH23D.js +84 -0
  300. package/dist/chunk-HLDRH23D.js.map +1 -0
  301. package/dist/chunk-HQZYKJ56.js +302 -0
  302. package/dist/chunk-HQZYKJ56.js.map +1 -0
  303. package/dist/chunk-HZPHCSCS.js +95 -0
  304. package/dist/chunk-HZPHCSCS.js.map +1 -0
  305. package/dist/chunk-IKS72C6P.js +53 -0
  306. package/dist/chunk-IKS72C6P.js.map +1 -0
  307. package/dist/chunk-IM3GKYOG.js +202 -0
  308. package/dist/chunk-IM3GKYOG.js.map +1 -0
  309. package/dist/chunk-INI4WDWC.js +125 -0
  310. package/dist/chunk-INI4WDWC.js.map +1 -0
  311. package/dist/chunk-IQSRHXZR.js +164 -0
  312. package/dist/chunk-IQSRHXZR.js.map +1 -0
  313. package/dist/chunk-JOR5LGYE.js +55 -0
  314. package/dist/chunk-JOR5LGYE.js.map +1 -0
  315. package/dist/chunk-K4AT3V3J.js +545 -0
  316. package/dist/chunk-K4AT3V3J.js.map +1 -0
  317. package/dist/chunk-KCS6NJ3O.js +82 -0
  318. package/dist/chunk-KCS6NJ3O.js.map +1 -0
  319. package/dist/chunk-KH4KEMSP.js +71 -0
  320. package/dist/chunk-KH4KEMSP.js.map +1 -0
  321. package/dist/chunk-LL45C7BB.js +122 -0
  322. package/dist/chunk-LL45C7BB.js.map +1 -0
  323. package/dist/chunk-LOSRXZAH.js +100 -0
  324. package/dist/chunk-LOSRXZAH.js.map +1 -0
  325. package/dist/chunk-MF6ZUUJZ.js +300 -0
  326. package/dist/chunk-MF6ZUUJZ.js.map +1 -0
  327. package/dist/chunk-MHMWQ7RB.js +19 -0
  328. package/dist/chunk-MHMWQ7RB.js.map +1 -0
  329. package/dist/chunk-MJ5RU6XT.js +173 -0
  330. package/dist/chunk-MJ5RU6XT.js.map +1 -0
  331. package/dist/chunk-MXNIVEVL.js +48 -0
  332. package/dist/chunk-MXNIVEVL.js.map +1 -0
  333. package/dist/{chunk-YGN7OMLT.js → chunk-NS2TBYM4.js} +8 -5
  334. package/dist/chunk-NS2TBYM4.js.map +1 -0
  335. package/dist/chunk-PIVY32AE.js +140 -0
  336. package/dist/chunk-PIVY32AE.js.map +1 -0
  337. package/dist/chunk-PYBBYSZ3.js +526 -0
  338. package/dist/chunk-PYBBYSZ3.js.map +1 -0
  339. package/dist/chunk-QDSZTQXL.js +28 -0
  340. package/dist/chunk-QDSZTQXL.js.map +1 -0
  341. package/dist/chunk-QH5KOFNS.js +39 -0
  342. package/dist/chunk-QH5KOFNS.js.map +1 -0
  343. package/dist/chunk-QIG4IGUP.js +139 -0
  344. package/dist/chunk-QIG4IGUP.js.map +1 -0
  345. package/dist/chunk-QLA25V2K.js +493 -0
  346. package/dist/chunk-QLA25V2K.js.map +1 -0
  347. package/dist/chunk-QROYYGWU.js +52 -0
  348. package/dist/chunk-QROYYGWU.js.map +1 -0
  349. package/dist/chunk-QYMJHS4K.js +36 -0
  350. package/dist/chunk-QYMJHS4K.js.map +1 -0
  351. package/dist/chunk-RHD7RKGI.js +176 -0
  352. package/dist/chunk-RHD7RKGI.js.map +1 -0
  353. package/dist/chunk-S2XULQEK.js +52 -0
  354. package/dist/chunk-S2XULQEK.js.map +1 -0
  355. package/dist/chunk-S3ECMF23.js +33 -0
  356. package/dist/chunk-S3ECMF23.js.map +1 -0
  357. package/dist/chunk-S4Y3YTAI.js +35 -0
  358. package/dist/chunk-S4Y3YTAI.js.map +1 -0
  359. package/dist/chunk-S4ZGTDSG.js +18 -0
  360. package/dist/chunk-S4ZGTDSG.js.map +1 -0
  361. package/dist/chunk-T4WJ5VGP.js +165 -0
  362. package/dist/chunk-T4WJ5VGP.js.map +1 -0
  363. package/dist/chunk-TDMHA7C3.js +251 -0
  364. package/dist/chunk-TDMHA7C3.js.map +1 -0
  365. package/dist/chunk-TGLUDQP2.js +138 -0
  366. package/dist/chunk-TGLUDQP2.js.map +1 -0
  367. package/dist/chunk-TLMMFQWM.js +222 -0
  368. package/dist/chunk-TLMMFQWM.js.map +1 -0
  369. package/dist/chunk-U6QYTMDB.js +85 -0
  370. package/dist/chunk-U6QYTMDB.js.map +1 -0
  371. package/dist/chunk-UMKV7YVQ.js +20 -0
  372. package/dist/chunk-UMKV7YVQ.js.map +1 -0
  373. package/dist/chunk-VFYO3UGZ.js +45 -0
  374. package/dist/chunk-VFYO3UGZ.js.map +1 -0
  375. package/dist/chunk-W4IK7AWD.js +73 -0
  376. package/dist/chunk-W4IK7AWD.js.map +1 -0
  377. package/dist/chunk-WVS6CUCT.js +48 -0
  378. package/dist/chunk-WVS6CUCT.js.map +1 -0
  379. package/dist/chunk-Y6KT7ZTR.js +109 -0
  380. package/dist/chunk-Y6KT7ZTR.js.map +1 -0
  381. package/dist/chunk-YMUIQRWK.js +44 -0
  382. package/dist/chunk-YMUIQRWK.js.map +1 -0
  383. package/dist/chunk-YOA5W5ZH.js +807 -0
  384. package/dist/chunk-YOA5W5ZH.js.map +1 -0
  385. package/dist/chunk-YQ2AC4E2.js +59 -0
  386. package/dist/chunk-YQ2AC4E2.js.map +1 -0
  387. package/dist/chunk-ZKKO4MHC.js +25 -0
  388. package/dist/chunk-ZKKO4MHC.js.map +1 -0
  389. package/dist/chunk-ZNROKDSZ.js +54 -0
  390. package/dist/chunk-ZNROKDSZ.js.map +1 -0
  391. package/dist/collapsible-panel.d.ts +96 -17
  392. package/dist/collapsible-panel.js +132 -14
  393. package/dist/collapsible-panel.js.map +1 -1
  394. package/dist/column-track.d.ts +41 -0
  395. package/dist/column-track.js +4 -0
  396. package/dist/column-track.js.map +1 -0
  397. package/dist/combobox.d.ts +40 -0
  398. package/dist/combobox.js +3 -0
  399. package/dist/combobox.js.map +1 -0
  400. package/dist/composer.d.ts +62 -0
  401. package/dist/composer.js +5 -0
  402. package/dist/composer.js.map +1 -0
  403. package/dist/content-item.d.ts +116 -0
  404. package/dist/content-item.js +4 -0
  405. package/dist/content-item.js.map +1 -0
  406. package/dist/content-swap.d.ts +34 -0
  407. package/dist/content-swap.js +3 -0
  408. package/dist/content-swap.js.map +1 -0
  409. package/dist/corner-status.d.ts +36 -0
  410. package/dist/corner-status.js +3 -0
  411. package/dist/corner-status.js.map +1 -0
  412. package/dist/css-values.d.ts +127 -0
  413. package/dist/css-values.js +3 -0
  414. package/dist/css-values.js.map +1 -0
  415. package/dist/device-class.js +34 -6
  416. package/dist/device-class.js.map +1 -1
  417. package/dist/disclosure-arrow.d.ts +6 -1
  418. package/dist/disclosure-arrow.js +2 -1
  419. package/dist/edge-activity-indicator.d.ts +28 -0
  420. package/dist/edge-activity-indicator.js +3 -0
  421. package/dist/edge-activity-indicator.js.map +1 -0
  422. package/dist/empty-state.d.ts +5 -2
  423. package/dist/empty-state.js +2 -1
  424. package/dist/extension-attributes-mu8MFUl0.d.ts +13 -0
  425. package/dist/file-picker.d.ts +47 -0
  426. package/dist/file-picker.js +3 -0
  427. package/dist/file-picker.js.map +1 -0
  428. package/dist/flex-alignment-4ms8ZbV8.d.ts +5 -0
  429. package/dist/floating-toolbar.d.ts +51 -0
  430. package/dist/floating-toolbar.js +3 -0
  431. package/dist/floating-toolbar.js.map +1 -0
  432. package/dist/framed-list.d.ts +47 -0
  433. package/dist/framed-list.js +4 -0
  434. package/dist/framed-list.js.map +1 -0
  435. package/dist/grid.d.ts +58 -0
  436. package/dist/grid.js +6 -0
  437. package/dist/grid.js.map +1 -0
  438. package/dist/help-tags-register.d.ts +13 -0
  439. package/dist/help-tags-register.js +9 -0
  440. package/dist/help-tags-register.js.map +1 -0
  441. package/dist/icon-button.d.ts +46 -0
  442. package/dist/icon-button.js +6 -0
  443. package/dist/icon-button.js.map +1 -0
  444. package/dist/icon-toggle-button.d.ts +42 -0
  445. package/dist/icon-toggle-button.js +6 -0
  446. package/dist/icon-toggle-button.js.map +1 -0
  447. package/dist/index.d.ts +63 -17
  448. package/dist/index.js +66 -23
  449. package/dist/list-action-row.d.ts +69 -12
  450. package/dist/list-action-row.js +5 -1
  451. package/dist/list-header.d.ts +65 -10
  452. package/dist/list-header.js +4 -1
  453. package/dist/list-icon-tile-B8dr97OW.d.ts +18 -0
  454. package/dist/list-inset-control.d.ts +22 -0
  455. package/dist/list-inset-control.js +3 -0
  456. package/dist/list-inset-control.js.map +1 -0
  457. package/dist/list-inset-text.d.ts +30 -0
  458. package/dist/list-inset-text.js +4 -0
  459. package/dist/list-inset-text.js.map +1 -0
  460. package/dist/list-item.d.ts +49 -5
  461. package/dist/list-item.js +4 -1
  462. package/dist/list.d.ts +128 -0
  463. package/dist/list.js +7 -0
  464. package/dist/list.js.map +1 -0
  465. package/dist/loading-spinner.d.ts +12 -2
  466. package/dist/loading-spinner.js +2 -1
  467. package/dist/lucide-icon.d.ts +15 -3
  468. package/dist/lucide-icon.js +2 -1
  469. package/dist/nav-stack-VXTumzKa.d.ts +158 -0
  470. package/dist/nav-stack.d.ts +15 -38
  471. package/dist/nav-stack.js +13 -1
  472. package/dist/pane.d.ts +153 -0
  473. package/dist/pane.js +5 -0
  474. package/dist/pane.js.map +1 -0
  475. package/dist/panel-toolbar-vg6Ir5Dy.d.ts +77 -0
  476. package/dist/popup-menu-register.d.ts +10 -0
  477. package/dist/popup-menu-register.js +336 -0
  478. package/dist/popup-menu-register.js.map +1 -0
  479. package/dist/popup-menu.d.ts +125 -0
  480. package/dist/popup-menu.js +3 -0
  481. package/dist/popup-menu.js.map +1 -0
  482. package/dist/resizable-region.d.ts +32 -3
  483. package/dist/resizable-region.js +1 -1
  484. package/dist/row.d.ts +53 -0
  485. package/dist/row.js +7 -0
  486. package/dist/row.js.map +1 -0
  487. package/dist/scroll-clearance-BikHljTc.d.ts +14 -0
  488. package/dist/segmented-control.d.ts +12 -9
  489. package/dist/segmented-control.js +1 -2
  490. package/dist/select-register.js +255 -3
  491. package/dist/select-register.js.map +1 -1
  492. package/dist/select.d.ts +103 -8
  493. package/dist/select.js +4 -1
  494. package/dist/semantic-content-BbzjvSu9.d.ts +14 -0
  495. package/dist/semantic-tone-CdW013KF.d.ts +4 -0
  496. package/dist/sides-BPSWde0A.d.ts +4 -0
  497. package/dist/skeleton.d.ts +14 -7
  498. package/dist/skeleton.js +2 -1
  499. package/dist/spacer.d.ts +18 -0
  500. package/dist/spacer.js +4 -0
  501. package/dist/spacer.js.map +1 -0
  502. package/dist/split-button.d.ts +57 -0
  503. package/dist/split-button.js +7 -0
  504. package/dist/split-button.js.map +1 -0
  505. package/dist/split-view.d.ts +63 -6
  506. package/dist/split-view.js +149 -10
  507. package/dist/split-view.js.map +1 -1
  508. package/dist/state-banner.d.ts +41 -7
  509. package/dist/state-banner.js +4 -1
  510. package/dist/styles/anchored-surface.css +41 -0
  511. package/dist/styles/app-tab.css +232 -0
  512. package/dist/styles/badge.css +145 -0
  513. package/dist/styles/catalog/components/catalog-example-stack.css +14 -0
  514. package/dist/styles/catalog/components/catalog-example.css +204 -0
  515. package/dist/styles/catalog/components/catalog-stage.css +61 -0
  516. package/dist/styles/catalog/components/catalog.css +26 -0
  517. package/dist/styles/catalog.css +5 -498
  518. package/dist/styles/chip.css +208 -0
  519. package/dist/styles/choice-chips.css +154 -0
  520. package/dist/styles/collapsible-panel.css +450 -16
  521. package/dist/styles/column-track.css +57 -0
  522. package/dist/styles/combobox.css +113 -0
  523. package/dist/styles/components/actions/floating-toolbar/floating-toolbar.css +119 -0
  524. package/dist/styles/components/actions/icon-button/icon-button.css +22 -0
  525. package/dist/styles/components/actions/icon-toggle-button/icon-toggle-button.css +83 -0
  526. package/dist/styles/components/actions/popup-menu/popup-menu.css +370 -0
  527. package/dist/styles/components/actions/split-button/split-button.css +95 -0
  528. package/dist/styles/components/actions/toolbar/toolbar.css +443 -0
  529. package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +1069 -0
  530. package/dist/styles/components/actions/toolbar-text/toolbar-text.css +269 -0
  531. package/dist/styles/components/collections/framed-list/framed-list.css +47 -0
  532. package/dist/styles/components/collections/list/list.css +250 -0
  533. package/dist/styles/components/collections/list-action-row/list-action-row.css +466 -0
  534. package/dist/styles/components/collections/list-header/list-header.css +229 -0
  535. package/dist/styles/components/collections/list-inset-control/list-inset-control.css +30 -0
  536. package/dist/styles/components/collections/list-inset-text/list-inset-text.css +29 -0
  537. package/dist/styles/components/collections/list-item/list-item.css +461 -0
  538. package/dist/styles/components/collections/summary-row/summary-row.css +161 -0
  539. package/dist/styles/components/data-display/value-table/value-table.css +183 -0
  540. package/dist/styles/components/feedback/anchored-surface/anchored-surface.css +41 -0
  541. package/dist/styles/components/feedback/badge/badge.css +145 -0
  542. package/dist/styles/components/feedback/chip/chip.css +208 -0
  543. package/dist/styles/components/feedback/corner-status/corner-status.css +60 -0
  544. package/dist/styles/components/feedback/edge-activity-indicator/edge-activity-indicator.css +127 -0
  545. package/dist/styles/components/feedback/empty-state/empty-state.css +47 -0
  546. package/dist/styles/components/feedback/loading-spinner/loading-spinner.css +25 -0
  547. package/dist/styles/components/feedback/skeleton/skeleton.css +92 -0
  548. package/dist/styles/components/feedback/state-banner/state-banner.css +297 -0
  549. package/dist/styles/components/forms/choice-chips/choice-chips.css +154 -0
  550. package/dist/styles/components/forms/combobox/combobox.css +113 -0
  551. package/dist/styles/components/forms/composer/composer.css +100 -0
  552. package/dist/styles/components/forms/file-picker/file-picker.css +81 -0
  553. package/dist/styles/components/forms/segmented-control/segmented-control.css +196 -0
  554. package/dist/styles/components/forms/select/select.css +455 -0
  555. package/dist/styles/components/forms/token-search-field/token-search-field.css +432 -0
  556. package/dist/styles/components/layout/collapsible-panel/collapsible-panel.css +580 -0
  557. package/dist/styles/components/layout/column-track/column-track.css +57 -0
  558. package/dist/styles/components/layout/content-swap/content-swap.css +154 -0
  559. package/dist/styles/components/layout/grid/grid.css +88 -0
  560. package/dist/styles/components/layout/pane/pane.css +382 -0
  561. package/dist/styles/components/layout/resizable-region/resizable-region.css +545 -0
  562. package/dist/styles/components/layout/row/row.css +114 -0
  563. package/dist/styles/components/layout/spacer/spacer.css +11 -0
  564. package/dist/styles/components/layout/split-view/split-view.css +146 -0
  565. package/dist/styles/components/layout/workbench/workbench.css +1086 -0
  566. package/dist/styles/components/media/lucide-icon/lucide-icon.css +15 -0
  567. package/dist/styles/components/navigation/app-tab/app-tab.css +384 -0
  568. package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +23 -0
  569. package/dist/styles/components/navigation/nav-stack/nav-stack.css +342 -0
  570. package/dist/styles/components/navigation/tab-bar/tab-bar.css +197 -0
  571. package/dist/styles/components/navigation/tab-navigator/tab-navigator.css +325 -0
  572. package/dist/styles/components/surfaces/content-item/content-item.css +138 -0
  573. package/dist/styles/components/surfaces/sunken-panel/sunken-panel.css +31 -0
  574. package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +425 -0
  575. package/dist/styles/components/typography/text/text.css +220 -0
  576. package/dist/styles/composer.css +100 -0
  577. package/dist/styles/content-item.css +138 -0
  578. package/dist/styles/content-swap.css +154 -0
  579. package/dist/styles/corner-status.css +60 -0
  580. package/dist/styles/document.css +98 -0
  581. package/dist/styles/edge-activity-indicator.css +127 -0
  582. package/dist/styles/file-picker.css +81 -0
  583. package/dist/styles/floating-toolbar.css +119 -0
  584. package/dist/styles/foundation.css +261 -45
  585. package/dist/styles/framed-list.css +47 -0
  586. package/dist/styles/grid.css +88 -0
  587. package/dist/styles/icon-button.css +22 -0
  588. package/dist/styles/icon-toggle-button.css +83 -0
  589. package/dist/styles/layout.css +3 -41
  590. package/dist/styles/list-action-row.css +324 -18
  591. package/dist/styles/list-header.css +128 -59
  592. package/dist/styles/list-inset-control.css +30 -0
  593. package/dist/styles/list-inset-text.css +29 -0
  594. package/dist/styles/list-item.css +371 -33
  595. package/dist/styles/list.css +250 -0
  596. package/dist/styles/loading-spinner.css +4 -0
  597. package/dist/styles/lucide-icon.css +9 -0
  598. package/dist/styles/nav-stack.css +280 -49
  599. package/dist/styles/pane.css +382 -0
  600. package/dist/styles/popup-menu.css +370 -0
  601. package/dist/styles/resizable-region.css +438 -4
  602. package/dist/styles/row.css +114 -0
  603. package/dist/styles/segmented-control.css +36 -9
  604. package/dist/styles/select.css +338 -21
  605. package/dist/styles/skeleton.css +64 -3
  606. package/dist/styles/spacer.css +11 -0
  607. package/dist/styles/split-button.css +95 -0
  608. package/dist/styles/split-view.css +114 -3
  609. package/dist/styles/state-banner.css +146 -22
  610. package/dist/styles/styles.css +23 -1
  611. package/dist/styles/summary-row.css +161 -0
  612. package/dist/styles/sunken-panel.css +31 -0
  613. package/dist/styles/surface-scaffold.css +425 -0
  614. package/dist/styles/tab-bar.css +161 -9
  615. package/dist/styles/tab-navigator.css +325 -0
  616. package/dist/styles/text.css +220 -0
  617. package/dist/styles/token-search-field.css +202 -59
  618. package/dist/styles/toolbar-control-group.css +894 -36
  619. package/dist/styles/toolbar-text.css +236 -7
  620. package/dist/styles/toolbar.css +393 -11
  621. package/dist/styles/value-table.css +115 -7
  622. package/dist/styles/webawesome.css +410 -17
  623. package/dist/styles/workbench.css +999 -7
  624. package/dist/summary-row.d.ts +56 -0
  625. package/dist/summary-row.js +4 -0
  626. package/dist/summary-row.js.map +1 -0
  627. package/dist/sunken-panel.d.ts +38 -0
  628. package/dist/sunken-panel.js +4 -0
  629. package/dist/sunken-panel.js.map +1 -0
  630. package/dist/surface-scaffold-register.d.ts +9 -0
  631. package/dist/surface-scaffold-register.js +151 -0
  632. package/dist/surface-scaffold-register.js.map +1 -0
  633. package/dist/surface-scaffold.d.ts +170 -0
  634. package/dist/surface-scaffold.js +4 -0
  635. package/dist/surface-scaffold.js.map +1 -0
  636. package/dist/tab-bar.d.ts +33 -7
  637. package/dist/tab-bar.js +1 -1
  638. package/dist/tab-navigator.d.ts +114 -0
  639. package/dist/tab-navigator.js +102 -0
  640. package/dist/tab-navigator.js.map +1 -0
  641. package/dist/text.d.ts +98 -0
  642. package/dist/text.js +3 -0
  643. package/dist/text.js.map +1 -0
  644. package/dist/token-search-field.d.ts +3 -43
  645. package/dist/token-search-field.js +2 -1
  646. package/dist/token-search-model-aYR0YAei.d.ts +184 -0
  647. package/dist/token-search-model.d.ts +3 -0
  648. package/dist/token-search-model.js +3 -0
  649. package/dist/token-search-model.js.map +1 -0
  650. package/dist/toolbar-control-group.d.ts +96 -7
  651. package/dist/toolbar-control-group.js +3 -1
  652. package/dist/toolbar-text.d.ts +58 -9
  653. package/dist/toolbar-text.js +2 -1
  654. package/dist/toolbar.d.ts +71 -7
  655. package/dist/toolbar.js +1 -1
  656. package/dist/types-CVgIwSdq.d.ts +189 -0
  657. package/dist/value-table.d.ts +30 -4
  658. package/dist/value-table.js +2 -1
  659. package/dist/webawesome.d.ts +8 -1
  660. package/dist/wire-catalog.d.ts +111 -5
  661. package/dist/wire-catalog.js +302 -14
  662. package/dist/wire-catalog.js.map +1 -1
  663. package/dist/wire-comboboxes.d.ts +26 -0
  664. package/dist/wire-comboboxes.js +3 -0
  665. package/dist/wire-comboboxes.js.map +1 -0
  666. package/dist/wire-composers.d.ts +16 -0
  667. package/dist/wire-composers.js +3 -0
  668. package/dist/wire-composers.js.map +1 -0
  669. package/dist/wire-content-items.d.ts +11 -0
  670. package/dist/wire-content-items.js +139 -0
  671. package/dist/wire-content-items.js.map +1 -0
  672. package/dist/wire-corner-status.d.ts +11 -0
  673. package/dist/wire-corner-status.js +3 -0
  674. package/dist/wire-corner-status.js.map +1 -0
  675. package/dist/wire-file-pickers.d.ts +26 -0
  676. package/dist/wire-file-pickers.js +3 -0
  677. package/dist/wire-file-pickers.js.map +1 -0
  678. package/dist/wire-list-focus-scroll.d.ts +16 -0
  679. package/dist/wire-list-focus-scroll.js +3 -0
  680. package/dist/wire-list-focus-scroll.js.map +1 -0
  681. package/dist/wire-list-reorder.d.ts +41 -0
  682. package/dist/wire-list-reorder.js +3 -0
  683. package/dist/wire-list-reorder.js.map +1 -0
  684. package/dist/wire-nav-stack.d.ts +4 -1
  685. package/dist/wire-nav-stack.js +326 -15
  686. package/dist/wire-nav-stack.js.map +1 -1
  687. package/dist/wire-resizable-regions.d.ts +2 -1
  688. package/dist/wire-resizable-regions.js +2 -1
  689. package/dist/wire-scroll-dividers.d.ts +87 -0
  690. package/dist/wire-scroll-dividers.js +3 -0
  691. package/dist/wire-scroll-dividers.js.map +1 -0
  692. package/dist/wire-sidebar.d.ts +24 -4
  693. package/dist/wire-sidebar.js +159 -45
  694. package/dist/wire-sidebar.js.map +1 -1
  695. package/dist/wire-tab-bars.d.ts +6 -2
  696. package/dist/wire-tab-bars.js +1 -1
  697. package/dist/wire-tab-navigator.d.ts +13 -0
  698. package/dist/wire-tab-navigator.js +153 -0
  699. package/dist/wire-tab-navigator.js.map +1 -0
  700. package/dist/wire-token-search-fields.d.ts +28 -10
  701. package/dist/wire-token-search-fields.js +2 -1
  702. package/dist/wire-toolbar-visibility.d.ts +13 -0
  703. package/dist/wire-toolbar-visibility.js +3 -0
  704. package/dist/wire-toolbar-visibility.js.map +1 -0
  705. package/dist/wire-workbench.d.ts +116 -0
  706. package/dist/wire-workbench.js +6 -0
  707. package/dist/wire-workbench.js.map +1 -0
  708. package/dist/workbench.d.ts +253 -10
  709. package/dist/workbench.js +20 -15
  710. package/dist/workbench.js.map +1 -1
  711. package/docs/accessibility.md +640 -33
  712. package/docs/anchored-surface.md +101 -0
  713. package/docs/app-layouts.md +159 -10
  714. package/docs/apple-hig.md +2 -0
  715. package/docs/catalog.md +565 -63
  716. package/docs/collapsible-panel.md +308 -25
  717. package/docs/component-contract.md +816 -53
  718. package/docs/component-integration.md +75 -0
  719. package/docs/component-selection.md +962 -99
  720. package/docs/composer.md +143 -0
  721. package/docs/design/templates/choice-chips/color-palette-dark.svg +1 -0
  722. package/docs/design/templates/choice-chips/color-palette.svg +1 -0
  723. package/docs/design/templates/choice-chips/compact-icons-dark.svg +1 -0
  724. package/docs/design/templates/choice-chips/compact-icons.svg +1 -0
  725. package/docs/design/templates/choice-chips/multiple-dark.svg +1 -0
  726. package/docs/design/templates/choice-chips/multiple.svg +1 -0
  727. package/docs/design/templates/choice-chips-dark.svg +1 -0
  728. package/docs/design/templates/choice-chips.svg +1 -0
  729. package/docs/design/templates/composer/chat-dark.svg +1 -0
  730. package/docs/design/templates/composer/chat.svg +1 -0
  731. package/docs/design/templates/composer/prompt-dark.svg +1 -0
  732. package/docs/design/templates/composer/prompt.svg +1 -0
  733. package/docs/design/templates/composer-dark.svg +1 -0
  734. package/docs/design/templates/composer.svg +1 -0
  735. package/docs/design/templates/empty-state/filtered-dark.svg +1 -0
  736. package/docs/design/templates/empty-state/filtered.svg +1 -0
  737. package/docs/design/templates/empty-state/with-action-dark.svg +1 -0
  738. package/docs/design/templates/empty-state/with-action.svg +1 -0
  739. package/docs/design/templates/empty-state-dark.svg +1 -0
  740. package/docs/design/templates/empty-state.svg +1 -0
  741. package/docs/design/templates/list/compact-dark.svg +1 -0
  742. package/docs/design/templates/list/compact.svg +1 -0
  743. package/docs/design/templates/list/stack-dark.svg +1 -0
  744. package/docs/design/templates/list/stack.svg +1 -0
  745. package/docs/design/templates/list-action-row/default-dark.svg +1 -0
  746. package/docs/design/templates/list-action-row/default.svg +1 -0
  747. package/docs/design/templates/list-action-row/icon-tile-dark.svg +1 -0
  748. package/docs/design/templates/list-action-row/icon-tile.svg +1 -0
  749. package/docs/design/templates/list-action-row/selected-dark.svg +1 -0
  750. package/docs/design/templates/list-action-row/selected.svg +1 -0
  751. package/docs/design/templates/list-action-row/trailing-menu-dark.svg +1 -0
  752. package/docs/design/templates/list-action-row/trailing-menu.svg +1 -0
  753. package/docs/design/templates/list-action-row-dark.svg +1 -0
  754. package/docs/design/templates/list-action-row.svg +1 -0
  755. package/docs/design/templates/list-dark.svg +1 -0
  756. package/docs/design/templates/list-header/action-dark.svg +1 -0
  757. package/docs/design/templates/list-header/action.svg +1 -0
  758. package/docs/design/templates/list-header/count-dark.svg +1 -0
  759. package/docs/design/templates/list-header/count.svg +1 -0
  760. package/docs/design/templates/list-header/inline-action-dark.svg +1 -0
  761. package/docs/design/templates/list-header/inline-action.svg +1 -0
  762. package/docs/design/templates/list-header/size-l-dark.svg +1 -0
  763. package/docs/design/templates/list-header/size-l.svg +1 -0
  764. package/docs/design/templates/list-header/size-m-dark.svg +1 -0
  765. package/docs/design/templates/list-header/size-m.svg +1 -0
  766. package/docs/design/templates/list-header/size-xl-dark.svg +1 -0
  767. package/docs/design/templates/list-header/size-xl.svg +1 -0
  768. package/docs/design/templates/list-header/size-xs-dark.svg +1 -0
  769. package/docs/design/templates/list-header/size-xs.svg +1 -0
  770. package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -0
  771. package/docs/design/templates/list-header/toggle-collapsed.svg +1 -0
  772. package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -0
  773. package/docs/design/templates/list-header/toggle-expanded.svg +1 -0
  774. package/docs/design/templates/list-header-dark.svg +1 -0
  775. package/docs/design/templates/list-header.svg +1 -0
  776. package/docs/design/templates/list-item/default-dark.svg +1 -0
  777. package/docs/design/templates/list-item/default.svg +1 -0
  778. package/docs/design/templates/list-item/icon-tile-dark.svg +1 -0
  779. package/docs/design/templates/list-item/icon-tile.svg +1 -0
  780. package/docs/design/templates/list-item/multiline-dark.svg +1 -0
  781. package/docs/design/templates/list-item/multiline.svg +1 -0
  782. package/docs/design/templates/list-item/selected-dark.svg +1 -0
  783. package/docs/design/templates/list-item/selected.svg +1 -0
  784. package/docs/design/templates/list-item/trailing-dark.svg +1 -0
  785. package/docs/design/templates/list-item/trailing.svg +1 -0
  786. package/docs/design/templates/list-item-dark.svg +1 -0
  787. package/docs/design/templates/list-item.svg +1 -0
  788. package/docs/design/templates/list.svg +1 -0
  789. package/docs/design/templates/segmented-control/equal-dark.svg +1 -0
  790. package/docs/design/templates/segmented-control/equal.svg +1 -0
  791. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -0
  792. package/docs/design/templates/segmented-control/pill-small.svg +1 -0
  793. package/docs/design/templates/segmented-control-dark.svg +1 -0
  794. package/docs/design/templates/segmented-control.svg +1 -0
  795. package/docs/design/templates/skeleton/avatar-dark.svg +1 -0
  796. package/docs/design/templates/skeleton/avatar.svg +1 -0
  797. package/docs/design/templates/skeleton/block-dark.svg +1 -0
  798. package/docs/design/templates/skeleton/block.svg +1 -0
  799. package/docs/design/templates/skeleton/lines-dark.svg +1 -0
  800. package/docs/design/templates/skeleton/lines.svg +1 -0
  801. package/docs/design/templates/skeleton-dark.svg +1 -0
  802. package/docs/design/templates/skeleton.svg +1 -0
  803. package/docs/design/templates/state-banner/danger-dark.svg +1 -0
  804. package/docs/design/templates/state-banner/danger.svg +1 -0
  805. package/docs/design/templates/state-banner/info-badge-dark.svg +1 -0
  806. package/docs/design/templates/state-banner/info-badge.svg +1 -0
  807. package/docs/design/templates/state-banner/info-dark.svg +1 -0
  808. package/docs/design/templates/state-banner/info.svg +1 -0
  809. package/docs/design/templates/state-banner/strip-dark.svg +1 -0
  810. package/docs/design/templates/state-banner/strip.svg +1 -0
  811. package/docs/design/templates/state-banner/success-dark.svg +1 -0
  812. package/docs/design/templates/state-banner/success.svg +1 -0
  813. package/docs/design/templates/state-banner/warning-dark.svg +1 -0
  814. package/docs/design/templates/state-banner/warning.svg +1 -0
  815. package/docs/design/templates/state-banner-dark.svg +1 -0
  816. package/docs/design/templates/state-banner.svg +1 -0
  817. package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -0
  818. package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -0
  819. package/docs/design/templates/tab-bar-dark.svg +1 -0
  820. package/docs/design/templates/tab-bar.svg +1 -0
  821. package/docs/design/templates/token-search-field/empty-dark.svg +1 -0
  822. package/docs/design/templates/token-search-field/empty.svg +1 -0
  823. package/docs/design/templates/token-search-field/tokens-dark.svg +1 -0
  824. package/docs/design/templates/token-search-field/tokens.svg +1 -0
  825. package/docs/design/templates/token-search-field-dark.svg +1 -0
  826. package/docs/design/templates/token-search-field.svg +1 -0
  827. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -0
  828. package/docs/design/templates/toolbar/title-and-actions.svg +1 -0
  829. package/docs/design/templates/toolbar/width-visibility-320-dark.svg +1 -0
  830. package/docs/design/templates/toolbar/width-visibility-320.svg +1 -0
  831. package/docs/design/templates/toolbar/width-visibility-600-dark.svg +1 -0
  832. package/docs/design/templates/toolbar/width-visibility-600.svg +1 -0
  833. package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -1
  834. package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -1
  835. package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -1
  836. package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -1
  837. package/docs/design/templates/toolbar-control-group/icon-tile-brand-dark.svg +1 -0
  838. package/docs/design/templates/toolbar-control-group/icon-tile-brand.svg +1 -0
  839. package/docs/design/templates/toolbar-control-group/icon-tile-danger-dark.svg +1 -0
  840. package/docs/design/templates/toolbar-control-group/icon-tile-danger.svg +1 -0
  841. package/docs/design/templates/toolbar-control-group/icon-tile-neutral-dark.svg +1 -0
  842. package/docs/design/templates/toolbar-control-group/icon-tile-neutral.svg +1 -0
  843. package/docs/design/templates/toolbar-control-group/icon-tile-success-dark.svg +1 -0
  844. package/docs/design/templates/toolbar-control-group/icon-tile-success.svg +1 -0
  845. package/docs/design/templates/toolbar-control-group/icon-tile-warning-dark.svg +1 -0
  846. package/docs/design/templates/toolbar-control-group/icon-tile-warning.svg +1 -0
  847. package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -1
  848. package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -1
  849. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
  850. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
  851. package/docs/design/templates/toolbar-control-group-dark.svg +1 -11
  852. package/docs/design/templates/toolbar-control-group.svg +1 -11
  853. package/docs/design/templates/toolbar-dark.svg +1 -0
  854. package/docs/design/templates/toolbar-text/dark-tone-dark.svg +1 -0
  855. package/docs/design/templates/toolbar-text/dark-tone.svg +1 -0
  856. package/docs/design/templates/toolbar-text/default-dark.svg +1 -0
  857. package/docs/design/templates/toolbar-text/default.svg +1 -0
  858. package/docs/design/templates/toolbar-text/large-dark.svg +1 -0
  859. package/docs/design/templates/toolbar-text/large.svg +1 -0
  860. package/docs/design/templates/toolbar-text/small-dark.svg +1 -0
  861. package/docs/design/templates/toolbar-text/small.svg +1 -0
  862. package/docs/design/templates/toolbar-text-dark.svg +1 -0
  863. package/docs/design/templates/toolbar-text.svg +1 -0
  864. package/docs/design/templates/toolbar.svg +1 -0
  865. package/docs/design/templates/value-table/details-dark.svg +1 -0
  866. package/docs/design/templates/value-table/details.svg +1 -0
  867. package/docs/design/templates/value-table-dark.svg +1 -0
  868. package/docs/design/templates/value-table.svg +1 -0
  869. package/docs/design/templates.md +75 -18
  870. package/docs/design-philosophy.md +65 -20
  871. package/docs/device-class.md +10 -9
  872. package/docs/document-baseline.md +93 -0
  873. package/docs/examples/application-ui-profile.json +60 -0
  874. package/docs/examples/command-palette-adapter.tsx +69 -17
  875. package/docs/examples/component-catalog-extension.json +52 -0
  876. package/docs/examples/component-composition-extension.json +80 -0
  877. package/docs/layout.md +796 -53
  878. package/docs/nav-stack.md +287 -14
  879. package/docs/recipes.md +129 -73
  880. package/docs/split-view.md +96 -7
  881. package/docs/sunken-panel.md +106 -0
  882. package/docs/surface-scaffold.md +270 -0
  883. package/docs/tab-navigator.md +255 -0
  884. package/docs/type-contracts.md +137 -0
  885. package/docs/ui-analyzer.md +406 -0
  886. package/docs/ui-doctor.md +281 -0
  887. package/docs/ui-evaluator.md +139 -0
  888. package/docs/ux-demo.md +48 -17
  889. package/docs/webawesome-theme.md +215 -16
  890. package/docs/workbench.md +627 -12
  891. package/docs/writing.md +152 -0
  892. package/doctor/cli.mjs +120 -0
  893. package/doctor/component-style-checks.mjs +457 -0
  894. package/doctor/config.schema.json +94 -0
  895. package/doctor/copy-capitalization-checks.mjs +591 -0
  896. package/doctor/eslint-diagnostics.d.mts +24 -0
  897. package/doctor/eslint-diagnostics.mjs +24 -0
  898. package/doctor/index.d.mts +122 -0
  899. package/doctor/index.mjs +1424 -0
  900. package/doctor/report.schema.json +118 -0
  901. package/evaluator/cli.mjs +89 -0
  902. package/evaluator/index.d.mts +90 -0
  903. package/evaluator/index.mjs +1203 -0
  904. package/evaluator/report.schema.json +152 -0
  905. package/llms.txt +770 -50
  906. package/package.json +345 -27
  907. package/scripts/component-catalog-extension-validation.mjs +28 -0
  908. package/traversal-exclusions.mjs +86 -0
  909. package/ux-demo/recipes/app-shell.tsx +204 -16
  910. package/ux-demo/recipes/collapsible-sidebar.tsx +206 -45
  911. package/ux-demo/recipes/compact-toolbar.tsx +135 -14
  912. package/ux-demo/recipes/composer-form.tsx +133 -21
  913. package/ux-demo/recipes/list-detail-dialog.tsx +255 -14
  914. package/ux-demo/recipes/list-workspace-states.tsx +183 -11
  915. package/ux-demo/recipes/loaders.ts +9 -3
  916. package/ux-demo/recipes/loading-inspector.tsx +162 -39
  917. package/ux-demo/recipes/mount-recipe.ts +26 -10
  918. package/ux-demo/recipes/navigation-sidebar.tsx +137 -11
  919. package/ux-demo/recipes/navigation-stack.tsx +79 -24
  920. package/ux-demo/recipes/types.ts +17 -2
  921. package/ux-demo/recipes/workspace-header.tsx +86 -5
  922. package/vite-ux-review.d.mts +83 -0
  923. package/vite-ux-review.mjs +120 -0
  924. package/dist/browser/panel-header.js +0 -7
  925. package/dist/chunk-2Z5TWHKQ.js +0 -34
  926. package/dist/chunk-2Z5TWHKQ.js.map +0 -1
  927. package/dist/chunk-37T3VNIZ.js +0 -19
  928. package/dist/chunk-37T3VNIZ.js.map +0 -1
  929. package/dist/chunk-55DATV3A.js +0 -10
  930. package/dist/chunk-55DATV3A.js.map +0 -1
  931. package/dist/chunk-56RJXPHG.js.map +0 -1
  932. package/dist/chunk-7BR3DO2A.js +0 -31
  933. package/dist/chunk-7BR3DO2A.js.map +0 -1
  934. package/dist/chunk-7JB7VPRI.js +0 -34
  935. package/dist/chunk-7JB7VPRI.js.map +0 -1
  936. package/dist/chunk-7LDCTU7D.js +0 -134
  937. package/dist/chunk-7LDCTU7D.js.map +0 -1
  938. package/dist/chunk-AQNKJRFH.js +0 -79
  939. package/dist/chunk-AQNKJRFH.js.map +0 -1
  940. package/dist/chunk-AVZHJN6C.js +0 -14
  941. package/dist/chunk-AVZHJN6C.js.map +0 -1
  942. package/dist/chunk-B24C4A6T.js +0 -22
  943. package/dist/chunk-B24C4A6T.js.map +0 -1
  944. package/dist/chunk-BLK3UEEI.js +0 -23
  945. package/dist/chunk-BLK3UEEI.js.map +0 -1
  946. package/dist/chunk-CVZYNJJ5.js +0 -265
  947. package/dist/chunk-CVZYNJJ5.js.map +0 -1
  948. package/dist/chunk-DAFFDO33.js +0 -14
  949. package/dist/chunk-DAFFDO33.js.map +0 -1
  950. package/dist/chunk-I7INRJO4.js +0 -17
  951. package/dist/chunk-I7INRJO4.js.map +0 -1
  952. package/dist/chunk-L4OKFDJY.js +0 -24
  953. package/dist/chunk-L4OKFDJY.js.map +0 -1
  954. package/dist/chunk-LC3YSAZC.js +0 -39
  955. package/dist/chunk-LC3YSAZC.js.map +0 -1
  956. package/dist/chunk-M5JRI6MN.js +0 -27
  957. package/dist/chunk-M5JRI6MN.js.map +0 -1
  958. package/dist/chunk-MFKMHK5W.js +0 -10
  959. package/dist/chunk-MFKMHK5W.js.map +0 -1
  960. package/dist/chunk-RUNWEPR4.js +0 -10
  961. package/dist/chunk-RUNWEPR4.js.map +0 -1
  962. package/dist/chunk-W2FK7ZNY.js +0 -26
  963. package/dist/chunk-W2FK7ZNY.js.map +0 -1
  964. package/dist/chunk-W5EQ3HYQ.js +0 -42
  965. package/dist/chunk-W5EQ3HYQ.js.map +0 -1
  966. package/dist/chunk-WVPYVDXY.js +0 -15
  967. package/dist/chunk-WVPYVDXY.js.map +0 -1
  968. package/dist/chunk-XXMOARTH.js +0 -229
  969. package/dist/chunk-XXMOARTH.js.map +0 -1
  970. package/dist/chunk-Y5MRDTLC.js +0 -20
  971. package/dist/chunk-Y5MRDTLC.js.map +0 -1
  972. package/dist/chunk-YGN7OMLT.js.map +0 -1
  973. package/dist/panel-header.d.ts +0 -36
  974. package/dist/panel-header.js +0 -7
  975. package/dist/panel-header.js.map +0 -1
  976. package/dist/styles/panel-header.css +0 -64
  977. package/dist/styles/tab-scaffold.css +0 -84
  978. package/dist/tab-scaffold.d.ts +0 -30
  979. package/dist/tab-scaffold.js +0 -16
  980. package/dist/tab-scaffold.js.map +0 -1
  981. package/dist/wire-tab-scaffold.d.ts +0 -11
  982. package/dist/wire-tab-scaffold.js +0 -16
  983. package/dist/wire-tab-scaffold.js.map +0 -1
  984. package/docs/design/templates/panel-header/icon-actions-dark.svg +0 -1
  985. package/docs/design/templates/panel-header/icon-actions.svg +0 -1
  986. package/docs/design/templates/panel-header/icon-summary-actions-dark.svg +0 -1
  987. package/docs/design/templates/panel-header/icon-summary-actions.svg +0 -1
  988. package/docs/design/templates/panel-header/no-icon-dark.svg +0 -1
  989. package/docs/design/templates/panel-header/no-icon.svg +0 -1
  990. package/docs/design/templates/panel-header/page-heading-dark.svg +0 -1
  991. package/docs/design/templates/panel-header/page-heading.svg +0 -1
  992. package/docs/design/templates/panel-header/title-only-dark.svg +0 -1
  993. package/docs/design/templates/panel-header/title-only.svg +0 -1
  994. package/docs/design/templates/panel-header-dark.svg +0 -13
  995. package/docs/design/templates/panel-header.svg +0 -13
  996. package/docs/tab-scaffold.md +0 -41
  997. package/ux-demo/recipes/recipes.css +0 -448
@@ -0,0 +1,85 @@
1
+ import { jsxs, jsx } from 'kerfjs/jsx-runtime';
2
+
3
+ // src/components/forms/combobox/combobox.tsx
4
+ var optionParts = (suggestion) => typeof suggestion === "string" ? { value: suggestion, label: suggestion } : suggestion;
5
+ function Combobox({
6
+ id,
7
+ label,
8
+ suggestions,
9
+ value = "",
10
+ placeholder,
11
+ hint,
12
+ name,
13
+ createLabel = "Create \u201C{value}\u201D",
14
+ disabled = false,
15
+ className = ""
16
+ }) {
17
+ const listId = `${id}-listbox`;
18
+ const hintId = hint ? `${id}-hint` : void 0;
19
+ return /* @__PURE__ */ jsxs(
20
+ "div",
21
+ {
22
+ class: `kui-combobox ${className}`.trim(),
23
+ "data-component": "combobox",
24
+ "data-combobox-id": id,
25
+ "data-create-label": createLabel === false ? void 0 : createLabel,
26
+ "data-disabled": disabled ? "true" : void 0,
27
+ children: [
28
+ /* @__PURE__ */ jsx("label", { class: "kui-combobox__label", for: id, children: label }),
29
+ /* @__PURE__ */ jsxs("div", { class: "kui-combobox__control", children: [
30
+ /* @__PURE__ */ jsx(
31
+ "input",
32
+ {
33
+ id,
34
+ class: "kui-combobox__input",
35
+ type: "text",
36
+ role: "combobox",
37
+ "aria-autocomplete": "list",
38
+ "aria-expanded": "false",
39
+ "aria-controls": listId,
40
+ "aria-describedby": hintId,
41
+ autocomplete: "off",
42
+ spellcheck: "false",
43
+ name,
44
+ value,
45
+ placeholder,
46
+ disabled
47
+ }
48
+ ),
49
+ /* @__PURE__ */ jsxs("ul", { class: "kui-combobox__listbox", id: listId, role: "listbox", hidden: true, children: [
50
+ suggestions.map((suggestion, index) => {
51
+ const option = optionParts(suggestion);
52
+ return /* @__PURE__ */ jsx(
53
+ "li",
54
+ {
55
+ class: "kui-combobox__option",
56
+ id: `${id}-option-${index}`,
57
+ role: "option",
58
+ "aria-selected": "false",
59
+ "data-value": option.value,
60
+ children: option.label
61
+ }
62
+ );
63
+ }),
64
+ createLabel !== false && /* @__PURE__ */ jsx(
65
+ "li",
66
+ {
67
+ class: "kui-combobox__option",
68
+ id: `${id}-option-create`,
69
+ role: "option",
70
+ "aria-selected": "false",
71
+ "data-create": "",
72
+ hidden: true
73
+ }
74
+ )
75
+ ] })
76
+ ] }),
77
+ hint && /* @__PURE__ */ jsx("div", { class: "kui-combobox__hint", id: hintId, children: hint })
78
+ ]
79
+ }
80
+ );
81
+ }
82
+
83
+ export { Combobox };
84
+
85
+ //# sourceMappingURL=chunk-ETCWQLJV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/forms/combobox/combobox.tsx"],"names":[],"mappings":"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","file":"chunk-ETCWQLJV.js","sourcesContent":["/** A suggestion: a plain string, or a value with a distinct visible label. */\nexport type ComboboxSuggestion = string | { value: string; label: string };\n\nexport interface ComboboxProps {\n /** Unique id; it also identifies the field in `wireComboboxes` reports. */\n id: string;\n /** Visible field label. */\n label: string;\n /** Suggestions to filter as the person types. */\n suggestions: readonly ComboboxSuggestion[];\n /** Initial text; the field owns its text while the person types. */\n value?: string;\n placeholder?: string;\n /** Optional hint below the field, such as \"Press Enter to add\". */\n hint?: string;\n /** Form field name. */\n name?: string;\n /**\n * Offer to create the typed text when it matches no suggestion; the option\n * reads `createLabel` with `{value}` replaced. Omit to only allow\n * suggestions. Default `Create “{value}”`.\n */\n createLabel?: string | false;\n disabled?: boolean;\n className?: string;\n}\n\nconst optionParts = (suggestion: ComboboxSuggestion) =>\n typeof suggestion === 'string'\n ? { value: suggestion, label: suggestion }\n : suggestion;\n\n/**\n * A free-text field with a filtered suggestion list that can also create a new\n * value: the ARIA combobox pattern on a native input with the themed Web\n * Awesome field chrome. `wireComboboxes` filters, moves the active option,\n * and reports commits (Enter, comma, or a click). Use `Select` when only\n * existing values are allowed and nothing is typed.\n */\nexport function Combobox({\n id,\n label,\n suggestions,\n value = '',\n placeholder,\n hint,\n name,\n createLabel = 'Create “{value}”',\n disabled = false,\n className = '',\n}: ComboboxProps) {\n const listId = `${id}-listbox`;\n const hintId = hint ? `${id}-hint` : undefined;\n return (\n <div\n class={`kui-combobox ${className}`.trim()}\n data-component=\"combobox\"\n data-combobox-id={id}\n data-create-label={createLabel === false ? undefined : createLabel}\n data-disabled={disabled ? 'true' : undefined}\n >\n <label class=\"kui-combobox__label\" for={id}>\n {label}\n </label>\n <div class=\"kui-combobox__control\">\n <input\n id={id}\n class=\"kui-combobox__input\"\n type=\"text\"\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-expanded=\"false\"\n aria-controls={listId}\n aria-describedby={hintId}\n autocomplete=\"off\"\n spellcheck=\"false\"\n name={name}\n value={value}\n placeholder={placeholder}\n disabled={disabled}\n />\n <ul class=\"kui-combobox__listbox\" id={listId} role=\"listbox\" hidden>\n {suggestions.map((suggestion, index) => {\n const option = optionParts(suggestion);\n return (\n <li\n class=\"kui-combobox__option\"\n id={`${id}-option-${index}`}\n role=\"option\"\n aria-selected=\"false\"\n data-value={option.value}\n >\n {option.label}\n </li>\n );\n })}\n {createLabel !== false && (\n <li\n class=\"kui-combobox__option\"\n id={`${id}-option-create`}\n role=\"option\"\n aria-selected=\"false\"\n data-create=\"\"\n hidden\n />\n )}\n </ul>\n </div>\n {hint && (\n <div class=\"kui-combobox__hint\" id={hintId}>\n {hint}\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -0,0 +1,138 @@
1
+ // src/components/forms/combobox/wiring/wire-comboboxes.ts
2
+ var INPUT = ".kui-combobox__input";
3
+ function partsOf(input) {
4
+ const field = input.closest('[data-component="combobox"]');
5
+ const listbox = field.querySelector('[role="listbox"]');
6
+ return {
7
+ field,
8
+ input,
9
+ listbox,
10
+ create: listbox.querySelector("[data-create]")
11
+ };
12
+ }
13
+ var visibleOptions = (parts) => [...parts.listbox.querySelectorAll('[role="option"]')].filter(
14
+ (option) => !option.hidden
15
+ );
16
+ var matches = (option, text) => option.textContent.toLowerCase().includes(text) || option.dataset.value.toLowerCase().includes(text);
17
+ function setActive(parts, option) {
18
+ for (const item of parts.listbox.querySelectorAll('[role="option"]'))
19
+ item.setAttribute("aria-selected", String(item === option));
20
+ if (option) {
21
+ parts.input.setAttribute("aria-activedescendant", option.id);
22
+ option.scrollIntoView?.({ block: "nearest" });
23
+ } else parts.input.removeAttribute("aria-activedescendant");
24
+ }
25
+ function activeOption(parts) {
26
+ const id = parts.input.getAttribute("aria-activedescendant");
27
+ return id ? parts.listbox.querySelector(`#${CSS.escape(id)}`) : null;
28
+ }
29
+ function close(parts) {
30
+ parts.listbox.hidden = true;
31
+ parts.input.setAttribute("aria-expanded", "false");
32
+ setActive(parts, null);
33
+ }
34
+ function update(parts) {
35
+ const typed = parts.input.value.trim();
36
+ const text = typed.toLowerCase();
37
+ let exact = false;
38
+ for (const option of parts.listbox.querySelectorAll(
39
+ '[role="option"]:not([data-create])'
40
+ )) {
41
+ option.hidden = text !== "" && !matches(option, text);
42
+ if (option.dataset.value.toLowerCase() === text) exact = true;
43
+ }
44
+ if (parts.create) {
45
+ parts.create.hidden = typed === "" || exact;
46
+ parts.create.dataset.value = typed;
47
+ parts.create.textContent = parts.field.dataset.createLabel.replaceAll(
48
+ "{value}",
49
+ typed
50
+ );
51
+ }
52
+ const options = visibleOptions(parts);
53
+ parts.listbox.hidden = options.length === 0;
54
+ parts.input.setAttribute("aria-expanded", String(options.length > 0));
55
+ if (!options.includes(activeOption(parts))) setActive(parts, null);
56
+ }
57
+ function wireComboboxes(root, { onCommit, commitKeys = [","] }) {
58
+ const commit = (parts, active) => {
59
+ const option = active ?? (parts.create ? null : visibleOptions(parts)[0] ?? null);
60
+ const typed = parts.input.value.trim();
61
+ const value = option ? option.dataset.value : typed;
62
+ const suggestion = [
63
+ ...parts.listbox.querySelectorAll(
64
+ '[role="option"]:not([data-create])'
65
+ )
66
+ ].find((item) => item.dataset.value.toLowerCase() === value.toLowerCase());
67
+ const created = !suggestion;
68
+ if (created && !parts.create) return;
69
+ close(parts);
70
+ onCommit({
71
+ id: parts.field.dataset.comboboxId,
72
+ value: suggestion?.dataset.value ?? value,
73
+ created,
74
+ input: parts.input
75
+ });
76
+ };
77
+ const inputOf = (event) => event.target instanceof HTMLInputElement && event.target.matches(INPUT) ? event.target : null;
78
+ const onInput = (event) => {
79
+ const input = inputOf(event);
80
+ const parts = input && partsOf(input);
81
+ if (parts) update(parts);
82
+ };
83
+ const onFocus = onInput;
84
+ const onKeyDown = (event) => {
85
+ const keyboard = event;
86
+ const input = inputOf(keyboard);
87
+ const parts = input && partsOf(input);
88
+ if (!parts || keyboard.isComposing) return;
89
+ const options = visibleOptions(parts);
90
+ const current = activeOption(parts);
91
+ const index = current ? options.indexOf(current) : -1;
92
+ if (keyboard.key === "ArrowDown" || keyboard.key === "ArrowUp") {
93
+ keyboard.preventDefault();
94
+ if (parts.listbox.hidden) update(parts);
95
+ const open = visibleOptions(parts);
96
+ if (open.length === 0) return;
97
+ const step = keyboard.key === "ArrowDown" ? 1 : -1;
98
+ const next = index < 0 ? step > 0 ? 0 : open.length - 1 : (index + step + open.length) % open.length;
99
+ setActive(parts, open[next]);
100
+ } else if (keyboard.key === "Enter" || commitKeys.includes(keyboard.key)) {
101
+ if (!parts.input.value.trim() && !current) return;
102
+ keyboard.preventDefault();
103
+ commit(parts, current);
104
+ } else if (keyboard.key === "Escape" && !parts.listbox.hidden) {
105
+ keyboard.preventDefault();
106
+ close(parts);
107
+ }
108
+ };
109
+ const onPointerDown = (event) => {
110
+ const option = event.target instanceof Element ? event.target.closest(".kui-combobox__option") : null;
111
+ const input = option?.closest('[data-component="combobox"]')?.querySelector(INPUT);
112
+ const parts = input && partsOf(input);
113
+ if (!option || !parts) return;
114
+ event.preventDefault();
115
+ commit(parts, option);
116
+ };
117
+ const onFocusOut = (event) => {
118
+ const input = inputOf(event);
119
+ const parts = input && partsOf(input);
120
+ if (parts) close(parts);
121
+ };
122
+ root.addEventListener("input", onInput);
123
+ root.addEventListener("focusin", onFocus);
124
+ root.addEventListener("keydown", onKeyDown);
125
+ root.addEventListener("pointerdown", onPointerDown);
126
+ root.addEventListener("focusout", onFocusOut);
127
+ return () => {
128
+ root.removeEventListener("input", onInput);
129
+ root.removeEventListener("focusin", onFocus);
130
+ root.removeEventListener("keydown", onKeyDown);
131
+ root.removeEventListener("pointerdown", onPointerDown);
132
+ root.removeEventListener("focusout", onFocusOut);
133
+ };
134
+ }
135
+
136
+ export { wireComboboxes };
137
+
138
+ //# sourceMappingURL=chunk-FDZNYD4C.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/forms/combobox/wiring/wire-comboboxes.ts"],"names":[],"mappings":"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","file":"chunk-FDZNYD4C.js","sourcesContent":["type Root = HTMLElement | Document;\n\nconst INPUT = '.kui-combobox__input';\n\n/** A committed combobox value. */\nexport interface ComboboxCommit {\n id: string;\n value: string;\n /** True when the value matched no suggestion (the person created it). */\n created: boolean;\n /** The field's input; clear or keep its text after applying the commit. */\n input: HTMLInputElement;\n}\n\nexport interface WireComboboxesOptions {\n onCommit: (commit: ComboboxCommit) => void;\n /** Characters that commit the typed text besides Enter. Default `[',']`. */\n commitKeys?: readonly string[];\n}\n\ninterface Parts {\n field: HTMLElement;\n input: HTMLInputElement;\n listbox: HTMLElement;\n create: HTMLElement | null;\n}\n\n// `Combobox` renders the input inside its field with its listbox, and every\n// suggestion option with `data-value`, so the lookups below cannot miss.\nfunction partsOf(input: HTMLInputElement): Parts {\n const field = input.closest<HTMLElement>('[data-component=\"combobox\"]')!;\n const listbox = field.querySelector<HTMLElement>('[role=\"listbox\"]')!;\n return {\n field,\n input,\n listbox,\n create: listbox.querySelector<HTMLElement>('[data-create]'),\n };\n}\n\nconst visibleOptions = (parts: Parts) =>\n [...parts.listbox.querySelectorAll<HTMLElement>('[role=\"option\"]')].filter(\n (option) => !option.hidden,\n );\n\nconst matches = (option: HTMLElement, text: string) =>\n option.textContent!.toLowerCase().includes(text) ||\n option.dataset.value!.toLowerCase().includes(text);\n\nfunction setActive(parts: Parts, option: HTMLElement | null) {\n for (const item of parts.listbox.querySelectorAll('[role=\"option\"]'))\n item.setAttribute('aria-selected', String(item === option));\n if (option) {\n parts.input.setAttribute('aria-activedescendant', option.id);\n option.scrollIntoView?.({ block: 'nearest' });\n } else parts.input.removeAttribute('aria-activedescendant');\n}\n\nfunction activeOption(parts: Parts): HTMLElement | null {\n const id = parts.input.getAttribute('aria-activedescendant');\n return id\n ? parts.listbox.querySelector<HTMLElement>(`#${CSS.escape(id)}`)\n : null;\n}\n\nfunction close(parts: Parts) {\n parts.listbox.hidden = true;\n parts.input.setAttribute('aria-expanded', 'false');\n setActive(parts, null);\n}\n\n/** Filter the suggestions to the typed text and show the create option. */\nfunction update(parts: Parts) {\n const typed = parts.input.value.trim();\n const text = typed.toLowerCase();\n let exact = false;\n for (const option of parts.listbox.querySelectorAll<HTMLElement>(\n '[role=\"option\"]:not([data-create])',\n )) {\n option.hidden = text !== '' && !matches(option, text);\n if (option.dataset.value!.toLowerCase() === text) exact = true;\n }\n if (parts.create) {\n parts.create.hidden = typed === '' || exact;\n parts.create.dataset.value = typed;\n // A create option exists only when the field has a create label.\n parts.create.textContent = parts.field.dataset.createLabel!.replaceAll(\n '{value}',\n typed,\n );\n }\n const options = visibleOptions(parts);\n parts.listbox.hidden = options.length === 0;\n parts.input.setAttribute('aria-expanded', String(options.length > 0));\n if (!options.includes(activeOption(parts)!)) setActive(parts, null);\n}\n\n/**\n * Wire every `Combobox` below root: typing filters the suggestions (and offers\n * to create the typed text), ArrowDown/ArrowUp move the active option, Enter or\n * a commit key (comma by default) commits the active option or the typed text,\n * a click commits an option, and Escape or leaving the field closes the list.\n * Typed text that matches no suggestion commits only when the field offers\n * creation; otherwise Enter commits the first matching suggestion. Dispose with the owning application.\n */\nexport function wireComboboxes(\n root: Root,\n { onCommit, commitKeys = [','] }: WireComboboxesOptions,\n): () => void {\n const commit = (parts: Parts, active: HTMLElement | null) => {\n // Without a create option, Enter on partial text takes the first match.\n const option =\n active ?? (parts.create ? null : (visibleOptions(parts)[0] ?? null));\n const typed = parts.input.value.trim();\n // Callers commit only with an option or non-empty typed text.\n const value = option ? option.dataset.value! : typed;\n const suggestion = [\n ...parts.listbox.querySelectorAll<HTMLElement>(\n '[role=\"option\"]:not([data-create])',\n ),\n ].find((item) => item.dataset.value!.toLowerCase() === value.toLowerCase());\n const created = !suggestion;\n if (created && !parts.create) return;\n close(parts);\n onCommit({\n id: parts.field.dataset.comboboxId!,\n value: suggestion?.dataset.value ?? value,\n created,\n input: parts.input,\n });\n };\n const inputOf = (event: Event) =>\n event.target instanceof HTMLInputElement && event.target.matches(INPUT)\n ? event.target\n : null;\n const onInput = (event: Event) => {\n const input = inputOf(event);\n const parts = input && partsOf(input);\n if (parts) update(parts);\n };\n const onFocus = onInput;\n const onKeyDown = (event: Event) => {\n const keyboard = event as KeyboardEvent;\n const input = inputOf(keyboard);\n const parts = input && partsOf(input);\n if (!parts || keyboard.isComposing) return;\n const options = visibleOptions(parts);\n const current = activeOption(parts);\n const index = current ? options.indexOf(current) : -1;\n if (keyboard.key === 'ArrowDown' || keyboard.key === 'ArrowUp') {\n keyboard.preventDefault();\n if (parts.listbox.hidden) update(parts);\n const open = visibleOptions(parts);\n if (open.length === 0) return;\n const step = keyboard.key === 'ArrowDown' ? 1 : -1;\n const next =\n index < 0\n ? step > 0\n ? 0\n : open.length - 1\n : (index + step + open.length) % open.length;\n setActive(parts, open[next]!);\n } else if (keyboard.key === 'Enter' || commitKeys.includes(keyboard.key)) {\n if (!parts.input.value.trim() && !current) return;\n keyboard.preventDefault();\n commit(parts, current);\n } else if (keyboard.key === 'Escape' && !parts.listbox.hidden) {\n keyboard.preventDefault();\n close(parts);\n }\n };\n const onPointerDown = (event: Event) => {\n const option =\n event.target instanceof Element\n ? event.target.closest<HTMLElement>('.kui-combobox__option')\n : null;\n const input = option\n ?.closest('[data-component=\"combobox\"]')\n ?.querySelector<HTMLInputElement>(INPUT);\n const parts = input && partsOf(input);\n if (!option || !parts) return;\n // Keep focus in the field; commit on the press itself.\n event.preventDefault();\n commit(parts, option);\n };\n const onFocusOut = (event: Event) => {\n const input = inputOf(event);\n const parts = input && partsOf(input);\n if (parts) close(parts);\n };\n root.addEventListener('input', onInput);\n root.addEventListener('focusin', onFocus);\n root.addEventListener('keydown', onKeyDown);\n root.addEventListener('pointerdown', onPointerDown);\n root.addEventListener('focusout', onFocusOut);\n return () => {\n root.removeEventListener('input', onInput);\n root.removeEventListener('focusin', onFocus);\n root.removeEventListener('keydown', onKeyDown);\n root.removeEventListener('pointerdown', onPointerDown);\n root.removeEventListener('focusout', onFocusOut);\n };\n}\n"]}
@@ -0,0 +1,90 @@
1
+ import { jsx, jsxs } from 'kerfjs/jsx-runtime';
2
+
3
+ // src/components/forms/choice-chips/choice-chips.tsx
4
+ var unsafeSwatch = /[;{}<>"'\\]|\p{Cc}/u;
5
+ function swatchStyle(swatch) {
6
+ if (swatch === "transparent") return void 0;
7
+ const color = swatch.trim();
8
+ if (!color || unsafeSwatch.test(color))
9
+ throw new TypeError("ChoiceChips swatch requires one CSS color value.");
10
+ return `--_kui-choice-chips-swatch: ${color}`;
11
+ }
12
+ function ChoiceChips(props) {
13
+ const {
14
+ name,
15
+ choices,
16
+ action,
17
+ size = "default",
18
+ disabled = false,
19
+ form,
20
+ id,
21
+ className = "",
22
+ slot,
23
+ label,
24
+ labelledBy
25
+ } = props;
26
+ if (choices.some((choice) => choice.swatch !== void 0 && choice.icon))
27
+ throw new TypeError("A ChoiceChips choice takes a swatch or an icon.");
28
+ const multiple = props.multiple === true;
29
+ const required = !props.multiple && props.required === true;
30
+ const checked = props.multiple ? props.value ?? [] : props.value === void 0 ? [] : [props.value];
31
+ return /* @__PURE__ */ jsx(
32
+ "div",
33
+ {
34
+ id,
35
+ class: `kui-choice-chips ${className}`.trim(),
36
+ "data-component": "choice-chips",
37
+ "data-size": size,
38
+ "data-disabled": disabled ? "" : void 0,
39
+ role: multiple ? "group" : "radiogroup",
40
+ "aria-label": label,
41
+ "aria-labelledby": labelledBy,
42
+ "aria-required": required ? "true" : void 0,
43
+ "aria-disabled": disabled ? "true" : void 0,
44
+ slot,
45
+ children: choices.map((choice) => {
46
+ const unavailable = disabled || choice.disabled === true;
47
+ return /* @__PURE__ */ jsxs(
48
+ "label",
49
+ {
50
+ class: "kui-choice-chips__chip",
51
+ "data-choice-value": choice.value,
52
+ "data-disabled": unavailable ? "" : void 0,
53
+ title: choice.title,
54
+ children: [
55
+ /* @__PURE__ */ jsx(
56
+ "input",
57
+ {
58
+ class: "kui-choice-chips__input",
59
+ type: multiple ? "checkbox" : "radio",
60
+ name,
61
+ value: choice.value,
62
+ checked: checked.includes(choice.value),
63
+ disabled: unavailable,
64
+ required,
65
+ form,
66
+ "data-action": action
67
+ }
68
+ ),
69
+ choice.swatch === void 0 ? null : /* @__PURE__ */ jsx(
70
+ "span",
71
+ {
72
+ class: "kui-choice-chips__swatch",
73
+ "data-swatch": choice.swatch === "transparent" ? "transparent" : "color",
74
+ style: swatchStyle(choice.swatch),
75
+ "aria-hidden": "true"
76
+ }
77
+ ),
78
+ choice.icon === void 0 ? null : /* @__PURE__ */ jsx("span", { class: "kui-choice-chips__icon", "aria-hidden": "true", children: choice.icon }),
79
+ /* @__PURE__ */ jsx("span", { class: "kui-choice-chips__label", children: choice.label })
80
+ ]
81
+ }
82
+ );
83
+ })
84
+ }
85
+ );
86
+ }
87
+
88
+ export { ChoiceChips };
89
+
90
+ //# sourceMappingURL=chunk-FR76ZJQC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/forms/choice-chips/choice-chips.tsx"],"names":[],"mappings":";;;AA+EA,IAAM,YAAA,GAAe,qBAAA;AAErB,SAAS,YAAY,MAAA,EAA+C;AAClE,EAAA,IAAI,MAAA,KAAW,eAAe,OAAO,MAAA;AACrC,EAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,EAAK;AAC1B,EAAA,IAAI,CAAC,KAAA,IAAS,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA;AACnC,IAAA,MAAM,IAAI,UAAU,kDAAkD,CAAA;AACxE,EAAA,OAAO,+BAA+B,KAAK,CAAA,CAAA;AAC7C;AASO,SAAS,YACd,KAAA,EACA;AACA,EAAA,MAAM;AAAA,IACJ,IAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,IAAA,GAAO,SAAA;AAAA,IACP,QAAA,GAAW,KAAA;AAAA,IACX,IAAA;AAAA,IACA,EAAA;AAAA,IACA,SAAA,GAAY,EAAA;AAAA,IACZ,IAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AACJ,EAAA,IAAI,OAAA,CAAQ,KAAK,CAAC,MAAA,KAAW,OAAO,MAAA,KAAW,MAAA,IAAa,OAAO,IAAI,CAAA;AACrE,IAAA,MAAM,IAAI,UAAU,iDAAiD,CAAA;AACvE,EAAA,MAAM,QAAA,GAAW,MAAM,QAAA,KAAa,IAAA;AACpC,EAAA,MAAM,QAAA,GAAW,CAAC,KAAA,CAAM,QAAA,IAAY,MAAM,QAAA,KAAa,IAAA;AACvD,EAAA,MAAM,OAAA,GAA4B,KAAA,CAAM,QAAA,GACnC,KAAA,CAAM,SAAS,EAAC,GACjB,KAAA,CAAM,KAAA,KAAU,MAAA,GACd,EAAC,GACD,CAAC,MAAM,KAAK,CAAA;AAClB,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,EAAA;AAAA,MACA,KAAA,EAAO,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAC5C,gBAAA,EAAe,cAAA;AAAA,MACf,WAAA,EAAW,IAAA;AAAA,MACX,eAAA,EAAe,WAAW,EAAA,GAAK,MAAA;AAAA,MAC/B,IAAA,EAAM,WAAW,OAAA,GAAU,YAAA;AAAA,MAC3B,YAAA,EAAY,KAAA;AAAA,MACZ,iBAAA,EAAiB,UAAA;AAAA,MACjB,eAAA,EAAe,WAAW,MAAA,GAAS,MAAA;AAAA,MACnC,eAAA,EAAe,WAAW,MAAA,GAAS,MAAA;AAAA,MACnC,IAAA;AAAA,MAEC,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW;AACvB,QAAA,MAAM,WAAA,GAAc,QAAA,IAAY,MAAA,CAAO,QAAA,KAAa,IAAA;AACpD,QAAA,uBACE,IAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,wBAAA;AAAA,YACN,qBAAmB,MAAA,CAAO,KAAA;AAAA,YAC1B,eAAA,EAAe,cAAc,EAAA,GAAK,MAAA;AAAA,YAClC,OAAO,MAAA,CAAO,KAAA;AAAA,YAEd,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAM,yBAAA;AAAA,kBACN,IAAA,EAAM,WAAW,UAAA,GAAa,OAAA;AAAA,kBAC9B,IAAA;AAAA,kBACA,OAAO,MAAA,CAAO,KAAA;AAAA,kBACd,OAAA,EAAS,OAAA,CAAQ,QAAA,CAAS,MAAA,CAAO,KAAK,CAAA;AAAA,kBACtC,QAAA,EAAU,WAAA;AAAA,kBACV,QAAA;AAAA,kBACA,IAAA;AAAA,kBACA,aAAA,EAAa;AAAA;AAAA,eACf;AAAA,cACC,MAAA,CAAO,MAAA,KAAW,MAAA,GAAY,IAAA,mBAC7B,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAM,0BAAA;AAAA,kBACN,aAAA,EACE,MAAA,CAAO,MAAA,KAAW,aAAA,GAAgB,aAAA,GAAgB,OAAA;AAAA,kBAEpD,KAAA,EAAO,WAAA,CAAY,MAAA,CAAO,MAAM,CAAA;AAAA,kBAChC,aAAA,EAAY;AAAA;AAAA,eACd;AAAA,cAED,MAAA,CAAO,IAAA,KAAS,MAAA,GAAY,IAAA,mBAC3B,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,wBAAA,EAAyB,aAAA,EAAY,MAAA,EAC9C,QAAA,EAAA,MAAA,CAAO,IAAA,EACV,CAAA;AAAA,8BAEF,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,yBAAA,EAA2B,iBAAO,KAAA,EAAM;AAAA;AAAA;AAAA,SACtD;AAAA,MAEJ,CAAC;AAAA;AAAA,GACH;AAEJ","file":"chunk-FR76ZJQC.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport type { CssColor } from '../../../shared/styles/css-values.js';\n\nexport type ChoiceChipsSize = 'default' | 'compact';\n\n/**\n * A leading color dot: a {@link CssColor} from `uiColor()`, `colorVar()`, or\n * `fillColor()`, or `'transparent'` for the no-color swatch (an outlined\n * dot struck through by a diagonal line).\n */\nexport type ChoiceChipsSwatch = CssColor | 'transparent';\n\nexport interface ChoiceChipsChoice<Value extends string = string> {\n value: Value;\n /** Visible label; it is also the radio's accessible name. */\n label: string;\n /** Leading color dot. Mutually exclusive with `icon`. */\n swatch?: ChoiceChipsSwatch;\n /** Decorative leading icon, normally an unsized LucideIcon. */\n icon?: SafeHtml;\n /** Supplementary tooltip; never the only place a choice is described. */\n title?: string;\n disabled?: boolean;\n}\n\ninterface ChoiceChipsCommonProps<Value extends string> {\n /**\n * Native input `name`: the form field the selected value (or, with\n * `multiple`, every checked value) submits under.\n */\n name: string;\n choices: readonly ChoiceChipsChoice<Value>[];\n /** Delegated `data-action` on every input; listen for `change`. */\n action?: string;\n size?: ChoiceChipsSize;\n /** Disable the whole group. */\n disabled?: boolean;\n /** Associate the inputs with a form outside their ancestor chain. */\n form?: string;\n id?: string;\n className?: string;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\n/** One exclusive value (the default), backed by native radios. */\nexport interface ChoiceChipsSingleProps<Value extends string = string> {\n multiple?: false;\n /** The selected value. Omit (or pass `undefined`) for no selection. */\n value?: NoInfer<Value>;\n /** Require a selection for native form validation. */\n required?: boolean;\n}\n\n/**\n * Any number of values, backed by native checkboxes: each pill is its own Tab\n * stop, Space toggles it, and every checked value submits under `name`.\n */\nexport interface ChoiceChipsMultipleProps<Value extends string = string> {\n multiple: true;\n /** The checked values. Omit (or pass `[]`) for none. */\n value?: readonly NoInfer<Value>[];\n /**\n * Native `required` on a checkbox demands that one box, so a multiple group\n * has no \"at least one\" requirement; validate the checked set in the app.\n */\n required?: never;\n}\n\n/** A group is named either by a string or by a visible heading's id. */\nexport type ChoiceChipsNaming =\n { label: string; labelledBy?: never } | { labelledBy: string; label?: never };\n\nexport type ChoiceChipsProps<Value extends string = string> =\n ChoiceChipsCommonProps<Value> &\n (ChoiceChipsSingleProps<Value> | ChoiceChipsMultipleProps<Value>) &\n ChoiceChipsNaming;\n\nconst unsafeSwatch = /[;{}<>\"'\\\\]|\\p{Cc}/u;\n\nfunction swatchStyle(swatch: ChoiceChipsSwatch): string | undefined {\n if (swatch === 'transparent') return undefined;\n const color = swatch.trim();\n if (!color || unsafeSwatch.test(color))\n throw new TypeError('ChoiceChips swatch requires one CSS color value.');\n return `--_kui-choice-chips-swatch: ${color}`;\n}\n\n/**\n * A wrapping set of pill chips backed by native inputs. By default it is an\n * exclusive radio group: one Tab stop, arrow-key selection, and a real form\n * value. With `multiple` it is a checkbox group: each pill toggles on its own\n * and every checked value submits. Each choice may lead with a color swatch\n * (including a struck-through transparent swatch) or an icon.\n */\nexport function ChoiceChips<Value extends string>(\n props: ChoiceChipsProps<Value>,\n) {\n const {\n name,\n choices,\n action,\n size = 'default',\n disabled = false,\n form,\n id,\n className = '',\n slot,\n label,\n labelledBy,\n } = props;\n if (choices.some((choice) => choice.swatch !== undefined && choice.icon))\n throw new TypeError('A ChoiceChips choice takes a swatch or an icon.');\n const multiple = props.multiple === true;\n const required = !props.multiple && props.required === true;\n const checked: readonly Value[] = props.multiple\n ? (props.value ?? [])\n : props.value === undefined\n ? []\n : [props.value];\n return (\n <div\n id={id}\n class={`kui-choice-chips ${className}`.trim()}\n data-component=\"choice-chips\"\n data-size={size}\n data-disabled={disabled ? '' : undefined}\n role={multiple ? 'group' : 'radiogroup'}\n aria-label={label}\n aria-labelledby={labelledBy}\n aria-required={required ? 'true' : undefined}\n aria-disabled={disabled ? 'true' : undefined}\n slot={slot}\n >\n {choices.map((choice) => {\n const unavailable = disabled || choice.disabled === true;\n return (\n <label\n class=\"kui-choice-chips__chip\"\n data-choice-value={choice.value}\n data-disabled={unavailable ? '' : undefined}\n title={choice.title}\n >\n <input\n class=\"kui-choice-chips__input\"\n type={multiple ? 'checkbox' : 'radio'}\n name={name}\n value={choice.value}\n checked={checked.includes(choice.value)}\n disabled={unavailable}\n required={required}\n form={form}\n data-action={action}\n />\n {choice.swatch === undefined ? null : (\n <span\n class=\"kui-choice-chips__swatch\"\n data-swatch={\n choice.swatch === 'transparent' ? 'transparent' : 'color'\n }\n style={swatchStyle(choice.swatch)}\n aria-hidden=\"true\"\n />\n )}\n {choice.icon === undefined ? null : (\n <span class=\"kui-choice-chips__icon\" aria-hidden=\"true\">\n {choice.icon}\n </span>\n )}\n <span class=\"kui-choice-chips__label\">{choice.label}</span>\n </label>\n );\n })}\n </div>\n );\n}\n"]}
@@ -0,0 +1,29 @@
1
+ import { jsx } from 'kerfjs/jsx-runtime';
2
+
3
+ // src/components/feedback/corner-status/corner-status.tsx
4
+ function CornerStatus({
5
+ id,
6
+ children,
7
+ placement = "bottom-end",
8
+ presentation = "overlay",
9
+ className = "",
10
+ slot
11
+ }) {
12
+ return /* @__PURE__ */ jsx(
13
+ "div",
14
+ {
15
+ id,
16
+ class: `kui-corner-status ${className}`.trim(),
17
+ "data-component": "corner-status",
18
+ "data-placement": placement,
19
+ "data-presentation": presentation,
20
+ popover: presentation === "overlay" ? "manual" : void 0,
21
+ slot,
22
+ children
23
+ }
24
+ );
25
+ }
26
+
27
+ export { CornerStatus };
28
+
29
+ //# sourceMappingURL=chunk-G3J7JDP6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/feedback/corner-status/corner-status.tsx"],"names":[],"mappings":";;;AAoCO,SAAS,YAAA,CAAa;AAAA,EAC3B,EAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,YAAA;AAAA,EACZ,YAAA,GAAe,SAAA;AAAA,EACf,SAAA,GAAY,EAAA;AAAA,EACZ;AACF,CAAA,EAAsB;AACpB,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,EAAA;AAAA,MACA,KAAA,EAAO,CAAA,kBAAA,EAAqB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAC7C,gBAAA,EAAe,eAAA;AAAA,MACf,gBAAA,EAAgB,SAAA;AAAA,MAChB,mBAAA,EAAmB,YAAA;AAAA,MACnB,OAAA,EAAS,YAAA,KAAiB,SAAA,GAAY,QAAA,GAAW,MAAA;AAAA,MACjD,IAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ","file":"chunk-G3J7JDP6.js","sourcesContent":["import type { KerfUiContent } from '../../../shared/content/semantic-content.js';\n\n/** The viewport corner a CornerStatus occupies, in logical (RTL-aware) terms. */\nexport type CornerStatusPlacement =\n 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end';\n\n/** Where a CornerStatus appears: the top layer, or in flow. */\nexport type CornerStatusPresentation = 'overlay' | 'embedded';\n\nexport interface CornerStatusProps {\n /** The root id: what a `popovertarget` control or `getElementById` names. */\n id?: string;\n /** One or more `StateBanner`s, typically `urgency=\"status\"`; they stack. */\n children: KerfUiContent;\n /** Viewport corner; defaults to `bottom-end`. */\n placement?: CornerStatusPlacement;\n /**\n * `overlay` (default) is a native `popover=\"manual\"` host in the top layer,\n * opened by `wireCornerStatus`: above fixed and z-indexed page chrome,\n * never focused, and with no close button, light dismiss, or Escape.\n * `embedded` renders the same stack in flow for a catalog or inline use.\n */\n presentation?: CornerStatusPresentation;\n className?: string;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\n/**\n * A non-dismissible status surface pinned to a viewport corner — \"Loading…\",\n * \"Updating Tickets… 3 of 12\" — for app-level progress that has no better\n * home beside the affected work. The application owns its lifetime: render it\n * while the work runs and remove it when the work ends. It carries no role of\n * its own; the composed `StateBanner` is the polite live region. Use a toast\n * for transient, dismissible confirmation instead.\n */\nexport function CornerStatus({\n id,\n children,\n placement = 'bottom-end',\n presentation = 'overlay',\n className = '',\n slot,\n}: CornerStatusProps) {\n return (\n <div\n id={id}\n class={`kui-corner-status ${className}`.trim()}\n data-component=\"corner-status\"\n data-placement={placement}\n data-presentation={presentation}\n popover={presentation === 'overlay' ? 'manual' : undefined}\n slot={slot}\n >\n {children}\n </div>\n );\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import { wireResizeHandles } from './chunk-CEJ5FK6G.js';
2
+
3
+ // src/components/layout/resizable-region/wiring/wire-resizable-regions.ts
4
+ function wireResizableRegions(root, options) {
5
+ return wireResizeHandles(
6
+ root,
7
+ options,
8
+ '[data-component="resizable-region"]'
9
+ );
10
+ }
11
+
12
+ export { wireResizableRegions };
13
+
14
+ //# sourceMappingURL=chunk-GS2QD3N7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/layout/resizable-region/wiring/wire-resizable-regions.ts"],"names":[],"mappings":";;;AASO,SAAS,oBAAA,CACd,MACA,OAAA,EACA;AACA,EAAA,OAAO,iBAAA;AAAA,IACL,IAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF","file":"chunk-GS2QD3N7.js","sourcesContent":["import {\n type ResizeCommit,\n type WireResizableRegionsOptions,\n wireResizeHandles,\n} from '../internal/resize-wiring.js';\n\nexport type { ResizeCommit, WireResizableRegionsOptions };\n\n/** Wire pointer and separator-keyboard behavior for every ResizableRegion below root. */\nexport function wireResizableRegions(\n root: HTMLElement,\n options: WireResizableRegionsOptions,\n) {\n return wireResizeHandles(\n root,\n options,\n '[data-component=\"resizable-region\"]',\n );\n}\n"]}
@@ -0,0 +1,86 @@
1
+ import { Skeleton } from './chunk-CVD5IZGB.js';
2
+ import { em } from './chunk-IQSRHXZR.js';
3
+ import { jsx, jsxs } from 'kerfjs/jsx-runtime';
4
+
5
+ function ToolbarText({
6
+ text,
7
+ size = "default",
8
+ tone = "default",
9
+ hideBelow,
10
+ showBelow,
11
+ className = "",
12
+ id,
13
+ headingLevel,
14
+ placeholder = false,
15
+ wrap = false,
16
+ ellipsis = true,
17
+ maxLines = null,
18
+ fill = false,
19
+ slot,
20
+ action,
21
+ description,
22
+ descriptionId
23
+ }) {
24
+ const capped = wrap && maxLines != null && maxLines > 0;
25
+ if (action !== void 0)
26
+ return /* @__PURE__ */ jsx(
27
+ "button",
28
+ {
29
+ type: "button",
30
+ class: `kui-toolbar-text ${className}`.trim(),
31
+ "data-component": "toolbar-text",
32
+ "data-size": size,
33
+ "data-hide-below": hideBelow,
34
+ "data-show-below": showBelow,
35
+ "data-tone": tone === "default" ? void 0 : tone,
36
+ "data-fill": fill ? "true" : void 0,
37
+ "data-ellipsis": ellipsis ? void 0 : "false",
38
+ "data-action": action,
39
+ id,
40
+ slot,
41
+ children: /* @__PURE__ */ jsx("span", { class: "kui-toolbar-text__text", children: text })
42
+ }
43
+ );
44
+ const described = description !== void 0 && !placeholder;
45
+ const title = placeholder ? /* @__PURE__ */ jsx(Skeleton, { width: em(8) }) : /* @__PURE__ */ jsx(
46
+ "span",
47
+ {
48
+ class: "kui-toolbar-text__text",
49
+ id: described ? id : void 0,
50
+ role: described && headingLevel ? "heading" : void 0,
51
+ "aria-level": described && headingLevel ? String(headingLevel) : void 0,
52
+ children: text
53
+ }
54
+ );
55
+ return /* @__PURE__ */ jsxs(
56
+ "span",
57
+ {
58
+ class: `kui-toolbar-text ${className}`.trim(),
59
+ "data-component": "toolbar-text",
60
+ "data-size": size,
61
+ "data-hide-below": hideBelow,
62
+ "data-show-below": showBelow,
63
+ "data-tone": tone === "default" ? void 0 : tone,
64
+ "data-fill": fill ? "true" : void 0,
65
+ "data-wrap": wrap ? "true" : void 0,
66
+ "data-ellipsis": ellipsis ? void 0 : "false",
67
+ "data-max-lines": capped ? String(maxLines) : void 0,
68
+ style: capped ? `--kui-toolbar-text-max-lines:${maxLines}` : void 0,
69
+ "data-placeholder": placeholder ? "true" : void 0,
70
+ "data-has-description": described ? "true" : void 0,
71
+ id: described ? void 0 : id,
72
+ role: headingLevel && !described ? "heading" : void 0,
73
+ "aria-level": headingLevel && !described ? String(headingLevel) : void 0,
74
+ "aria-busy": placeholder ? "true" : void 0,
75
+ slot,
76
+ children: [
77
+ title,
78
+ described ? /* @__PURE__ */ jsx("span", { class: "kui-toolbar-text__description", id: descriptionId, children: description }) : null
79
+ ]
80
+ }
81
+ );
82
+ }
83
+
84
+ export { ToolbarText };
85
+
86
+ //# sourceMappingURL=chunk-HGV7J4T6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/actions/toolbar-text/toolbar-text.tsx"],"names":[],"mappings":"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","file":"chunk-HGV7J4T6.js","sourcesContent":["import { type CssLength, em } from '../../../shared/styles/css-values.js';\nimport { Skeleton } from '../../feedback/skeleton/skeleton.js';\n\nexport type ToolbarTextSize =\n 'xlarge' | 'xlarge-fixed' | 'large' | 'default' | 'small' | 'xsmall';\n\nexport type ToolbarTextTone = 'default' | 'dark';\n\n/** ARIA heading level for a title exposed as a heading landmark. */\nexport type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\ninterface ToolbarTextBaseProps {\n text: string;\n size?: ToolbarTextSize;\n /** Use dark-toolbar foregrounds on a dark or photo-backed toolbar. */\n tone?: ToolbarTextTone;\n /** Hide below this Toolbar content width; requires wireToolbarVisibility. */\n hideBelow?: CssLength;\n /** Show only below this Toolbar content width; requires wireToolbarVisibility. */\n showBelow?: CssLength;\n className?: string;\n /** Optional id, e.g. so a dialog can reference the title via aria-labelledby. */\n id?: string;\n /**\n * Show a trailing ellipsis (…) where the text is truncated — on the single line\n * (default), or at the `maxLines` boundary when wrapping. Set false to hard-clip\n * instead. Default true.\n */\n ellipsis?: boolean;\n /**\n * Grow to fill the free space of the flex row it sits in (a Toolbar zone),\n * truncating at the space left by its siblings instead of taking only its\n * text's width. Default false.\n */\n fill?: boolean;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n /**\n * Cap wrapped text to this many lines, truncating past it. Only takes effect with\n * `wrap`; ignored on a single line. `null`/omitted wraps without a line cap. Default null.\n */\n}\n\ntype ToolbarTextWrappingProps =\n | {\n /** Wrap onto multiple lines; combine with `maxLines` to cap them. */\n wrap: true;\n maxLines?: number | null;\n }\n | { wrap?: false; maxLines?: never };\n\nexport type ToolbarTextProps = ToolbarTextBaseProps &\n (\n | ({\n action?: never;\n /** Expose `role=\"heading\"` and `aria-level` on read-only text. */\n headingLevel?: HeadingLevel;\n /** Render an unanimated loading skeleton instead of the text. */\n placeholder?: boolean;\n /**\n * Quiet, single-line supporting copy under the title (\"Changes save\n * automatically.\"), truncating with an ellipsis. Title and description\n * share the toolbar's control band and the same text start, with or\n * without a leading icon group. With a description, `id` and\n * `headingLevel` apply to the title alone, so a dialog's\n * `aria-labelledby` names only the title.\n */\n description?: string;\n /** Id for the description, for a dialog's `aria-describedby`. */\n descriptionId?: string;\n } & ToolbarTextWrappingProps)\n | {\n /** Render a native button with this delegated action; the app owns editing. */\n action: string;\n headingLevel?: never;\n placeholder?: never;\n wrap?: never;\n maxLines?: never;\n description?: never;\n descriptionId?: never;\n }\n );\n\nexport function ToolbarText({\n text,\n size = 'default',\n tone = 'default',\n hideBelow,\n showBelow,\n className = '',\n id,\n headingLevel,\n placeholder = false,\n wrap = false,\n ellipsis = true,\n maxLines = null,\n fill = false,\n slot,\n action,\n description,\n descriptionId,\n}: ToolbarTextProps) {\n const capped = wrap && maxLines != null && maxLines > 0;\n if (action !== undefined)\n return (\n <button\n type=\"button\"\n class={`kui-toolbar-text ${className}`.trim()}\n data-component=\"toolbar-text\"\n data-size={size}\n data-hide-below={hideBelow}\n data-show-below={showBelow}\n data-tone={tone === 'default' ? undefined : tone}\n data-fill={fill ? 'true' : undefined}\n data-ellipsis={ellipsis ? undefined : 'false'}\n data-action={action}\n id={id}\n slot={slot}\n >\n <span class=\"kui-toolbar-text__text\">{text}</span>\n </button>\n );\n const described = description !== undefined && !placeholder;\n const title = placeholder ? (\n <Skeleton width={em(8)} />\n ) : (\n <span\n class=\"kui-toolbar-text__text\"\n id={described ? id : undefined}\n role={described && headingLevel ? 'heading' : undefined}\n aria-level={described && headingLevel ? String(headingLevel) : undefined}\n >\n {text}\n </span>\n );\n return (\n <span\n class={`kui-toolbar-text ${className}`.trim()}\n data-component=\"toolbar-text\"\n data-size={size}\n data-hide-below={hideBelow}\n data-show-below={showBelow}\n data-tone={tone === 'default' ? undefined : tone}\n data-fill={fill ? 'true' : undefined}\n data-wrap={wrap ? 'true' : undefined}\n data-ellipsis={ellipsis ? undefined : 'false'}\n data-max-lines={capped ? String(maxLines) : undefined}\n style={capped ? `--kui-toolbar-text-max-lines:${maxLines}` : undefined}\n data-placeholder={placeholder ? 'true' : undefined}\n data-has-description={described ? 'true' : undefined}\n id={described ? undefined : id}\n role={headingLevel && !described ? 'heading' : undefined}\n aria-level={headingLevel && !described ? String(headingLevel) : undefined}\n aria-busy={placeholder ? 'true' : undefined}\n slot={slot}\n >\n {title}\n {described ? (\n <span class=\"kui-toolbar-text__description\" id={descriptionId}>\n {description}\n </span>\n ) : null}\n </span>\n );\n}\n"]}
@@ -0,0 +1,84 @@
1
+ import { LucideIcon } from './chunk-LOSRXZAH.js';
2
+ import { LoadingSpinner } from './chunk-WVS6CUCT.js';
3
+ import { filterDataAttributes } from './chunk-KH4KEMSP.js';
4
+ import { ChevronDown } from 'lucide';
5
+ import { jsxs, jsx } from 'kerfjs/jsx-runtime';
6
+
7
+ var splitButtonProtected = /* @__PURE__ */ new Set([
8
+ "data-component",
9
+ "data-tone",
10
+ "data-fill",
11
+ "data-busy"
12
+ ]);
13
+ function SplitButton({
14
+ label,
15
+ action,
16
+ icon,
17
+ accessibleLabel,
18
+ optionsLabel,
19
+ optionsAction,
20
+ optionsExpanded = false,
21
+ optionsPopup = "menu",
22
+ optionsControls,
23
+ tone = "brand",
24
+ fill = false,
25
+ busy = false,
26
+ disabled = false,
27
+ optionsDisabled = false,
28
+ title,
29
+ className = "",
30
+ rootAttributes = {},
31
+ slot
32
+ }) {
33
+ const leading = busy ? /* @__PURE__ */ jsx(LoadingSpinner, {}) : icon;
34
+ return /* @__PURE__ */ jsxs(
35
+ "div",
36
+ {
37
+ ...filterDataAttributes(rootAttributes, splitButtonProtected),
38
+ class: `kui-split-button ${className}`.trim(),
39
+ "data-component": "split-button",
40
+ "data-tone": tone,
41
+ "data-fill": fill ? "true" : void 0,
42
+ "data-busy": busy ? "true" : void 0,
43
+ role: "group",
44
+ slot,
45
+ children: [
46
+ /* @__PURE__ */ jsxs(
47
+ "button",
48
+ {
49
+ type: "button",
50
+ class: "kui-split-button__primary",
51
+ "data-action": action,
52
+ "aria-label": accessibleLabel,
53
+ "aria-busy": busy ? "true" : void 0,
54
+ title,
55
+ disabled,
56
+ children: [
57
+ leading && /* @__PURE__ */ jsx("span", { class: "kui-split-button__icon", "aria-hidden": "true", children: leading }),
58
+ /* @__PURE__ */ jsx("span", { class: "kui-split-button__label", children: label })
59
+ ]
60
+ }
61
+ ),
62
+ /* @__PURE__ */ jsx(
63
+ "button",
64
+ {
65
+ type: "button",
66
+ class: "kui-split-button__options",
67
+ "data-action": optionsAction,
68
+ "aria-label": optionsLabel,
69
+ "aria-haspopup": optionsPopup,
70
+ "aria-expanded": optionsExpanded ? "true" : "false",
71
+ "aria-controls": optionsControls,
72
+ title: optionsLabel,
73
+ disabled: optionsDisabled,
74
+ children: /* @__PURE__ */ jsx(LucideIcon, { icon: ChevronDown, name: "chevron-down" })
75
+ }
76
+ )
77
+ ]
78
+ }
79
+ );
80
+ }
81
+
82
+ export { SplitButton };
83
+
84
+ //# sourceMappingURL=chunk-HLDRH23D.js.map