@kerfjs/ui 5.0.0-beta.103 → 5.0.0-beta.105

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 (759) hide show
  1. package/README.md +163 -116
  2. package/ai/application-ui-profile.defaults.json +125 -4
  3. package/ai/compile-time-contracts-v1.json +11 -11
  4. package/ai/component-catalog.json +2606 -627
  5. package/ai/component-composition-rules.json +11 -10
  6. package/ai/component-composition.json +1689 -300
  7. package/ai/components/README.md +66 -48
  8. package/ai/components/application-tabs.md +4 -4
  9. package/ai/components/badge.md +1 -0
  10. package/ai/components/button.md +91 -0
  11. package/ai/components/checkbox.md +89 -0
  12. package/ai/components/choice-chips.md +9 -3
  13. package/ai/components/color-field.md +92 -0
  14. package/ai/components/color-picker.md +90 -0
  15. package/ai/components/color-swatches.md +82 -0
  16. package/ai/components/combobox.md +6 -4
  17. package/ai/components/content-item.md +5 -2
  18. package/ai/components/disclosure.md +83 -0
  19. package/ai/components/file-picker.md +1 -0
  20. package/ai/components/foundation.md +1 -1
  21. package/ai/components/list-action-row.md +3 -3
  22. package/ai/components/list-detail-dialog.md +90 -0
  23. package/ai/components/list.md +2 -0
  24. package/ai/components/lucide-icon.md +2 -0
  25. package/ai/components/{composer.md → message-composer.md} +17 -16
  26. package/ai/components/pane.md +3 -1
  27. package/ai/components/popup-menu.md +12 -9
  28. package/ai/components/progress-bar.md +82 -0
  29. package/ai/components/progress-ring.md +80 -0
  30. package/ai/components/radio-group.md +88 -0
  31. package/ai/components/recipe-list-detail-dialog.md +5 -5
  32. package/ai/components/search-field.md +108 -0
  33. package/ai/components/select.md +15 -13
  34. package/ai/components/slider.md +84 -0
  35. package/ai/components/surface-scaffold.md +16 -13
  36. package/ai/components/switch.md +81 -0
  37. package/ai/components/tab-bar.md +6 -6
  38. package/ai/components/tab-navigator.md +2 -2
  39. package/ai/components/tabs.md +7 -7
  40. package/ai/components/tag-field.md +86 -0
  41. package/ai/components/text-field.md +98 -0
  42. package/ai/components/text.md +1 -0
  43. package/ai/components/toast.md +85 -0
  44. package/ai/components/toolbar-control-group.md +3 -3
  45. package/ai/components/tooltip.md +81 -0
  46. package/ai/components/wa-accordion-item.md +11 -5
  47. package/ai/components/wa-accordion.md +11 -5
  48. package/ai/components/wa-animated-image.md +2 -1
  49. package/ai/components/wa-animation.md +1 -0
  50. package/ai/components/wa-avatar.md +1 -0
  51. package/ai/components/wa-badge.md +10 -3
  52. package/ai/components/wa-breadcrumb-item.md +1 -0
  53. package/ai/components/wa-breadcrumb.md +1 -0
  54. package/ai/components/wa-button-group.md +6 -4
  55. package/ai/components/wa-button.md +7 -5
  56. package/ai/components/wa-callout.md +7 -5
  57. package/ai/components/wa-card.md +12 -4
  58. package/ai/components/wa-carousel-item.md +1 -0
  59. package/ai/components/wa-carousel.md +1 -0
  60. package/ai/components/wa-checkbox-group.md +11 -4
  61. package/ai/components/wa-checkbox.md +10 -4
  62. package/ai/components/wa-color-picker.md +13 -5
  63. package/ai/components/wa-comparison.md +2 -1
  64. package/ai/components/wa-copy-button.md +1 -0
  65. package/ai/components/wa-details.md +11 -5
  66. package/ai/components/wa-dialog.md +10 -4
  67. package/ai/components/wa-divider.md +1 -0
  68. package/ai/components/wa-drawer.md +12 -5
  69. package/ai/components/wa-dropdown-item.md +8 -6
  70. package/ai/components/wa-dropdown.md +8 -6
  71. package/ai/components/wa-format-bytes.md +1 -0
  72. package/ai/components/wa-format-date.md +1 -0
  73. package/ai/components/wa-format-number.md +1 -0
  74. package/ai/components/wa-icon.md +2 -1
  75. package/ai/components/wa-include.md +6 -4
  76. package/ai/components/wa-input.md +9 -6
  77. package/ai/components/wa-intersection-observer.md +1 -0
  78. package/ai/components/wa-known-date.md +1 -0
  79. package/ai/components/wa-markdown.md +1 -0
  80. package/ai/components/wa-mutation-observer.md +1 -0
  81. package/ai/components/wa-number-input.md +1 -0
  82. package/ai/components/wa-option.md +7 -5
  83. package/ai/components/wa-otp-input.md +1 -0
  84. package/ai/components/wa-page.md +13 -4
  85. package/ai/components/wa-pagination.md +1 -0
  86. package/ai/components/wa-popover.md +11 -5
  87. package/ai/components/wa-popup.md +11 -4
  88. package/ai/components/wa-progress-bar.md +11 -4
  89. package/ai/components/wa-progress-ring.md +11 -4
  90. package/ai/components/wa-qr-code.md +1 -0
  91. package/ai/components/wa-radio-group.md +12 -4
  92. package/ai/components/wa-radio.md +10 -4
  93. package/ai/components/wa-random-content.md +1 -0
  94. package/ai/components/wa-rating.md +1 -0
  95. package/ai/components/wa-relative-time.md +1 -0
  96. package/ai/components/wa-resize-observer.md +1 -0
  97. package/ai/components/wa-scroller.md +12 -4
  98. package/ai/components/wa-select.md +7 -5
  99. package/ai/components/wa-skeleton.md +10 -3
  100. package/ai/components/wa-slider.md +11 -5
  101. package/ai/components/wa-spinner.md +7 -5
  102. package/ai/components/wa-split-panel.md +7 -5
  103. package/ai/components/wa-step.md +56 -0
  104. package/ai/components/wa-stepper.md +56 -0
  105. package/ai/components/wa-switch.md +10 -3
  106. package/ai/components/wa-tab-group.md +8 -6
  107. package/ai/components/wa-tab-panel.md +7 -5
  108. package/ai/components/wa-tab.md +8 -6
  109. package/ai/components/wa-tag-input.md +62 -0
  110. package/ai/components/wa-tag.md +9 -6
  111. package/ai/components/wa-textarea.md +10 -3
  112. package/ai/components/wa-time-input.md +1 -0
  113. package/ai/components/wa-toast-item.md +9 -7
  114. package/ai/components/wa-toast.md +9 -7
  115. package/ai/components/wa-tooltip.md +11 -5
  116. package/ai/components/wa-tree-item.md +2 -1
  117. package/ai/components/wa-tree.md +2 -1
  118. package/ai/components/wa-zoomable-frame.md +2 -1
  119. package/ai/components/workbench-dialog.md +90 -0
  120. package/ai/public-api-signatures-v1.md +1577 -245
  121. package/ai/skill.md +83 -50
  122. package/ai/webawesome-jsx-signatures-v1.md +4 -1
  123. package/dist/badge.d.ts +9 -1
  124. package/dist/badge.js +1 -1
  125. package/dist/browser/button.js +5 -0
  126. package/dist/browser/catalog.js +3 -2
  127. package/dist/browser/{icon-button.js → checkbox.js} +2 -2
  128. package/dist/browser/color-field.js +4 -0
  129. package/dist/browser/color-picker.js +5 -0
  130. package/dist/browser/color-swatches.js +3 -0
  131. package/dist/browser/disclosure.js +5 -0
  132. package/dist/browser/list-action-row.js +1 -0
  133. package/dist/browser/list-detail-dialog.js +14 -0
  134. package/dist/browser/message-composer.js +5 -0
  135. package/dist/browser/popup-menu.js +1 -0
  136. package/dist/browser/progress-bar.js +3 -0
  137. package/dist/browser/progress-ring.js +3 -0
  138. package/dist/browser/radio-group.js +3 -0
  139. package/dist/browser/search-field.js +4 -0
  140. package/dist/browser/slider.js +3 -0
  141. package/dist/browser/surface-scaffold.js +1 -0
  142. package/dist/browser/switch.js +3 -0
  143. package/dist/browser/tab-bar-item.js +4 -0
  144. package/dist/browser/tag-field.js +5 -0
  145. package/dist/browser/text-field.js +4 -0
  146. package/dist/browser/workbench-dialog.js +15 -0
  147. package/dist/button.d.ts +108 -0
  148. package/dist/button.js +7 -0
  149. package/dist/button.js.map +1 -0
  150. package/dist/catalog-resources.d.ts +1 -1
  151. package/dist/catalog.d.ts +3 -3
  152. package/dist/catalog.js +57 -27
  153. package/dist/catalog.js.map +1 -1
  154. package/dist/checkbox.d.ts +45 -0
  155. package/dist/checkbox.js +6 -0
  156. package/dist/checkbox.js.map +1 -0
  157. package/dist/choice-chips.d.ts +49 -15
  158. package/dist/choice-chips.js +1 -1
  159. package/dist/chunk-23PPPNH6.js +93 -0
  160. package/dist/chunk-23PPPNH6.js.map +1 -0
  161. package/dist/{chunk-FNZQOUZ5.js → chunk-2FW7D4IG.js} +2 -2
  162. package/dist/{chunk-FNZQOUZ5.js.map → chunk-2FW7D4IG.js.map} +1 -1
  163. package/dist/{chunk-ZYU5WRC3.js → chunk-3GLYIIFR.js} +2 -2
  164. package/dist/{chunk-ZYU5WRC3.js.map → chunk-3GLYIIFR.js.map} +1 -1
  165. package/dist/{chunk-5NQF35VO.js → chunk-4RECPEHI.js} +2 -2
  166. package/dist/{chunk-5NQF35VO.js.map → chunk-4RECPEHI.js.map} +1 -1
  167. package/dist/{chunk-7IUEBNCO.js → chunk-5USKCWGL.js} +8 -3
  168. package/dist/chunk-5USKCWGL.js.map +1 -0
  169. package/dist/chunk-6VVIW7VB.js +69 -0
  170. package/dist/chunk-6VVIW7VB.js.map +1 -0
  171. package/dist/{chunk-LL45C7BB.js → chunk-7K6U6FCN.js} +1 -1
  172. package/dist/chunk-7K6U6FCN.js.map +1 -0
  173. package/dist/{chunk-HQZYKJ56.js → chunk-7W3GKMN4.js} +110 -74
  174. package/dist/chunk-7W3GKMN4.js.map +1 -0
  175. package/dist/chunk-ACUKTVS3.js +371 -0
  176. package/dist/chunk-ACUKTVS3.js.map +1 -0
  177. package/dist/{chunk-YQ2AC4E2.js → chunk-AMIHGFLP.js} +2 -2
  178. package/dist/{chunk-YQ2AC4E2.js.map → chunk-AMIHGFLP.js.map} +1 -1
  179. package/dist/chunk-ATGAJVZ6.js +268 -0
  180. package/dist/chunk-ATGAJVZ6.js.map +1 -0
  181. package/dist/chunk-AYPGXR2E.js +20 -0
  182. package/dist/chunk-AYPGXR2E.js.map +1 -0
  183. package/dist/{chunk-ETCWQLJV.js → chunk-BKUMG2KB.js} +38 -28
  184. package/dist/chunk-BKUMG2KB.js.map +1 -0
  185. package/dist/chunk-C26Q6P4Q.js +76 -0
  186. package/dist/chunk-C26Q6P4Q.js.map +1 -0
  187. package/dist/chunk-C3RLKKFQ.js +452 -0
  188. package/dist/chunk-C3RLKKFQ.js.map +1 -0
  189. package/dist/{chunk-IM3GKYOG.js → chunk-CIAUILRR.js} +52 -32
  190. package/dist/chunk-CIAUILRR.js.map +1 -0
  191. package/dist/chunk-CNM6ZWP2.js +38 -0
  192. package/dist/chunk-CNM6ZWP2.js.map +1 -0
  193. package/dist/{chunk-LPHU44S3.js → chunk-CTQUDCY5.js} +3 -1
  194. package/dist/chunk-CTQUDCY5.js.map +1 -0
  195. package/dist/{chunk-MXNIVEVL.js → chunk-D4MXSAMI.js} +5 -3
  196. package/dist/chunk-D4MXSAMI.js.map +1 -0
  197. package/dist/{chunk-YBWQR2OK.js → chunk-DDSCVEO5.js} +10 -9
  198. package/dist/chunk-DDSCVEO5.js.map +1 -0
  199. package/dist/{chunk-SIW64V65.js → chunk-DF2YKGIX.js} +3 -3
  200. package/dist/{chunk-SIW64V65.js.map → chunk-DF2YKGIX.js.map} +1 -1
  201. package/dist/{chunk-3SKAEPPZ.js → chunk-ECFCAKWE.js} +4 -4
  202. package/dist/{chunk-3SKAEPPZ.js.map → chunk-ECFCAKWE.js.map} +1 -1
  203. package/dist/chunk-EKBMUXFV.js +298 -0
  204. package/dist/chunk-EKBMUXFV.js.map +1 -0
  205. package/dist/{chunk-IXLUZHGT.js → chunk-FG6U7KQQ.js} +5 -5
  206. package/dist/{chunk-IXLUZHGT.js.map → chunk-FG6U7KQQ.js.map} +1 -1
  207. package/dist/chunk-FKKJHGN5.js +147 -0
  208. package/dist/chunk-FKKJHGN5.js.map +1 -0
  209. package/dist/{chunk-FDZNYD4C.js → chunk-GCAK23PU.js} +34 -3
  210. package/dist/chunk-GCAK23PU.js.map +1 -0
  211. package/dist/chunk-GXSX6Q6O.js +42 -0
  212. package/dist/chunk-GXSX6Q6O.js.map +1 -0
  213. package/dist/{chunk-LOSRXZAH.js → chunk-HJXVVFBT.js} +14 -6
  214. package/dist/chunk-HJXVVFBT.js.map +1 -0
  215. package/dist/{chunk-M5KZ26VV.js → chunk-HQZG3OFL.js} +11 -1
  216. package/dist/chunk-HQZG3OFL.js.map +1 -0
  217. package/dist/{chunk-ELCMSQNJ.js → chunk-HTERKONR.js} +8 -8
  218. package/dist/chunk-HTERKONR.js.map +1 -0
  219. package/dist/chunk-HYORKKYP.js +8 -0
  220. package/dist/chunk-HYORKKYP.js.map +1 -0
  221. package/dist/chunk-IO27YTL3.js +73 -0
  222. package/dist/chunk-IO27YTL3.js.map +1 -0
  223. package/dist/chunk-ITUQC4FW.js +163 -0
  224. package/dist/chunk-ITUQC4FW.js.map +1 -0
  225. package/dist/chunk-K57NINLH.js +137 -0
  226. package/dist/chunk-K57NINLH.js.map +1 -0
  227. package/dist/chunk-KC6WUSNS.js +34 -0
  228. package/dist/chunk-KC6WUSNS.js.map +1 -0
  229. package/dist/{chunk-W4IK7AWD.js → chunk-KDQZ3E5C.js} +3 -1
  230. package/dist/chunk-KDQZ3E5C.js.map +1 -0
  231. package/dist/{chunk-2MSPNRWJ.js → chunk-KK3S5OTW.js} +27 -11
  232. package/dist/chunk-KK3S5OTW.js.map +1 -0
  233. package/dist/chunk-LTBVP6VN.js +59 -0
  234. package/dist/chunk-LTBVP6VN.js.map +1 -0
  235. package/dist/chunk-OHPYT2BH.js +82 -0
  236. package/dist/chunk-OHPYT2BH.js.map +1 -0
  237. package/dist/{chunk-HZPHCSCS.js → chunk-OY2MXIBB.js} +8 -2
  238. package/dist/chunk-OY2MXIBB.js.map +1 -0
  239. package/dist/chunk-PE2KPZDW.js +85 -0
  240. package/dist/chunk-PE2KPZDW.js.map +1 -0
  241. package/dist/{chunk-QTSMHH5J.js → chunk-QPTJ5DOO.js} +5 -3
  242. package/dist/chunk-QPTJ5DOO.js.map +1 -0
  243. package/dist/{chunk-JOR5LGYE.js → chunk-RFLW4FPL.js} +1 -1
  244. package/dist/chunk-RFLW4FPL.js.map +1 -0
  245. package/dist/{chunk-U6QYTMDB.js → chunk-RMWNO6BA.js} +6 -2
  246. package/dist/chunk-RMWNO6BA.js.map +1 -0
  247. package/dist/{chunk-TDMHA7C3.js → chunk-SQ2Q3OQI.js} +112 -63
  248. package/dist/chunk-SQ2Q3OQI.js.map +1 -0
  249. package/dist/{chunk-K4AT3V3J.js → chunk-T74YB76U.js} +13 -11
  250. package/dist/chunk-T74YB76U.js.map +1 -0
  251. package/dist/{chunk-BYFTHA4I.js → chunk-TAHR457X.js} +53 -6
  252. package/dist/chunk-TAHR457X.js.map +1 -0
  253. package/dist/{chunk-3VXDSIBJ.js → chunk-TKNVL53O.js} +2 -2
  254. package/dist/{chunk-3VXDSIBJ.js.map → chunk-TKNVL53O.js.map} +1 -1
  255. package/dist/chunk-TNJLNLVE.js +115 -0
  256. package/dist/chunk-TNJLNLVE.js.map +1 -0
  257. package/dist/chunk-TUID42UE.js +15 -0
  258. package/dist/chunk-TUID42UE.js.map +1 -0
  259. package/dist/{chunk-PKL6QJKK.js → chunk-UMNHJSIO.js} +93 -80
  260. package/dist/chunk-UMNHJSIO.js.map +1 -0
  261. package/dist/chunk-UTCAOOXU.js +116 -0
  262. package/dist/chunk-UTCAOOXU.js.map +1 -0
  263. package/dist/{chunk-MF6ZUUJZ.js → chunk-VEME3D7K.js} +38 -40
  264. package/dist/chunk-VEME3D7K.js.map +1 -0
  265. package/dist/{chunk-HLDRH23D.js → chunk-WJKHLOP5.js} +2 -2
  266. package/dist/{chunk-HLDRH23D.js.map → chunk-WJKHLOP5.js.map} +1 -1
  267. package/dist/chunk-WU57BYYM.js +115 -0
  268. package/dist/chunk-WU57BYYM.js.map +1 -0
  269. package/dist/{chunk-TGLUDQP2.js → chunk-ZCDRLN3B.js} +11 -11
  270. package/dist/chunk-ZCDRLN3B.js.map +1 -0
  271. package/dist/chunk-ZX2QQJXD.js +249 -0
  272. package/dist/chunk-ZX2QQJXD.js.map +1 -0
  273. package/dist/{chunk-6E2H2E5A.js → chunk-ZXZAECHZ.js} +6 -6
  274. package/dist/{chunk-6E2H2E5A.js.map → chunk-ZXZAECHZ.js.map} +1 -1
  275. package/dist/collapsible-panel.js +3 -3
  276. package/dist/color-field.d.ts +51 -0
  277. package/dist/color-field.js +92 -0
  278. package/dist/color-field.js.map +1 -0
  279. package/dist/color-picker.d.ts +88 -0
  280. package/dist/color-picker.js +8 -0
  281. package/dist/color-picker.js.map +1 -0
  282. package/dist/color-swatches.d.ts +56 -0
  283. package/dist/color-swatches.js +4 -0
  284. package/dist/color-swatches.js.map +1 -0
  285. package/dist/combobox.js +1 -1
  286. package/dist/content-item.d.ts +13 -1
  287. package/dist/content-item.js +1 -1
  288. package/dist/disclosure-arrow.js +1 -1
  289. package/dist/disclosure.d.ts +57 -0
  290. package/dist/disclosure.js +51 -0
  291. package/dist/disclosure.js.map +1 -0
  292. package/dist/file-picker.d.ts +7 -0
  293. package/dist/file-picker.js +1 -1
  294. package/dist/help-tags-register.d.ts +8 -8
  295. package/dist/help-tags-register.js +3 -2
  296. package/dist/help-tags-register.js.map +1 -1
  297. package/dist/index.d.ts +16 -9
  298. package/dist/index.js +58 -46
  299. package/dist/list-action-row.js +4 -1
  300. package/dist/list-detail-dialog.d.ts +117 -0
  301. package/dist/list-detail-dialog.js +165 -0
  302. package/dist/list-detail-dialog.js.map +1 -0
  303. package/dist/list-header.js +1 -1
  304. package/dist/list-item.js +1 -1
  305. package/dist/list.d.ts +17 -2
  306. package/dist/list.js +1 -1
  307. package/dist/lucide-icon.d.ts +9 -1
  308. package/dist/lucide-icon.js +1 -1
  309. package/dist/{composer.d.ts → message-composer.d.ts} +20 -12
  310. package/dist/message-composer.js +6 -0
  311. package/dist/message-composer.js.map +1 -0
  312. package/dist/nav-stack.js +1 -1
  313. package/dist/pane.d.ts +36 -3
  314. package/dist/pane.js +1 -1
  315. package/dist/popup-menu-register.d.ts +6 -5
  316. package/dist/popup-menu-register.js +3 -326
  317. package/dist/popup-menu-register.js.map +1 -1
  318. package/dist/popup-menu.d.ts +41 -23
  319. package/dist/popup-menu.js +5 -1
  320. package/dist/progress-bar.d.ts +52 -0
  321. package/dist/progress-bar.js +68 -0
  322. package/dist/progress-bar.js.map +1 -0
  323. package/dist/progress-ring.d.ts +44 -0
  324. package/dist/progress-ring.js +73 -0
  325. package/dist/progress-ring.js.map +1 -0
  326. package/dist/radio-group.d.ts +62 -0
  327. package/dist/radio-group.js +4 -0
  328. package/dist/radio-group.js.map +1 -0
  329. package/dist/row.js +1 -1
  330. package/dist/{token-search-model-aYR0YAei.d.ts → search-field-CrGTN5sa.d.ts} +67 -43
  331. package/dist/search-field-model.d.ts +3 -0
  332. package/dist/search-field-model.js +3 -0
  333. package/dist/search-field-model.js.map +1 -0
  334. package/dist/search-field.d.ts +3 -0
  335. package/dist/search-field.js +5 -0
  336. package/dist/search-field.js.map +1 -0
  337. package/dist/select-register.d.ts +6 -3
  338. package/dist/select-register.js +383 -241
  339. package/dist/select-register.js.map +1 -1
  340. package/dist/select.d.ts +30 -6
  341. package/dist/select.js +3 -1
  342. package/dist/selection.d.ts +54 -0
  343. package/dist/selection.js +3 -0
  344. package/dist/selection.js.map +1 -0
  345. package/dist/slider.d.ts +74 -0
  346. package/dist/slider.js +103 -0
  347. package/dist/slider.js.map +1 -0
  348. package/dist/split-button.js +1 -1
  349. package/dist/split-view.d.ts +5 -2
  350. package/dist/split-view.js +18 -159
  351. package/dist/split-view.js.map +1 -1
  352. package/dist/state-banner.js +1 -1
  353. package/dist/styles/badge.css +18 -6
  354. package/dist/styles/button.css +230 -0
  355. package/dist/styles/catalog/components/catalog-example.css +13 -4
  356. package/dist/styles/checkbox.css +121 -0
  357. package/dist/styles/choice-chips.css +58 -7
  358. package/dist/styles/color-field.css +125 -0
  359. package/dist/styles/color-picker.css +331 -0
  360. package/dist/styles/color-swatches.css +122 -0
  361. package/dist/styles/combobox.css +7 -5
  362. package/dist/styles/components/actions/button/button.css +230 -0
  363. package/dist/styles/components/actions/popup-menu/popup-menu.css +326 -198
  364. package/dist/styles/components/actions/toolbar/toolbar.css +25 -3
  365. package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +67 -104
  366. package/dist/styles/components/actions/toolbar-text/toolbar-text.css +5 -18
  367. package/dist/styles/components/collections/list/list.css +37 -0
  368. package/dist/styles/components/feedback/badge/badge.css +18 -6
  369. package/dist/styles/components/feedback/progress-bar/progress-bar.css +168 -0
  370. package/dist/styles/components/feedback/progress-ring/progress-ring.css +91 -0
  371. package/dist/styles/components/feedback/state-banner/state-banner.css +18 -3
  372. package/dist/styles/components/forms/checkbox/checkbox.css +121 -0
  373. package/dist/styles/components/forms/choice-chips/choice-chips.css +58 -7
  374. package/dist/styles/components/forms/color-field/color-field.css +125 -0
  375. package/dist/styles/components/forms/color-picker/color-picker.css +331 -0
  376. package/dist/styles/components/forms/color-swatches/color-swatches.css +122 -0
  377. package/dist/styles/components/forms/combobox/combobox.css +7 -5
  378. package/dist/styles/components/forms/{composer/composer.css → message-composer/message-composer.css} +17 -33
  379. package/dist/styles/components/forms/radio-group/radio-group.css +156 -0
  380. package/dist/styles/{token-search-field.css → components/forms/search-field/search-field.css} +111 -102
  381. package/dist/styles/components/forms/select/select.css +370 -249
  382. package/dist/styles/components/forms/slider/slider.css +241 -0
  383. package/dist/styles/components/forms/switch/switch.css +132 -0
  384. package/dist/styles/components/forms/tag-field/tag-field.css +8 -0
  385. package/dist/styles/components/forms/text-field/text-field.css +193 -0
  386. package/dist/styles/components/layout/pane/pane.css +254 -0
  387. package/dist/styles/components/layout/resizable-region/resizable-region.css +3 -2
  388. package/dist/styles/components/layout/row/row.css +11 -0
  389. package/dist/styles/components/layout/split-view/split-view.css +25 -0
  390. package/dist/styles/components/layout/workbench/workbench.css +12 -4
  391. package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +20 -0
  392. package/dist/styles/components/navigation/tab-bar/tab-bar.css +7 -7
  393. package/dist/styles/components/navigation/{app-tab/app-tab.css → tab-bar-item/tab-bar-item.css} +95 -90
  394. package/dist/styles/components/surfaces/disclosure/disclosure.css +98 -0
  395. package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +263 -116
  396. package/dist/styles/components/typography/text/text.css +14 -12
  397. package/dist/styles/disclosure-arrow.css +20 -0
  398. package/dist/styles/disclosure.css +98 -0
  399. package/dist/styles/foundation.css +6 -4
  400. package/dist/styles/list-detail-dialog.css +11 -0
  401. package/dist/styles/list.css +37 -0
  402. package/dist/styles/{composer.css → message-composer.css} +17 -33
  403. package/dist/styles/overlay-toast.css +149 -0
  404. package/dist/styles/overlay-tooltip.css +55 -0
  405. package/dist/styles/pane.css +254 -0
  406. package/dist/styles/popup-menu.css +326 -198
  407. package/dist/styles/progress-bar.css +168 -0
  408. package/dist/styles/progress-ring.css +91 -0
  409. package/dist/styles/radio-group.css +156 -0
  410. package/dist/styles/resizable-region.css +3 -2
  411. package/dist/styles/row.css +11 -0
  412. package/dist/styles/{components/forms/token-search-field/token-search-field.css → search-field.css} +111 -102
  413. package/dist/styles/select.css +370 -249
  414. package/dist/styles/slider.css +241 -0
  415. package/dist/styles/split-view.css +25 -0
  416. package/dist/styles/state-banner.css +18 -3
  417. package/dist/styles/styles.css +16 -5
  418. package/dist/styles/surface-scaffold.css +263 -116
  419. package/dist/styles/switch.css +132 -0
  420. package/dist/styles/{app-tab.css → tab-bar-item.css} +95 -90
  421. package/dist/styles/tab-bar.css +7 -7
  422. package/dist/styles/tag-field.css +8 -0
  423. package/dist/styles/text-field.css +193 -0
  424. package/dist/styles/text.css +14 -12
  425. package/dist/styles/toolbar-control-group.css +67 -104
  426. package/dist/styles/toolbar-text.css +5 -18
  427. package/dist/styles/toolbar.css +25 -3
  428. package/dist/styles/webawesome.css +9 -0
  429. package/dist/styles/workbench-dialog.css +10 -0
  430. package/dist/styles/workbench.css +12 -4
  431. package/dist/surface-scaffold-register.d.ts +7 -5
  432. package/dist/surface-scaffold-register.js +2 -246
  433. package/dist/surface-scaffold-register.js.map +1 -1
  434. package/dist/surface-scaffold.d.ts +70 -7
  435. package/dist/surface-scaffold.js +5 -1
  436. package/dist/switch.d.ts +38 -0
  437. package/dist/switch.js +4 -0
  438. package/dist/switch.js.map +1 -0
  439. package/dist/{app-tab.d.ts → tab-bar-item.d.ts} +11 -11
  440. package/dist/tab-bar-item.js +6 -0
  441. package/dist/tab-bar-item.js.map +1 -0
  442. package/dist/tab-bar.d.ts +3 -3
  443. package/dist/tab-bar.js +1 -1
  444. package/dist/tab-navigator.js +1 -1
  445. package/dist/tag-field.d.ts +52 -0
  446. package/dist/tag-field.js +6 -0
  447. package/dist/tag-field.js.map +1 -0
  448. package/dist/text-field.d.ts +83 -0
  449. package/dist/text-field.js +6 -0
  450. package/dist/text-field.js.map +1 -0
  451. package/dist/text.d.ts +6 -1
  452. package/dist/text.js +1 -1
  453. package/dist/{types-CVgIwSdq.d.ts → types-DmHWkSd6.d.ts} +19 -1
  454. package/dist/webawesome.d.ts +3 -0
  455. package/dist/wire-catalog.d.ts +8 -2
  456. package/dist/wire-catalog.js +16 -4
  457. package/dist/wire-catalog.js.map +1 -1
  458. package/dist/wire-checkboxes.d.ts +10 -0
  459. package/dist/wire-checkboxes.js +3 -0
  460. package/dist/{wire-composers.js.map → wire-checkboxes.js.map} +1 -1
  461. package/dist/wire-choice-chips.d.ts +17 -0
  462. package/dist/wire-choice-chips.js +4 -0
  463. package/dist/{wire-token-search-fields.js.map → wire-choice-chips.js.map} +1 -1
  464. package/dist/wire-color-fields.d.ts +33 -0
  465. package/dist/wire-color-fields.js +82 -0
  466. package/dist/wire-color-fields.js.map +1 -0
  467. package/dist/wire-color-pickers.d.ts +34 -0
  468. package/dist/wire-color-pickers.js +9 -0
  469. package/dist/wire-color-pickers.js.map +1 -0
  470. package/dist/wire-comboboxes.js +2 -1
  471. package/dist/wire-content-items.d.ts +5 -1
  472. package/dist/wire-content-items.js +84 -15
  473. package/dist/wire-content-items.js.map +1 -1
  474. package/dist/wire-file-pickers.d.ts +3 -2
  475. package/dist/wire-file-pickers.js +1 -1
  476. package/dist/{wire-composers.d.ts → wire-message-composers.d.ts} +5 -4
  477. package/dist/wire-message-composers.js +3 -0
  478. package/dist/wire-message-composers.js.map +1 -0
  479. package/dist/wire-overlay-sheets.js +1 -1
  480. package/dist/wire-pane-chrome.d.ts +21 -0
  481. package/dist/wire-pane-chrome.js +67 -0
  482. package/dist/wire-pane-chrome.js.map +1 -0
  483. package/dist/{wire-token-search-fields.d.ts → wire-search-fields.d.ts} +25 -25
  484. package/dist/wire-search-fields.js +6 -0
  485. package/dist/wire-search-fields.js.map +1 -0
  486. package/dist/wire-sliders.d.ts +12 -0
  487. package/dist/wire-sliders.js +31 -0
  488. package/dist/wire-sliders.js.map +1 -0
  489. package/dist/wire-tab-bars.js +1 -1
  490. package/dist/wire-tag-fields.d.ts +41 -0
  491. package/dist/wire-tag-fields.js +258 -0
  492. package/dist/wire-tag-fields.js.map +1 -0
  493. package/dist/wire-text-fields.d.ts +12 -0
  494. package/dist/wire-text-fields.js +3 -0
  495. package/dist/wire-text-fields.js.map +1 -0
  496. package/dist/workbench-dialog.d.ts +97 -0
  497. package/dist/workbench-dialog.js +124 -0
  498. package/dist/workbench-dialog.js.map +1 -0
  499. package/dist/workbench.d.ts +5 -0
  500. package/dist/workbench.js +1 -1
  501. package/docs/accessibility.md +181 -97
  502. package/docs/anchored-surface.md +8 -7
  503. package/docs/app-layouts.md +28 -0
  504. package/docs/catalog.md +14 -5
  505. package/docs/color-field.md +65 -0
  506. package/docs/color-picker.md +71 -0
  507. package/docs/color-swatches.md +46 -0
  508. package/docs/component-contract.md +31 -32
  509. package/docs/component-selection.md +232 -165
  510. package/docs/design/templates/button/emphasis-dark.svg +1 -0
  511. package/docs/design/templates/button/emphasis.svg +1 -0
  512. package/docs/design/templates/button/icons-dark.svg +1 -0
  513. package/docs/design/templates/button/icons.svg +1 -0
  514. package/docs/design/templates/button/pill-dark.svg +1 -0
  515. package/docs/design/templates/button/pill.svg +1 -0
  516. package/docs/design/templates/button/states-dark.svg +1 -0
  517. package/docs/design/templates/button/states.svg +1 -0
  518. package/docs/design/templates/button/toggles-dark.svg +1 -0
  519. package/docs/design/templates/button/toggles.svg +1 -0
  520. package/docs/design/templates/button/tones-dark.svg +1 -0
  521. package/docs/design/templates/button/tones.svg +1 -0
  522. package/docs/design/templates/button-dark.svg +1 -0
  523. package/docs/design/templates/button.svg +1 -0
  524. package/docs/design/templates/checkbox/compact-dark.svg +1 -0
  525. package/docs/design/templates/checkbox/compact.svg +1 -0
  526. package/docs/design/templates/checkbox/error-dark.svg +1 -0
  527. package/docs/design/templates/checkbox/error.svg +1 -0
  528. package/docs/design/templates/checkbox/mixed-dark.svg +1 -0
  529. package/docs/design/templates/checkbox/mixed.svg +1 -0
  530. package/docs/design/templates/checkbox/states-dark.svg +1 -0
  531. package/docs/design/templates/checkbox/states.svg +1 -0
  532. package/docs/design/templates/checkbox-dark.svg +1 -0
  533. package/docs/design/templates/checkbox.svg +1 -0
  534. package/docs/design/templates/choice-chips/color-palette-dark.svg +1 -1
  535. package/docs/design/templates/choice-chips/color-palette.svg +1 -1
  536. package/docs/design/templates/choice-chips/compact-icons-dark.svg +1 -1
  537. package/docs/design/templates/choice-chips/compact-icons.svg +1 -1
  538. package/docs/design/templates/choice-chips/multiple-dark.svg +1 -1
  539. package/docs/design/templates/choice-chips/multiple.svg +1 -1
  540. package/docs/design/templates/choice-chips-dark.svg +1 -1
  541. package/docs/design/templates/choice-chips.svg +1 -1
  542. package/docs/design/templates/color-field/compact-dark.svg +1 -0
  543. package/docs/design/templates/color-field/compact.svg +1 -0
  544. package/docs/design/templates/color-field/error-dark.svg +1 -0
  545. package/docs/design/templates/color-field/error.svg +1 -0
  546. package/docs/design/templates/color-field/hint-dark.svg +1 -0
  547. package/docs/design/templates/color-field/hint.svg +1 -0
  548. package/docs/design/templates/color-field-dark.svg +1 -0
  549. package/docs/design/templates/color-field.svg +1 -0
  550. package/docs/design/templates/color-picker/gray-dark.svg +1 -0
  551. package/docs/design/templates/color-picker/gray.svg +1 -0
  552. package/docs/design/templates/color-picker/rgb-dark.svg +1 -0
  553. package/docs/design/templates/color-picker/rgb.svg +1 -0
  554. package/docs/design/templates/color-picker-dark.svg +1 -0
  555. package/docs/design/templates/color-picker.svg +1 -0
  556. package/docs/design/templates/color-swatches/palette-dark.svg +1 -0
  557. package/docs/design/templates/color-swatches/palette.svg +1 -0
  558. package/docs/design/templates/color-swatches-dark.svg +1 -0
  559. package/docs/design/templates/color-swatches.svg +1 -0
  560. package/docs/design/templates/disclosure/framed-sunken-dark.svg +1 -0
  561. package/docs/design/templates/disclosure/framed-sunken.svg +1 -0
  562. package/docs/design/templates/disclosure/plain-dark.svg +1 -0
  563. package/docs/design/templates/disclosure/plain.svg +1 -0
  564. package/docs/design/templates/disclosure-dark.svg +1 -0
  565. package/docs/design/templates/disclosure.svg +1 -0
  566. package/docs/design/templates/list-header/size-l-dark.svg +1 -1
  567. package/docs/design/templates/list-header/size-l.svg +1 -1
  568. package/docs/design/templates/list-header/size-m-dark.svg +1 -1
  569. package/docs/design/templates/list-header/size-m.svg +1 -1
  570. package/docs/design/templates/list-header/size-xl-dark.svg +1 -1
  571. package/docs/design/templates/list-header/size-xl.svg +1 -1
  572. package/docs/design/templates/list-header-dark.svg +1 -1
  573. package/docs/design/templates/list-header.svg +1 -1
  574. package/docs/design/templates/message-composer/chat-dark.svg +1 -0
  575. package/docs/design/templates/message-composer/chat.svg +1 -0
  576. package/docs/design/templates/{composer → message-composer}/prompt-dark.svg +1 -1
  577. package/docs/design/templates/{composer → message-composer}/prompt.svg +1 -1
  578. package/docs/design/templates/message-composer-dark.svg +1 -0
  579. package/docs/design/templates/message-composer.svg +1 -0
  580. package/docs/design/templates/progress-bar/determinate-dark.svg +1 -0
  581. package/docs/design/templates/progress-bar/determinate.svg +1 -0
  582. package/docs/design/templates/progress-bar/tones-dark.svg +1 -0
  583. package/docs/design/templates/progress-bar/tones.svg +1 -0
  584. package/docs/design/templates/progress-bar-dark.svg +1 -0
  585. package/docs/design/templates/progress-bar.svg +1 -0
  586. package/docs/design/templates/progress-ring/sizes-dark.svg +1 -0
  587. package/docs/design/templates/progress-ring/sizes.svg +1 -0
  588. package/docs/design/templates/progress-ring/tones-dark.svg +1 -0
  589. package/docs/design/templates/progress-ring/tones.svg +1 -0
  590. package/docs/design/templates/progress-ring-dark.svg +1 -0
  591. package/docs/design/templates/progress-ring.svg +1 -0
  592. package/docs/design/templates/radio-group/horizontal-dark.svg +1 -0
  593. package/docs/design/templates/radio-group/horizontal.svg +1 -0
  594. package/docs/design/templates/radio-group/vertical-dark.svg +1 -0
  595. package/docs/design/templates/radio-group/vertical.svg +1 -0
  596. package/docs/design/templates/radio-group-dark.svg +1 -0
  597. package/docs/design/templates/radio-group.svg +1 -0
  598. package/docs/design/templates/segmented-control/equal-dark.svg +1 -1
  599. package/docs/design/templates/segmented-control/equal.svg +1 -1
  600. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -1
  601. package/docs/design/templates/segmented-control/pill-small.svg +1 -1
  602. package/docs/design/templates/segmented-control-dark.svg +1 -1
  603. package/docs/design/templates/segmented-control.svg +1 -1
  604. package/docs/design/templates/select/compact-dark.svg +1 -0
  605. package/docs/design/templates/select/compact.svg +1 -0
  606. package/docs/design/templates/select/form-dark.svg +1 -0
  607. package/docs/design/templates/select/form.svg +1 -0
  608. package/docs/design/templates/select/icons-dark.svg +1 -0
  609. package/docs/design/templates/select/icons.svg +1 -0
  610. package/docs/design/templates/select-dark.svg +1 -0
  611. package/docs/design/templates/select.svg +1 -0
  612. package/docs/design/templates/slider/compact-dark.svg +1 -0
  613. package/docs/design/templates/slider/compact.svg +1 -0
  614. package/docs/design/templates/slider/readout-dark.svg +1 -0
  615. package/docs/design/templates/slider/readout.svg +1 -0
  616. package/docs/design/templates/slider/ticks-dark.svg +1 -0
  617. package/docs/design/templates/slider/ticks.svg +1 -0
  618. package/docs/design/templates/slider-dark.svg +1 -0
  619. package/docs/design/templates/slider.svg +1 -0
  620. package/docs/design/templates/switch/compact-dark.svg +1 -0
  621. package/docs/design/templates/switch/compact.svg +1 -0
  622. package/docs/design/templates/switch/states-dark.svg +1 -0
  623. package/docs/design/templates/switch/states.svg +1 -0
  624. package/docs/design/templates/switch-dark.svg +1 -0
  625. package/docs/design/templates/switch.svg +1 -0
  626. package/docs/design/templates/tag-field/error-dark.svg +1 -0
  627. package/docs/design/templates/tag-field/error.svg +1 -0
  628. package/docs/design/templates/tag-field/tags-dark.svg +1 -0
  629. package/docs/design/templates/tag-field/tags.svg +1 -0
  630. package/docs/design/templates/tag-field-dark.svg +1 -0
  631. package/docs/design/templates/tag-field.svg +1 -0
  632. package/docs/design/templates/text-field/compact-dark.svg +1 -0
  633. package/docs/design/templates/text-field/compact.svg +1 -0
  634. package/docs/design/templates/text-field/error-dark.svg +1 -0
  635. package/docs/design/templates/text-field/error.svg +1 -0
  636. package/docs/design/templates/text-field/labeled-dark.svg +1 -0
  637. package/docs/design/templates/text-field/labeled.svg +1 -0
  638. package/docs/design/templates/text-field/multiline-dark.svg +1 -0
  639. package/docs/design/templates/text-field/multiline.svg +1 -0
  640. package/docs/design/templates/text-field/search-dark.svg +1 -0
  641. package/docs/design/templates/text-field/search.svg +1 -0
  642. package/docs/design/templates/text-field-dark.svg +1 -0
  643. package/docs/design/templates/text-field.svg +1 -0
  644. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
  645. package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
  646. package/docs/design/templates/toolbar/width-visibility-320-dark.svg +1 -1
  647. package/docs/design/templates/toolbar/width-visibility-320.svg +1 -1
  648. package/docs/design/templates/toolbar/width-visibility-600-dark.svg +1 -1
  649. package/docs/design/templates/toolbar/width-visibility-600.svg +1 -1
  650. package/docs/design/templates/toolbar-dark.svg +1 -1
  651. package/docs/design/templates/toolbar.svg +1 -1
  652. package/docs/design/templates/value-table/details-dark.svg +1 -1
  653. package/docs/design/templates/value-table/details.svg +1 -1
  654. package/docs/design/templates/value-table-dark.svg +1 -1
  655. package/docs/design/templates/value-table.svg +1 -1
  656. package/docs/design/templates.md +19 -6
  657. package/docs/design-philosophy.md +6 -6
  658. package/docs/disclosure.md +63 -0
  659. package/docs/examples/component-catalog-extension.json +2 -2
  660. package/docs/layout.md +16 -7
  661. package/docs/list-detail-dialog.md +96 -0
  662. package/docs/manual-test-plan.md +1 -1
  663. package/docs/{composer.md → message-composer.md} +41 -28
  664. package/docs/overlay-toast.md +62 -0
  665. package/docs/overlay-tooltip.md +53 -0
  666. package/docs/progress.md +62 -0
  667. package/docs/recipes.md +15 -21
  668. package/docs/slider.md +64 -0
  669. package/docs/surface-scaffold.md +155 -88
  670. package/docs/tag-field.md +66 -0
  671. package/docs/type-contracts.md +8 -8
  672. package/docs/ui-analyzer.md +1 -1
  673. package/docs/ui-doctor.md +11 -6
  674. package/docs/ux-demo.md +6 -6
  675. package/docs/webawesome-migration.md +80 -0
  676. package/docs/webawesome-theme.md +57 -35
  677. package/docs/workbench-dialog.md +85 -0
  678. package/docs/workbench.md +10 -6
  679. package/docs/writing.md +10 -8
  680. package/doctor/copy-capitalization-checks.mjs +18 -9
  681. package/llms.txt +131 -57
  682. package/package.json +156 -39
  683. package/ux-demo/recipes/composer-form.tsx +18 -19
  684. package/ux-demo/recipes/list-detail-dialog.tsx +55 -162
  685. package/ux-demo/recipes/mount-recipe.ts +7 -6
  686. package/ux-demo/recipes/types.ts +1 -0
  687. package/ai/components/icon-button.md +0 -82
  688. package/ai/components/icon-toggle-button.md +0 -80
  689. package/ai/components/token-search-field.md +0 -107
  690. package/dist/app-tab.js +0 -6
  691. package/dist/app-tab.js.map +0 -1
  692. package/dist/browser/app-tab.js +0 -4
  693. package/dist/browser/composer.js +0 -4
  694. package/dist/browser/icon-toggle-button.js +0 -4
  695. package/dist/browser/token-search-field.js +0 -4
  696. package/dist/chunk-2MSPNRWJ.js.map +0 -1
  697. package/dist/chunk-7IUEBNCO.js.map +0 -1
  698. package/dist/chunk-AV7CPAPT.js +0 -82
  699. package/dist/chunk-AV7CPAPT.js.map +0 -1
  700. package/dist/chunk-BYFTHA4I.js.map +0 -1
  701. package/dist/chunk-CA7LNX3J.js +0 -44
  702. package/dist/chunk-CA7LNX3J.js.map +0 -1
  703. package/dist/chunk-ELCMSQNJ.js.map +0 -1
  704. package/dist/chunk-ETCWQLJV.js.map +0 -1
  705. package/dist/chunk-FDZNYD4C.js.map +0 -1
  706. package/dist/chunk-FR76ZJQC.js +0 -90
  707. package/dist/chunk-FR76ZJQC.js.map +0 -1
  708. package/dist/chunk-HQZYKJ56.js.map +0 -1
  709. package/dist/chunk-HZPHCSCS.js.map +0 -1
  710. package/dist/chunk-IM3GKYOG.js.map +0 -1
  711. package/dist/chunk-JOR5LGYE.js.map +0 -1
  712. package/dist/chunk-K4AT3V3J.js.map +0 -1
  713. package/dist/chunk-LL45C7BB.js.map +0 -1
  714. package/dist/chunk-LOSRXZAH.js.map +0 -1
  715. package/dist/chunk-LPHU44S3.js.map +0 -1
  716. package/dist/chunk-M5KZ26VV.js.map +0 -1
  717. package/dist/chunk-MF6ZUUJZ.js.map +0 -1
  718. package/dist/chunk-MXNIVEVL.js.map +0 -1
  719. package/dist/chunk-NS762OVM.js +0 -222
  720. package/dist/chunk-NS762OVM.js.map +0 -1
  721. package/dist/chunk-PKL6QJKK.js.map +0 -1
  722. package/dist/chunk-QTSMHH5J.js.map +0 -1
  723. package/dist/chunk-TDMHA7C3.js.map +0 -1
  724. package/dist/chunk-TGLUDQP2.js.map +0 -1
  725. package/dist/chunk-U6QYTMDB.js.map +0 -1
  726. package/dist/chunk-VFYO3UGZ.js +0 -45
  727. package/dist/chunk-VFYO3UGZ.js.map +0 -1
  728. package/dist/chunk-W4IK7AWD.js.map +0 -1
  729. package/dist/chunk-YBWQR2OK.js.map +0 -1
  730. package/dist/composer.js +0 -5
  731. package/dist/composer.js.map +0 -1
  732. package/dist/icon-button.d.ts +0 -46
  733. package/dist/icon-button.js +0 -6
  734. package/dist/icon-button.js.map +0 -1
  735. package/dist/icon-toggle-button.d.ts +0 -42
  736. package/dist/icon-toggle-button.js +0 -6
  737. package/dist/icon-toggle-button.js.map +0 -1
  738. package/dist/styles/components/actions/icon-button/icon-button.css +0 -22
  739. package/dist/styles/components/actions/icon-toggle-button/icon-toggle-button.css +0 -83
  740. package/dist/styles/icon-button.css +0 -22
  741. package/dist/styles/icon-toggle-button.css +0 -83
  742. package/dist/token-search-field.d.ts +0 -3
  743. package/dist/token-search-field.js +0 -5
  744. package/dist/token-search-field.js.map +0 -1
  745. package/dist/token-search-model.d.ts +0 -3
  746. package/dist/token-search-model.js +0 -3
  747. package/dist/token-search-model.js.map +0 -1
  748. package/dist/wire-composers.js +0 -3
  749. package/dist/wire-token-search-fields.js +0 -6
  750. package/docs/design/templates/composer/chat-dark.svg +0 -1
  751. package/docs/design/templates/composer/chat.svg +0 -1
  752. package/docs/design/templates/composer-dark.svg +0 -1
  753. package/docs/design/templates/composer.svg +0 -1
  754. /package/docs/design/templates/{token-search-field → search-field}/empty-dark.svg +0 -0
  755. /package/docs/design/templates/{token-search-field → search-field}/empty.svg +0 -0
  756. /package/docs/design/templates/{token-search-field → search-field}/tokens-dark.svg +0 -0
  757. /package/docs/design/templates/{token-search-field → search-field}/tokens.svg +0 -0
  758. /package/docs/design/templates/{token-search-field-dark.svg → search-field-dark.svg} +0 -0
  759. /package/docs/design/templates/{token-search-field.svg → search-field.svg} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/catalog/components/catalog-resource-footer.tsx","../src/catalog/components/catalog-section-entries.tsx","../src/catalog/components/catalog-secondary-sections.tsx","../src/catalog/components/catalog-section-list.tsx","../src/catalog/components/catalog-sidebar.tsx","../src/catalog/components/catalog-stage.tsx","../src/catalog/components/catalog-ux-review-link.tsx","../src/catalog/components/catalog.tsx","../src/catalog/components/catalog-example.tsx","../src/catalog/components/catalog-example-stack.tsx"],"names":["jsxs","jsx","Fragment","protectedAttributes"],"mappings":"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","file":"catalog.js","sourcesContent":["import { ExternalLink, Waypoints } from 'lucide';\n\nimport {\n PopupMenu,\n type PopupMenuEntry,\n} from '../../components/actions/popup-menu/popup-menu.js';\nimport {\n Toolbar,\n type ToolbarConfig,\n} from '../../components/actions/toolbar/toolbar.js';\nimport {\n ToolbarActionLink,\n ToolbarControlGroup,\n} from '../../components/actions/toolbar-control-group/toolbar-control-group.js';\nimport { Row } from '../../components/layout/row/row.js';\nimport { LucideIcon } from '../../components/media/lucide-icon/lucide-icon.js';\nimport type { KerfUiContent } from '../../shared/content/semantic-content.js';\nimport type { CatalogRelated, CatalogResource } from '../types.js';\n\ninterface CatalogResourceFooterProps {\n name: string;\n resources: readonly CatalogResource[];\n related: readonly CatalogRelated[];\n status?: KerfUiContent;\n selectAction: string;\n toolbar?: ToolbarConfig;\n}\n\nfunction relatedMenuItems(\n related: readonly CatalogRelated[],\n selectAction: string,\n): PopupMenuEntry[] {\n const groups: string[] = [];\n for (const entry of related)\n if (!groups.includes(entry.group)) groups.push(entry.group);\n\n const items: PopupMenuEntry[] = [];\n groups.forEach((group, index) => {\n if (index > 0) items.push({ kind: 'divider' });\n items.push({ kind: 'heading', label: group });\n for (const entry of related)\n if (entry.group === group)\n items.push({\n label: entry.name,\n action: selectAction,\n attributes: { 'data-item-id': entry.id },\n });\n });\n return items;\n}\n\n/** Status, resources, and related-entry navigation for the active specimen. */\nexport function CatalogResourceFooter({\n name,\n resources,\n related,\n status,\n selectAction,\n toolbar,\n}: CatalogResourceFooterProps) {\n return (\n <>\n {status ? (\n <Row\n hAlign=\"space-between\"\n vAlign=\"baseline\"\n gap=\"xs\"\n wrap\n textInsets=\"trl\"\n >\n {status}\n </Row>\n ) : null}\n <Toolbar\n position=\"footer\"\n label={`${name} Resources`}\n density={toolbar?.density}\n dividerSides={toolbar?.dividerSides}\n centerAlign={toolbar?.centerAlign}\n responsive={toolbar?.responsive ?? 'stack'}\n responsiveAt={toolbar?.responsiveAt ?? 'narrow'}\n safeAreaEdges={toolbar?.safeAreaEdges}\n leading={\n resources.length > 0 ? (\n <ToolbarControlGroup\n label={`${name} Resources`}\n content=\"mixed\"\n size=\"compact\"\n overflow=\"wrap\"\n >\n {resources.map((resource) => (\n <ToolbarActionLink\n href={resource.href}\n label={resource.label}\n detail={resource.detail}\n ariaLabel={`${name}: ${resource.label} (opens in new tab)`}\n external\n icon={<LucideIcon icon={ExternalLink} name=\"external-link\" />}\n />\n ))}\n </ToolbarControlGroup>\n ) : null\n }\n trailing={\n related.length > 0 ? (\n <ToolbarControlGroup\n single\n content=\"mixed\"\n nestedDropdown\n menuInset=\"compact\"\n size=\"compact\"\n label=\"Related Entries\"\n >\n <PopupMenu\n text=\"Components\"\n icon={<LucideIcon icon={Waypoints} name=\"waypoints\" />}\n placement=\"top-end\"\n items={relatedMenuItems(related, selectAction)}\n rootAttributes={{ 'data-catalog-related': '' }}\n />\n </ToolbarControlGroup>\n ) : null\n }\n />\n </>\n );\n}\n","import { List } from '../../components/collections/list/list.js';\nimport { ListHeader } from '../../components/collections/list-header/list-header.js';\nimport { ListItem } from '../../components/collections/list-item/list-item.js';\nimport type { CatalogEntry, CatalogSection } from '../types.js';\n\n/** One labeled section of catalog entries. */\nexport function CatalogSectionEntries({\n section,\n active,\n selectAction,\n}: {\n section: CatalogSection;\n active: string;\n selectAction: string;\n}) {\n return (\n <List rootAttributes={{ 'data-catalog-section': section.category }}>\n <ListHeader label={section.category} />\n <List gap=\"2xs\">\n {section.entries.map((entry: CatalogEntry) => (\n <ListItem\n action={selectAction}\n itemId={entry.id}\n label={entry.name}\n status={entry.tags?.join(' · ')}\n selected={active === entry.id}\n title={entry.description}\n multiline\n rootAttributes={{ 'data-catalog-entry-name': entry.name }}\n />\n ))}\n </List>\n </List>\n );\n}\n","import { List } from '../../components/collections/list/list.js';\nimport { ListHeader } from '../../components/collections/list-header/list-header.js';\nimport type { CatalogSecondaryGroup } from '../types.js';\nimport { CatalogSectionEntries } from './catalog-section-entries.js';\n\ninterface CatalogSecondarySectionsProps {\n group: CatalogSecondaryGroup;\n active: string;\n selectAction: string;\n toggleAction: string;\n}\n\n/** The quieter, optionally collapsible navigation below primary sections. */\nexport function CatalogSecondarySections({\n group,\n active,\n selectAction,\n toggleAction,\n}: CatalogSecondarySectionsProps) {\n const open = !group.collapsible || Boolean(group.expanded);\n return (\n <List\n dividerSides=\"t\"\n controlInsets=\"t\"\n rootAttributes={{ 'data-catalog-secondary-group': group.label }}\n >\n {group.collapsible ? (\n <ListHeader\n label={group.label}\n toggle\n expanded={open}\n action={toggleAction}\n />\n ) : (\n <ListHeader label={group.label} />\n )}\n <List\n gap=\"m\"\n rootAttributes={{\n 'data-catalog-secondary': '',\n 'data-catalog-secondary-collapsed': String(!open),\n }}\n >\n {group.sections.map((section) => (\n <CatalogSectionEntries\n section={section}\n active={active}\n selectAction={selectAction}\n />\n ))}\n </List>\n </List>\n );\n}\n","import type { CatalogSection } from '../types.js';\nimport { CatalogSectionEntries } from './catalog-section-entries.js';\n\n/** The primary category sections in the catalog navigation. */\nexport function CatalogSectionList({\n sections,\n active,\n selectAction,\n}: {\n sections: readonly CatalogSection[];\n active: string;\n selectAction: string;\n}) {\n return (\n <>\n {sections.map((section) => (\n <CatalogSectionEntries\n section={section}\n active={active}\n selectAction={selectAction}\n />\n ))}\n </>\n );\n}\n","import { List } from '../../components/collections/list/list.js';\nimport { ListInsetText } from '../../components/collections/list-inset-text/list-inset-text.js';\nimport { Text } from '../../components/typography/text/text.js';\nimport type { KerfUiContent } from '../../shared/content/semantic-content.js';\nimport type {\n CatalogBrand,\n CatalogSecondaryGroup,\n CatalogSection,\n} from '../types.js';\nimport { CatalogSecondarySections } from './catalog-secondary-sections.js';\nimport { CatalogSectionList } from './catalog-section-list.js';\n\ninterface CatalogSidebarProps {\n brand: CatalogBrand;\n sections: readonly CatalogSection[];\n active: string;\n secondarySections?: CatalogSecondaryGroup;\n footer?: KerfUiContent;\n selectAction: string;\n toggleSecondaryAction: string;\n}\n\n/** The catalog navigation: brand subtitle, entry sections, and footer. */\nexport function CatalogSidebar({\n brand,\n sections,\n active,\n secondarySections,\n footer,\n selectAction,\n toggleSecondaryAction,\n}: CatalogSidebarProps) {\n return (\n <nav aria-label={`${brand.title} Components`} data-catalog-sidebar>\n <List gap=\"m\" controlInsets=\"b\">\n {brand.subtitle ? (\n <ListInsetText sides=\"rl\">\n <Text variant=\"span\" size=\"compact\" tone=\"quiet\">\n {brand.subtitle}\n </Text>\n </ListInsetText>\n ) : null}\n <CatalogSectionList\n sections={sections}\n active={active}\n selectAction={selectAction}\n />\n {secondarySections ? (\n <CatalogSecondarySections\n group={secondarySections}\n active={active}\n selectAction={selectAction}\n toggleAction={toggleSecondaryAction}\n />\n ) : null}\n <ListInsetText\n sides=\"rl\"\n rootAttributes={{ 'data-catalog-filter-empty': '' }}\n >\n <Text variant=\"span\" tone=\"quiet\">\n No matching items\n </Text>\n </ListInsetText>\n {footer}\n </List>\n </nav>\n );\n}\n","import type { KerfUiContent } from '../../shared/content/semantic-content.js';\nimport { filterDataAttributes } from '../../shared/dom/extension-attributes.js';\nimport type {\n CatalogBackgroundStyle,\n CatalogStageRootAttributes,\n} from '../types.js';\n\nconst protectedAttributes = new Set([\n 'data-catalog-stage',\n 'data-background-style',\n]);\n\ninterface CatalogStageProps {\n name: string;\n content: KerfUiContent;\n backgroundStyle?: CatalogBackgroundStyle;\n rootAttributes?: CatalogStageRootAttributes;\n}\n\n/** The preview canvas for an active Catalog entry. */\nexport function CatalogStage({\n name,\n content,\n backgroundStyle = 'checkerboard',\n rootAttributes = {},\n}: CatalogStageProps) {\n const safeRootAttributes = filterDataAttributes(\n rootAttributes,\n protectedAttributes,\n );\n return (\n <section\n {...safeRootAttributes}\n class=\"kui-catalog__stage\"\n data-catalog-stage\n data-background-style={backgroundStyle}\n aria-label={`${name} Preview`}\n >\n <div class=\"kui-catalog__canvas\">{content}</div>\n </section>\n );\n}\n","import { Scan } from 'lucide';\n\nimport {\n ToolbarActionLink,\n ToolbarControlGroup,\n} from '../../components/actions/toolbar-control-group/toolbar-control-group.js';\nimport { LucideIcon } from '../../components/media/lucide-icon/lucide-icon.js';\nimport type { CatalogEntry, CatalogUxReview } from '../types.js';\nimport { uxReviewCaptureUrl } from '../ux-review.js';\n\n/**\n * The \"Capture region\" header link for the active entry. `wireCatalog` adds\n * the page URL to its context when it is followed, since the URL can change\n * after this render (`urlParam`).\n */\nexport function CatalogUxReviewLink({\n uxReview: { projectDirectory, name },\n entry,\n category,\n}: {\n uxReview: CatalogUxReview & { name: string };\n entry: CatalogEntry;\n category: string;\n}) {\n return (\n <ToolbarControlGroup\n appearance=\"borderless\"\n single\n size=\"compact\"\n content=\"mixed\"\n buttonAppearance=\"push\"\n >\n <ToolbarActionLink\n href={uxReviewCaptureUrl({\n projectDirectory,\n title: `${name}: ${entry.name}`,\n context: `${name} catalog\\nSelected ${category}: ${entry.name} (${entry.id})`,\n })}\n label=\"Capture Region\"\n ariaLabel={`Capture ${entry.name} in UX Review`}\n icon={<LucideIcon icon={Scan} name=\"scan\" />}\n />\n </ToolbarControlGroup>\n );\n}\n","import { Contrast, Moon, Sun, X, ZapOff } from 'lucide';\n\nimport { PopupMenu } from '../../components/actions/popup-menu/popup-menu.js';\nimport { ToolbarControlGroup } from '../../components/actions/toolbar-control-group/toolbar-control-group.js';\nimport { ToolbarText } from '../../components/actions/toolbar-text/toolbar-text.js';\nimport { ListInsetControl } from '../../components/collections/list-inset-control/list-inset-control.js';\nimport { ListInsetText } from '../../components/collections/list-inset-text/list-inset-text.js';\nimport { TokenSearchField } from '../../components/forms/token-search-field/token-search-field.js';\nimport { Workbench } from '../../components/layout/workbench/workbench.js';\nimport { LucideIcon } from '../../components/media/lucide-icon/lucide-icon.js';\nimport { Text } from '../../components/typography/text/text.js';\nimport type { CatalogEntry, CatalogProps, CatalogSection } from '../types.js';\nimport { CatalogResourceFooter } from './catalog-resource-footer.js';\nimport { CatalogSidebar } from './catalog-sidebar.js';\nimport { CatalogStage } from './catalog-stage.js';\nimport { CatalogUxReviewLink } from './catalog-ux-review-link.js';\n\nfunction findEntry(\n sections: readonly CatalogSection[],\n id: string,\n): { entry: CatalogEntry; category: string } | undefined {\n for (const section of sections) {\n for (const entry of section.entries)\n if (entry.id === id) return { entry, category: section.category };\n }\n return undefined;\n}\n\n/**\n * Controlled, stateless component-catalog shell: a `Workbench` whose left rail\n * is the catalog navigation and whose work area is the active entry — its\n * toolbar, description, preview stage, and resource footer. The sidebar's\n * standard toggle moves into the entry toolbar while it is collapsed, and on\n * a small screen the sidebar overlays the stage like any Workbench rail.\n * An entry's `settings` render in a right-rail settings pane beside the stage,\n * with the same toggle relocation and small-screen overlay.\n */\nexport function Catalog({\n id = 'kui-catalog',\n brand,\n sections,\n active,\n content,\n collapsed = false,\n theme,\n increasedContrast,\n reducedMotion,\n backgroundControl = false,\n headerActions,\n settings,\n settingsCollapsed = false,\n settingsPanel = {},\n uxReview,\n secondarySections,\n sidebarFooter,\n status,\n backgroundStyle,\n stageRootAttributes,\n selectAction = 'catalog-select',\n toggleSidebarAction = 'catalog-toggle-sidebar',\n toggleThemeAction = 'catalog-toggle-theme',\n toggleContrastAction = 'catalog-toggle-contrast',\n toggleMotionAction = 'catalog-toggle-motion',\n selectBackgroundAction = 'catalog-select-background',\n toggleSecondaryAction = 'catalog-toggle-secondary',\n toggleSettingsAction = 'catalog-toggle-settings',\n headerPlacement = 'auto',\n footerPlacement = 'auto',\n sidebar = {},\n mainToolbar,\n footerToolbar,\n className = '',\n slot,\n}: CatalogProps) {\n const found =\n findEntry(sections, active) ??\n (secondarySections\n ? findEntry(secondarySections.sections, active)\n : undefined);\n const selected = found?.entry;\n const name = selected?.name ?? '';\n const nextTheme = theme === 'dark' ? 'light' : 'dark';\n const catalogName = `${brand.title} Catalog`;\n const displayControls =\n increasedContrast !== undefined ||\n reducedMotion !== undefined ||\n backgroundControl ||\n theme !== undefined;\n const hasSettings =\n settings !== undefined && settings !== null && settings !== false;\n const settingsTitle = settingsPanel.title ?? 'Settings';\n\n return (\n <main\n class={`kui-catalog ${className}`.trim()}\n data-component=\"catalog\"\n data-sidebar-collapsed={String(collapsed)}\n data-settings-collapsed={\n hasSettings ? String(settingsCollapsed) : undefined\n }\n slot={slot}\n >\n <Workbench\n id={id}\n label={catalogName}\n leftRail={{\n label: catalogName,\n size: sidebar.size ?? 288,\n resizable: sidebar.resizable,\n separator: sidebar.separator,\n collapseMotion: sidebar.collapseMotion,\n presentation: sidebar.presentation,\n responsiveOverlayAt: sidebar.responsiveOverlayAt,\n compactOverlay: sidebar.compactOverlay,\n collapsed,\n toolbar: {\n ...sidebar.toolbar,\n label: `${catalogName} Header`,\n title: (\n <>\n {brand.logoUrl ? (\n <ToolbarControlGroup\n appearance=\"borderless\"\n content=\"avatar\"\n shape=\"rounded\"\n single\n avatarImage={brand.logoUrl}\n >\n {null}\n </ToolbarControlGroup>\n ) : null}\n <ToolbarText text={brand.title} size=\"large\" headingLevel={1} />\n </>\n ),\n toggle: { action: toggleSidebarAction, name: catalogName },\n },\n header: (\n <ListInsetControl sides=\"rbl\">\n <TokenSearchField\n id={`${id}-filter`}\n label=\"Filter Catalog\"\n placeholder=\"Filter items or headings\"\n editorAttributes={{ 'data-catalog-filter': '' }}\n trailingAction={{\n icon: <LucideIcon icon={X} name=\"x\" />,\n label: 'Clear Filter',\n action: 'catalog-clear-filter',\n }}\n />\n </ListInsetControl>\n ),\n content: (\n <CatalogSidebar\n brand={brand}\n sections={sections}\n active={active}\n secondarySections={secondarySections}\n footer={sidebarFooter}\n selectAction={selectAction}\n toggleSecondaryAction={toggleSecondaryAction}\n />\n ),\n }}\n rightRail={\n hasSettings\n ? {\n label: name ? `${name} ${settingsTitle}` : settingsTitle,\n size: settingsPanel.size ?? 288,\n resizable: settingsPanel.resizable,\n separator: settingsPanel.separator,\n collapseMotion: settingsPanel.collapseMotion,\n presentation: settingsPanel.presentation,\n responsiveOverlayAt: settingsPanel.responsiveOverlayAt,\n compactOverlay: settingsPanel.compactOverlay,\n collapsed: settingsCollapsed,\n toolbar: {\n ...settingsPanel.toolbar,\n label: `${settingsTitle} Header`,\n // A peripheral rail beside the xl entry title takes the\n // default title size, so it never truncates at 288px.\n title: <ToolbarText text={settingsTitle} headingLevel={2} />,\n toggle: {\n action: toggleSettingsAction,\n name: settingsTitle,\n },\n },\n content: settings,\n }\n : undefined\n }\n mainToolbar={{\n ...mainToolbar,\n label: `${name} Header`,\n // The entry title stays whole; actions wrap below it when narrow.\n responsive: mainToolbar?.responsive ?? 'wrap',\n title: <ToolbarText text={name} size=\"xlarge\" headingLevel={2} />,\n trailing: (\n <>\n {headerActions}\n {uxReview && found ? (\n <CatalogUxReviewLink\n uxReview={{ ...uxReview, name: uxReview.name ?? brand.title }}\n entry={found.entry}\n category={found.category}\n />\n ) : null}\n {displayControls ? (\n <ToolbarControlGroup\n appearance=\"borderless\"\n content=\"mixed\"\n size=\"compact\"\n overflow=\"wrap\"\n buttonAppearance=\"push\"\n label=\"Catalog Display Settings\"\n >\n {increasedContrast !== undefined ? (\n <button\n type=\"button\"\n data-action={toggleContrastAction}\n aria-pressed={String(increasedContrast)}\n >\n <LucideIcon icon={Contrast} name=\"contrast\" />\n <span>Contrast</span>\n </button>\n ) : null}\n {reducedMotion !== undefined ? (\n <button\n type=\"button\"\n data-action={toggleMotionAction}\n aria-pressed={String(reducedMotion)}\n >\n <LucideIcon icon={ZapOff} name=\"zap-off\" />\n <span>Reduce Motion</span>\n </button>\n ) : null}\n {backgroundControl ? (\n <PopupMenu\n text=\"Background\"\n rootAttributes={{ 'data-catalog-background-menu': '' }}\n items={[\n { value: 'checkerboard', label: 'Checkerboard' },\n {\n value: 'vertical-stripes',\n label: 'Vertical Stripes',\n },\n { value: 'layout-guide', label: 'Layout Guide' },\n { value: 'surface', label: 'Surface' },\n { value: 'sunken', label: 'Sunken' },\n ].map(({ value, label }) => ({\n label,\n action: selectBackgroundAction,\n checked: (backgroundStyle ?? 'checkerboard') === value,\n attributes: { 'data-background-choice': value },\n }))}\n />\n ) : null}\n {theme ? (\n <button\n type=\"button\"\n data-action={toggleThemeAction}\n aria-label={`Use ${nextTheme === 'dark' ? 'Dark' : 'Light'} Theme`}\n data-theme-preview={theme}\n >\n {nextTheme === 'dark' ? (\n <LucideIcon icon={Moon} name=\"moon\" />\n ) : (\n <LucideIcon icon={Sun} name=\"sun\" />\n )}\n <span>{nextTheme === 'dark' ? 'Dark' : 'Light'}</span>\n </button>\n ) : null}\n </ToolbarControlGroup>\n ) : null}\n </>\n ),\n }}\n mainPane={{ appearance: 'sunken' }}\n mainFooter={\n <CatalogResourceFooter\n name={name}\n resources={selected?.resources ?? []}\n related={selected?.related ?? []}\n status={status}\n selectAction={selectAction}\n toolbar={footerToolbar}\n />\n }\n mainHeader={\n selected?.description ? (\n <ListInsetText\n sides=\"trbl\"\n rootAttributes={{ 'data-catalog-description': '' }}\n >\n <Text variant=\"span\">{selected.description}</Text>\n </ListInsetText>\n ) : null\n }\n mainHeaderPlacement={headerPlacement}\n mainFooterPlacement={footerPlacement}\n main={\n <CatalogStage\n name={name}\n content={content}\n backgroundStyle={backgroundStyle}\n rootAttributes={stageRootAttributes}\n />\n }\n />\n </main>\n );\n}\n","import type { SafeHtml } from 'kerfjs';\n\nimport { ListHeader } from '../../components/collections/list-header/list-header.js';\nimport { ListInsetText } from '../../components/collections/list-inset-text/list-inset-text.js';\nimport { Text } from '../../components/typography/text/text.js';\nimport type { KerfUiContent } from '../../shared/content/semantic-content.js';\nimport { filterDataAttributes } from '../../shared/dom/extension-attributes.js';\nimport { ensureSunkenTexture } from '../../shared/styles/sunken-texture.js';\n\n/** How a specimen aligns its visible edge with its `ListHeader` label. */\nexport type CatalogExampleAlign =\n 'glyph' | 'inline-control' | 'text-trigger' | 'none';\n\nexport interface CatalogExampleViewport {\n layout?: 'grid' | 'flex' | 'flex-column';\n /** Specimen width. `sidebar` (272px, capped at the stage) shows a sidebar\n * pane's content at a production rail's width. */\n width?:\n 'full' | 'sidebar' | 'compact' | 'medium' | 'wide' | 'text' | 'control';\n /** Fixed specimen height; `app` frames an application-sized recipe or layout.\n * A fixed height is definite, so a child that fills with `height: 100%`\n * (a horizontal `ResizableRegion`, say) spans the whole frame. */\n height?: 'short' | 'reduced' | 'medium' | 'tall' | 'app';\n /** A minimum the frame may grow past. It is not a definite height: a child\n * sized with `height: 100%` falls back to its content height, so use\n * `height` when the specimen must fill the frame. `app` (592px) is the\n * application frame's height as a floor, for a stage that hosts a\n * frame-anchored top-layer specimen above in-flow content. */\n minHeight?: 'short' | 'medium' | 'app';\n /** Names the frame as a CSS anchor (`anchor-name`), so a top-layer\n * specimen whose own CSS sets `position-anchor` to this dashed-ident\n * positions against the frame as it would against its production anchor.\n * Anchor names are document-wide: give each frame on a page its own. */\n anchorName?: `--${string}`;\n /** Caps each in-flow child at a centered-or-start content column:\n * `compact` (440px), `medium` (640px), or `wide` (864px), each capped at\n * the frame. `[popover]` children keep their own geometry. Applies to\n * block, `grid`, and `flex-column` flows. */\n contentWidth?: 'compact' | 'medium' | 'wide';\n /** Where a `contentWidth` column sits in the frame; default `start`. */\n contentAlign?: 'start' | 'center';\n frame?: 'solid' | 'dashed';\n surface?: 'default' | 'lowered';\n overflow?: 'hidden' | 'auto-x';\n responsive?: 'roomy-only';\n shadow?: boolean;\n /** Public component custom properties applied to the specimen viewport. */\n tokens?: Readonly<Record<`--${string}`, string>>;\n}\n\n// A CSS dashed-ident: `--` and at least one name code point.\nconst dashedIdent = /^--[\\w\\-\\u0080-\\u{10FFFF}]+$/u;\n\nfunction viewportStyleOf(\n viewport: CatalogExampleViewport | undefined,\n): string | undefined {\n if (viewport === undefined) return undefined;\n const declarations = Object.entries(viewport.tokens ?? {}).map(\n ([name, value]) => `${name}:${value}`,\n );\n const { anchorName } = viewport;\n if (anchorName !== undefined) {\n if (!dashedIdent.test(anchorName))\n throw new TypeError(\n `CatalogExample viewport.anchorName must be a CSS dashed-ident such as \"--app-shell-main\"; received ${JSON.stringify(anchorName)}`,\n );\n declarations.push(`anchor-name:${anchorName}`);\n }\n return declarations.length > 0 ? declarations.join(';') : undefined;\n}\n\nconst protectedAttributes = new Set([\n 'data-catalog-example',\n 'data-catalog-example-stack',\n 'data-catalog-example-label',\n 'data-catalog-example-note',\n 'data-align',\n]);\n\ntype CatalogExampleRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-catalog-example'?: never;\n 'data-catalog-example-stack'?: never;\n 'data-catalog-example-label'?: never;\n 'data-catalog-example-note'?: never;\n 'data-align'?: never;\n }\n>;\n\nexport interface CatalogExampleProps {\n label?: string;\n note?: SafeHtml | string;\n align?: CatalogExampleAlign;\n /** Optional catalog-owned constraints for demonstrating layout components. */\n viewport?: CatalogExampleViewport;\n /** Replacement guidance shown when a roomy-only viewport is hidden. */\n compactFallback?: SafeHtml | string;\n rootAttributes?: CatalogExampleRootAttributes;\n className?: string;\n children?: KerfUiContent;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\n/**\n * A labeled catalog specimen with optional explanatory text and alignment. A\n * supplied `label` also names the rendered `section`, so each specimen is an\n * addressable region; an unlabeled example stays an ordinary grouping.\n */\nexport function CatalogExample({\n label,\n note,\n align = 'none',\n viewport,\n compactFallback,\n rootAttributes = {},\n className = '',\n children,\n slot,\n}: CatalogExampleProps) {\n const safeRootAttributes = filterDataAttributes(\n rootAttributes,\n protectedAttributes,\n );\n const viewportStyle = viewportStyleOf(viewport);\n if (viewport?.surface === 'lowered') ensureSunkenTexture();\n const specimen = viewport ? (\n <div\n class=\"kui-catalog-example__viewport\"\n data-catalog-example-viewport\n data-layout={viewport.layout}\n data-width={viewport.width}\n data-height={viewport.height}\n data-min-height={viewport.minHeight}\n data-frame={viewport.frame}\n data-surface={viewport.surface}\n data-overflow={viewport.overflow}\n data-responsive={viewport.responsive}\n data-shadow={viewport.shadow ? 'true' : undefined}\n data-content-width={viewport.contentWidth}\n data-content-align={\n viewport.contentWidth === undefined ? undefined : viewport.contentAlign\n }\n style={viewportStyle}\n >\n {children}\n </div>\n ) : (\n children\n );\n\n return (\n <section\n {...safeRootAttributes}\n class={`kui-catalog-example ${className}`.trim()}\n data-catalog-example\n data-align={align}\n aria-label={label}\n slot={slot}\n >\n {label !== undefined ? (\n <ListHeader\n label={label}\n width=\"content\"\n rootAttributes={{ 'data-catalog-example-label': '' }}\n />\n ) : null}\n {note !== undefined ? (\n <ListInsetText\n sides=\"rl\"\n className=\"kui-catalog-example__note\"\n rootAttributes={{ 'data-catalog-example-note': '' }}\n >\n <Text variant=\"span\" size=\"compact\" tone=\"quiet\">\n {note}\n </Text>\n </ListInsetText>\n ) : null}\n {compactFallback !== undefined ? (\n <Text tone=\"quiet\" className=\"kui-catalog-example__compact-fallback\">\n {compactFallback}\n </Text>\n ) : null}\n {specimen}\n </section>\n );\n}\n","import type { KerfUiContent } from '../../shared/content/semantic-content.js';\nimport { filterDataAttributes } from '../../shared/dom/extension-attributes.js';\n\nconst protectedAttributes = new Set([\n 'data-catalog-example',\n 'data-catalog-example-stack',\n 'data-catalog-example-label',\n 'data-catalog-example-note',\n 'data-align',\n 'data-width',\n]);\n\ntype CatalogExampleStackRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-catalog-example'?: never;\n 'data-catalog-example-stack'?: never;\n 'data-catalog-example-label'?: never;\n 'data-catalog-example-note'?: never;\n 'data-align'?: never;\n 'data-width'?: never;\n }\n>;\n\n/**\n * How wide a stack may grow: `reading` (default) caps it at a 736px reading\n * measure for component specimens; `full` lets it span the stage for\n * application-width compositions such as boards, app shells, drawers, and\n * split views.\n */\nexport type CatalogExampleStackWidth = 'reading' | 'full';\n\nexport interface CatalogExampleStackProps {\n label?: string;\n /** Maximum width of the stack (default `reading`). */\n width?: CatalogExampleStackWidth;\n rootAttributes?: CatalogExampleStackRootAttributes;\n className?: string;\n children?: KerfUiContent;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\n/** A vertically stacked group of catalog examples. */\nexport function CatalogExampleStack({\n label,\n width = 'reading',\n rootAttributes = {},\n className = '',\n children,\n slot,\n}: CatalogExampleStackProps) {\n const safeRootAttributes = filterDataAttributes(\n rootAttributes,\n protectedAttributes,\n );\n\n return (\n <section\n {...safeRootAttributes}\n class={`kui-catalog-example-stack ${className}`.trim()}\n data-catalog-example-stack\n data-width={width === 'full' ? 'full' : undefined}\n aria-label={label}\n slot={slot}\n >\n {children}\n </section>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/catalog/components/catalog-resource-footer.tsx","../src/catalog/components/catalog-section-entries.tsx","../src/catalog/components/catalog-secondary-sections.tsx","../src/catalog/components/catalog-section-list.tsx","../src/catalog/components/catalog-sidebar.tsx","../src/catalog/components/catalog-stage.tsx","../src/catalog/components/catalog-ux-review-link.tsx","../src/catalog/components/catalog.tsx","../src/catalog/components/catalog-example.tsx","../src/catalog/components/catalog-example-stack.tsx"],"names":["jsxs","jsx","Fragment","protectedAttributes"],"mappings":"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","file":"catalog.js","sourcesContent":["import { ExternalLink, Waypoints } from 'lucide';\n\nimport {\n PopupMenu,\n type PopupMenuEntry,\n} from '../../components/actions/popup-menu/popup-menu.js';\nimport {\n Toolbar,\n type ToolbarConfig,\n} from '../../components/actions/toolbar/toolbar.js';\nimport {\n ToolbarActionLink,\n ToolbarControlGroup,\n} from '../../components/actions/toolbar-control-group/toolbar-control-group.js';\nimport { Row } from '../../components/layout/row/row.js';\nimport { LucideIcon } from '../../components/media/lucide-icon/lucide-icon.js';\nimport type { KerfUiContent } from '../../shared/content/semantic-content.js';\nimport type { CatalogRelated, CatalogResource } from '../types.js';\n\ninterface CatalogResourceFooterProps {\n name: string;\n resources: readonly CatalogResource[];\n related: readonly CatalogRelated[];\n status?: KerfUiContent;\n selectAction: string;\n toolbar?: ToolbarConfig;\n}\n\nfunction relatedMenuItems(\n related: readonly CatalogRelated[],\n selectAction: string,\n): PopupMenuEntry[] {\n const groups: string[] = [];\n for (const entry of related)\n if (!groups.includes(entry.group)) groups.push(entry.group);\n\n const items: PopupMenuEntry[] = [];\n groups.forEach((group, index) => {\n if (index > 0) items.push({ kind: 'divider' });\n items.push({ kind: 'heading', label: group });\n for (const entry of related)\n if (entry.group === group)\n items.push({\n label: entry.name,\n action: selectAction,\n attributes: { 'data-item-id': entry.id },\n });\n });\n return items;\n}\n\n/** Status, resources, and related-entry navigation for the active specimen. */\nexport function CatalogResourceFooter({\n name,\n resources,\n related,\n status,\n selectAction,\n toolbar,\n}: CatalogResourceFooterProps) {\n return (\n <>\n {status ? (\n <Row\n hAlign=\"space-between\"\n vAlign=\"baseline\"\n gap=\"xs\"\n wrap\n textInsets=\"trl\"\n >\n {status}\n </Row>\n ) : null}\n <Toolbar\n position=\"footer\"\n label={`${name} Resources`}\n density={toolbar?.density}\n dividerSides={toolbar?.dividerSides}\n centerAlign={toolbar?.centerAlign}\n responsive={toolbar?.responsive ?? 'stack'}\n responsiveAt={toolbar?.responsiveAt ?? 'narrow'}\n safeAreaEdges={toolbar?.safeAreaEdges}\n leading={\n resources.length > 0 ? (\n <ToolbarControlGroup\n label={`${name} Resources`}\n content=\"mixed\"\n size=\"compact\"\n overflow=\"wrap\"\n >\n {resources.map((resource) => (\n <ToolbarActionLink\n href={resource.href}\n label={resource.label}\n detail={resource.detail}\n ariaLabel={`${name}: ${resource.label} (opens in new tab)`}\n external\n icon={<LucideIcon icon={ExternalLink} name=\"external-link\" />}\n />\n ))}\n </ToolbarControlGroup>\n ) : null\n }\n trailing={\n related.length > 0 ? (\n <ToolbarControlGroup\n single\n content=\"mixed\"\n nestedDropdown\n menuInset=\"compact\"\n size=\"compact\"\n label=\"Related Entries\"\n >\n <PopupMenu\n text=\"Components\"\n icon={<LucideIcon icon={Waypoints} name=\"waypoints\" />}\n placement=\"top-end\"\n items={relatedMenuItems(related, selectAction)}\n rootAttributes={{ 'data-catalog-related': '' }}\n />\n </ToolbarControlGroup>\n ) : null\n }\n />\n </>\n );\n}\n","import { List } from '../../components/collections/list/list.js';\nimport { ListHeader } from '../../components/collections/list-header/list-header.js';\nimport { ListItem } from '../../components/collections/list-item/list-item.js';\nimport type { CatalogEntry, CatalogSection } from '../types.js';\n\n/** One labeled section of catalog entries. */\nexport function CatalogSectionEntries({\n section,\n active,\n selectAction,\n}: {\n section: CatalogSection;\n active: string;\n selectAction: string;\n}) {\n return (\n <List rootAttributes={{ 'data-catalog-section': section.category }}>\n <ListHeader label={section.category} />\n <List gap=\"2xs\">\n {section.entries.map((entry: CatalogEntry) => (\n <ListItem\n action={selectAction}\n itemId={entry.id}\n label={entry.name}\n status={entry.tags?.join(' · ')}\n selected={active === entry.id}\n title={entry.description}\n multiline\n rootAttributes={{ 'data-catalog-entry-name': entry.name }}\n />\n ))}\n </List>\n </List>\n );\n}\n","import { List } from '../../components/collections/list/list.js';\nimport { ListHeader } from '../../components/collections/list-header/list-header.js';\nimport { Switch } from '../../components/forms/switch/switch.js';\nimport type { CatalogSecondaryGroup, CatalogSection } from '../types.js';\nimport { CatalogSectionEntries } from './catalog-section-entries.js';\n\ninterface CatalogSecondarySectionsProps {\n group: CatalogSecondaryGroup;\n active: string;\n selectAction: string;\n toggleAction: string;\n filterAction: string;\n}\n\n/** Drop entries the tag filter hides (never the active one) and any emptied section. */\nfunction visibleSections(\n group: CatalogSecondaryGroup,\n active: string,\n): readonly CatalogSection[] {\n const filter = group.tagFilter;\n if (!filter || filter.show) return group.sections;\n return group.sections\n .map((section) => ({\n ...section,\n entries: section.entries.filter(\n (entry) => entry.id === active || !entry.tags?.includes(filter.tag),\n ),\n }))\n .filter((section) => section.entries.length > 0);\n}\n\n/** The quieter, optionally collapsible navigation below primary sections. */\nexport function CatalogSecondarySections({\n group,\n active,\n selectAction,\n toggleAction,\n filterAction,\n}: CatalogSecondarySectionsProps) {\n const open = !group.collapsible || Boolean(group.expanded);\n return (\n <List\n dividerSides=\"t\"\n controlInsets=\"t\"\n rootAttributes={{ 'data-catalog-secondary-group': group.label }}\n >\n {group.collapsible ? (\n <ListHeader\n label={group.label}\n toggle\n expanded={open}\n action={toggleAction}\n />\n ) : (\n <ListHeader label={group.label} />\n )}\n <List\n gap=\"m\"\n rootAttributes={{\n 'data-catalog-secondary': '',\n 'data-catalog-secondary-collapsed': String(!open),\n }}\n >\n {group.tagFilter ? (\n <List textInsets=\"rl\">\n <Switch\n label={group.tagFilter.label}\n checked={group.tagFilter.show}\n size=\"compact\"\n action={filterAction}\n rootAttributes={{ 'data-catalog-secondary-filter': '' }}\n />\n </List>\n ) : null}\n {visibleSections(group, active).map((section) => (\n <CatalogSectionEntries\n section={section}\n active={active}\n selectAction={selectAction}\n />\n ))}\n </List>\n </List>\n );\n}\n","import type { CatalogSection } from '../types.js';\nimport { CatalogSectionEntries } from './catalog-section-entries.js';\n\n/** The primary category sections in the catalog navigation. */\nexport function CatalogSectionList({\n sections,\n active,\n selectAction,\n}: {\n sections: readonly CatalogSection[];\n active: string;\n selectAction: string;\n}) {\n return (\n <>\n {sections.map((section) => (\n <CatalogSectionEntries\n section={section}\n active={active}\n selectAction={selectAction}\n />\n ))}\n </>\n );\n}\n","import { List } from '../../components/collections/list/list.js';\nimport { ListInsetText } from '../../components/collections/list-inset-text/list-inset-text.js';\nimport { Text } from '../../components/typography/text/text.js';\nimport type { KerfUiContent } from '../../shared/content/semantic-content.js';\nimport type {\n CatalogBrand,\n CatalogSecondaryGroup,\n CatalogSection,\n} from '../types.js';\nimport { CatalogSecondarySections } from './catalog-secondary-sections.js';\nimport { CatalogSectionList } from './catalog-section-list.js';\n\ninterface CatalogSidebarProps {\n brand: CatalogBrand;\n sections: readonly CatalogSection[];\n active: string;\n secondarySections?: CatalogSecondaryGroup;\n footer?: KerfUiContent;\n selectAction: string;\n toggleSecondaryAction: string;\n toggleSecondaryFilterAction: string;\n}\n\n/** The catalog navigation: brand subtitle, entry sections, and footer. */\nexport function CatalogSidebar({\n brand,\n sections,\n active,\n secondarySections,\n footer,\n selectAction,\n toggleSecondaryAction,\n toggleSecondaryFilterAction,\n}: CatalogSidebarProps) {\n return (\n <nav aria-label={`${brand.title} Components`} data-catalog-sidebar>\n <List gap=\"m\" controlInsets=\"b\">\n {brand.subtitle ? (\n <ListInsetText sides=\"rl\">\n <Text variant=\"span\" size=\"compact\" tone=\"quiet\">\n {brand.subtitle}\n </Text>\n </ListInsetText>\n ) : null}\n <CatalogSectionList\n sections={sections}\n active={active}\n selectAction={selectAction}\n />\n {secondarySections ? (\n <CatalogSecondarySections\n group={secondarySections}\n active={active}\n selectAction={selectAction}\n toggleAction={toggleSecondaryAction}\n filterAction={toggleSecondaryFilterAction}\n />\n ) : null}\n <ListInsetText\n sides=\"rl\"\n rootAttributes={{ 'data-catalog-filter-empty': '' }}\n >\n <Text variant=\"span\" tone=\"quiet\">\n No matching items\n </Text>\n </ListInsetText>\n {footer}\n </List>\n </nav>\n );\n}\n","import type { KerfUiContent } from '../../shared/content/semantic-content.js';\nimport { filterDataAttributes } from '../../shared/dom/extension-attributes.js';\nimport type {\n CatalogBackgroundStyle,\n CatalogStageRootAttributes,\n} from '../types.js';\n\nconst protectedAttributes = new Set([\n 'data-catalog-stage',\n 'data-background-style',\n]);\n\ninterface CatalogStageProps {\n name: string;\n content: KerfUiContent;\n backgroundStyle?: CatalogBackgroundStyle;\n rootAttributes?: CatalogStageRootAttributes;\n}\n\n/** The preview canvas for an active Catalog entry. */\nexport function CatalogStage({\n name,\n content,\n backgroundStyle = 'checkerboard',\n rootAttributes = {},\n}: CatalogStageProps) {\n const safeRootAttributes = filterDataAttributes(\n rootAttributes,\n protectedAttributes,\n );\n return (\n <section\n {...safeRootAttributes}\n class=\"kui-catalog__stage\"\n data-catalog-stage\n data-background-style={backgroundStyle}\n aria-label={`${name} Preview`}\n >\n <div class=\"kui-catalog__canvas\">{content}</div>\n </section>\n );\n}\n","import { Scan } from 'lucide';\n\nimport {\n ToolbarActionLink,\n ToolbarControlGroup,\n} from '../../components/actions/toolbar-control-group/toolbar-control-group.js';\nimport { LucideIcon } from '../../components/media/lucide-icon/lucide-icon.js';\nimport type { CatalogEntry, CatalogUxReview } from '../types.js';\nimport { uxReviewCaptureUrl } from '../ux-review.js';\n\n/**\n * The \"Capture region\" header link for the active entry. `wireCatalog` adds\n * the page URL to its context when it is followed, since the URL can change\n * after this render (`urlParam`).\n */\nexport function CatalogUxReviewLink({\n uxReview: { projectDirectory, name },\n entry,\n category,\n}: {\n uxReview: CatalogUxReview & { name: string };\n entry: CatalogEntry;\n category: string;\n}) {\n return (\n <ToolbarControlGroup\n appearance=\"borderless\"\n single\n size=\"compact\"\n content=\"mixed\"\n buttonAppearance=\"push\"\n >\n <ToolbarActionLink\n href={uxReviewCaptureUrl({\n projectDirectory,\n title: `${name}: ${entry.name}`,\n context: `${name} catalog\\nSelected ${category}: ${entry.name} (${entry.id})`,\n })}\n label=\"Capture Region\"\n ariaLabel={`Capture ${entry.name} in UX Review`}\n icon={<LucideIcon icon={Scan} name=\"scan\" />}\n />\n </ToolbarControlGroup>\n );\n}\n","import { Contrast, Moon, Sun, X, ZapOff } from 'lucide';\n\nimport { PopupMenu } from '../../components/actions/popup-menu/popup-menu.js';\nimport { ToolbarControlGroup } from '../../components/actions/toolbar-control-group/toolbar-control-group.js';\nimport { ToolbarText } from '../../components/actions/toolbar-text/toolbar-text.js';\nimport { ListInsetControl } from '../../components/collections/list-inset-control/list-inset-control.js';\nimport { ListInsetText } from '../../components/collections/list-inset-text/list-inset-text.js';\nimport { SearchField } from '../../components/forms/search-field/search-field.js';\nimport { Workbench } from '../../components/layout/workbench/workbench.js';\nimport { LucideIcon } from '../../components/media/lucide-icon/lucide-icon.js';\nimport { Text } from '../../components/typography/text/text.js';\nimport type { CatalogEntry, CatalogProps, CatalogSection } from '../types.js';\nimport { CatalogResourceFooter } from './catalog-resource-footer.js';\nimport { CatalogSidebar } from './catalog-sidebar.js';\nimport { CatalogStage } from './catalog-stage.js';\nimport { CatalogUxReviewLink } from './catalog-ux-review-link.js';\n\nfunction findEntry(\n sections: readonly CatalogSection[],\n id: string,\n): { entry: CatalogEntry; category: string } | undefined {\n for (const section of sections) {\n for (const entry of section.entries)\n if (entry.id === id) return { entry, category: section.category };\n }\n return undefined;\n}\n\n/**\n * Controlled, stateless component-catalog shell: a `Workbench` whose left rail\n * is the catalog navigation and whose work area is the active entry — its\n * toolbar, description, preview stage, and resource footer. The sidebar's\n * standard toggle moves into the entry toolbar while it is collapsed, and on\n * a small screen the sidebar overlays the stage like any Workbench rail.\n * An entry's `settings` render in a right-rail settings pane beside the stage,\n * with the same toggle relocation and small-screen overlay.\n */\nexport function Catalog({\n id = 'kui-catalog',\n brand,\n sections,\n active,\n content,\n collapsed = false,\n theme,\n increasedContrast,\n reducedMotion,\n backgroundControl = false,\n headerActions,\n settings,\n settingsCollapsed = false,\n settingsPanel = {},\n uxReview,\n secondarySections,\n sidebarFooter,\n status,\n backgroundStyle,\n stageRootAttributes,\n selectAction = 'catalog-select',\n toggleSidebarAction = 'catalog-toggle-sidebar',\n toggleThemeAction = 'catalog-toggle-theme',\n toggleContrastAction = 'catalog-toggle-contrast',\n toggleMotionAction = 'catalog-toggle-motion',\n selectBackgroundAction = 'catalog-select-background',\n toggleSecondaryAction = 'catalog-toggle-secondary',\n toggleSecondaryFilterAction = 'catalog-toggle-secondary-filter',\n toggleSettingsAction = 'catalog-toggle-settings',\n headerPlacement = 'auto',\n footerPlacement = 'auto',\n sidebar = {},\n mainToolbar,\n footerToolbar,\n className = '',\n slot,\n}: CatalogProps) {\n const found =\n findEntry(sections, active) ??\n (secondarySections\n ? findEntry(secondarySections.sections, active)\n : undefined);\n const selected = found?.entry;\n const name = selected?.name ?? '';\n const nextTheme = theme === 'dark' ? 'light' : 'dark';\n const catalogName = `${brand.title} Catalog`;\n const displayControls =\n increasedContrast !== undefined ||\n reducedMotion !== undefined ||\n backgroundControl ||\n theme !== undefined;\n const hasSettings =\n settings !== undefined && settings !== null && settings !== false;\n const settingsTitle = settingsPanel.title ?? 'Settings';\n\n return (\n <main\n class={`kui-catalog ${className}`.trim()}\n data-component=\"catalog\"\n data-sidebar-collapsed={String(collapsed)}\n data-settings-collapsed={\n hasSettings ? String(settingsCollapsed) : undefined\n }\n slot={slot}\n >\n <Workbench\n id={id}\n label={catalogName}\n leftRail={{\n label: catalogName,\n size: sidebar.size ?? 288,\n resizable: sidebar.resizable,\n separator: sidebar.separator,\n collapseMotion: sidebar.collapseMotion,\n presentation: sidebar.presentation,\n responsiveOverlayAt: sidebar.responsiveOverlayAt,\n compactOverlay: sidebar.compactOverlay,\n collapsed,\n toolbar: {\n ...sidebar.toolbar,\n label: `${catalogName} Header`,\n title: (\n <>\n {brand.logoUrl ? (\n <ToolbarControlGroup\n appearance=\"borderless\"\n content=\"avatar\"\n shape=\"rounded\"\n single\n avatarImage={brand.logoUrl}\n >\n {null}\n </ToolbarControlGroup>\n ) : null}\n <ToolbarText text={brand.title} size=\"large\" headingLevel={1} />\n </>\n ),\n toggle: { action: toggleSidebarAction, name: catalogName },\n },\n header: (\n <ListInsetControl sides=\"rbl\">\n <SearchField\n id={`${id}-filter`}\n label=\"Filter Catalog\"\n placeholder=\"Filter items or headings\"\n editorAttributes={{ 'data-catalog-filter': '' }}\n trailingAction={{\n icon: <LucideIcon icon={X} name=\"x\" />,\n label: 'Clear Filter',\n action: 'catalog-clear-filter',\n }}\n />\n </ListInsetControl>\n ),\n content: (\n <CatalogSidebar\n brand={brand}\n sections={sections}\n active={active}\n secondarySections={secondarySections}\n footer={sidebarFooter}\n selectAction={selectAction}\n toggleSecondaryAction={toggleSecondaryAction}\n toggleSecondaryFilterAction={toggleSecondaryFilterAction}\n />\n ),\n }}\n rightRail={\n hasSettings\n ? {\n label: name ? `${name} ${settingsTitle}` : settingsTitle,\n size: settingsPanel.size ?? 288,\n resizable: settingsPanel.resizable,\n separator: settingsPanel.separator,\n collapseMotion: settingsPanel.collapseMotion,\n presentation: settingsPanel.presentation,\n responsiveOverlayAt: settingsPanel.responsiveOverlayAt,\n compactOverlay: settingsPanel.compactOverlay,\n collapsed: settingsCollapsed,\n toolbar: {\n ...settingsPanel.toolbar,\n label: `${settingsTitle} Header`,\n // A peripheral rail beside the xl entry title takes the\n // default title size, so it never truncates at 288px.\n title: <ToolbarText text={settingsTitle} headingLevel={2} />,\n toggle: {\n action: toggleSettingsAction,\n name: settingsTitle,\n },\n },\n content: settings,\n }\n : undefined\n }\n mainToolbar={{\n ...mainToolbar,\n label: `${name} Header`,\n // The entry title stays whole; actions wrap below it when narrow.\n responsive: mainToolbar?.responsive ?? 'wrap',\n title: <ToolbarText text={name} size=\"xlarge\" headingLevel={2} />,\n trailing: (\n <>\n {headerActions}\n {uxReview && found ? (\n <CatalogUxReviewLink\n uxReview={{ ...uxReview, name: uxReview.name ?? brand.title }}\n entry={found.entry}\n category={found.category}\n />\n ) : null}\n {displayControls ? (\n <ToolbarControlGroup\n appearance=\"borderless\"\n content=\"mixed\"\n size=\"compact\"\n overflow=\"wrap\"\n buttonAppearance=\"push\"\n label=\"Catalog Display Settings\"\n >\n {increasedContrast !== undefined ? (\n <button\n type=\"button\"\n data-action={toggleContrastAction}\n aria-pressed={String(increasedContrast)}\n >\n <LucideIcon icon={Contrast} name=\"contrast\" />\n <span>Contrast</span>\n </button>\n ) : null}\n {reducedMotion !== undefined ? (\n <button\n type=\"button\"\n data-action={toggleMotionAction}\n aria-pressed={String(reducedMotion)}\n >\n <LucideIcon icon={ZapOff} name=\"zap-off\" />\n <span>Reduce Motion</span>\n </button>\n ) : null}\n {backgroundControl ? (\n <PopupMenu\n text=\"Background\"\n rootAttributes={{ 'data-catalog-background-menu': '' }}\n items={[\n { value: 'checkerboard', label: 'Checkerboard' },\n {\n value: 'vertical-stripes',\n label: 'Vertical Stripes',\n },\n { value: 'layout-guide', label: 'Layout Guide' },\n { value: 'surface', label: 'Surface' },\n { value: 'sunken', label: 'Sunken' },\n ].map(({ value, label }) => ({\n label,\n action: selectBackgroundAction,\n checked: (backgroundStyle ?? 'checkerboard') === value,\n attributes: { 'data-background-choice': value },\n }))}\n />\n ) : null}\n {theme ? (\n <button\n type=\"button\"\n data-action={toggleThemeAction}\n aria-label={`Use ${nextTheme === 'dark' ? 'Dark' : 'Light'} Theme`}\n data-theme-preview={theme}\n >\n {nextTheme === 'dark' ? (\n <LucideIcon icon={Moon} name=\"moon\" />\n ) : (\n <LucideIcon icon={Sun} name=\"sun\" />\n )}\n <span>{nextTheme === 'dark' ? 'Dark' : 'Light'}</span>\n </button>\n ) : null}\n </ToolbarControlGroup>\n ) : null}\n </>\n ),\n }}\n mainPane={{ appearance: 'sunken' }}\n mainFooter={\n <CatalogResourceFooter\n name={name}\n resources={selected?.resources ?? []}\n related={selected?.related ?? []}\n status={status}\n selectAction={selectAction}\n toolbar={footerToolbar}\n />\n }\n mainHeader={\n selected?.description ? (\n <ListInsetText\n sides=\"trbl\"\n rootAttributes={{ 'data-catalog-description': '' }}\n >\n <Text variant=\"span\">{selected.description}</Text>\n </ListInsetText>\n ) : null\n }\n mainHeaderPlacement={headerPlacement}\n mainFooterPlacement={footerPlacement}\n main={\n <CatalogStage\n name={name}\n content={content}\n backgroundStyle={backgroundStyle}\n rootAttributes={stageRootAttributes}\n />\n }\n />\n </main>\n );\n}\n","import type { SafeHtml } from 'kerfjs';\n\nimport { ListHeader } from '../../components/collections/list-header/list-header.js';\nimport { ListInsetText } from '../../components/collections/list-inset-text/list-inset-text.js';\nimport { Text } from '../../components/typography/text/text.js';\nimport type { KerfUiContent } from '../../shared/content/semantic-content.js';\nimport { filterDataAttributes } from '../../shared/dom/extension-attributes.js';\nimport { ensureSunkenTexture } from '../../shared/styles/sunken-texture.js';\n\n/** How a specimen aligns its visible edge with its `ListHeader` label. */\nexport type CatalogExampleAlign =\n 'glyph' | 'inline-control' | 'text-trigger' | 'none';\n\nexport interface CatalogExampleViewport {\n layout?: 'grid' | 'flex' | 'flex-column';\n /** Specimen width. `sidebar` (272px, capped at the stage) shows a sidebar\n * pane's content at a production rail's width. */\n width?:\n 'full' | 'sidebar' | 'compact' | 'medium' | 'wide' | 'text' | 'control';\n /** Fixed specimen height; `app` frames an application-sized recipe or layout.\n * A fixed height is definite, so a child that fills with `height: 100%`\n * (a horizontal `ResizableRegion`, say) spans the whole frame. */\n height?: 'short' | 'reduced' | 'medium' | 'tall' | 'app';\n /** A minimum the frame may grow past. It is not a definite height: a child\n * sized with `height: 100%` falls back to its content height, so use\n * `height` when the specimen must fill the frame. `app` (592px) is the\n * application frame's height as a floor, for a stage that hosts a\n * frame-anchored top-layer specimen above in-flow content. */\n minHeight?: 'short' | 'medium' | 'app';\n /** Names the frame as a CSS anchor (`anchor-name`), so a top-layer\n * specimen whose own CSS sets `position-anchor` to this dashed-ident\n * positions against the frame as it would against its production anchor.\n * Anchor names are document-wide: give each frame on a page its own. */\n anchorName?: `--${string}`;\n /** Caps each in-flow child at a centered-or-start content column:\n * `compact` (440px), `medium` (640px), or `wide` (864px), each capped at\n * the frame. `[popover]` children keep their own geometry. Applies to\n * block, `grid`, and `flex-column` flows. */\n contentWidth?: 'compact' | 'medium' | 'wide';\n /** Where a `contentWidth` column sits in the frame; default `start`. */\n contentAlign?: 'start' | 'center';\n frame?: 'solid' | 'dashed';\n surface?: 'default' | 'lowered';\n overflow?: 'hidden' | 'auto-x';\n responsive?: 'roomy-only';\n shadow?: boolean;\n /** Public component custom properties applied to the specimen viewport. */\n tokens?: Readonly<Record<`--${string}`, string>>;\n}\n\n// A CSS dashed-ident: `--` and at least one name code point.\nconst dashedIdent = /^--[\\w\\-\\u0080-\\u{10FFFF}]+$/u;\n\nfunction viewportStyleOf(\n viewport: CatalogExampleViewport | undefined,\n): string | undefined {\n if (viewport === undefined) return undefined;\n const declarations = Object.entries(viewport.tokens ?? {}).map(\n ([name, value]) => `${name}:${value}`,\n );\n const { anchorName } = viewport;\n if (anchorName !== undefined) {\n if (!dashedIdent.test(anchorName))\n throw new TypeError(\n `CatalogExample viewport.anchorName must be a CSS dashed-ident such as \"--app-shell-main\"; received ${JSON.stringify(anchorName)}`,\n );\n declarations.push(`anchor-name:${anchorName}`);\n }\n return declarations.length > 0 ? declarations.join(';') : undefined;\n}\n\nconst protectedAttributes = new Set([\n 'data-catalog-example',\n 'data-catalog-example-stack',\n 'data-catalog-example-label',\n 'data-catalog-example-note',\n 'data-align',\n]);\n\ntype CatalogExampleRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-catalog-example'?: never;\n 'data-catalog-example-stack'?: never;\n 'data-catalog-example-label'?: never;\n 'data-catalog-example-note'?: never;\n 'data-align'?: never;\n }\n>;\n\nexport interface CatalogExampleProps {\n label?: string;\n note?: SafeHtml | string;\n align?: CatalogExampleAlign;\n /** Optional catalog-owned constraints for demonstrating layout components. */\n viewport?: CatalogExampleViewport;\n /** Replacement guidance shown when a roomy-only viewport is hidden. */\n compactFallback?: SafeHtml | string;\n rootAttributes?: CatalogExampleRootAttributes;\n className?: string;\n children?: KerfUiContent;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\n/**\n * A labeled catalog specimen with optional explanatory text and alignment. A\n * supplied `label` also names the rendered `section`, so each specimen is an\n * addressable region; an unlabeled example stays an ordinary grouping.\n */\nexport function CatalogExample({\n label,\n note,\n align = 'none',\n viewport,\n compactFallback,\n rootAttributes = {},\n className = '',\n children,\n slot,\n}: CatalogExampleProps) {\n const safeRootAttributes = filterDataAttributes(\n rootAttributes,\n protectedAttributes,\n );\n const viewportStyle = viewportStyleOf(viewport);\n if (viewport?.surface === 'lowered') ensureSunkenTexture();\n const specimen = viewport ? (\n <div\n class=\"kui-catalog-example__viewport\"\n data-catalog-example-viewport\n data-layout={viewport.layout}\n data-width={viewport.width}\n data-height={viewport.height}\n data-min-height={viewport.minHeight}\n data-frame={viewport.frame}\n data-surface={viewport.surface}\n data-overflow={viewport.overflow}\n data-responsive={viewport.responsive}\n data-shadow={viewport.shadow ? 'true' : undefined}\n data-content-width={viewport.contentWidth}\n data-content-align={\n viewport.contentWidth === undefined ? undefined : viewport.contentAlign\n }\n style={viewportStyle}\n >\n {children}\n </div>\n ) : (\n children\n );\n\n return (\n <section\n {...safeRootAttributes}\n class={`kui-catalog-example ${className}`.trim()}\n data-catalog-example\n data-align={align}\n aria-label={label}\n slot={slot}\n >\n {label !== undefined ? (\n <ListHeader\n label={label}\n width=\"content\"\n rootAttributes={{ 'data-catalog-example-label': '' }}\n />\n ) : null}\n {note !== undefined ? (\n <ListInsetText\n sides=\"rl\"\n className=\"kui-catalog-example__note\"\n rootAttributes={{ 'data-catalog-example-note': '' }}\n >\n <Text variant=\"span\" size=\"compact\" tone=\"quiet\">\n {note}\n </Text>\n </ListInsetText>\n ) : null}\n {compactFallback !== undefined ? (\n <Text tone=\"quiet\" className=\"kui-catalog-example__compact-fallback\">\n {compactFallback}\n </Text>\n ) : null}\n {specimen}\n </section>\n );\n}\n","import type { KerfUiContent } from '../../shared/content/semantic-content.js';\nimport { filterDataAttributes } from '../../shared/dom/extension-attributes.js';\n\nconst protectedAttributes = new Set([\n 'data-catalog-example',\n 'data-catalog-example-stack',\n 'data-catalog-example-label',\n 'data-catalog-example-note',\n 'data-align',\n 'data-width',\n]);\n\ntype CatalogExampleStackRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-catalog-example'?: never;\n 'data-catalog-example-stack'?: never;\n 'data-catalog-example-label'?: never;\n 'data-catalog-example-note'?: never;\n 'data-align'?: never;\n 'data-width'?: never;\n }\n>;\n\n/**\n * How wide a stack may grow: `reading` (default) caps it at a 736px reading\n * measure for component specimens; `full` lets it span the stage for\n * application-width compositions such as boards, app shells, drawers, and\n * split views.\n */\nexport type CatalogExampleStackWidth = 'reading' | 'full';\n\nexport interface CatalogExampleStackProps {\n label?: string;\n /** Maximum width of the stack (default `reading`). */\n width?: CatalogExampleStackWidth;\n rootAttributes?: CatalogExampleStackRootAttributes;\n className?: string;\n children?: KerfUiContent;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\n/** A vertically stacked group of catalog examples. */\nexport function CatalogExampleStack({\n label,\n width = 'reading',\n rootAttributes = {},\n className = '',\n children,\n slot,\n}: CatalogExampleStackProps) {\n const safeRootAttributes = filterDataAttributes(\n rootAttributes,\n protectedAttributes,\n );\n\n return (\n <section\n {...safeRootAttributes}\n class={`kui-catalog-example-stack ${className}`.trim()}\n data-catalog-example-stack\n data-width={width === 'full' ? 'full' : undefined}\n aria-label={label}\n slot={slot}\n >\n {children}\n </section>\n );\n}\n"]}
@@ -0,0 +1,45 @@
1
+ import * as kerfjs from 'kerfjs';
2
+
3
+ /** `default` is a 20px box beside 16px text; `compact` an 18px box and 14px text. */
4
+ type CheckboxSize = 'default' | 'compact';
5
+ /** Application `data-*` metadata; the Checkbox's own markers stay protected. */
6
+ type CheckboxRootAttributes = Readonly<Record<`data-${string}`, string | undefined>>;
7
+ interface CheckboxProps {
8
+ /** The visible label, which is also the checkbox's accessible name. */
9
+ label: string;
10
+ checked?: boolean;
11
+ /**
12
+ * A mixed state, such as a parent of partly checked children. Needs
13
+ * `wireCheckboxes(root)`, which sets the native `indeterminate` property.
14
+ */
15
+ indeterminate?: boolean;
16
+ name?: string;
17
+ /** The value submitted while checked (native default `on`). */
18
+ value?: string;
19
+ /** Supporting text below the label, also the checkbox's description. */
20
+ hint?: string;
21
+ /** A validation message: shown in the danger color and marking it invalid. */
22
+ error?: string;
23
+ size?: CheckboxSize;
24
+ disabled?: boolean;
25
+ required?: boolean;
26
+ /** Delegated `data-action` on the input; listen for `change`. */
27
+ action?: string;
28
+ /** Associate the input with a form outside its ancestor chain. */
29
+ form?: string;
30
+ /** The input's id. */
31
+ id?: string;
32
+ className?: string;
33
+ /** Safe `data-*` metadata (a `data-key`). */
34
+ rootAttributes?: CheckboxRootAttributes;
35
+ /** Native named-slot assignment when composed inside a web component. */
36
+ slot?: string;
37
+ }
38
+ /**
39
+ * A native checkbox drawn as a Kerf box beside its label, with optional hint
40
+ * and error text aligned under the label, a mixed (indeterminate) state, and
41
+ * native form participation.
42
+ */
43
+ declare function Checkbox({ label, checked, indeterminate, name, value, hint, error, size, disabled, required, action, form, id, className, rootAttributes, slot, }: CheckboxProps): kerfjs.SafeHtml;
44
+
45
+ export { Checkbox, type CheckboxProps, type CheckboxRootAttributes, type CheckboxSize };
@@ -0,0 +1,6 @@
1
+ export { Checkbox } from './chunk-C26Q6P4Q.js';
2
+
3
+
4
+
5
+
6
+ //# sourceMappingURL=checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"checkbox.js"}
@@ -1,7 +1,13 @@
1
1
  import { SafeHtml } from 'kerfjs';
2
- import { CssColor } from './css-values.js';
2
+ import { CssColor, CssLength } from './css-values.js';
3
3
 
4
4
  type ChoiceChipsSize = 'default' | 'compact';
5
+ /**
6
+ * `chips` (default) are labeled pills; `icons` are square 36px icon-only
7
+ * choices (an icon picker), each named by its hidden label, which is also
8
+ * its hover title.
9
+ */
10
+ type ChoiceChipsPresentation = 'chips' | 'icons';
5
11
  /**
6
12
  * A leading color dot: a {@link CssColor} from `uiColor()`, `colorVar()`, or
7
13
  * `fillColor()`, or `'transparent'` for the no-color swatch (an outlined
@@ -22,14 +28,23 @@ interface ChoiceChipsChoice<Value extends string = string> {
22
28
  }
23
29
  interface ChoiceChipsCommonProps<Value extends string> {
24
30
  /**
25
- * Native input `name`: the form field the selected value (or, with
26
- * `multiple`, every checked value) submits under.
31
+ * Form field name: the selected value (or, with `multiple`, every selected
32
+ * value) submits under it.
27
33
  */
28
34
  name: string;
29
35
  choices: readonly ChoiceChipsChoice<Value>[];
30
- /** Delegated `data-action` on every input; listen for `change`. */
36
+ /**
37
+ * Delegated `data-action`; listen for `change`. It sits on every native
38
+ * input, or for `multiple: true` on the group, which `wireChoiceChips`
39
+ * fires `change` on.
40
+ */
31
41
  action?: string;
32
42
  size?: ChoiceChipsSize;
43
+ presentation?: ChoiceChipsPresentation;
44
+ /**
45
+ * Cap the group's height; past it the group scrolls (a long icon grid).
46
+ */
47
+ maxHeight?: CssLength;
33
48
  /** Disable the whole group. */
34
49
  disabled?: boolean;
35
50
  /** Associate the inputs with a form outside their ancestor chain. */
@@ -49,18 +64,34 @@ interface ChoiceChipsSingleProps<Value extends string = string> {
49
64
  }
50
65
  /**
51
66
  * Any number of values, backed by native checkboxes: each pill is its own Tab
52
- * stop, Space toggles it, and every checked value submits under `name`.
67
+ * stop, a click or Space toggles it alone, and every checked value submits
68
+ * under `name`.
53
69
  */
54
- interface ChoiceChipsMultipleProps<Value extends string = string> {
55
- multiple: true;
70
+ interface ChoiceChipsToggleProps<Value extends string = string> {
71
+ multiple: 'toggle';
56
72
  /** The checked values. Omit (or pass `[]`) for none. */
57
73
  value?: readonly NoInfer<Value>[];
58
74
  /**
59
- * Native `required` on a checkbox demands that one box, so a multiple group
75
+ * Native `required` on a checkbox demands that one box, so a toggle group
60
76
  * has no "at least one" requirement; validate the checked set in the app.
61
77
  */
62
78
  required?: never;
63
79
  }
80
+ /**
81
+ * Any number of values with the conventional desktop selection model, as an
82
+ * ARIA multi-select listbox: a click selects one chip, Cmd (Apple) or Ctrl
83
+ * (elsewhere) toggles one, and Shift extends a range. The group is one Tab
84
+ * stop; arrows move the selection, Shift+arrows extend it, Cmd/Ctrl+arrows
85
+ * move focus alone, Space toggles, and Cmd/Ctrl+A selects all. Hidden inputs
86
+ * submit every selected value under `name`. Requires `wireChoiceChips`.
87
+ */
88
+ interface ChoiceChipsMultipleProps<Value extends string = string> {
89
+ multiple: true;
90
+ /** The selected values. Omit (or pass `[]`) for none. */
91
+ value?: readonly NoInfer<Value>[];
92
+ /** Validate the selected set in the app; a listbox has no native `required`. */
93
+ required?: never;
94
+ }
64
95
  /** A group is named either by a string or by a visible heading's id. */
65
96
  type ChoiceChipsNaming = {
66
97
  label: string;
@@ -69,14 +100,17 @@ type ChoiceChipsNaming = {
69
100
  labelledBy: string;
70
101
  label?: never;
71
102
  };
72
- type ChoiceChipsProps<Value extends string = string> = ChoiceChipsCommonProps<Value> & (ChoiceChipsSingleProps<Value> | ChoiceChipsMultipleProps<Value>) & ChoiceChipsNaming;
103
+ type ChoiceChipsProps<Value extends string = string> = ChoiceChipsCommonProps<Value> & (ChoiceChipsSingleProps<Value> | ChoiceChipsToggleProps<Value> | ChoiceChipsMultipleProps<Value>) & ChoiceChipsNaming;
104
+ /** Which selection model a ChoiceChips group renders. */
105
+ type ChoiceChipsSelectionMode = 'single' | 'toggle' | 'multiple';
73
106
  /**
74
- * A wrapping set of pill chips backed by native inputs. By default it is an
75
- * exclusive radio group: one Tab stop, arrow-key selection, and a real form
76
- * value. With `multiple` it is a checkbox group: each pill toggles on its own
77
- * and every checked value submits. Each choice may lead with a color swatch
78
- * (including a struck-through transparent swatch) or an icon.
107
+ * A wrapping set of pill chips. By default it is an exclusive radio group:
108
+ * one Tab stop, arrow-key selection, and a real form value. With
109
+ * `multiple: 'toggle'` it is a checkbox group: each pill toggles on its own.
110
+ * With `multiple: true` it is a multi-select listbox with modifier-key
111
+ * selection (wire it with `wireChoiceChips`). Each choice may lead with a
112
+ * color swatch (including a struck-through transparent swatch) or an icon.
79
113
  */
80
114
  declare function ChoiceChips<Value extends string>(props: ChoiceChipsProps<Value>): SafeHtml;
81
115
 
82
- export { ChoiceChips, type ChoiceChipsChoice, type ChoiceChipsMultipleProps, type ChoiceChipsNaming, type ChoiceChipsProps, type ChoiceChipsSingleProps, type ChoiceChipsSize, type ChoiceChipsSwatch };
116
+ export { ChoiceChips, type ChoiceChipsChoice, type ChoiceChipsMultipleProps, type ChoiceChipsNaming, type ChoiceChipsPresentation, type ChoiceChipsProps, type ChoiceChipsSelectionMode, type ChoiceChipsSingleProps, type ChoiceChipsSize, type ChoiceChipsSwatch, type ChoiceChipsToggleProps };
@@ -1,3 +1,3 @@
1
- export { ChoiceChips } from './chunk-FR76ZJQC.js';
1
+ export { ChoiceChips } from './chunk-ITUQC4FW.js';
2
2
 
3
3
  //# sourceMappingURL=choice-chips.js.map
@@ -0,0 +1,93 @@
1
+ import { Text } from './chunk-7K6U6FCN.js';
2
+ import { Toolbar } from './chunk-CMLPFIC5.js';
3
+ import { filterDataAttributes } from './chunk-KH4KEMSP.js';
4
+ import { jsxs, jsx, Fragment } from 'kerfjs/jsx-runtime';
5
+
6
+ var COMPOSER_PROTECTED = /* @__PURE__ */ new Set([
7
+ "data-component",
8
+ "data-disabled",
9
+ "data-submit-on-enter"
10
+ ]);
11
+ function rowCount(value, name) {
12
+ if (!Number.isInteger(value) || value < 1)
13
+ throw new RangeError(`MessageComposer ${name} must be a positive integer.`);
14
+ return value;
15
+ }
16
+ function MessageComposer({
17
+ label,
18
+ name,
19
+ id,
20
+ value = "",
21
+ placeholder,
22
+ minRows = 1,
23
+ maxRows = 8,
24
+ hint,
25
+ leading,
26
+ trailing,
27
+ disabled = false,
28
+ submitOnEnter = false,
29
+ rootAttributes = {},
30
+ className = "",
31
+ slot
32
+ }) {
33
+ const min = rowCount(minRows, "minRows");
34
+ const max = rowCount(maxRows, "maxRows");
35
+ if (max < min)
36
+ throw new RangeError("MessageComposer maxRows must be at least minRows.");
37
+ const hintId = hint !== void 0 && id !== void 0 ? `${id}-hint` : "";
38
+ return /* @__PURE__ */ jsxs(
39
+ "div",
40
+ {
41
+ ...filterDataAttributes(rootAttributes, COMPOSER_PROTECTED),
42
+ class: `kui-message-composer ${className}`.trim(),
43
+ "data-component": "message-composer",
44
+ "data-disabled": disabled ? "true" : void 0,
45
+ "data-submit-on-enter": submitOnEnter ? "true" : void 0,
46
+ style: `--_kui-message-composer-min-rows:${min};--_kui-message-composer-max-rows:${max}`,
47
+ slot,
48
+ children: [
49
+ /* @__PURE__ */ jsx(
50
+ "textarea",
51
+ {
52
+ class: "kui-message-composer__field",
53
+ id,
54
+ name,
55
+ rows: min,
56
+ "aria-label": label,
57
+ "aria-describedby": hintId || void 0,
58
+ "aria-keyshortcuts": submitOnEnter ? "Enter" : void 0,
59
+ placeholder,
60
+ disabled,
61
+ children: value
62
+ }
63
+ ),
64
+ /* @__PURE__ */ jsx(
65
+ Toolbar,
66
+ {
67
+ position: "footer",
68
+ density: "compact",
69
+ label: `${label} Actions`,
70
+ leading: leading === void 0 && hint === void 0 ? void 0 : /* @__PURE__ */ jsxs(Fragment, { children: [
71
+ leading,
72
+ hint === void 0 ? null : /* @__PURE__ */ jsx(
73
+ Text,
74
+ {
75
+ variant: "span",
76
+ tone: "quiet",
77
+ size: "compact",
78
+ id: hintId || void 0,
79
+ children: hint
80
+ }
81
+ )
82
+ ] }),
83
+ trailing
84
+ }
85
+ )
86
+ ]
87
+ }
88
+ );
89
+ }
90
+
91
+ export { MessageComposer };
92
+
93
+ //# sourceMappingURL=chunk-23PPPNH6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/forms/message-composer/message-composer.tsx"],"names":[],"mappings":"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","file":"chunk-23PPPNH6.js","sourcesContent":["import type { KerfUiContent } from '../../../shared/content/semantic-content.js';\nimport { filterDataAttributes } from '../../../shared/dom/extension-attributes.js';\nimport { Toolbar } from '../../actions/toolbar/toolbar.js';\nimport { Text } from '../../typography/text/text.js';\n\n/**\n * Application `data-*` identity on the MessageComposer root, such as `data-key`;\n * the composer's own configuration attributes stay protected.\n */\nexport type MessageComposerRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined>\n>;\n\nexport interface MessageComposerProps {\n /** The message field's accessible name, in title style (\"Message\"). */\n label: string;\n /** Native textarea `name`: the form field the message submits under. */\n name: string;\n /**\n * The textarea id. With a `hint`, the hint takes `<id>-hint` and becomes\n * the field's accessible description.\n */\n id?: string;\n /** The field's text: a draft to restore, or `''` after sending. */\n value?: string;\n /** Sentence-style example of what to write (\"Ask about this build\"). */\n placeholder?: string;\n /**\n * Visible lines while the field is empty or short (default 1). The field\n * grows with its content from here.\n */\n minRows?: number;\n /**\n * Lines the field grows to before it scrolls (default 8). At least\n * `minRows`.\n */\n maxRows?: number;\n /**\n * Quiet, sentence-style supporting copy in the action row's leading zone,\n * after any `leading` controls.\n */\n hint?: string;\n /**\n * Controls at the start of the action row, such as an attach button or a\n * model `Select`, normally in a `ToolbarControlGroup`.\n */\n leading?: KerfUiContent;\n /** Trailing controls in the action row, normally one brand Send button. */\n trailing: KerfUiContent;\n /** Disable the field; the app disables its own actions. */\n disabled?: boolean;\n /**\n * Opt in to Enter-to-send: with `wireMessageComposers` running over an ancestor,\n * Enter (or Cmd/Ctrl+Enter) in the field activates the first trailing\n * action, Shift+Enter inserts a newline, and an Enter that commits an IME\n * composition or meets an empty message does not send. The field announces\n * the shortcut with `aria-keyshortcuts`.\n */\n submitOnEnter?: boolean;\n /** Safe `data-*` identity on the root. */\n rootAttributes?: MessageComposerRootAttributes;\n className?: string;\n /** Native named-slot assignment, such as a `wa-dialog`'s `footer`. */\n slot?: string;\n}\n\nconst COMPOSER_PROTECTED = new Set([\n 'data-component',\n 'data-disabled',\n 'data-submit-on-enter',\n]);\n\nfunction rowCount(value: number, name: string): number {\n if (!Number.isInteger(value) || value < 1)\n throw new RangeError(`MessageComposer ${name} must be a positive integer.`);\n return value;\n}\n\n/**\n * A chat or prompt composer: a raised frame whose border turns brand while\n * focus is within, holding a borderless message field that grows with its\n * content between `minRows` and `maxRows` lines, above a compact `Toolbar`\n * action row: optional `leading` controls and `hint`, then `trailing` actions. The app owns the value and sending;\n * `submitOnEnter` with `wireMessageComposers` adds Enter-to-send.\n */\nexport function MessageComposer({\n label,\n name,\n id,\n value = '',\n placeholder,\n minRows = 1,\n maxRows = 8,\n hint,\n leading,\n trailing,\n disabled = false,\n submitOnEnter = false,\n rootAttributes = {},\n className = '',\n slot,\n}: MessageComposerProps) {\n const min = rowCount(minRows, 'minRows');\n const max = rowCount(maxRows, 'maxRows');\n if (max < min)\n throw new RangeError('MessageComposer maxRows must be at least minRows.');\n const hintId = hint !== undefined && id !== undefined ? `${id}-hint` : '';\n return (\n <div\n {...filterDataAttributes(rootAttributes, COMPOSER_PROTECTED)}\n class={`kui-message-composer ${className}`.trim()}\n data-component=\"message-composer\"\n data-disabled={disabled ? 'true' : undefined}\n data-submit-on-enter={submitOnEnter ? 'true' : undefined}\n style={`--_kui-message-composer-min-rows:${min};--_kui-message-composer-max-rows:${max}`}\n slot={slot}\n >\n <textarea\n class=\"kui-message-composer__field\"\n id={id}\n name={name}\n rows={min}\n aria-label={label}\n aria-describedby={hintId || undefined}\n aria-keyshortcuts={submitOnEnter ? 'Enter' : undefined}\n placeholder={placeholder}\n disabled={disabled}\n >\n {value}\n </textarea>\n <Toolbar\n position=\"footer\"\n density=\"compact\"\n label={`${label} Actions`}\n leading={\n leading === undefined && hint === undefined ? undefined : (\n <>\n {leading}\n {hint === undefined ? null : (\n <Text\n variant=\"span\"\n tone=\"quiet\"\n size=\"compact\"\n id={hintId || undefined}\n >\n {hint}\n </Text>\n )}\n </>\n )\n }\n trailing={trailing}\n />\n </div>\n );\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { Skeleton } from './chunk-CVD5IZGB.js';
2
+ import { Badge } from './chunk-RMWNO6BA.js';
2
3
  import { em } from './chunk-IQSRHXZR.js';
3
- import { Badge } from './chunk-U6QYTMDB.js';
4
4
  import { jsxs, jsx } from 'kerfjs/jsx-runtime';
5
5
 
6
6
  function StateBanner({
@@ -49,4 +49,4 @@ function StateBanner({
49
49
 
50
50
  export { StateBanner };
51
51
 
52
- //# sourceMappingURL=chunk-FNZQOUZ5.js.map
52
+ //# sourceMappingURL=chunk-2FW7D4IG.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/feedback/state-banner/state-banner.tsx"],"names":[],"mappings":";;;;;AAuDO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA,GAAO,MAAA;AAAA,EACP,OAAA,GAAU,QAAA;AAAA,EACV,UAAA,GAAa,QAAA;AAAA,EACb,eAAA,GAAkB,UAAA;AAAA,EAClB,YAAA,GAAe,MAAA;AAAA,EACf,YAAA,GAAe,GAAA;AAAA,EACf,SAAA,GAAY,EAAA;AAAA,EACZ,WAAA,GAAc,KAAA;AAAA,EACd;AACF,CAAA,EAAqB;AACnB,EAAA,uBACE,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAC5C,gBAAA,EAAe,cAAA;AAAA,MACf,WAAA,EAAW,IAAA;AAAA,MACX,kBAAA,EAAkB,UAAA;AAAA,MAClB,uBAAA,EAAuB,eAAA;AAAA,MACvB,mBAAA,EAAmB,YAAA;AAAA,MACnB,eAAA,EACE,YAAA,KAAiB,OAAA,GAAU,YAAA,IAAgB,MAAA,GAAY,MAAA;AAAA,MAEzD,kBAAA,EAAkB,cAAc,MAAA,GAAS,MAAA;AAAA,MACzC,IAAA,EAAM,OAAA;AAAA,MACN,WAAA,EAAW,OAAA,KAAY,OAAA,GAAU,WAAA,GAAc,QAAA;AAAA,MAC/C,WAAA,EAAW,cAAc,MAAA,GAAS,MAAA;AAAA,MAClC,IAAA;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,IAAA,oBAAQ,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,wBAAA,EAA0B,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,wBACpD,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,wBAAA,EACT,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAA,EAAA,EAAQ,wCAAc,GAAA,CAAC,QAAA,EAAA,EAAS,OAAO,EAAA,CAAG,EAAE,CAAA,EAAG,CAAA,GAAK,KAAA,EAAM,CAAA;AAAA,UAC1D,yBACC,GAAA,CAAC,KAAA,EAAA,EAAM,UAAA,EAAW,OAAA,EAAQ,MAAK,SAAA,EAAU,IAAA,EACtC,QAAA,EAAA,WAAA,mBAAc,GAAA,CAAC,YAAS,KAAA,EAAO,EAAA,CAAG,IAAI,CAAA,EAAG,IAAK,KAAA,EACjD,CAAA;AAAA,UAED,0BACC,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,0BAAA,EACV,8BAAC,MAAA,EAAA,EAAM,QAAA,EAAA,WAAA,mBAAc,GAAA,CAAC,QAAA,EAAA,EAAS,OAAO,EAAA,CAAG,EAAE,CAAA,EAAG,CAAA,GAAK,QAAO,CAAA,EAC5D;AAAA,SAAA,EAEJ,CAAA;AAAA,QACC,MAAA,oBAAU,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAA4B,QAAA,EAAA,MAAA,EAAO;AAAA;AAAA;AAAA,GAC3D;AAEJ","file":"chunk-FNZQOUZ5.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport type { KerfUiContent } from '../../../shared/content/semantic-content.js';\nimport type { Sides } from '../../../shared/layout/sides.js';\nimport { em } from '../../../shared/styles/css-values.js';\nimport type { SemanticTone } from '../../../shared/styles/semantic-tone.js';\nimport { Badge } from '../badge/badge.js';\nimport { Skeleton } from '../skeleton/skeleton.js';\n\nexport type { SemanticTone } from '../../../shared/styles/semantic-tone.js';\n/** @deprecated Use SemanticTone. */\nexport type StateBannerTone = SemanticTone;\nexport type StateBannerUrgency = 'status' | 'alert';\nexport type StateBannerCopyLayout = 'inline' | 'stacked';\nexport type StateBannerActionPlacement = 'trailing' | 'below';\nexport type StateBannerPresentation = 'card' | 'strip';\n\nexport interface StateBannerProps {\n title: string;\n detail?: string;\n /** Optional compact status or count shown beside the title. */\n badge?: string;\n icon?: SafeHtml;\n action?: KerfUiContent;\n tone?: SemanticTone;\n urgency?: StateBannerUrgency;\n /** Keep the detail beside the title, or give it its own line. */\n copyLayout?: StateBannerCopyLayout;\n /**\n * `trailing` (the default) puts the action beside the copy while the copy\n * keeps its minimum readable width, and otherwise wraps it onto its own\n * end-aligned trailing row, at any viewport or container width. `below`\n * always gives the action that separate trailing row.\n */\n actionPlacement?: StateBannerActionPlacement;\n /**\n * `card` (the default) is an inset, rounded, fully bordered banner beside\n * the affected work. `strip` is a full-width band at a layout edge, such as\n * above a workspace: square corners, no inline margin, inline padding on the\n * shared content-text column, and only the tone-colored `dividerSides` edges.\n */\n presentation?: StateBannerPresentation;\n /**\n * Physical tone-colored divider edges of a `strip`, in canonical\n * top/right/bottom/left order. Defaults to the bottom edge; `''` draws none.\n * A `card` keeps its full border and ignores this.\n */\n dividerSides?: Sides;\n className?: string;\n /** Render the title, badge, and detail as unanimated loading skeletons, keeping the icon and tone. The detail line appears only when `detail` is set, as in the live banner. */\n placeholder?: boolean;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\nexport function StateBanner({\n title,\n detail,\n badge,\n icon,\n action,\n tone = 'info',\n urgency = 'status',\n copyLayout = 'inline',\n actionPlacement = 'trailing',\n presentation = 'card',\n dividerSides = 'b',\n className = '',\n placeholder = false,\n slot,\n}: StateBannerProps) {\n return (\n <section\n class={`kui-state-banner ${className}`.trim()}\n data-component=\"state-banner\"\n data-tone={tone}\n data-copy-layout={copyLayout}\n data-action-placement={actionPlacement}\n data-presentation={presentation}\n divider-sides={\n presentation === 'strip' ? dividerSides || undefined : undefined\n }\n data-placeholder={placeholder ? 'true' : undefined}\n role={urgency}\n aria-live={urgency === 'alert' ? 'assertive' : 'polite'}\n aria-busy={placeholder ? 'true' : undefined}\n slot={slot}\n >\n {icon && <span class=\"kui-state-banner__icon\">{icon}</span>}\n <div class=\"kui-state-banner__copy\">\n <strong>{placeholder ? <Skeleton width={em(10)} /> : title}</strong>\n {badge && (\n <Badge appearance=\"solid\" size=\"compact\" tone={tone}>\n {placeholder ? <Skeleton width={em(1.75)} /> : badge}\n </Badge>\n )}\n {detail && (\n <span class=\"kui-state-banner__detail\">\n <span>{placeholder ? <Skeleton width={em(16)} /> : detail}</span>\n </span>\n )}\n </div>\n {action && <div class=\"kui-state-banner__action\">{action}</div>}\n </section>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/feedback/state-banner/state-banner.tsx"],"names":[],"mappings":";;;;;AAuDO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA,GAAO,MAAA;AAAA,EACP,OAAA,GAAU,QAAA;AAAA,EACV,UAAA,GAAa,QAAA;AAAA,EACb,eAAA,GAAkB,UAAA;AAAA,EAClB,YAAA,GAAe,MAAA;AAAA,EACf,YAAA,GAAe,GAAA;AAAA,EACf,SAAA,GAAY,EAAA;AAAA,EACZ,WAAA,GAAc,KAAA;AAAA,EACd;AACF,CAAA,EAAqB;AACnB,EAAA,uBACE,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAC5C,gBAAA,EAAe,cAAA;AAAA,MACf,WAAA,EAAW,IAAA;AAAA,MACX,kBAAA,EAAkB,UAAA;AAAA,MAClB,uBAAA,EAAuB,eAAA;AAAA,MACvB,mBAAA,EAAmB,YAAA;AAAA,MACnB,eAAA,EACE,YAAA,KAAiB,OAAA,GAAU,YAAA,IAAgB,MAAA,GAAY,MAAA;AAAA,MAEzD,kBAAA,EAAkB,cAAc,MAAA,GAAS,MAAA;AAAA,MACzC,IAAA,EAAM,OAAA;AAAA,MACN,WAAA,EAAW,OAAA,KAAY,OAAA,GAAU,WAAA,GAAc,QAAA;AAAA,MAC/C,WAAA,EAAW,cAAc,MAAA,GAAS,MAAA;AAAA,MAClC,IAAA;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,IAAA,oBAAQ,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,wBAAA,EAA0B,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,wBACpD,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,wBAAA,EACT,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAA,EAAA,EAAQ,wCAAc,GAAA,CAAC,QAAA,EAAA,EAAS,OAAO,EAAA,CAAG,EAAE,CAAA,EAAG,CAAA,GAAK,KAAA,EAAM,CAAA;AAAA,UAC1D,yBACC,GAAA,CAAC,KAAA,EAAA,EAAM,UAAA,EAAW,OAAA,EAAQ,MAAK,SAAA,EAAU,IAAA,EACtC,QAAA,EAAA,WAAA,mBAAc,GAAA,CAAC,YAAS,KAAA,EAAO,EAAA,CAAG,IAAI,CAAA,EAAG,IAAK,KAAA,EACjD,CAAA;AAAA,UAED,0BACC,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,0BAAA,EACV,8BAAC,MAAA,EAAA,EAAM,QAAA,EAAA,WAAA,mBAAc,GAAA,CAAC,QAAA,EAAA,EAAS,OAAO,EAAA,CAAG,EAAE,CAAA,EAAG,CAAA,GAAK,QAAO,CAAA,EAC5D;AAAA,SAAA,EAEJ,CAAA;AAAA,QACC,MAAA,oBAAU,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,4BAA4B,QAAA,EAAA,MAAA,EAAO;AAAA;AAAA;AAAA,GAC3D;AAEJ","file":"chunk-2FW7D4IG.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport type { KerfUiContent } from '../../../shared/content/semantic-content.js';\nimport type { Sides } from '../../../shared/layout/sides.js';\nimport { em } from '../../../shared/styles/css-values.js';\nimport type { SemanticTone } from '../../../shared/styles/semantic-tone.js';\nimport { Badge } from '../badge/badge.js';\nimport { Skeleton } from '../skeleton/skeleton.js';\n\nexport type { SemanticTone } from '../../../shared/styles/semantic-tone.js';\n/** @deprecated Use SemanticTone. */\nexport type StateBannerTone = SemanticTone;\nexport type StateBannerUrgency = 'status' | 'alert';\nexport type StateBannerCopyLayout = 'inline' | 'stacked';\nexport type StateBannerActionPlacement = 'trailing' | 'below';\nexport type StateBannerPresentation = 'card' | 'strip';\n\nexport interface StateBannerProps {\n title: string;\n detail?: string;\n /** Optional compact status or count shown beside the title. */\n badge?: string;\n icon?: SafeHtml;\n action?: KerfUiContent;\n tone?: SemanticTone;\n urgency?: StateBannerUrgency;\n /** Keep the detail beside the title, or give it its own line. */\n copyLayout?: StateBannerCopyLayout;\n /**\n * `trailing` (the default) puts the action beside the copy while the copy\n * keeps its minimum readable width, and otherwise wraps it onto its own\n * end-aligned trailing row, at any viewport or container width. `below`\n * always gives the action that separate trailing row.\n */\n actionPlacement?: StateBannerActionPlacement;\n /**\n * `card` (the default) is an inset, rounded, fully bordered banner beside\n * the affected work. `strip` is a full-width band at a layout edge, such as\n * above a workspace: square corners, no inline margin, inline padding on the\n * shared content-text column, and only the tone-colored `dividerSides` edges.\n */\n presentation?: StateBannerPresentation;\n /**\n * Physical tone-colored divider edges of a `strip`, in canonical\n * top/right/bottom/left order. Defaults to the bottom edge; `''` draws none.\n * A `card` keeps its full border and ignores this.\n */\n dividerSides?: Sides;\n className?: string;\n /** Render the title, badge, and detail as unanimated loading skeletons, keeping the icon and tone. The detail line appears only when `detail` is set, as in the live banner. */\n placeholder?: boolean;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\nexport function StateBanner({\n title,\n detail,\n badge,\n icon,\n action,\n tone = 'info',\n urgency = 'status',\n copyLayout = 'inline',\n actionPlacement = 'trailing',\n presentation = 'card',\n dividerSides = 'b',\n className = '',\n placeholder = false,\n slot,\n}: StateBannerProps) {\n return (\n <section\n class={`kui-state-banner ${className}`.trim()}\n data-component=\"state-banner\"\n data-tone={tone}\n data-copy-layout={copyLayout}\n data-action-placement={actionPlacement}\n data-presentation={presentation}\n divider-sides={\n presentation === 'strip' ? dividerSides || undefined : undefined\n }\n data-placeholder={placeholder ? 'true' : undefined}\n role={urgency}\n aria-live={urgency === 'alert' ? 'assertive' : 'polite'}\n aria-busy={placeholder ? 'true' : undefined}\n slot={slot}\n >\n {icon && <span class=\"kui-state-banner__icon\">{icon}</span>}\n <div class=\"kui-state-banner__copy\">\n <strong>{placeholder ? <Skeleton width={em(10)} /> : title}</strong>\n {badge && (\n <Badge appearance=\"solid\" size=\"compact\" tone={tone}>\n {placeholder ? <Skeleton width={em(1.75)} /> : badge}\n </Badge>\n )}\n {detail && (\n <span class=\"kui-state-banner__detail\">\n <span>{placeholder ? <Skeleton width={em(16)} /> : detail}</span>\n </span>\n )}\n </div>\n {action && <div class=\"kui-state-banner__action\">{action}</div>}\n </section>\n );\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { listIconTilePresentation, nativeDraggable, withWordBreaks } from './chunk-ZNROKDSZ.js';
2
- import { LoadingSpinner } from './chunk-WVS6CUCT.js';
3
2
  import { Skeleton } from './chunk-CVD5IZGB.js';
3
+ import { LoadingSpinner } from './chunk-WVS6CUCT.js';
4
4
  import { remify, em } from './chunk-IQSRHXZR.js';
5
5
  import { filterDataAttributes } from './chunk-KH4KEMSP.js';
6
6
  import { jsx, jsxs, Fragment } from 'kerfjs/jsx-runtime';
@@ -227,4 +227,4 @@ function ListItemLink({
227
227
 
228
228
  export { ListItem, ListItemLink };
229
229
 
230
- //# sourceMappingURL=chunk-ZYU5WRC3.js.map
230
+ //# sourceMappingURL=chunk-3GLYIIFR.js.map