@kerfjs/ui 5.0.0-beta.104 → 5.0.0-beta.106

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 (758) hide show
  1. package/README.md +155 -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 -628
  5. package/ai/component-composition-rules.json +10 -10
  6. package/ai/component-composition.json +1688 -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/{token-search-field.md → search-field.md} +23 -23
  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 +1579 -247
  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-T5BJBMW7.js → chunk-CIAUILRR.js} +5 -5
  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-CR5U5FV6.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-ZJC5ND3M.js → chunk-VEME3D7K.js} +35 -35
  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-JA1i8z4D.d.ts → search-field-CrGTN5sa.d.ts} +45 -45
  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 +10 -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 +10 -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 +228 -164
  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 +127 -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/dist/app-tab.js +0 -6
  690. package/dist/app-tab.js.map +0 -1
  691. package/dist/browser/app-tab.js +0 -4
  692. package/dist/browser/composer.js +0 -4
  693. package/dist/browser/icon-toggle-button.js +0 -4
  694. package/dist/browser/token-search-field.js +0 -4
  695. package/dist/chunk-2MSPNRWJ.js.map +0 -1
  696. package/dist/chunk-7IUEBNCO.js.map +0 -1
  697. package/dist/chunk-AV7CPAPT.js +0 -82
  698. package/dist/chunk-AV7CPAPT.js.map +0 -1
  699. package/dist/chunk-BYFTHA4I.js.map +0 -1
  700. package/dist/chunk-CA7LNX3J.js +0 -44
  701. package/dist/chunk-CA7LNX3J.js.map +0 -1
  702. package/dist/chunk-CR5U5FV6.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-JOR5LGYE.js.map +0 -1
  711. package/dist/chunk-K4AT3V3J.js.map +0 -1
  712. package/dist/chunk-LL45C7BB.js.map +0 -1
  713. package/dist/chunk-LOSRXZAH.js.map +0 -1
  714. package/dist/chunk-LPHU44S3.js.map +0 -1
  715. package/dist/chunk-M5KZ26VV.js.map +0 -1
  716. package/dist/chunk-MXNIVEVL.js.map +0 -1
  717. package/dist/chunk-NS762OVM.js +0 -222
  718. package/dist/chunk-NS762OVM.js.map +0 -1
  719. package/dist/chunk-QTSMHH5J.js.map +0 -1
  720. package/dist/chunk-T5BJBMW7.js.map +0 -1
  721. package/dist/chunk-TDMHA7C3.js.map +0 -1
  722. package/dist/chunk-TGLUDQP2.js.map +0 -1
  723. package/dist/chunk-U6QYTMDB.js.map +0 -1
  724. package/dist/chunk-VFYO3UGZ.js +0 -45
  725. package/dist/chunk-VFYO3UGZ.js.map +0 -1
  726. package/dist/chunk-W4IK7AWD.js.map +0 -1
  727. package/dist/chunk-YBWQR2OK.js.map +0 -1
  728. package/dist/chunk-ZJC5ND3M.js.map +0 -1
  729. package/dist/composer.js +0 -5
  730. package/dist/composer.js.map +0 -1
  731. package/dist/icon-button.d.ts +0 -46
  732. package/dist/icon-button.js +0 -6
  733. package/dist/icon-button.js.map +0 -1
  734. package/dist/icon-toggle-button.d.ts +0 -42
  735. package/dist/icon-toggle-button.js +0 -6
  736. package/dist/icon-toggle-button.js.map +0 -1
  737. package/dist/styles/components/actions/icon-button/icon-button.css +0 -22
  738. package/dist/styles/components/actions/icon-toggle-button/icon-toggle-button.css +0 -83
  739. package/dist/styles/icon-button.css +0 -22
  740. package/dist/styles/icon-toggle-button.css +0 -83
  741. package/dist/token-search-field.d.ts +0 -3
  742. package/dist/token-search-field.js +0 -5
  743. package/dist/token-search-field.js.map +0 -1
  744. package/dist/token-search-model.d.ts +0 -3
  745. package/dist/token-search-model.js +0 -3
  746. package/dist/token-search-model.js.map +0 -1
  747. package/dist/wire-composers.js +0 -3
  748. package/dist/wire-token-search-fields.js +0 -6
  749. package/docs/design/templates/composer/chat-dark.svg +0 -1
  750. package/docs/design/templates/composer/chat.svg +0 -1
  751. package/docs/design/templates/composer-dark.svg +0 -1
  752. package/docs/design/templates/composer.svg +0 -1
  753. /package/docs/design/templates/{token-search-field → search-field}/empty-dark.svg +0 -0
  754. /package/docs/design/templates/{token-search-field → search-field}/empty.svg +0 -0
  755. /package/docs/design/templates/{token-search-field → search-field}/tokens-dark.svg +0 -0
  756. /package/docs/design/templates/{token-search-field → search-field}/tokens.svg +0 -0
  757. /package/docs/design/templates/{token-search-field-dark.svg → search-field-dark.svg} +0 -0
  758. /package/docs/design/templates/{token-search-field.svg → search-field.svg} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/forms/select/select.tsx"],"names":[],"mappings":"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","file":"chunk-NS762OVM.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport type { KerfUiContent } from '../../../shared/content/semantic-content.js';\nimport {\n type CssForegroundColor,\n em,\n} from '../../../shared/styles/css-values.js';\nimport { Badge } from '../../feedback/badge/badge.js';\nimport { Skeleton } from '../../feedback/skeleton/skeleton.js';\nimport {\n LucideIcon,\n type LucideNode,\n} from '../../media/lucide-icon/lucide-icon.js';\n\nexport interface SelectChoice<Value extends string = string> {\n value: Value;\n label: string;\n icon?: LucideNode;\n iconName?: string;\n /**\n * Foreground color for the optional icon: a semantic foreground token such\n * as `uiColor('success-on-quiet')`, or an application-owned\n * `foregroundColorVar('--app-icon-color')`. Fill tokens such as\n * `uiColor('success-fill-quiet')` are pale background tints and do not\n * type-check.\n */\n color?: CssForegroundColor;\n group?: string;\n /** Keep an unavailable choice visible but prevent selection. */\n disabled?: boolean;\n /** Optional explanation exposed as the disabled option's native tooltip. */\n disabledReason?: string;\n /**\n * Draw a divider between this choice and the previous choice in the same\n * list. A group boundary is already a separator, so the first choice of a\n * group (or of the whole menu) never draws a second one.\n */\n separatorBefore?: boolean;\n}\n\ntype SelectAccessibleName =\n { label: string; ariaLabel?: string } | { label?: never; ariaLabel: string };\n\nexport type SelectPresentation =\n 'form' | 'toolbar-borderless' | 'navigation' | 'inline' | 'title';\nexport type SelectSize = 'default' | 'compact';\nexport type SelectSelectedPresentation = 'label' | 'icon-only';\nexport type SelectFocusRingOwner = 'select' | 'group';\nexport type SelectTriggerWidth = 'fit-content' | 'max-content' | 'fill';\n\ninterface SelectBaseProps<Value extends string = string> {\n name: string;\n choices: readonly SelectChoice<Value>[];\n className?: string;\n /** Empty-value hint text shown in the closed control (the native select placeholder). */\n placeholderText?: string;\n /** Supporting text shown below the control and associated with its combobox. */\n hint?: string;\n disabled?: boolean;\n /** Match menu width to the trigger; default menus grow to content within viewport gutters. */\n fitMenu?: boolean;\n /** Render as an unanimated loading skeleton: the label above a static, empty control box. */\n placeholder?: boolean;\n /** Form (default), borderless toolbar, intrinsic navigation, inline, or view-title chrome. */\n presentation?: SelectPresentation;\n size?: SelectSize;\n /** Closed trigger width; omit to keep the presentation's default. */\n triggerWidth?: SelectTriggerWidth;\n /** Show the disclosure caret (default); omit it for a compact icon-only trigger. */\n caret?: boolean;\n /** Let an enclosing ToolbarControlGroup paint the composed focus ring. */\n focusRingOwner?: SelectFocusRingOwner;\n /** Keep the trigger's focus ring inside its box when an ancestor clips overflow. */\n focusRingInset?: boolean;\n /** Maximum closed-control label width in CSS pixels before ellipsis. */\n labelMaxWidth?: number;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\n/** One chosen value (the default). */\nexport interface SelectSingleValueProps<Value extends string = string> {\n multiple?: false;\n value: NoInfer<Value>;\n renderSelected?: (choice: SelectChoice<Value>) => SafeHtml;\n /** Show only the selected choice icon while retaining the Select's accessible name. */\n selectedPresentation?: SelectSelectedPresentation;\n triggerIcon?: never;\n selectAllLabel?: never;\n clearLabel?: never;\n}\n\n/**\n * Any number of chosen values. The popup stays open while the person toggles\n * choices and closes on an outside click, Escape, or focus leaving; the closed\n * control summarizes the chosen labels in choice order.\n */\nexport interface SelectMultipleLabelProps<Value extends string = string> {\n multiple: true;\n value: readonly NoInfer<Value>[];\n renderSelected?: never;\n selectedPresentation?: 'label';\n triggerIcon?: never;\n /** Opt in to a footer action that selects every enabled choice. */\n selectAllLabel?: string;\n /** Opt in to a footer action that clears the current selection. */\n clearLabel?: string;\n}\n\n/**\n * A multiple Select drawn as an icon-only toolbar trigger, such as a\n * \"Filter by label\" funnel. No single choice is selected, so the trigger shows\n * a fixed `triggerIcon` naming the menu's purpose; while any choice is chosen\n * a count badge sits beside it, and the combobox's accessible name ends with\n * the chosen labels in choice order.\n */\nexport interface SelectMultipleIconProps<Value extends string = string> {\n multiple: true;\n value: readonly NoInfer<Value>[];\n renderSelected?: never;\n selectedPresentation: 'icon-only';\n /**\n * The trigger's fixed icon, typically a `LucideIcon` naming the menu's\n * purpose (a funnel for a filter), independent of the selection.\n */\n triggerIcon: KerfUiContent;\n /** Opt in to a footer action that selects every enabled choice. */\n selectAllLabel?: string;\n /** Opt in to a footer action that clears the current selection. */\n clearLabel?: string;\n}\n\nexport type SelectMultipleValueProps<Value extends string = string> =\n SelectMultipleLabelProps<Value> | SelectMultipleIconProps<Value>;\n\nexport type SelectProps<Value extends string = string> =\n SelectBaseProps<Value> &\n SelectAccessibleName &\n (SelectSingleValueProps<Value> | SelectMultipleValueProps<Value>);\n\n// The closed wa-select's disclosure glyph: Web Awesome's system `chevron-down`,\n// Font Awesome Free 7.0.0 by @fontawesome (https://fontawesome.com), licensed\n// CC BY 4.0 (https://fontawesome.com/license/free). The placeholder draws the\n// same path so the loading box matches the live control without registering\n// Web Awesome.\nfunction SelectChevron() {\n return (\n <svg viewBox=\"0 0 448 512\" aria-hidden=\"true\">\n <path d=\"M201.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 338.7 54.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z\" />\n </svg>\n );\n}\n\nexport function Select<Value extends string>(props: SelectProps<Value>) {\n const {\n name,\n label,\n ariaLabel,\n choices,\n className = '',\n placeholderText,\n hint,\n disabled = false,\n fitMenu = false,\n placeholder = false,\n presentation = 'form',\n size = 'default',\n triggerWidth,\n caret = true,\n focusRingOwner = 'select',\n focusRingInset = false,\n labelMaxWidth,\n slot,\n } = props;\n const multiple = props.multiple === true;\n const values: readonly Value[] = props.multiple ? props.value : [props.value];\n const renderSelected = props.multiple ? undefined : props.renderSelected;\n const selectedPresentation: SelectSelectedPresentation =\n props.selectedPresentation ?? 'label';\n // A multiple icon-only trigger shows a fixed icon naming the menu's\n // purpose instead of a selected choice's icon.\n const iconTrigger =\n props.multiple && props.selectedPresentation === 'icon-only';\n const triggerIcon = iconTrigger ? props.triggerIcon : undefined;\n if (placeholder) {\n return (\n <div\n class={`kui-select kui-select--placeholder ${className}`.trim()}\n data-component=\"select\"\n data-placeholder=\"true\"\n data-presentation={presentation}\n data-size={size}\n data-trigger-width={triggerWidth}\n data-caret={caret ? undefined : 'false'}\n data-selected-presentation={selectedPresentation}\n data-focus-ring-owner={focusRingOwner}\n data-focus-ring-inset={focusRingInset ? 'true' : undefined}\n aria-busy=\"true\"\n style={\n labelMaxWidth === undefined\n ? undefined\n : `--kui-select-label-max-width:${labelMaxWidth}px`\n }\n slot={slot}\n >\n {label && <span class=\"kui-select__placeholder-label\">{label}</span>}\n <span\n class=\"kui-select__placeholder-box\"\n aria-label={ariaLabel}\n role=\"img\"\n >\n <Skeleton width={em(10)} />\n <span class=\"kui-select__placeholder-chevron\" aria-hidden=\"true\">\n <SelectChevron />\n </span>\n </span>\n {hint && <span class=\"kui-select__placeholder-hint\">{hint}</span>}\n </div>\n );\n }\n // A multiple Select summarizes its choices in the display text instead of\n // leading with one selected icon.\n const selected = multiple\n ? undefined\n : choices.find((choice) => choice.value === values[0] && !choice.disabled);\n const chosenCount = iconTrigger\n ? choices.filter(\n (choice) => !choice.disabled && values.includes(choice.value),\n ).length\n : 0;\n const icon = (choice: SelectChoice<Value>, selectedIcon = false) => (\n <span\n data-key={`${name}:${choice.value}:${selectedIcon ? 'selected' : 'option'}`}\n data-morph-skip\n slot=\"start\"\n class={`kui-select__icon${selectedIcon ? ' kui-select__icon--selected' : ''}`}\n style={choice.color ? `color:${choice.color}` : undefined}\n >\n {choice.icon ? (\n <LucideIcon\n icon={choice.icon}\n name={\n choice.iconName ?? choice.label.toLowerCase().replaceAll(' ', '-')\n }\n />\n ) : null}\n </span>\n );\n const option = (choice: SelectChoice<Value>, index: number) => (\n <>\n {/* Web Awesome sets the divider's role and aria-orientation on its\n host once, so a template that omits them would lose them to the\n next kerf re-render's morph for good. Render them explicitly, with\n the orientation it reflects (see the wa-select note below). */}\n {choice.separatorBefore && index > 0 && (\n <wa-divider\n orientation=\"horizontal\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n />\n )}\n <wa-option\n value={choice.value}\n selected={multiple && !choice.disabled && values.includes(choice.value)}\n disabled={choice.disabled}\n title={choice.disabled ? choice.disabledReason : undefined}\n >\n {choice.icon ? icon(choice) : null}\n {choice.label}\n </wa-option>\n </>\n );\n const groups = [\n ...new Set(\n choices\n .map((choice) => choice.group)\n .filter((group): group is string => Boolean(group)),\n ),\n ];\n const ungrouped = choices.filter((choice) => !choice.group);\n // Web Awesome names its shadow combobox from the label, not the host's\n // aria-label. Keep ariaLabel-only names available without visible chrome.\n // A multiple Select's value is its selected options (the value attribute\n // holds only one string), kept in sync by @kerfjs/ui/select/register.\n // size/appearance/placement are Web Awesome's defaults, which it reflects\n // onto the host; rendering them keeps a re-render's morph from stripping\n // them and forcing a Lit update to put them back.\n return (\n <wa-select\n size=\"m\"\n appearance=\"outlined\"\n placement=\"bottom\"\n class={`kui-select${renderSelected ? ' kui-select--custom-selected' : ''}${fitMenu ? ' kui-select--fit-menu' : ''}${!label ? ' kui-select--label-hidden' : ''} ${className}`.trim()}\n data-component=\"select\"\n data-presentation={presentation}\n data-size={size}\n data-trigger-width={triggerWidth}\n data-caret={caret ? undefined : 'false'}\n data-selected-presentation={selectedPresentation}\n data-focus-ring-owner={focusRingOwner}\n data-focus-ring-inset={focusRingInset ? 'true' : undefined}\n name={name}\n label={label || ariaLabel}\n aria-label={ariaLabel}\n multiple={multiple}\n value={multiple ? undefined : values[0]}\n placeholder={placeholderText}\n hint={hint}\n disabled={disabled}\n style={\n labelMaxWidth === undefined\n ? undefined\n : `--kui-select-label-max-width:${labelMaxWidth}px`\n }\n slot={slot}\n >\n {iconTrigger && (\n <>\n {/* The accessible name ends with the chosen labels, which\n @kerfjs/ui/select/register writes into the summary. */}\n <span slot=\"label\" data-key={`${name}:trigger-label`}>\n {label || ariaLabel}\n <span class=\"kui-select__name-summary\" data-morph-skip />\n </span>\n <span\n data-key={`${name}:trigger-icon`}\n slot=\"start\"\n class=\"kui-select__icon kui-select__icon--selected kui-select__trigger-icon\"\n >\n {triggerIcon}\n </span>\n {chosenCount > 0 && (\n <Badge slot=\"end\" tone=\"info\" size=\"compact\" ariaHidden>\n {chosenCount}\n </Badge>\n )}\n </>\n )}\n {selected &&\n (renderSelected ? (\n <span\n data-key={`${name}:${values[0]}:custom-selected`}\n slot=\"start\"\n class=\"kui-select__custom-selected\"\n >\n <span class=\"kui-select__custom-selected-content\">\n {renderSelected(selected)}\n </span>\n </span>\n ) : selected.icon ? (\n icon(selected, true)\n ) : null)}\n {ungrouped.map(option)}\n {groups.map((group, index) => (\n <div\n class={`kui-select__group${index > 0 || ungrouped.length > 0 ? ' kui-select__group--separated' : ''}`}\n role=\"group\"\n aria-label={group}\n >\n <span class=\"kui-select__group-title\">{group}</span>\n {choices.filter((choice) => choice.group === group).map(option)}\n </div>\n ))}\n {props.multiple && (props.selectAllLabel || props.clearLabel) && (\n <div\n class=\"kui-select__actions\"\n role=\"group\"\n aria-label={label || ariaLabel}\n >\n {props.selectAllLabel && (\n <button\n class=\"kui-select__action\"\n type=\"button\"\n data-select-action=\"all\"\n >\n {props.selectAllLabel}\n </button>\n )}\n {props.clearLabel && (\n <button\n class=\"kui-select__action\"\n type=\"button\"\n data-select-action=\"clear\"\n >\n {props.clearLabel}\n </button>\n )}\n </div>\n )}\n </wa-select>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/surfaces/surface-scaffold/internal/sheet-handle.ts"],"names":[],"mappings":"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","file":"chunk-QTSMHH5J.js","sourcesContent":["/**\n * The bottom-sheet resize grabber shared by `DialogSurface` and the core\n * `kerfjs/overlay` sheets `wireOverlaySheets` wires: a `role=\"separator\"`\n * that resizes a sheet's visible height by drag or keyboard, between the\n * sheet's computed `min-height` and `max-height`, and reports that height in\n * its ARIA values. The sheet's height rule reads the published property and\n * adds back its block-end clearance.\n */\n\n/** Arrow-key step, and the Page Up/Down step, in px. */\nconst STEP = 16;\nconst PAGE_STEP = 64;\n\n/** Where a grabber reads its bounds and publishes the resized height. */\nexport interface SheetHandleTarget {\n /** The sheet whose border box is measured and bounded, read at each event. */\n panel: HTMLElement;\n /** The element the visible height is published on (the panel or an ancestor). */\n host: HTMLElement;\n /** The custom property holding the visible height. */\n property: string;\n /** False while the sheet is not resizable: input is ignored. */\n enabled: () => boolean;\n}\n\n/** Create an unattached grabber element with its separator semantics. */\nexport function createSheetHandle(\n attributes: Record<string, string>,\n): HTMLElement {\n const handle = document.createElement('div');\n for (const [name, value] of Object.entries(attributes))\n handle.setAttribute(name, value);\n handle.setAttribute('role', 'separator');\n handle.setAttribute('aria-orientation', 'horizontal');\n handle.setAttribute('aria-label', 'Resize sheet');\n handle.tabIndex = 0;\n return handle;\n}\n\n/** Wire a grabber's focus, keyboard, and pointer resizing. Returns a disposer. */\nexport function wireSheetHandle(\n handle: HTMLElement,\n target: SheetHandleTarget,\n): () => void {\n const onFocus = (): void => syncSheetHandleValues(handle, target.panel);\n const onKeydown = (event: KeyboardEvent): void => {\n if (!target.enabled()) return;\n const { min, max } = bounds(target.panel);\n const current = target.panel.getBoundingClientRect().height;\n const next = {\n ArrowUp: current + STEP,\n ArrowDown: current - STEP,\n PageUp: current + PAGE_STEP,\n PageDown: current - PAGE_STEP,\n Home: min,\n End: max,\n }[event.key];\n if (next === undefined) return;\n event.preventDefault();\n resizeTo(handle, target, next);\n };\n const onPointerdown = (event: PointerEvent): void => {\n if (!target.enabled() || event.button !== 0) return;\n event.preventDefault();\n const startY = event.clientY;\n const start = target.panel.getBoundingClientRect().height;\n handle.setPointerCapture?.(event.pointerId);\n const move = (moveEvent: PointerEvent): void =>\n resizeTo(handle, target, start - (moveEvent.clientY - startY));\n const end = (): void => {\n handle.removeEventListener('pointermove', move);\n handle.removeEventListener('pointerup', end);\n handle.removeEventListener('pointercancel', end);\n };\n handle.addEventListener('pointermove', move);\n handle.addEventListener('pointerup', end);\n handle.addEventListener('pointercancel', end);\n };\n handle.addEventListener('focus', onFocus);\n handle.addEventListener('keydown', onKeydown);\n handle.addEventListener('pointerdown', onPointerdown);\n return () => {\n handle.removeEventListener('focus', onFocus);\n handle.removeEventListener('keydown', onKeydown);\n handle.removeEventListener('pointerdown', onPointerdown);\n };\n}\n\n/** The panel's resolved border-box bounds and block-end clearance, in px. */\nfunction bounds(panel: HTMLElement): {\n min: number;\n max: number;\n clearance: number;\n} {\n const style = globalThis.getComputedStyle(panel);\n const clearance = parseFloat(style.paddingBlockEnd) || 0;\n const min = parseFloat(style.minHeight) || 0;\n const max = parseFloat(style.maxHeight);\n return {\n min,\n max: Number.isFinite(max) ? max : globalThis.innerHeight,\n clearance,\n };\n}\n\n/** Resize to a border-box height, published as the visible height above the clearance. */\nfunction resizeTo(\n handle: Element,\n target: SheetHandleTarget,\n height: number,\n): void {\n const { panel, host, property } = target;\n const { min, max, clearance } = bounds(panel);\n const clamped = Math.min(max, Math.max(min, Math.round(height)));\n host.style.setProperty(property, `${Math.max(0, clamped - clearance)}px`);\n syncSheetHandleValues(handle, panel, clamped);\n}\n\n/** Separator values in visible (content) px, as a ResizableRegion reports them. */\nexport function syncSheetHandleValues(\n handle: Element,\n panel: HTMLElement,\n height = panel.getBoundingClientRect().height,\n): void {\n const { min, max, clearance } = bounds(panel);\n const visible = (value: number) =>\n String(Math.max(0, Math.round(value - clearance)));\n handle.setAttribute('aria-valuemin', visible(min));\n handle.setAttribute('aria-valuemax', visible(max));\n handle.setAttribute('aria-valuenow', visible(height));\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/forms/token-search-field/model/token-search-model.ts"],"names":["commit"],"mappings":"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","file":"chunk-T5BJBMW7.js","sourcesContent":["import {\n batch,\n computed,\n type ReadonlySignal,\n type Signal,\n signal,\n} from 'kerfjs';\n\nimport type {\n TokenSearchFieldValue,\n TokenSearchToken,\n} from '../token-search-field.js';\n\nexport interface TokenSearchRule {\n /** The word before `:` (for example `tag` or `status`). */\n name: string;\n /** Return a canonical value, or undefined to leave invalid input as text. */\n parse?: (input: string) => string | undefined;\n /** Label for a committed chip. Defaults to `name:input`. */\n label?: (value: string, input: string) => string;\n /** Suggestions for the unfinished value after `name:`, with current committed tokens. */\n suggest?: (\n input: string,\n state: TokenSearchState,\n ) => readonly (string | { value: string; label: string })[];\n}\n\nexport interface TokenSearchResolvedToken extends TokenSearchToken {\n kind: string;\n parsedValue: string;\n}\n\nexport interface TokenSearchState {\n query: string;\n tokens: TokenSearchResolvedToken[];\n}\n\nexport interface TokenSearchSuggestion {\n value: string;\n label: string;\n}\n\n/**\n * The render-relevant shape of a managed field: everything a host render\n * needs to re-run for. Plain text edits do not change it.\n */\nexport interface TokenSearchStructure {\n /** Whether the free text is non-empty (drives clear, placeholder, and collapsed state). */\n hasQuery: boolean;\n /** Committed token values in editor order. */\n tokenValues: readonly string[];\n /** The model's editor revision (programmatic text replacement). */\n editorRevision: number;\n}\n\nexport interface TokenSearchModel<Result = unknown> {\n /**\n * The live query and tokens. Changes on every keystroke: read it with\n * `.peek()` (or in an event handler) to avoid subscribing a render per key.\n */\n state: Signal<TokenSearchState>;\n /** Changes when a model action must replace DOM-owned editor text. */\n editorRevision: Signal<number>;\n /**\n * Changes only on structural edits (a token committed, removed, or\n * reordered; the text becoming empty or non-empty; an editor revision), and\n * keeps the same reference otherwise. `TokenSearchField` subscribes to this\n * instead of `state`, so typing does not re-run the host render.\n */\n structure: ReadonlySignal<TokenSearchStructure>;\n /** Visible suggestions. Publishes only when the list's content changes. */\n suggestions: Signal<readonly TokenSearchSuggestion[]>;\n result: Signal<Result | undefined>;\n edit(value: TokenSearchFieldValue, commit?: boolean): void;\n /** Replace app-owned search state and rebuild the DOM-owned editor text. */\n replace(value: TokenSearchFieldValue): void;\n submit(value: TokenSearchFieldValue): void;\n choose(value: string): void;\n /** Commit a value for the active `name:` prefix, even when it is not suggested. */\n commit(value: string): void;\n expandToken(value: string): void;\n remove(value: string): void;\n clear(): void;\n dismiss(): void;\n}\n\nexport interface TokenSearchModelOptions<Result> {\n rules?: readonly TokenSearchRule[];\n initial?: TokenSearchFieldValue;\n /** Runs after every state change, including initial state. */\n evaluate?: (state: TokenSearchState) => Result;\n onSubmit?: (state: TokenSearchState, result: Result | undefined) => void;\n}\n\nconst escapePattern = (text: string) =>\n text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\nconst quote = (text: string) =>\n /[\\s()\"\\\\]/.test(text)\n ? `\"${text.replaceAll('\\\\', '\\\\\\\\').replaceAll('\"', '\\\\\"')}\"`\n : text;\nconst unquote = (text: string) =>\n text.startsWith('\"') && text.endsWith('\"')\n ? text.slice(1, -1).replace(/\\\\([\"\\\\])/g, '$1')\n : text;\n\n/** Opt-in state, token parsing, suggestions, and evaluation for TokenSearchField. */\nexport function createTokenSearchModel<Result = unknown>({\n rules = [],\n initial = { query: '', tokens: [] },\n evaluate,\n onSubmit,\n}: TokenSearchModelOptions<Result> = {}): TokenSearchModel<Result> {\n const byName = new Map(rules.map((rule) => [rule.name.toLowerCase(), rule]));\n if (\n byName.size !== rules.length ||\n rules.some((rule) => !/^[\\w-]+$/.test(rule.name))\n )\n throw new Error('Token search rule names must be unique words');\n const names = [...byName.keys()].map(escapePattern).join('|');\n const pattern = names\n ? new RegExp(\n `(?:^|[\\\\s(])((?:${names}):(?:\"(?:\\\\\\\\.|[^\"])*\"|[^\"\\\\s()][^\\\\s()]*))(?=$|[\\\\s)])`,\n 'gi',\n )\n : undefined;\n const activePattern = names\n ? new RegExp(\n `(?:^|[\\\\s(])((?:${names}):(?:\"(?:\\\\\\\\.|[^\"])*|[^\\\\s()]*))$`,\n 'i',\n )\n : undefined;\n\n const resolve = (\n raw: string,\n offset: number,\n ): TokenSearchResolvedToken | undefined => {\n const separator = raw.indexOf(':');\n const kind = raw.slice(0, separator).toLowerCase();\n const rule = byName.get(kind);\n if (!rule || separator < 0) return;\n const input = unquote(raw.slice(separator + 1));\n if (!input) return;\n const parsedValue = rule.parse ? rule.parse(input) : input;\n if (parsedValue === undefined) return;\n return {\n kind,\n parsedValue,\n value: `${kind}:${quote(input)}`,\n label: rule.label?.(parsedValue, input) ?? `${kind}:${input}`,\n offset,\n };\n };\n\n const rehydrate = (\n token: TokenSearchToken,\n ): TokenSearchResolvedToken | undefined => {\n const resolved = resolve(token.value, token.offset ?? 0);\n return resolved ? { ...resolved, ...token } : undefined;\n };\n\n const state = signal<TokenSearchState>({\n query: initial.query,\n tokens: initial.tokens.flatMap((token) => {\n const resolved = rehydrate(token);\n return resolved ? [resolved] : [];\n }),\n });\n const editorRevision = signal(0);\n let lastStructure: TokenSearchStructure | undefined;\n const structure = computed<TokenSearchStructure>(() => {\n const { query, tokens } = state.value;\n const next: TokenSearchStructure = {\n hasQuery: query.length > 0,\n tokenValues: tokens.map((token) => token.value),\n editorRevision: editorRevision.value,\n };\n if (\n lastStructure?.hasQuery === next.hasQuery &&\n lastStructure.editorRevision === next.editorRevision &&\n lastStructure.tokenValues.length === next.tokenValues.length &&\n lastStructure.tokenValues.every(\n (value, index) => value === next.tokenValues[index],\n )\n )\n return lastStructure;\n return (lastStructure = next);\n });\n const suggestions = signal<readonly TokenSearchSuggestion[]>([]);\n const result = signal<Result | undefined>(evaluate?.(state.peek()));\n let activeStart: number | undefined;\n let activeRule: TokenSearchRule | undefined;\n\n const refreshSuggestions = () => {\n const match = activePattern?.exec(state.peek().query);\n const raw = match?.[1];\n const separator = raw?.indexOf(':') ?? -1;\n const rule =\n separator < 0\n ? undefined\n : byName.get(raw!.slice(0, separator).toLowerCase());\n activeRule = rule;\n const input = separator < 0 ? '' : unquote(raw!.slice(separator + 1));\n activeStart =\n match && raw ? match.index + match[0].lastIndexOf(raw) : undefined;\n const next = (rule?.suggest?.(input, state.peek()) ?? []).flatMap(\n (candidate) => {\n const value =\n typeof candidate === 'string' ? candidate : candidate.value;\n const token = resolve(`${rule!.name}:${quote(value)}`, 0);\n return token\n ? [\n {\n value: token.value,\n label:\n typeof candidate === 'string' ? token.label : candidate.label,\n },\n ]\n : [];\n },\n );\n const current = suggestions.peek();\n if (\n next.length !== current.length ||\n next.some(\n (suggestion, index) =>\n suggestion.value !== current[index].value ||\n suggestion.label !== current[index].label,\n )\n )\n suggestions.value = next;\n };\n const publish = (next: TokenSearchState) =>\n batch(() => {\n state.value = next;\n result.value = evaluate?.(next);\n refreshSuggestions();\n });\n refreshSuggestions();\n\n const edit = (value: TokenSearchFieldValue, commit = false) => {\n let query = '';\n let cursor = 0;\n const added: TokenSearchResolvedToken[] = [];\n const removed: Array<{ start: number; end: number }> = [];\n for (const match of value.query.matchAll(pattern ?? /(?!) /g)) {\n const raw = match[1];\n const start = match.index + match[0].lastIndexOf(raw);\n const end = start + raw.length;\n if (end === value.query.length && !commit && !/\\s$/.test(value.query))\n continue;\n const token = resolve(raw, query.length + start - cursor);\n if (!token) continue;\n query += value.query.slice(cursor, start);\n token.offset = query.length;\n added.push(token);\n removed.push({ start, end });\n cursor = end;\n }\n const suffix = value.query.slice(cursor);\n query += added.length && /^\\s+$/.test(suffix) ? '' : suffix;\n const existing = value.tokens.flatMap((token) => {\n const resolved = rehydrate(token);\n if (!resolved) return [];\n const offset = token.offset ?? value.query.length;\n return [\n {\n ...resolved,\n offset:\n offset -\n removed.reduce(\n (total, range) =>\n total + Math.max(0, Math.min(offset, range.end) - range.start),\n 0,\n ),\n },\n ];\n });\n const tokens = [...existing, ...added].sort(\n (left, right) => (left.offset ?? 0) - (right.offset ?? 0),\n );\n publish({ query, tokens });\n };\n\n const commitResolved = (token: TokenSearchResolvedToken | undefined) => {\n if (!token || activeStart === undefined) return;\n const query = state.peek().query.slice(0, activeStart);\n publish({ query, tokens: [...state.peek().tokens, token] });\n };\n const choose = (value: string) => {\n if (\n activeStart === undefined ||\n !suggestions.peek().some((suggestion) => suggestion.value === value)\n )\n return;\n commitResolved(resolve(value, activeStart));\n };\n const commit = (value: string) => {\n if (!activeRule || activeStart === undefined) return;\n commitResolved(resolve(`${activeRule.name}:${quote(value)}`, activeStart));\n };\n\n return {\n state,\n editorRevision,\n structure,\n suggestions,\n result,\n edit,\n replace(value) {\n batch(() => {\n edit(value);\n editorRevision.value = editorRevision.peek() + 1;\n });\n },\n submit(value) {\n edit(value, true);\n onSubmit?.(state.peek(), result.peek());\n },\n choose,\n commit,\n expandToken(value) {\n const index = state\n .peek()\n .tokens.findIndex((token) => token.value === value);\n if (index < 0) return;\n const offset = Math.max(\n 0,\n Math.min(\n state.peek().query.length,\n state.peek().tokens[index].offset ?? state.peek().query.length,\n ),\n );\n const insertion = `${value} `;\n publish({\n query: `${state.peek().query.slice(0, offset)}${insertion}${state.peek().query.slice(offset)}`,\n tokens: state.peek().tokens.flatMap((token, at) =>\n at === index\n ? []\n : [\n {\n ...token,\n offset:\n (token.offset ?? 0) + (at > index ? insertion.length : 0),\n },\n ],\n ),\n });\n },\n remove(value) {\n const index = state\n .peek()\n .tokens.findIndex((token) => token.value === value);\n if (index < 0) return;\n publish({\n ...state.peek(),\n tokens: state.peek().tokens.filter((_, at) => at !== index),\n });\n },\n clear() {\n batch(() => {\n publish({ query: '', tokens: [] });\n editorRevision.value = editorRevision.peek() + 1;\n });\n },\n dismiss() {\n if (suggestions.peek().length > 0) suggestions.value = [];\n },\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/integrations/webawesome/help-tags/install-help-tag.ts"],"names":[],"mappings":"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","file":"chunk-TDMHA7C3.js","sourcesContent":["// Hover and keyboard-focus help tags for icon-only controls.\n//\n// An icon-only `Select` (single `selectedPresentation=\"icon-only\"` or the\n// multiple `triggerIcon` filter), an icon-only `PopupMenu` (a `label` instead\n// of visible `text`), and an icon-only `<button>` or link inside a\n// `ToolbarControlGroup` (named only by `aria-label`) carry their purpose — and\n// a Select its current choice — only in the accessible name. Sighted pointer\n// and keyboard users see just the icon, so the registration boundary shows a\n// Web Awesome `wa-tooltip` naming the control (Apple HIG \"help tag\"):\n//\n// - after a short hover delay, or immediately when a previous tag just closed\n// (moving along a toolbar), and at once on keyboard (`:focus-visible`) focus;\n// - never while the control's popup is open, and not again after a press or\n// Escape until the pointer or focus leaves and returns;\n// - with the same text the accessible name already announces, so the tag is\n// `aria-hidden` and never joins the control's `aria-labelledby` (a manual\n// trigger with a programmatic anchor, not `for`, so Web Awesome does not\n// add it) — assistive technology hears the name once.\n//\n// A Select's or PopupMenu's tag lives in the control's open shadow root, so\n// the morph never sees it, `:has([open])` selectors on the light DOM ignore\n// it, and it inherits the control's theme. A plain button cannot host a shadow\n// root, so its tag lives in one body-level layer (re-attached if a body morph\n// drops it, and removed again once hidden) and copies the button's\n// `color-scheme`; the tag's Popover-API popup renders in the top layer, so its\n// place in the document does not affect where or above what it shows. A\n// button that already has a native `title`, or a Web Awesome tooltip `for` it,\n// keeps that and gets no second tag. Each tag's own lifecycle events stop at\n// the tag so an application listening for the control's `wa-show` / `wa-hide`\n// never hears the tag's.\n\n/** Hover delay before a help tag appears. */\nexport const HELP_TAG_SHOW_DELAY = 500;\n/** After a tag closes, a neighboring trigger shows its tag at once for this long. */\nexport const HELP_TAG_WARM_WINDOW = 400;\n/** A tag shifted inward stays this far from the viewport edge. */\nexport const HELP_TAG_VIEWPORT_MARGIN = 8;\n\ninterface HelpTagHost extends HTMLElement {\n open?: boolean;\n selectedOptions?: readonly (HTMLElement & { label?: string })[];\n}\n\ninterface HelpTag extends HTMLElement {\n open: boolean;\n readonly updateComplete: Promise<unknown>;\n anchor: Element | null;\n trigger: string;\n placement: string;\n}\n\nexport interface HelpTagOptions {\n /** Whether a newly focused element shows keyboard focus. */\n focusVisible?: (element: Element) => boolean;\n}\n\nconst LIFECYCLE_EVENTS = [\n 'wa-show',\n 'wa-after-show',\n 'wa-hide',\n 'wa-after-hide',\n] as const;\n\nconst installed = new WeakSet<Document>();\n\nfunction isFocusVisible(element: Element): boolean {\n try {\n return element.matches(':focus-visible');\n } catch {\n return false;\n }\n}\n\nconst MENU_LABEL = ':scope > [slot=\"trigger\"] .kui-popup-menu__label';\n\n/** A plain control (not a Web Awesome popup host) gets a body-layer tag. */\nconst isPlainControl = (host: HelpTagHost): boolean =>\n host.localName === 'button' || host.localName === 'a';\n\n/** An element's text with whitespace collapsed (an element's is never null). */\nconst words = (node: Element): string =>\n (node.textContent as string).replace(/\\s+/g, ' ').trim();\n\n/** The trimmed `aria-label` of a plain control. */\nconst ariaLabel = (control: Element): string =>\n (control.getAttribute('aria-label') ?? '').replace(/\\s+/g, ' ').trim();\n\n/**\n * An icon-only toolbar button or link (inside a `ToolbarControlGroup`) or an\n * `IconToggleButton`: named by `aria-label`, with no visible text, and without\n * a native `title` or a Web Awesome tooltip of its own that a second tag would\n * duplicate.\n */\nfunction isToolbarIconControl(target: HTMLElement): boolean {\n if (!target.matches('button, a[href]')) return false;\n if (!ariaLabel(target) || target.hasAttribute('title') || words(target))\n return false;\n if (!target.closest('.kui-toolbar-control-group, .kui-icon-toggle-button'))\n return false;\n return !(\n target.id &&\n target.ownerDocument.querySelector(\n `wa-tooltip[for=\"${CSS.escape(target.id)}\"]`,\n )\n );\n}\n\n/** The icon-only Kerf control on an event path, if any. */\nfunction helpTagHost(path: readonly EventTarget[]): HelpTagHost | null {\n for (const target of path) {\n if (!(target instanceof HTMLElement)) continue;\n if (isToolbarIconControl(target)) return target;\n const { component, selectedPresentation } = target.dataset;\n if (\n component === 'select' &&\n target.localName === 'wa-select' &&\n selectedPresentation === 'icon-only'\n )\n return target;\n if (component === 'popup-menu' && target.querySelector(MENU_LABEL))\n return target;\n }\n return null;\n}\n\n/** The visible trigger the tag describes and anchors to. */\nfunction anchorOf(host: HelpTagHost): Element | null {\n if (isPlainControl(host)) return host;\n if (host.dataset.component === 'select')\n return host.shadowRoot?.querySelector('[part~=\"combobox\"]') ?? null;\n return host.querySelector(':scope > [slot=\"trigger\"]');\n}\n\n/** The tag text: the same words as the trigger's accessible name. */\nfunction helpText(host: HelpTagHost): string {\n if (isPlainControl(host)) return ariaLabel(host);\n // An icon-only PopupMenu's visually hidden label, or a multiple icon\n // trigger's label slot (it already ends with the chosen labels).\n const label =\n host.querySelector(MENU_LABEL) ??\n host.querySelector(':scope > [slot=\"label\"]');\n if (label) return words(label);\n const name = host.getAttribute('label') ?? '';\n const chosen = host.selectedOptions?.[0];\n const choice = chosen ? chosen.label || words(chosen) : '';\n return choice && choice !== name ? `${name}: ${choice}` : name;\n}\n\n/**\n * Install once at an explicit registration boundary. Idempotent per document.\n */\nexport function installHelpTags(\n doc: Document = document,\n { focusVisible = isFocusVisible }: HelpTagOptions = {},\n): void {\n if (installed.has(doc)) return;\n installed.add(doc);\n const tags = new WeakMap<HelpTagHost, HelpTag>();\n let hovered: HelpTagHost | null = null;\n let focused: HelpTagHost | null = null;\n // The trigger whose tag is open, with that tag.\n let shown: { host: HelpTagHost; tag: HelpTag } | null = null;\n // A press, Escape, or an opened popup suppresses that trigger's tag.\n let dismissed: HelpTagHost | null = null;\n let timer: number | undefined;\n let warmUntil = 0;\n let layer: HTMLElement | null = null;\n\n // The body-level home of plain controls' tags. Its fixed, zero-size box\n // keeps it out of a grid or flex body's flow; a body morph that drops it is\n // repaired on the next show.\n const layerRoot = (): HTMLElement => {\n if (!layer) {\n layer = doc.createElement('div');\n layer.className = 'kui-help-tag-layer';\n layer.setAttribute('aria-hidden', 'true');\n layer.setAttribute('data-morph-skip', '');\n Object.assign(layer.style, {\n position: 'fixed',\n top: '0',\n left: '0',\n width: '0',\n height: '0',\n });\n }\n if (!layer.isConnected) doc.body.append(layer);\n return layer;\n };\n\n const tagFor = (host: HelpTagHost): HelpTag | null => {\n const plain = isPlainControl(host);\n const root = plain ? layerRoot() : host.shadowRoot;\n if (!root) return null;\n let tag = tags.get(host);\n if (!tag) {\n tag = doc.createElement('wa-tooltip') as HelpTag;\n tag.className = 'kui-help-tag';\n tag.setAttribute('aria-hidden', 'true');\n tag.setAttribute('trigger', 'manual');\n tag.setAttribute('placement', 'bottom');\n tag.style.pointerEvents = 'none';\n for (const type of LIFECYCLE_EVENTS)\n tag.addEventListener(type, (event) => event.stopPropagation());\n if (plain) {\n // A hidden button tag leaves the layer, so tags for buttons that a\n // re-render replaced never accumulate there.\n const created = tag;\n created.addEventListener('wa-after-hide', () => {\n if (created.open) return;\n created.remove();\n tags.delete(host);\n });\n }\n root.append(tag);\n tags.set(host, tag);\n }\n return tag;\n };\n\n const hide = (host: HelpTagHost) => {\n if (shown?.host !== host) return;\n shown.tag.open = false;\n shown = null;\n warmUntil = Date.now() + HELP_TAG_WARM_WINDOW;\n };\n\n const show = (host: HelpTagHost) => {\n window.clearTimeout(timer);\n timer = undefined;\n if (host.open || dismissed === host || !host.isConnected) return;\n const anchor = anchorOf(host);\n const text = helpText(host);\n if (!anchor || !text) return;\n const tag = tagFor(host);\n if (!tag) return;\n if (shown) hide(shown.host);\n // A body-layer tag takes its button's light or dark scheme, which a\n // subtree theme (`.wa-dark`) may set below the document root.\n if (anchor === host)\n tag.style.colorScheme = window.getComputedStyle(host).colorScheme;\n tag.anchor = anchor;\n tag.textContent = text;\n tag.open = true;\n shown = { host, tag };\n // A new tag's first update resets `anchor` from its (null) `for`. Its\n // popup also keeps the standard 8px clear of the viewport edge when it\n // shifts a long tag inward (Web Awesome's tooltip leaves this at 0).\n void tag.updateComplete.then(() => {\n if (tag.anchor !== anchor) tag.anchor = anchor;\n const popup = tag.shadowRoot?.querySelector<\n HTMLElement & { shiftPadding: number }\n >('wa-popup');\n if (popup) popup.shiftPadding = HELP_TAG_VIEWPORT_MARGIN;\n });\n };\n\n /** The tagged host whose trigger (not its popup) is on the path. */\n const triggerHost = (event: Event): HelpTagHost | null => {\n const path = event.composedPath();\n const host = helpTagHost(path);\n if (!host) return null;\n const anchor = anchorOf(host);\n return anchor && path.includes(anchor) ? host : null;\n };\n\n // A pending hover belongs to the hovered trigger; a tag stays while either\n // the pointer or keyboard focus is still on its trigger.\n const leave = (host: HelpTagHost) => {\n if (hovered !== host) {\n window.clearTimeout(timer);\n timer = undefined;\n }\n if (hovered !== host && focused !== host) hide(host);\n };\n\n // A press, Escape, or an opened popup dismisses a trigger's tag until the\n // pointer moves onto something else while the popup is closed, or focus\n // leaves the control.\n const release = (host: HelpTagHost | null) => {\n if (dismissed && dismissed !== host && !dismissed.open) dismissed = null;\n };\n\n doc.addEventListener(\n 'pointerover',\n (event) => {\n if ((event as PointerEvent).pointerType === 'touch') return;\n const host = triggerHost(event);\n release(host);\n if (host === hovered) return;\n const previous = hovered;\n hovered = host;\n if (previous) leave(previous);\n if (!host || host.open || dismissed === host || shown?.host === host)\n return;\n window.clearTimeout(timer);\n if (Date.now() < warmUntil) show(host);\n else timer = window.setTimeout(() => show(host), HELP_TAG_SHOW_DELAY);\n },\n true,\n );\n\n doc.addEventListener(\n 'pointerout',\n (event) => {\n // Leaving the window: nothing new is hovered.\n if ((event as PointerEvent).relatedTarget !== null || !hovered) return;\n const previous = hovered;\n hovered = null;\n leave(previous);\n },\n true,\n );\n\n // A pending hover show for this host re-checks the dismissal and no-ops.\n const dismiss = (host: HelpTagHost) => {\n dismissed = host;\n hide(host);\n };\n\n doc.addEventListener(\n 'pointerdown',\n (event) => {\n const host = helpTagHost(event.composedPath());\n if (host) dismiss(host);\n },\n true,\n );\n\n doc.addEventListener(\n 'focusin',\n (event) => {\n // Only keyboard focus (`:focus-visible`) shows a tag; a click focuses\n // the trigger without one.\n const target = event.composedPath()[0];\n const host =\n target instanceof Element && focusVisible(target)\n ? triggerHost(event)\n : null;\n if (host === focused) return;\n const previous = focused;\n focused = host;\n if (previous) leave(previous);\n if (host && dismissed !== host) show(host);\n },\n true,\n );\n\n doc.addEventListener(\n 'focusout',\n (event) => {\n const host = helpTagHost(event.composedPath());\n // Focus moving within the control (into its popup and back) is handled\n // by focusin; only focus leaving the control ends a dismissal.\n const next = (event as FocusEvent).relatedTarget;\n if (!host || (next instanceof Node && host.contains(next))) return;\n if (dismissed === host) dismissed = null;\n if (host !== focused) return;\n focused = null;\n leave(host);\n },\n true,\n );\n\n doc.addEventListener(\n 'keydown',\n (event) => {\n if (event.key === 'Escape' && shown) dismiss(shown.host);\n },\n true,\n );\n\n // Opening the popup hides the tag: the menu itself now shows the choices.\n doc.addEventListener(\n 'wa-show',\n (event) => {\n const host = helpTagHost(event.composedPath());\n if (host && event.composedPath()[0] === host) dismiss(host);\n },\n true,\n );\n\n // Keep a visible tag's text in step with the selection.\n const refresh = (event: Event) => {\n const host = helpTagHost(event.composedPath());\n if (shown && host === shown.host) shown.tag.textContent = helpText(host);\n };\n doc.addEventListener('change', refresh, true);\n doc.addEventListener('input', refresh, true);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/navigation/app-tab/app-tab.tsx"],"names":[],"mappings":"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","file":"chunk-TGLUDQP2.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport type { KerfUiContent } from '../../../shared/content/semantic-content.js';\nimport { filterDataAttributes } from '../../../shared/dom/extension-attributes.js';\nimport { em } from '../../../shared/styles/css-values.js';\nimport { Skeleton } from '../../feedback/skeleton/skeleton.js';\n\nconst PROTECTED_ROOT_DATA_ATTRIBUTES = new Set([\n 'data-component',\n 'data-action',\n 'data-tab-id',\n 'data-selected',\n 'data-tab-dragging',\n 'data-tab-drop-position',\n 'data-attention',\n 'data-drop-target',\n 'data-name-overflow',\n 'data-pinned',\n]);\n\ntype AppTabRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-component'?: never;\n 'data-action'?: never;\n 'data-tab-id'?: never;\n 'data-selected'?: never;\n 'data-tab-dragging'?: never;\n 'data-tab-drop-position'?: never;\n 'data-attention'?: never;\n 'data-drop-target'?: never;\n 'data-name-overflow'?: never;\n 'data-pinned'?: never;\n }\n>;\n\nexport type AppTabPresentation = 'pill' | 'segmented' | 'icon-only';\nexport type AppTabSize = 'default' | 'compact';\nexport type AppTabNameOverflow = 'ellipsis' | 'visible';\n\nexport interface AppTabProps {\n id: string;\n name: string;\n selected?: boolean;\n /** Emphasize the visible tab name with the attention color token. */\n attention?: boolean;\n /** Highlight this tab as the target of a drag over its content. */\n dropTarget?: boolean;\n /** Keep the leading tab visible within its TabBar tablist while peers scroll. */\n pinned?: boolean;\n closable?: boolean;\n draggable?: boolean;\n leading?: KerfUiContent;\n trailing?: KerfUiContent;\n /** Visual treatment within a TabBar. Icon-only tabs retain `name` as their accessible name. */\n presentation?: AppTabPresentation;\n /** Compact tabs use the 32px application-rail height. */\n size?: AppTabSize;\n /** Maximum visible label width in CSS pixels before ellipsis. */\n labelMaxWidth?: number;\n /** Keep the full name visible for an inline loading treatment. */\n nameOverflow?: AppTabNameOverflow;\n /** Decorative dormant content for the close button. Must not contain interactive descendants. */\n closeIcon?: SafeHtml;\n selectAction?: string;\n closeAction?: string;\n className?: string;\n /** Render as an unanimated loading skeleton, disabling select/close and dragging. */\n placeholder?: boolean;\n /**\n * Named and still opening: the tab is known but its content is loading.\n * Keeps `name` visible in the quiet text color and as the tab's accessible\n * name, shows `trailing` (for example a `LoadingSpinner`), and marks the\n * tab `aria-busy`. Unlike `placeholder` it stays selectable — the\n * application shows placeholder content in its panel until loading\n * completes — while close and dragging stay disabled. Same pill geometry\n * as the live tab, so swapping it in place does not shift the bar.\n * `placeholder` wins when both are set.\n */\n pending?: boolean;\n rootAttributes?: AppTabRootAttributes;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\nfunction CloseIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.25\"\n stroke-linecap=\"round\"\n >\n <path d=\"m7 7 10 10\" />\n <path d=\"M17 7 7 17\" />\n </svg>\n );\n}\n\nexport function AppTab({\n id,\n name,\n selected = false,\n attention = false,\n dropTarget = false,\n pinned = false,\n closable = true,\n draggable = false,\n leading,\n trailing,\n presentation = 'pill',\n size = 'default',\n labelMaxWidth,\n nameOverflow = 'ellipsis',\n closeIcon,\n selectAction = 'select-tab',\n closeAction = 'close-tab',\n className = '',\n placeholder = false,\n pending = false,\n rootAttributes = {},\n slot,\n}: AppTabProps) {\n // Both loading states disable close and dragging; a `placeholder` (unknown\n // tab) is also unselectable and hides its name, while a `pending` (known,\n // still opening) tab stays selectable so its panel can show placeholders.\n const dormant = placeholder || pending;\n const named = pending && !placeholder;\n const keyshortcuts = [\n closable && !dormant ? 'Delete Backspace' : '',\n draggable && !dormant ? 'Alt+Shift+ArrowLeft Alt+Shift+ArrowRight' : '',\n ]\n .filter(Boolean)\n .join(' ');\n const extensionAttributes = filterDataAttributes(\n rootAttributes,\n PROTECTED_ROOT_DATA_ATTRIBUTES,\n );\n return (\n <div\n {...extensionAttributes}\n class={`kui-app-tab ${className}`.trim()}\n data-component=\"app-tab\"\n data-tab-id={id}\n data-selected={String(selected)}\n data-attention={attention ? 'true' : undefined}\n data-drop-target={dropTarget ? 'true' : undefined}\n data-pinned={pinned ? 'true' : undefined}\n data-name-overflow={nameOverflow}\n data-presentation={presentation}\n data-size={size}\n data-placeholder={placeholder ? 'true' : undefined}\n data-pending={named ? 'true' : undefined}\n draggable={dormant ? 'false' : draggable ? 'true' : 'false'}\n aria-busy={dormant ? 'true' : undefined}\n style={\n labelMaxWidth === undefined\n ? undefined\n : `--kui-app-tab-label-max-width:${labelMaxWidth}px`\n }\n slot={slot}\n >\n {closable && (\n <button\n type=\"button\"\n tabindex=\"-1\"\n class=\"kui-app-tab__close\"\n data-action={dormant ? undefined : closeAction}\n data-tab-id={id}\n disabled={dormant || undefined}\n aria-label={`Close ${name}`}\n title={`Close ${name}`}\n >\n <span class=\"kui-app-tab__close-icon\" aria-hidden=\"true\">\n {closeIcon ?? <CloseIcon />}\n </span>\n </button>\n )}\n <button\n type=\"button\"\n class=\"kui-app-tab__select\"\n role=\"tab\"\n aria-selected={String(selected)}\n aria-label={presentation === 'icon-only' || named ? name : undefined}\n aria-keyshortcuts={keyshortcuts || undefined}\n data-action={placeholder ? undefined : selectAction}\n data-tab-id={id}\n disabled={placeholder || undefined}\n tabindex={!placeholder && selected ? '0' : '-1'}\n >\n {leading}\n <span\n class=\"kui-app-tab__name\"\n aria-hidden={presentation === 'icon-only' ? 'true' : undefined}\n >\n {placeholder ? <Skeleton width={em(7)} /> : name}\n </span>\n {closable || trailing ? (\n <span class=\"kui-app-tab__trailing\">{trailing}</span>\n ) : undefined}\n </button>\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/feedback/badge/badge.tsx"],"names":["label"],"mappings":"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","file":"chunk-U6QYTMDB.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport { filterDataAttributes } from '../../../shared/dom/extension-attributes.js';\nimport type { CssLength } from '../../../shared/styles/css-values.js';\nimport type { SemanticTone } from '../../../shared/styles/semantic-tone.js';\n\nexport type { SemanticTone } from '../../../shared/styles/semantic-tone.js';\n/** @deprecated Use SemanticTone. */\nexport type BadgeTone = SemanticTone;\nexport type BadgeAppearance = 'quiet' | 'solid' | 'outline';\nexport type BadgeShape = 'pill' | 'rounded';\n/** Size of a text badge. A text-free dot is the separate `size: 'dot'` form. */\nexport type BadgeSize = 'compact' | 'default';\n\nconst badgeProtectedAttributes = new Set([\n 'data-component',\n 'data-tone',\n 'data-appearance',\n 'data-shape',\n 'data-size',\n 'data-has-icon',\n 'data-truncate',\n]);\n\n/** Application `data-*` identity on the badge root; Badge-owned markers stay protected. */\nexport type BadgeRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-component'?: never;\n 'data-tone'?: never;\n 'data-appearance'?: never;\n 'data-shape'?: never;\n 'data-size'?: never;\n 'data-has-icon'?: never;\n 'data-truncate'?: never;\n }\n>;\n\ninterface BadgeCommonProps {\n tone?: SemanticTone;\n /** Native tooltip text that explains the badge on hover. */\n title?: string;\n /** Safe `data-*` identity, such as a status band, on the badge root. */\n rootAttributes?: BadgeRootAttributes;\n className?: string;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\n/** A badge that shows a short status, count, or category as visible text. */\nexport interface BadgeTextProps extends BadgeCommonProps {\n children: SafeHtml | string | number;\n /** Decorative leading icon, normally an unsized LucideIcon, 4px before the text. */\n icon?: SafeHtml;\n appearance?: BadgeAppearance;\n shape?: BadgeShape;\n size?: BadgeSize;\n /**\n * Cap the badge's width and truncate longer text with an ellipsis, for\n * app-supplied text such as a tag or category name. String and number\n * content becomes the native `title` tooltip unless `title` is supplied, so\n * the full text stays available on hover; SafeHtml content needs `title`.\n */\n maxWidth?: CssLength;\n /**\n * Accessible name that replaces the visible content when it is abbreviated\n * or symbolic (`\"82% confidence\"` for `82`); the badge is then exposed as a\n * labeled image.\n */\n label?: string;\n /** Hide a repeated visual badge from assistive technology. */\n ariaHidden?: boolean;\n}\n\n/** A labeled dot, announced as an image with its own accessible name. */\ninterface BadgeDotLabeled {\n /** Accessible name for the dot, for example `\"New activity\"`. */\n label: string;\n ariaHidden?: false;\n}\n\n/** A decorative dot whose meaning the owning component already announces. */\ninterface BadgeDotDecorative {\n label?: never;\n ariaHidden: true;\n}\n\n/**\n * A text-free status dot (the iOS \"new content\" dot): a small solid circle in\n * the badge's tone. It has no visible text, so it must either carry its own\n * accessible `label` (exposed as an image) or be `ariaHidden` because the\n * surrounding component already folds its meaning into an accessible name.\n */\nexport type BadgeDotProps = BadgeCommonProps & {\n size: 'dot';\n children?: never;\n appearance?: never;\n shape?: never;\n maxWidth?: never;\n} & (BadgeDotLabeled | BadgeDotDecorative);\n\nexport type BadgeProps = BadgeTextProps | BadgeDotProps;\n\n/** Compact, non-interactive metadata whose tone, emphasis, and shape are configured by props. */\nexport function Badge(props: BadgeProps) {\n const {\n tone = 'neutral',\n title,\n rootAttributes = {},\n className = '',\n slot,\n } = props;\n const identity = filterDataAttributes(\n rootAttributes,\n badgeProtectedAttributes,\n );\n if (props.size === 'dot') {\n // A dot without a usable label has no text fallback, so it is decorative.\n const label = props.ariaHidden ? undefined : props.label?.trim();\n return (\n <span\n {...identity}\n class={`kui-badge ${className}`.trim()}\n data-component=\"badge\"\n data-tone={tone}\n data-appearance=\"solid\"\n data-size=\"dot\"\n role={label ? 'img' : undefined}\n aria-label={label || undefined}\n aria-hidden={label ? undefined : 'true'}\n title={title}\n slot={slot}\n />\n );\n }\n const {\n children,\n icon,\n appearance = 'quiet',\n shape = 'pill',\n size = 'default',\n maxWidth,\n label,\n ariaHidden = false,\n } = props;\n const named = !ariaHidden && Boolean(label?.trim());\n const truncates = maxWidth !== undefined;\n // A truncated label keeps its full text as the hover tooltip.\n const tooltip =\n title ??\n (truncates && (typeof children === 'string' || typeof children === 'number')\n ? String(children)\n : undefined);\n return (\n <span\n {...identity}\n class={`kui-badge ${className}`.trim()}\n data-component=\"badge\"\n data-tone={tone}\n data-appearance={appearance}\n data-shape={shape}\n data-size={size}\n data-has-icon={icon === undefined ? undefined : 'true'}\n data-truncate={truncates ? 'true' : undefined}\n style={truncates ? `--_kui-badge-max-width:${maxWidth}` : undefined}\n role={named ? 'img' : undefined}\n aria-label={named ? label : undefined}\n aria-hidden={ariaHidden ? 'true' : undefined}\n title={tooltip}\n slot={slot}\n >\n {icon === undefined ? null : (\n <span class=\"kui-badge__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n {truncates ? <span class=\"kui-badge__label\">{children}</span> : children}\n </span>\n );\n}\n"]}
@@ -1,45 +0,0 @@
1
- import { LucideIcon } from './chunk-LOSRXZAH.js';
2
- import { filterDataAttributes } from './chunk-KH4KEMSP.js';
3
- import { jsx } from 'kerfjs/jsx-runtime';
4
-
5
- var iconButtonProtectedAttributes = /* @__PURE__ */ new Set([
6
- "data-component",
7
- "data-action"
8
- ]);
9
- function IconButton({
10
- icon,
11
- iconName,
12
- label,
13
- action,
14
- appearance,
15
- variant,
16
- size,
17
- type = "button",
18
- disabled = false,
19
- id,
20
- className = "",
21
- rootAttributes = {},
22
- slot
23
- }) {
24
- return /* @__PURE__ */ jsx(
25
- "wa-button",
26
- {
27
- ...filterDataAttributes(rootAttributes, iconButtonProtectedAttributes),
28
- id,
29
- class: `kui-icon-button ${className}`.trim(),
30
- "data-component": "icon-button",
31
- "data-action": action,
32
- appearance,
33
- variant,
34
- size,
35
- type,
36
- disabled: disabled || void 0,
37
- slot,
38
- children: /* @__PURE__ */ jsx(LucideIcon, { icon, name: iconName, label })
39
- }
40
- );
41
- }
42
-
43
- export { IconButton };
44
-
45
- //# sourceMappingURL=chunk-VFYO3UGZ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/actions/icon-button/icon-button.tsx"],"names":[],"mappings":";;;;AAYA,IAAM,6BAAA,uBAAoC,GAAA,CAAI;AAAA,EAC5C,gBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAyCM,SAAS,UAAA,CAAW;AAAA,EACzB,IAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA,GAAO,QAAA;AAAA,EACP,QAAA,GAAW,KAAA;AAAA,EACX,EAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,iBAAiB,EAAC;AAAA,EAClB;AACF,CAAA,EAAoB;AAClB,EAAA,uBACE,GAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACE,GAAG,oBAAA,CAAqB,cAAA,EAAgB,6BAA6B,CAAA;AAAA,MACtE,EAAA;AAAA,MACA,KAAA,EAAO,CAAA,gBAAA,EAAmB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAC3C,gBAAA,EAAe,aAAA;AAAA,MACf,aAAA,EAAa,MAAA;AAAA,MACb,UAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAU,QAAA,IAAY,MAAA;AAAA,MACtB,IAAA;AAAA,MAEA,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAY,IAAA,EAAM,UAAU,KAAA,EAAc;AAAA;AAAA,GACxD;AAEJ","file":"chunk-VFYO3UGZ.js","sourcesContent":["import { filterDataAttributes } from '../../../shared/dom/extension-attributes.js';\nimport {\n LucideIcon,\n type LucideNode,\n} from '../../media/lucide-icon/lucide-icon.js';\n\nexport type IconButtonAppearance =\n 'accent' | 'filled' | 'outlined' | 'filled-outlined' | 'plain';\nexport type IconButtonVariant =\n 'neutral' | 'brand' | 'success' | 'warning' | 'danger';\nexport type IconButtonSize = 'xs' | 's' | 'm' | 'l' | 'xl';\n\nconst iconButtonProtectedAttributes = new Set([\n 'data-component',\n 'data-action',\n]);\n\ntype IconButtonRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-component'?: never;\n 'data-action'?: never;\n }\n>;\n\nexport interface IconButtonProps {\n /** The Lucide-compatible icon node shown alone in the button. */\n icon: LucideNode;\n /** The icon's stable name, as `LucideIcon` takes it. */\n iconName: string;\n /** Accessible name; the button has no visible text, so it is required. */\n label: string;\n /** Delegated `data-action` the application handles. */\n action?: string;\n /** Web Awesome appearance; defaults to Web Awesome's own. */\n appearance?: IconButtonAppearance;\n /** Web Awesome semantic variant; defaults to Web Awesome's own. */\n variant?: IconButtonVariant;\n /** Web Awesome control size; the square follows its control height. */\n size?: IconButtonSize;\n type?: 'button' | 'submit' | 'reset';\n disabled?: boolean;\n id?: string;\n className?: string;\n /** Safe `data-*` metadata; `data-component` and `data-action` stay owned. */\n rootAttributes?: IconButtonRootAttributes;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\n/**\n * An icon-only Web Awesome button with a `LucideIcon`: square, one form\n * control height on each side, so it matches an adjacent `wa-input` or\n * `Select`. Web Awesome squares a button only for a lone `wa-icon`; this is\n * the Kerf form for Lucide icons. Register `wa-button` once\n * (`@awesome.me/webawesome/dist/components/button/button.js`).\n */\nexport function IconButton({\n icon,\n iconName,\n label,\n action,\n appearance,\n variant,\n size,\n type = 'button',\n disabled = false,\n id,\n className = '',\n rootAttributes = {},\n slot,\n}: IconButtonProps) {\n return (\n <wa-button\n {...filterDataAttributes(rootAttributes, iconButtonProtectedAttributes)}\n id={id}\n class={`kui-icon-button ${className}`.trim()}\n data-component=\"icon-button\"\n data-action={action}\n appearance={appearance}\n variant={variant}\n size={size}\n type={type}\n disabled={disabled || undefined}\n slot={slot}\n >\n <LucideIcon icon={icon} name={iconName} label={label} />\n </wa-button>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/forms/file-picker/file-picker.tsx"],"names":[],"mappings":";;;AAmCA,SAAS,SAAA,CAAU,OAAuB,KAAA,EAA2B;AACnE,EAAA,uBACE,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,MAAA;AAAA,MACL,KAAA,EAAM,wBAAA;AAAA,MACN,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,YAAA,EAAY,KAAA;AAAA,MACZ,UAAU,KAAA,CAAM;AAAA;AAAA,GAClB;AAEJ;AAQO,SAAS,kBAAkB,KAAA,EAA+B;AAC/D,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,eAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA,GAAY;AAAA,GACd,GAAI,KAAA;AACJ,EAAA,uBACE,IAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,gBAAA,EAAmB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAC3C,gBAAA,EAAe,qBAAA;AAAA,MACf,mBAAA,EAAkB,SAAA;AAAA,MAClB,qBAAA,EAAqB,QAAA;AAAA,MACrB,eAAA,EAAe,WAAW,MAAA,GAAS,MAAA;AAAA,MAElC,QAAA,EAAA;AAAA,QAAA,IAAA,wBACE,MAAA,EAAA,EAAK,KAAA,EAAM,uBAAA,EAAwB,aAAA,EAAY,QAC7C,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,wBAEF,GAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QACZ,SAAA,CAAU,OAAO,eAAe;AAAA;AAAA;AAAA,GACnC;AAEJ;AAOO,SAAS,aAAa,KAAA,EAA0B;AACrD,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,MAAA;AAAA,IACA,IAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA,GAAY;AAAA,GACd,GAAI,KAAA;AACJ,EAAA,uBACE,IAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,gBAAA,EAAmB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAC3C,gBAAA,EAAe,gBAAA;AAAA,MACf,mBAAA,EAAkB,WAAA;AAAA,MAClB,qBAAA,EAAqB,QAAA;AAAA,MACrB,eAAA,EAAe,WAAW,MAAA,GAAS,MAAA;AAAA,MAElC,QAAA,EAAA;AAAA,QAAA,IAAA,wBACE,MAAA,EAAA,EAAK,KAAA,EAAM,uBAAA,EAAwB,aAAA,EAAY,QAC7C,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,wBAEF,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,wBAAA,EAA0B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QAC3C,MAAA,oBAAU,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,2BAA2B,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,QACxD,SAAA,CAAU,OAAO,eAAe;AAAA;AAAA;AAAA,GACnC;AAEJ","file":"chunk-W4IK7AWD.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\ninterface FileInputProps {\n /** Accepted types, as the native `accept` attribute (`.png,image/*`). */\n accept?: string;\n /** Allow several files at once. */\n multiple?: boolean;\n /** Form field name of the native file input. */\n name?: string;\n /** Identifies this picker in `wireFilePickers` reports. */\n pickerId?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport interface FilePickerTriggerProps extends FileInputProps {\n /** Visible trigger text, such as \"Add\". */\n label: string;\n /** Accessible name of the file input when it should say more than `label`. */\n accessibleLabel?: string;\n /** Optional decorative leading icon, normally an unsized LucideIcon. */\n icon?: SafeHtml;\n}\n\nexport interface FileDropZoneProps extends FileInputProps {\n /** Primary copy, such as \"Drop attachments here or browse\". */\n title: string;\n /** Optional secondary copy, such as accepted types or a size limit. */\n detail?: string;\n /** Optional decorative icon above the copy, normally an unsized LucideIcon. */\n icon?: SafeHtml;\n /** Accessible name of the file input when it should say more than `title`. */\n accessibleLabel?: string;\n}\n\nfunction fileInput(props: FileInputProps, label: string | undefined) {\n return (\n <input\n type=\"file\"\n class=\"kui-file-picker__input\"\n accept={props.accept}\n multiple={props.multiple}\n name={props.name}\n aria-label={label}\n disabled={props.disabled}\n />\n );\n}\n\n/**\n * A compact, link-toned trigger that opens the native file chooser: a label\n * around a visually hidden `<input type=\"file\">`, so a click or keyboard\n * activation reaches the input without script. Report choices with\n * `wireFilePickers`.\n */\nexport function FilePickerTrigger(props: FilePickerTriggerProps) {\n const {\n label,\n accessibleLabel,\n icon,\n pickerId,\n disabled,\n className = '',\n } = props;\n return (\n <label\n class={`kui-file-picker ${className}`.trim()}\n data-component=\"file-picker-trigger\"\n data-presentation=\"trigger\"\n data-file-picker-id={pickerId}\n data-disabled={disabled ? 'true' : undefined}\n >\n {icon && (\n <span class=\"kui-file-picker__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n <span>{label}</span>\n {fileInput(props, accessibleLabel)}\n </label>\n );\n}\n\n/**\n * A dashed drop target that also opens the file chooser when clicked. While\n * files are dragged over it, `wireFilePickers` sets `data-dragging` and Kerf\n * highlights it; dropped and chosen files are reported the same way.\n */\nexport function FileDropZone(props: FileDropZoneProps) {\n const {\n title,\n detail,\n icon,\n accessibleLabel,\n pickerId,\n disabled,\n className = '',\n } = props;\n return (\n <label\n class={`kui-file-picker ${className}`.trim()}\n data-component=\"file-drop-zone\"\n data-presentation=\"drop-zone\"\n data-file-picker-id={pickerId}\n data-disabled={disabled ? 'true' : undefined}\n >\n {icon && (\n <span class=\"kui-file-picker__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n <span class=\"kui-file-picker__title\">{title}</span>\n {detail && <span class=\"kui-file-picker__detail\">{detail}</span>}\n {fileInput(props, accessibleLabel)}\n </label>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/workbench/internal/workbench-toolbars.tsx","../src/components/layout/workbench/workbench.tsx"],"names":["jsx","jsxs"],"mappings":"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","file":"chunk-YBWQR2OK.js","sourcesContent":["import type { KerfUiContent } from '../../../../shared/content/semantic-content.js';\nimport {\n composedPanelBody,\n groupSizeFor,\n type PanelBottomToolbar,\n type PanelChromePlacement,\n type PanelSide,\n type PanelToggle,\n type PanelToggleAttributes,\n panelToggleGroup,\n type PanelToolbar,\n relocatedPanelGroups,\n} from '../../../../shared/panels/panel-toolbar.js';\nimport {\n FloatingToolbar,\n type FloatingToolbarPosition,\n} from '../../../actions/floating-toolbar/floating-toolbar.js';\nimport {\n Toolbar,\n type ToolbarConfig,\n} from '../../../actions/toolbar/toolbar.js';\nimport { List, type ListConfig } from '../../../collections/list/list.js';\nimport {\n NavStack,\n type NavStackProps,\n} from '../../../navigation/nav-stack/nav-stack.js';\nimport { paneConfigProps } from '../../pane/internal/pane-config-props.js';\nimport { Pane, type PaneConfig } from '../../pane/pane.js';\nimport {\n type WorkbenchPanelKey,\n workbenchRegionId,\n} from './workbench-resize.js';\n\n/** The standard toggle a Workbench renders for a panel (see {@link PanelToggle}). */\nexport type WorkbenchPanelToggle = PanelToggle;\n\n/**\n * A Workbench panel's top toolbar, composed by the Workbench so its groups can\n * follow the panel's open state (see {@link PanelToolbar} for the roles).\n * A collapsed rail's marked groups and toggle go to the leading edge of\n * `mainToolbar` (left rail) or its trailing edge (right rail); a collapsed\n * drawer's go to the trailing edge of `mainBottomToolbar`, else to a\n * `FloatingToolbar` in the work area's bottom-end corner.\n */\nexport type WorkbenchPanelToolbar = PanelToolbar;\nexport type WorkbenchPanelBottomToolbar = PanelBottomToolbar;\n\n/**\n * The work area's top toolbar; collapsed rails add their groups to it. Its\n * configuration forwards to its `Toolbar`. It draws no divider of its own by\n * default: the work area's `Pane` draws one under its header chrome, wherever\n * that chrome ends, while `main` is scrolled (`mainPane.chromeDividers`).\n */\nexport interface WorkbenchMainToolbar extends ToolbarConfig {\n label: string;\n /** The work area's title, usually an extra-large `ToolbarText`. */\n title?: KerfUiContent;\n /** Groups after the title. */\n leading?: KerfUiContent;\n center?: KerfUiContent;\n /** Groups at the trailing edge, before a collapsed right rail's groups. */\n trailing?: KerfUiContent;\n}\n\n/**\n * The work area's bottom toolbar; a collapsed drawer adds its groups to it.\n * Its configuration forwards to its `Toolbar`. It draws no divider of its own\n * by default: the work area's `Pane` draws one over its footer chrome while\n * more of `main` lies below (`mainPane.chromeDividers`).\n */\nexport interface WorkbenchMainBottomToolbar extends ToolbarConfig {\n label: string;\n leading?: KerfUiContent;\n center?: KerfUiContent;\n trailing?: KerfUiContent;\n}\n\nconst SIDES: Record<WorkbenchPanelKey, PanelSide> = {\n leftRail: 'left',\n rightRail: 'right',\n bottomDrawer: 'bottom',\n};\n\n/** A panel as far as its toolbar is concerned. */\nexport interface WorkbenchToolbarPanel {\n toolbar?: WorkbenchPanelToolbar;\n navStack?: Omit<\n NavStackProps,\n 'panelToggle' | 'hideToolbar' | 'className' | 'slot'\n >;\n header?: KerfUiContent;\n headerList?: ListConfig;\n headerPlacement?: PanelChromePlacement;\n footer?: KerfUiContent;\n footerList?: ListConfig;\n bottomToolbar?: WorkbenchPanelBottomToolbar;\n footerPlacement?: PanelChromePlacement;\n /** Configuration for the `Pane` a `toolbar` panel's content renders in. */\n pane?: PaneConfig;\n content?: KerfUiContent;\n collapsed?: boolean;\n /** The corner a collapsed panel's restore controls float in. */\n restorePosition?: FloatingToolbarPosition;\n}\n\n/** A Workbench toggle's wiring hooks: its side, morph key, and panel. */\nconst toggleAttributes = (\n workbenchId: string,\n key: WorkbenchPanelKey,\n): PanelToggleAttributes => ({\n 'data-workbench-toggle': SIDES[key],\n // Keyed, so the morph removes a toggle that leaves a toolbar instead of\n // reusing its (possibly focused) button for a different control.\n 'data-key': `${workbenchRegionId(workbenchId, key)}-toggle`,\n 'aria-controls': workbenchRegionId(workbenchId, key),\n});\n\n/**\n * The groups a collapsed panel hands to the work area: its marked groups,\n * then its toggle. Empty while the panel is open or has no toolbar.\n */\nexport function relocatedGroups(\n workbenchId: string,\n key: WorkbenchPanelKey,\n panel: WorkbenchToolbarPanel | undefined,\n density?: ToolbarConfig['density'],\n): KerfUiContent[] {\n const active = panel?.navStack?.views.at(-1);\n const toolbar =\n active && panel?.toolbar\n ? {\n ...panel.toolbar,\n leading: active.toolbar?.leading,\n center: active.toolbar?.center,\n trailing: active.toolbar?.trailing,\n }\n : panel?.toolbar;\n return relocatedPanelGroups(\n toolbar,\n SIDES[key],\n Boolean(panel?.collapsed),\n toggleAttributes(workbenchId, key),\n groupSizeFor(density),\n );\n}\n\n/**\n * A panel's content, wrapped in a `Pane` under its composed toolbar when it\n * has one (with its optional `footer` below). Without a toolbar the content\n * renders as given.\n */\nexport function panelBody(\n workbenchId: string,\n key: WorkbenchPanelKey,\n panel: WorkbenchToolbarPanel,\n) {\n const toolbar = panel.toolbar;\n if (panel.navStack) {\n const stack = panel.navStack;\n return NavStack({\n ...stack,\n toolbarConfig: {\n label: stack.toolbarConfig?.label ?? toolbar?.label,\n density: stack.toolbarConfig?.density ?? toolbar?.density,\n dividerSides:\n stack.toolbarConfig?.dividerSides ?? toolbar?.dividerSides,\n centerAlign: stack.toolbarConfig?.centerAlign ?? toolbar?.centerAlign,\n responsive: stack.toolbarConfig?.responsive ?? toolbar?.responsive,\n responsiveAt:\n stack.toolbarConfig?.responsiveAt ?? toolbar?.responsiveAt,\n safeAreaEdges:\n stack.toolbarConfig?.safeAreaEdges ?? toolbar?.safeAreaEdges,\n // A rail or drawer is peripheral to the work area's xlarge title, so\n // its stack keeps the large title at every depth.\n titleSize: stack.toolbarConfig?.titleSize ?? 'large',\n headingLevel: stack.toolbarConfig?.headingLevel,\n },\n panelToggle: toolbar?.toggle\n ? panelToggleGroup(\n SIDES[key],\n toolbar.toggle,\n Boolean(panel.collapsed),\n toggleAttributes(workbenchId, key),\n groupSizeFor(stack.toolbarConfig?.density ?? toolbar.density),\n )\n : undefined,\n });\n }\n if (!toolbar) return panel.content;\n return composedPanelBody({\n toolbar,\n side: SIDES[key],\n collapsed: Boolean(panel.collapsed),\n attributes: toggleAttributes(workbenchId, key),\n pane: panel.pane,\n header: panel.header,\n headerList: panel.headerList,\n headerPlacement: panel.headerPlacement,\n footer: panel.footer,\n footerList: panel.footerList,\n bottomToolbar: panel.bottomToolbar,\n footerPlacement: panel.footerPlacement,\n content: panel.content ?? null,\n });\n}\n\n/**\n * The work area's `mainHeader` / `mainFooter` chrome in a `List` carrying the\n * app's configuration; an omitted or `undefined` field keeps the `List`\n * default (no divider: the work area's `Pane` draws its chrome dividers).\n */\nfunction chromeList(content: KerfUiContent, config: ListConfig | undefined) {\n return (\n <List\n dividerSides={config?.dividerSides}\n gap={config?.gap}\n hAlign={config?.hAlign}\n vAlign={config?.vAlign}\n textInsets={config?.textInsets}\n controlInsets={config?.controlInsets}\n >\n {content}\n </List>\n );\n}\n\n/**\n * Whether the work area's header or footer chrome stays pinned (`fixed`),\n * scrolls away with the content (`scroll`), or stays pinned while the work\n * area is tall enough and scrolls with the content when it is short (`auto`,\n * the Pane's `chromePlacement=\"auto\"`; it applies to the pinned header and\n * footer together).\n */\nexport type WorkbenchChromePlacement = PanelChromePlacement;\n\n/**\n * The work area: the app's `main` in a `Pane` (configured by `mainPane`)\n * under `mainToolbar` and any `mainHeader` list, and above any `mainFooter`\n * list and `mainBottomToolbar` (the header and footer lists configured by\n * `mainHeaderList` / `mainFooterList`), with each collapsed panel's groups\n * added to the toolbar on its side. Without any of that chrome, `main`\n * renders as given; only `mainPane.appearance` applies to the Workbench's\n * own scroll region in that case.\n */\nexport function mainBody({\n workbenchId,\n main,\n mainToolbar,\n mainHeader,\n mainFooter,\n mainBottomToolbar,\n mainHeaderPlacement = 'fixed',\n mainFooterPlacement = 'fixed',\n mainPane,\n mainHeaderList,\n mainFooterList,\n leftRail,\n rightRail,\n bottomDrawer,\n}: {\n workbenchId: string;\n main: KerfUiContent;\n mainToolbar?: WorkbenchMainToolbar;\n mainHeader?: KerfUiContent;\n mainFooter?: KerfUiContent;\n mainBottomToolbar?: WorkbenchMainBottomToolbar;\n mainHeaderPlacement?: WorkbenchChromePlacement;\n mainFooterPlacement?: WorkbenchChromePlacement;\n mainPane?: PaneConfig;\n mainHeaderList?: ListConfig;\n mainFooterList?: ListConfig;\n leftRail?: WorkbenchToolbarPanel;\n rightRail?: WorkbenchToolbarPanel;\n bottomDrawer?: WorkbenchToolbarPanel;\n}) {\n if (!mainToolbar && !mainBottomToolbar && !mainHeader && !mainFooter)\n return main;\n const left = relocatedGroups(\n workbenchId,\n 'leftRail',\n leftRail,\n mainToolbar?.density,\n );\n const right = relocatedGroups(\n workbenchId,\n 'rightRail',\n rightRail,\n mainToolbar?.density,\n );\n const drawer = mainBottomToolbar\n ? relocatedGroups(\n workbenchId,\n 'bottomDrawer',\n bottomDrawer,\n mainBottomToolbar.density,\n )\n : [];\n // The Pane draws one divider under the header chrome and one over the\n // footer chrome, wherever that chrome ends, from the scroll state.\n const header =\n !mainToolbar && !mainHeader ? undefined : (\n <>\n {mainToolbar ? (\n <Toolbar\n label={mainToolbar.label}\n density={mainToolbar.density}\n dividerSides={mainToolbar.dividerSides}\n centerAlign={mainToolbar.centerAlign}\n responsive={mainToolbar.responsive}\n responsiveAt={mainToolbar.responsiveAt}\n safeAreaEdges={mainToolbar.safeAreaEdges}\n leading={\n <>\n {left}\n {mainToolbar.title}\n {mainToolbar.leading}\n </>\n }\n center={mainToolbar.center}\n trailing={\n <>\n {mainToolbar.trailing}\n {right}\n </>\n }\n />\n ) : null}\n {mainHeader ? chromeList(mainHeader, mainHeaderList) : null}\n </>\n );\n const footer =\n !mainFooter && !mainBottomToolbar ? undefined : (\n <>\n {mainFooter ? chromeList(mainFooter, mainFooterList) : null}\n {mainBottomToolbar ? (\n <Toolbar\n position=\"footer\"\n label={mainBottomToolbar.label}\n density={mainBottomToolbar.density}\n dividerSides={mainBottomToolbar.dividerSides}\n centerAlign={mainBottomToolbar.centerAlign}\n responsive={mainBottomToolbar.responsive}\n responsiveAt={mainBottomToolbar.responsiveAt}\n safeAreaEdges={mainBottomToolbar.safeAreaEdges}\n leading={mainBottomToolbar.leading}\n center={mainBottomToolbar.center}\n trailing={\n <>\n {mainBottomToolbar.trailing}\n {drawer}\n </>\n }\n />\n ) : null}\n </>\n );\n const scrollHeader = mainHeaderPlacement === 'scroll';\n const scrollFooter = mainFooterPlacement === 'scroll';\n return (\n <Pane\n header={scrollHeader ? undefined : header}\n footer={scrollFooter ? undefined : footer}\n chromePlacement={\n mainHeaderPlacement === 'auto' || mainFooterPlacement === 'auto'\n ? 'auto'\n : 'fixed'\n }\n {...paneConfigProps(mainPane)}\n >\n {scrollHeader || scrollFooter ? (\n // Chrome that scrolls joins the content in one gapless column that\n // fills the scroller, so it scrolls away with the content.\n <List flex>\n {scrollHeader ? header : null}\n {main}\n {scrollFooter ? footer : null}\n </List>\n ) : (\n main\n )}\n </Pane>\n );\n}\n\n/**\n * A collapsed panel's groups when the work area has no toolbar on its side\n * to take them: a `FloatingToolbar` for the panel's restore corner, so the\n * panel can always be reopened.\n */\nexport function floatingRestore(\n workbenchId: string,\n key: WorkbenchPanelKey,\n panel: WorkbenchToolbarPanel | undefined,\n hasTargetToolbar: boolean,\n) {\n if (hasTargetToolbar) return undefined;\n const groups = relocatedGroups(workbenchId, key, panel);\n if (groups.length === 0) return undefined;\n return (\n <FloatingToolbar\n label={panel!.toolbar!.label}\n position={\n panel!.restorePosition ??\n (key === 'leftRail' ? 'bottom-start' : 'bottom-end')\n }\n >\n {groups}\n </FloatingToolbar>\n );\n}\n","import type { SafeHtml } from 'kerfjs';\n\nimport type { KerfUiContent } from '../../../shared/content/semantic-content.js';\nimport type { NavPane } from '../../../shared/panels/nav-pane.js';\nimport { ensureSunkenTexture } from '../../../shared/styles/sunken-texture.js';\nimport type { ListConfig } from '../../collections/list/list.js';\nimport type { NavStackProps } from '../../navigation/nav-stack/nav-stack.js';\nimport type { PaneConfig } from '../pane/pane.js';\nimport { ResizeGrip } from '../resizable-region/internal/resize-grip.js';\nimport {\n clampRegionSize,\n type ResizableRegionAxis,\n type ResizableRegionCollapseMotion,\n type ResizableRegionContentOverflow,\n type ResizableRegionEdge,\n type ResizableRegionPresentation,\n type ResizableRegionRestorePosition,\n type ResizableRegionSeparator,\n} from '../resizable-region/resizable-region.js';\nimport {\n WORKBENCH_MAIN_MIN_HEIGHT,\n WORKBENCH_MAIN_MIN_SIZE,\n WORKBENCH_RESIZE_DEFAULTS,\n type WorkbenchPanelKey,\n workbenchRegionId,\n} from './internal/workbench-resize.js';\nimport {\n floatingRestore,\n mainBody,\n panelBody,\n type WorkbenchChromePlacement,\n type WorkbenchMainBottomToolbar,\n type WorkbenchMainToolbar,\n type WorkbenchPanelBottomToolbar,\n type WorkbenchPanelToolbar,\n} from './internal/workbench-toolbars.js';\n\nexport type {\n WorkbenchChromePlacement,\n WorkbenchMainBottomToolbar,\n WorkbenchMainToolbar,\n WorkbenchPanelBottomToolbar,\n WorkbenchPanelToggle,\n WorkbenchPanelToolbar,\n} from './internal/workbench-toolbars.js';\n\n/**\n * The Workbench container breakpoint below which a panel presents as an\n * overlay: `narrow` (704px or less) or `compact` (448px or less) — the same\n * breakpoints as `ResizableRegion`'s `responsiveFillAt` — or `never` to keep\n * it inline at every width.\n */\nexport type WorkbenchResponsiveOverlayAt =\n 'compact' | 'narrow' | 'never' | number;\n\n/**\n * How wide a rail's overlay is in a compact (448px or less) Workbench: `inset`\n * fills the Workbench less a dismiss margin on the side away from the rail's\n * edge, so a press beside it closes it; `full` fills the Workbench.\n */\nexport type WorkbenchCompactOverlay = 'inset' | 'full';\n\n/** Drag-resize limits for a resizable Workbench panel, in px. */\nexport interface WorkbenchPanelResizable {\n /** Smallest size (default 180 for a rail, 120 for the drawer). */\n min?: number;\n /** Largest size (default 480). */\n max?: number;\n}\n\n/** Region sizing, collapse, and presentation shared by either panel body. */\ninterface WorkbenchPanelBase {\n /** Whether the panel is currently collapsed (the app owns this). */\n collapsed?: boolean;\n /**\n * Rail width, or drawer height, in px. Overrides the CSS default. For a\n * resizable panel it is the current size (default 280 for a rail, 220 for\n * the drawer), clamped to the limits; the app owns it and `wireWorkbench`\n * reports each resize.\n */\n size?: number;\n /**\n * Opt in to drag and keyboard resizing on the panel's inner separator:\n * `true` for the default limits, or `{ min, max }`. Off by default. Pair it\n * with `wireWorkbench` from `@kerfjs/ui/wire-workbench`.\n */\n resizable?: boolean | WorkbenchPanelResizable;\n /**\n * Accessible name for the panel region, in title style. A resizable\n * panel's handle is named \"Resize {label}\", or \"Resize Left Rail\" /\n * \"Resize Right Rail\" / \"Resize Bottom Drawer\" without one.\n */\n label?: string;\n /** Opt into keyboard (`0`) or programmatic (`-1`) focus on the panel region. */\n tabIndex?: 0 | -1;\n /** Keep the standard focus outline visible while this panel is expanded. */\n outlined?: boolean;\n separator?: ResizableRegionSeparator;\n collapseMotion?: ResizableRegionCollapseMotion;\n contentOverflow?: ResizableRegionContentOverflow;\n presentation?: ResizableRegionPresentation;\n /**\n * Present the panel as an overlay, without a separator, below a Workbench\n * container breakpoint, and inline above it. `compact` and `narrow` use\n * CSS container queries; a positive number is a pixel threshold measured\n * by `wireWorkbench` and requires a `collapsed` signal. A rail overlays from its side at full\n * height, over the work area and an open drawer; the bottom drawer\n * overlays the bottom of the work-area column. Rails default to `narrow`\n * (pass `never` to keep one inline); the drawer defaults to inline.\n */\n responsiveOverlayAt?: WorkbenchResponsiveOverlayAt;\n /**\n * A rail's overlay width in a compact Workbench (default `inset`: the\n * Workbench less `--kui-workbench-overlay-dismiss-margin`, 44px). Ignored\n * by the drawer.\n */\n compactOverlay?: WorkbenchCompactOverlay;\n /**\n * Control shown while collapsed, in a safe-area-aware corner of the\n * Workbench (not the viewport); the bottom drawer's sits in the work-area\n * column. Prefer `toolbar.toggle`, which the Workbench relocates into the\n * work area's toolbar (or this corner when that toolbar is absent).\n */\n restoreControl?: SafeHtml;\n restorePosition?: ResizableRegionRestorePosition;\n}\n\n/** The original static panel body: one toolbar, optional fixed chrome, and one Pane. */\nexport interface WorkbenchStaticPanel\n extends\n WorkbenchPanelBase,\n NavPane<WorkbenchPanelToolbar, WorkbenchPanelBottomToolbar> {\n /** The composed toolbar; marked groups and its toggle relocate on collapse. */\n toolbar?: WorkbenchPanelToolbar;\n headerPlacement?: WorkbenchChromePlacement;\n footerPlacement?: WorkbenchChromePlacement;\n navStack?: never;\n}\n\n/** A panel whose active NavStack view supplies the toolbar, fixed header, and scroll body. */\nexport interface WorkbenchNavigationPanel extends WorkbenchPanelBase {\n navStack: Omit<\n NavStackProps,\n 'panelToggle' | 'hideToolbar' | 'className' | 'slot'\n >;\n /** Supplies the standard toggle; active view groups precede it and may relocate on collapse. */\n toolbar: Omit<\n WorkbenchPanelToolbar,\n 'title' | 'leading' | 'center' | 'trailing'\n > & {\n toggle: NonNullable<WorkbenchPanelToolbar['toggle']>;\n };\n content?: never;\n header?: never;\n headerList?: never;\n headerPlacement?: never;\n footer?: never;\n footerList?: never;\n bottomToolbar?: never;\n footerPlacement?: never;\n pane?: never;\n}\n\n/** A collapsible Workbench side rail or bottom drawer. */\nexport type WorkbenchPanel = WorkbenchStaticPanel | WorkbenchNavigationPanel;\n\nexport interface WorkbenchProps {\n /**\n * The Workbench's `id`. Each panel's `id` derives from it —\n * `<id>-left-rail`, `<id>-right-rail`, `<id>-bottom-drawer` — so a toggle\n * can name the panel it shows and hides with `aria-controls`.\n */\n id: string;\n label: string;\n /** The central work area. */\n main: KerfUiContent;\n /**\n * The work area's top toolbar. A collapsed left rail's marked groups\n * and toggle lead it; a collapsed right rail's trail it. With it, `main`\n * renders in a `Pane` below the toolbar.\n */\n mainToolbar?: WorkbenchMainToolbar;\n /**\n * Fixed content under `mainToolbar` — supporting copy such as a\n * description — divided from the scrolling `main` below it.\n */\n mainHeader?: KerfUiContent;\n /**\n * Fixed content over `mainBottomToolbar` — a status line or a resource\n * toolbar — divided from the scrolling `main` above it.\n */\n mainFooter?: KerfUiContent;\n /**\n * The work area's bottom toolbar. A collapsed drawer's marked groups and\n * toggle trail it; without it they float in the work area's corner.\n */\n mainBottomToolbar?: WorkbenchMainBottomToolbar;\n /**\n * Whether `mainToolbar` and `mainHeader` stay pinned (`fixed`, default),\n * scroll away with `main` (`scroll`) — useful where large text would leave\n * pinned chrome little room — or stay pinned while the work area is tall\n * enough and scroll with `main` when it is short (`auto`).\n */\n mainHeaderPlacement?: WorkbenchChromePlacement;\n /** The same for `mainFooter` and `mainBottomToolbar` (default `fixed`). */\n mainFooterPlacement?: WorkbenchChromePlacement;\n /**\n * Configuration for the work area's `Pane` (`contentElement`,\n * `contentLabel`, `separators`, `safeAreaEdges`, `chromeDividers`), which it has whenever it\n * has a toolbar, `mainHeader`, or `mainFooter`; without that chrome, `main`\n * renders as given and this is ignored. Omitted or `undefined` fields keep\n * the `Pane` defaults.\n */\n mainPane?: PaneConfig;\n /** Accessible name for the central region when it needs its own landmark. */\n mainLabel?: string;\n /** Opt into keyboard (`0`) or programmatic (`-1`) focus on the central region. */\n mainTabIndex?: 0 | -1;\n /** Keep the standard focus outline visible on the central region. */\n mainOutlined?: boolean;\n /**\n * Configuration for the `List` that holds `mainHeader` (`gap`, `hAlign`,\n * `vAlign`, `dividerSides`, `textInsets`, `controlInsets`). Omitted or\n * `undefined` fields keep the defaults (no divider: the work area's\n * `Pane` draws the line under its header chrome).\n */\n mainHeaderList?: ListConfig;\n /**\n * The same for the `List` that holds `mainFooter` (no divider by default:\n * the work area's `Pane` draws the line over its footer chrome).\n */\n mainFooterList?: ListConfig;\n leftRail?: WorkbenchPanel;\n rightRail?: WorkbenchPanel;\n bottomDrawer?: WorkbenchPanel;\n /**\n * Minimum width, in px, the work area keeps beside the inline rails, fixed\n * or `resizable` (default 320; `0` turns it off). Resizing a rail stops\n * where the work area would drop below it, and inline rails shrink\n * proportionally when the Workbench gets narrower. Workbenches without a\n * rail ignore it.\n */\n mainMinSize?: number;\n /**\n * Minimum height, in px, the work area keeps above an inline bottom drawer,\n * fixed or `resizable` (default 120; `0` turns it off) — the drawer's\n * counterpart of `mainMinSize`. Resizing the drawer stops where the work\n * area would drop below it, and the drawer shrinks when the Workbench gets\n * shorter. Workbenches without a drawer ignore it.\n */\n mainMinHeight?: number;\n /** Dim the work area below any open overlay and absorb outside presses; off by default. */\n overlayBackdrop?: boolean;\n className?: string;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\ninterface ResolvedResize {\n regionId: string;\n axis: ResizableRegionAxis;\n edge: ResizableRegionEdge;\n size: number;\n min: number;\n max: number;\n}\n\n/**\n * Each panel's separator is its inner edge. Growing the left rail moves that\n * edge toward the inline end; growing the right rail or the drawer moves it\n * toward the start — the same edge vocabulary `ResizableRegion` uses.\n */\nconst EDGES: Record<WorkbenchPanelKey, ResizableRegionEdge> = {\n leftRail: 'end',\n rightRail: 'start',\n bottomDrawer: 'start',\n};\n\nconst DEFAULT_LABELS: Record<WorkbenchPanelKey, string> = {\n leftRail: 'Left Rail',\n rightRail: 'Right Rail',\n bottomDrawer: 'Bottom Drawer',\n};\n\nfunction resolveResize(\n id: string,\n key: WorkbenchPanelKey,\n panel: WorkbenchPanel,\n): ResolvedResize | undefined {\n if (!panel.resizable) return undefined;\n const defaults = WORKBENCH_RESIZE_DEFAULTS[key];\n const limits = panel.resizable === true ? {} : panel.resizable;\n const min = limits.min ?? defaults.min;\n const max = Math.max(min, limits.max ?? defaults.max);\n return {\n regionId: workbenchRegionId(id, key),\n axis: key === 'bottomDrawer' ? 'vertical' : 'horizontal',\n edge: EDGES[key],\n size: clampRegionSize(panel.size ?? defaults.size, min, max),\n min,\n max,\n };\n}\n\n/** The attributes a resizable panel adds for the resize wiring to read. */\nconst resizeAttributes = (resize: ResolvedResize | undefined) =>\n resize\n ? {\n 'data-resizable': 'true',\n 'data-region-id': resize.regionId,\n 'data-axis': resize.axis,\n 'data-edge': resize.edge,\n }\n : {};\n\n/**\n * A resizable panel's size lives in the resize wiring's track property, so a\n * drag or key press resizes the panel before the app re-renders; the CSS maps\n * it onto the rail width or drawer height.\n */\nfunction panelStyle(\n panel: WorkbenchPanel,\n resize: ResolvedResize | undefined,\n sizeProperty: string,\n) {\n if (resize) return `--kui-resizable-region-size:${resize.size}px`;\n return panel.size ? `${sizeProperty}: ${panel.size}px` : undefined;\n}\n\n/**\n * The separator a resizable panel owns: the same focusable `role=\"separator\"`\n * contract a `ResizableRegion` handle carries, so one resize wiring drives\n * both. It leaves the tab order while the panel is collapsed or not inline.\n */\nfunction PanelHandle({\n panel,\n resize,\n label,\n}: {\n panel: WorkbenchPanel;\n resize: ResolvedResize;\n label: string;\n}) {\n const inert =\n Boolean(panel.collapsed) || (panel.presentation ?? 'inline') !== 'inline';\n return (\n <div\n class=\"kui-workbench__handle\"\n role=\"separator\"\n tabindex={inert ? '-1' : '0'}\n aria-label={`Resize ${label}`}\n aria-orientation={\n resize.axis === 'horizontal' ? 'vertical' : 'horizontal'\n }\n aria-valuemin={resize.min}\n aria-valuemax={resize.max}\n aria-valuenow={resize.size}\n aria-hidden={inert ? 'true' : undefined}\n data-kui-resize-handle\n data-region-id={resize.regionId}\n >\n <span class=\"kui-workbench__handle-icon\" aria-hidden=\"true\">\n <ResizeGrip axis={resize.axis} />\n </span>\n </div>\n );\n}\n\n/**\n * A collapsed panel leaves the accessibility tree as a whole, like a collapsed\n * `CollapsiblePanel`: its content and separator are already inert or hidden,\n * so the labeled landmark would otherwise stay behind, empty, for a screen\n * reader to land on. Its restore control renders outside it and stays\n * reachable.\n */\nfunction hiddenFromAccessibility(panel: WorkbenchPanel) {\n return panel.collapsed || panel.presentation === 'hidden'\n ? ('true' as const)\n : undefined;\n}\n\n/** A breakpoint's attribute value; `never` (or none) renders no attribute. */\nconst responsiveAt = (at: WorkbenchResponsiveOverlayAt | undefined) =>\n at === 'never' ? undefined : at;\n\nconst inline = (panel: WorkbenchPanel | undefined) =>\n Boolean(panel && (panel.presentation ?? 'inline') === 'inline');\n\nconst expanded = (panel: WorkbenchPanel | undefined) =>\n Boolean(panel && !panel.collapsed);\n\nconst responsiveRail = (panel: WorkbenchPanel | undefined) =>\n panel ? responsiveAt(panel.responsiveOverlayAt ?? 'narrow') : undefined;\n\nconst responsiveDrawer = (panel: WorkbenchPanel | undefined) =>\n panel ? responsiveAt(panel.responsiveOverlayAt) : undefined;\n\nfunction Rail({\n id,\n side,\n panel,\n}: {\n id: string;\n side: 'left' | 'right';\n panel: WorkbenchPanel;\n}) {\n const key: WorkbenchPanelKey = side === 'left' ? 'leftRail' : 'rightRail';\n const resize = resolveResize(id, key, panel);\n return (\n <aside\n id={workbenchRegionId(id, key)}\n class={`kui-workbench__rail kui-workbench__rail--${side}`}\n data-workbench-rail={side}\n data-appearance={\n !panel.toolbar && panel.pane?.appearance === 'sunken'\n ? 'sunken'\n : undefined\n }\n data-collapsed={String(panel.collapsed ?? false)}\n data-outlined={\n !panel.collapsed && panel.presentation !== 'hidden' && panel.outlined\n ? 'true'\n : undefined\n }\n data-separator={panel.separator ?? 'auto'}\n data-collapse-motion={panel.collapseMotion ?? 'slide'}\n data-content-overflow={panel.contentOverflow ?? 'clip'}\n data-presentation={panel.presentation ?? 'inline'}\n data-responsive-overlay-at={responsiveAt(\n panel.responsiveOverlayAt ?? 'narrow',\n )}\n data-compact-overlay={panel.compactOverlay ?? 'inset'}\n {...resizeAttributes(resize)}\n aria-label={panel.label || undefined}\n aria-hidden={hiddenFromAccessibility(panel)}\n tabindex={\n panel.collapsed || panel.presentation === 'hidden'\n ? panel.tabIndex === undefined\n ? undefined\n : -1\n : panel.tabIndex\n }\n inert={Boolean(panel.collapsed)}\n style={panelStyle(panel, resize, '--kui-workbench-rail-width')}\n >\n <div\n class=\"kui-workbench__panel-content\"\n data-workbench-panel-content\n inert={Boolean(panel.collapsed)}\n >\n {panelBody(id, key, panel)}\n </div>\n {resize && (\n <PanelHandle\n panel={panel}\n resize={resize}\n label={panel.label || DEFAULT_LABELS[key]}\n />\n )}\n </aside>\n );\n}\n\nfunction Drawer({ id, panel }: { id: string; panel: WorkbenchPanel }) {\n const resize = resolveResize(id, 'bottomDrawer', panel);\n return (\n <section\n id={workbenchRegionId(id, 'bottomDrawer')}\n class=\"kui-workbench__drawer\"\n data-workbench-drawer\n data-appearance={\n !panel.toolbar && panel.pane?.appearance === 'sunken'\n ? 'sunken'\n : undefined\n }\n data-collapsed={String(panel.collapsed ?? false)}\n data-outlined={\n !panel.collapsed && panel.presentation !== 'hidden' && panel.outlined\n ? 'true'\n : undefined\n }\n data-separator={panel.separator ?? 'auto'}\n data-collapse-motion={panel.collapseMotion ?? 'slide'}\n data-content-overflow={panel.contentOverflow ?? 'clip'}\n data-presentation={panel.presentation ?? 'inline'}\n data-responsive-overlay-at={responsiveAt(panel.responsiveOverlayAt)}\n {...resizeAttributes(resize)}\n aria-label={panel.label || undefined}\n aria-hidden={hiddenFromAccessibility(panel)}\n tabindex={\n panel.collapsed || panel.presentation === 'hidden'\n ? panel.tabIndex === undefined\n ? undefined\n : -1\n : panel.tabIndex\n }\n inert={Boolean(panel.collapsed)}\n style={panelStyle(panel, resize, '--kui-workbench-drawer-height')}\n >\n <div\n class=\"kui-workbench__panel-content\"\n data-workbench-panel-content\n inert={Boolean(panel.collapsed)}\n >\n {panelBody(id, 'bottomDrawer', panel)}\n </div>\n {resize && (\n <PanelHandle\n panel={panel}\n resize={resize}\n label={panel.label || DEFAULT_LABELS.bottomDrawer}\n />\n )}\n </section>\n );\n}\n\n/** A collapsed panel's restore control, outside the clipped panel. */\nfunction restore(\n panel: WorkbenchPanel | undefined,\n side: 'left' | 'right' | 'bottom',\n position: ResizableRegionRestorePosition,\n generated: SafeHtml | undefined,\n) {\n const control = panel?.restoreControl ?? generated;\n if (!panel?.collapsed || !control || panel.presentation === 'hidden')\n return '';\n return (\n <div\n class=\"kui-workbench__restore\"\n data-panel={side}\n data-position={panel.restorePosition ?? position}\n >\n {control}\n </div>\n );\n}\n\n/**\n * The Xcode-like multi-panel workspace: a collapsible left rail, right rail, and\n * bottom drawer around a central work area (any absent). Collapsing snaps the\n * panel's track to zero in one reflow while its fixed-size content slides out via\n * a composited transform — the instant-width / sliding-content technique, so the\n * work area relayouts once, not per frame. Bottom-drawer content stays anchored\n * to the shell's stable bottom edge throughout that transition. The app owns\n * each `collapsed` flag; the collapse is pure CSS. A collapsed panel renders\n * `inert` and `aria-hidden`, so neither Tab nor assistive technology reaches\n * controls that have slid out of view or an empty landmark (its restore control\n * lives outside it and stays reachable). A panel may opt in to drag and keyboard resizing with\n * `resizable`, which `wireWorkbench` drives. See `docs/23-app-layouts.md` §3.3.\n */\nexport function Workbench({\n id,\n label,\n main,\n leftRail,\n rightRail,\n bottomDrawer,\n mainToolbar,\n mainHeader,\n mainFooter,\n mainBottomToolbar,\n mainHeaderPlacement,\n mainFooterPlacement,\n mainPane,\n mainLabel,\n mainTabIndex,\n mainOutlined = false,\n mainHeaderList,\n mainFooterList,\n mainMinSize = WORKBENCH_MAIN_MIN_SIZE,\n mainMinHeight = WORKBENCH_MAIN_MIN_HEIGHT,\n overlayBackdrop = false,\n className = '',\n slot,\n}: WorkbenchProps) {\n // Each work-area minimum applies only on an axis a panel shares with it:\n // the width beside a rail, the height above the drawer.\n const px = (value: number) => Math.max(0, Math.round(value));\n const mainMin = leftRail || rightRail ? px(mainMinSize) : undefined;\n const mainMinBlock = bottomDrawer ? px(mainMinHeight) : undefined;\n const style = [\n mainMin === undefined ? '' : `--_kui-workbench-main-min-width:${mainMin}px`,\n mainMinBlock === undefined\n ? ''\n : `--_kui-workbench-main-min-height:${mainMinBlock}px`,\n ]\n .filter(Boolean)\n .join(';');\n // A region painted directly (no composed Pane chrome) needs the texture too.\n if (\n [leftRail, rightRail, bottomDrawer].some(\n (panel) => panel?.pane?.appearance === 'sunken',\n ) ||\n mainPane?.appearance === 'sunken'\n )\n ensureSunkenTexture();\n return (\n <section\n class={`kui-workbench ${className}`.trim()}\n id={id}\n data-component=\"workbench\"\n data-main-min-size={mainMin === undefined ? undefined : String(mainMin)}\n data-main-min-height={\n mainMinBlock === undefined ? undefined : String(mainMinBlock)\n }\n data-left-inline-expanded={\n inline(leftRail) && expanded(leftRail) ? 'true' : undefined\n }\n data-right-inline-expanded={\n inline(rightRail) && expanded(rightRail) ? 'true' : undefined\n }\n data-left-responsive-inline={\n inline(leftRail) ? responsiveRail(leftRail) : undefined\n }\n data-right-responsive-inline={\n inline(rightRail) ? responsiveRail(rightRail) : undefined\n }\n data-left-responsive-expanded={\n inline(leftRail) && expanded(leftRail)\n ? responsiveRail(leftRail)\n : undefined\n }\n data-right-responsive-expanded={\n inline(rightRail) && expanded(rightRail)\n ? responsiveRail(rightRail)\n : undefined\n }\n data-rail-overlay-expanded={\n (leftRail?.presentation === 'overlay' && expanded(leftRail)) ||\n (rightRail?.presentation === 'overlay' && expanded(rightRail))\n ? 'true'\n : undefined\n }\n data-drawer-overlay-expanded={\n bottomDrawer?.presentation === 'overlay' && expanded(bottomDrawer)\n ? 'true'\n : undefined\n }\n data-drawer-responsive-expanded={\n inline(bottomDrawer) && expanded(bottomDrawer)\n ? responsiveDrawer(bottomDrawer)\n : undefined\n }\n data-overlay-backdrop={overlayBackdrop ? 'true' : undefined}\n data-responsive-overlay={\n responsiveRail(leftRail) ||\n responsiveRail(rightRail) ||\n responsiveDrawer(bottomDrawer)\n ? 'true'\n : undefined\n }\n style={style || undefined}\n aria-label={label}\n slot={slot}\n >\n {leftRail && <Rail id={id} side=\"left\" panel={leftRail} />}\n {restore(\n leftRail,\n 'left',\n 'bottom-start',\n floatingRestore(id, 'leftRail', leftRail, Boolean(mainToolbar)),\n )}\n <div class=\"kui-workbench__center\">\n <div\n class=\"kui-workbench__main\"\n data-workbench-main\n data-outlined={mainOutlined ? 'true' : undefined}\n role={mainLabel ? 'region' : undefined}\n aria-label={mainLabel}\n tabindex={mainTabIndex}\n data-drawer-inline-expanded={\n inline(bottomDrawer) && expanded(bottomDrawer) ? 'true' : undefined\n }\n data-drawer-responsive-inline={\n inline(bottomDrawer) ? responsiveDrawer(bottomDrawer) : undefined\n }\n data-appearance={\n !mainToolbar &&\n !mainBottomToolbar &&\n !mainHeader &&\n !mainFooter &&\n mainPane?.appearance === 'sunken'\n ? 'sunken'\n : undefined\n }\n >\n {mainBody({\n workbenchId: id,\n main,\n mainToolbar,\n mainHeader,\n mainFooter,\n mainBottomToolbar,\n mainHeaderPlacement,\n mainFooterPlacement,\n mainPane,\n mainHeaderList,\n mainFooterList,\n leftRail,\n rightRail,\n bottomDrawer,\n })}\n </div>\n {bottomDrawer && <Drawer id={id} panel={bottomDrawer} />}\n {restore(\n bottomDrawer,\n 'bottom',\n 'bottom-end',\n floatingRestore(\n id,\n 'bottomDrawer',\n bottomDrawer,\n Boolean(mainBottomToolbar),\n ),\n )}\n </div>\n {rightRail && <Rail id={id} side=\"right\" panel={rightRail} />}\n {restore(\n rightRail,\n 'right',\n 'bottom-end',\n floatingRestore(id, 'rightRail', rightRail, Boolean(mainToolbar)),\n )}\n {overlayBackdrop ? (\n <div\n class=\"kui-workbench__backdrop\"\n data-workbench-backdrop\n aria-hidden=\"true\"\n />\n ) : null}\n </section>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/forms/token-search-field/token-search-field.tsx"],"names":[],"mappings":"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","file":"chunk-ZJC5ND3M.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\nimport { Search, X } from 'lucide';\n\nimport type { KerfUiContent } from '../../../shared/content/semantic-content.js';\nimport { LucideIcon } from '../../media/lucide-icon/lucide-icon.js';\nimport type { TokenSearchModel } from './model/token-search-model.js';\n\nexport interface TokenSearchToken {\n value: string;\n label: string;\n offset?: number;\n accessibleLabel?: string;\n}\n\n/**\n * Domain `data-*` metadata for a trailing action button. The component owns\n * `data-action` (pass `action`) and its state attributes.\n */\nexport type TokenSearchTrailingActionAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-action'?: never;\n 'data-component'?: never;\n 'data-key'?: never;\n }\n>;\n\ninterface TokenSearchTrailingActionBase {\n /** Decorative glyph, such as a `LucideIcon`. */\n icon: SafeHtml;\n /** Accessible name and tooltip, in title style (\"Search Help\"). */\n label: string;\n /** Delegated `data-action` value. */\n action: string;\n id?: string;\n /** `aria-controls`: the id of the surface this button opens or toggles. */\n controls?: string;\n /** `aria-haspopup` for a button that opens a dialog, menu, or listbox. */\n haspopup?: 'dialog' | 'menu' | 'listbox' | 'true';\n /** Domain `data-*` metadata for the app's delegated handler. */\n attributes?: TokenSearchTrailingActionAttributes;\n}\n\n/**\n * A compact icon button in the field's trailing slot, sized and styled like\n * the clear button. Pass `expanded` for a disclosure (a help surface it opens)\n * or `pressed` for a toggle; the button shows the state with its hover fill.\n */\nexport type TokenSearchTrailingAction = TokenSearchTrailingActionBase &\n (\n | { expanded?: boolean; pressed?: never }\n | { expanded?: never; pressed?: boolean }\n );\n\nexport type TokenSearchEditorAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-component'?: never;\n 'data-key'?: never;\n 'data-morph-skip'?: never;\n 'data-token-search-editor'?: never;\n 'data-token-count'?: never;\n 'data-placeholder'?: never;\n }\n>;\n\ninterface TokenSearchFieldBaseProps {\n id: string;\n label: string;\n query?: string;\n tokens?: readonly TokenSearchToken[];\n /** Opt-in grammar, suggestion, and evaluation state. Overrides `query` and `tokens`. */\n model?: TokenSearchModel;\n /**\n * Editor identity for a programmatic text replacement. The editor's text is\n * DOM-owned between token changes, so a new `query` with the same tokens\n * does not re-render it (that would reset the caret on every keystroke).\n * Change `revision` when the app replaces the text itself — reseeding a\n * persistent dialog's field on reopen, applying a saved search — and the\n * editor is rebuilt from `query` and `tokens`.\n */\n revision?: string | number;\n placeholder?: string;\n tokenPlaceholder?: string;\n disabled?: boolean;\n autofocus?: boolean;\n /** Let an expanded collapsible field consume the available inline width. */\n fill?: boolean;\n leading?: KerfUiContent;\n editAction?: string;\n removeAction?: string;\n clearAction?: string;\n clearLabel?: string;\n /** Icon for the clear button. Default: the Lucide `x` glyph token chips also use. */\n clearIcon?: SafeHtml;\n className?: string;\n editorAttributes?: TokenSearchEditorAttributes;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\ntype TokenSearchTrailingProps =\n | { trailing?: KerfUiContent; trailingAction?: never }\n | { trailing?: never; trailingAction: TokenSearchTrailingAction };\n\ntype TokenSearchPresentationProps =\n | {\n /** Standalone field chrome or the inset visual layer of a configured toolbar group. */\n presentation?: 'standalone' | 'toolbar-group';\n hint?: never;\n required?: never;\n }\n | {\n /** Visible form label and optional hint around the full-width standalone control. */\n presentation: 'form-field';\n hint?: string;\n /** Marks the editor required; the app validates its value. */\n required?: boolean;\n };\n\ntype TokenSearchCollapsibleProps =\n | {\n /** Allow an empty field to render as one iconic action. */\n collapsible: true;\n /** Keep an empty collapsible field open while the application owns focus. */\n expanded?: boolean;\n expandAction?: string;\n expandLabel?: string;\n }\n | {\n collapsible?: false;\n expanded?: never;\n expandAction?: never;\n expandLabel?: never;\n };\n\nexport type TokenSearchFieldProps = TokenSearchFieldBaseProps &\n TokenSearchCollapsibleProps &\n TokenSearchTrailingProps &\n TokenSearchPresentationProps;\n\nexport interface TokenSearchFieldValue {\n query: string;\n tokens: TokenSearchToken[];\n}\n\ntype TokenSearchPart =\n { kind: 'text'; value: string } | { kind: 'token'; token: TokenSearchToken };\n\nfunction orderedParts(\n query: string,\n tokens: readonly TokenSearchToken[],\n): TokenSearchPart[] {\n const ordered = tokens\n .map((token, index) => ({\n token,\n index,\n offset: Math.max(0, Math.min(query.length, token.offset ?? query.length)),\n }))\n .sort(\n (left, right) => left.offset - right.offset || left.index - right.index,\n );\n const parts: TokenSearchPart[] = [];\n let cursor = 0;\n for (const { token, offset } of ordered) {\n parts.push({ kind: 'text', value: query.slice(cursor, offset) });\n parts.push({ kind: 'token', token: { ...token, offset } });\n cursor = offset;\n }\n parts.push({ kind: 'text', value: query.slice(cursor) });\n return parts;\n}\n\nfunction CloseIcon() {\n return <LucideIcon icon={X} name=\"x\" />;\n}\n\nexport function TokenSearchField({\n id,\n label,\n query = '',\n tokens = [],\n model,\n revision,\n placeholder = 'Search',\n tokenPlaceholder = 'Add search…',\n disabled = false,\n autofocus = false,\n fill = false,\n collapsible = false,\n expanded = false,\n expandAction = 'expand-token-search',\n expandLabel,\n leading,\n trailing,\n trailingAction,\n presentation = 'standalone',\n hint,\n required = false,\n editAction = 'edit-search-token',\n removeAction = 'remove-search-token',\n clearAction = 'clear-token-search',\n clearLabel = 'Clear Search',\n clearIcon,\n className = '',\n editorAttributes = {},\n slot,\n}: TokenSearchFieldProps) {\n // A managed model subscribes the host render to `structure` (token,\n // emptiness, and revision changes) only. The live text is DOM-owned between\n // structural changes, so it is peeked, not read: typing must not re-run the\n // host render on every keystroke.\n const structure = model?.structure.value;\n if (model) ({ query, tokens } = model.state.peek());\n const suggestions = model?.suggestions.value ?? [];\n const parts = orderedParts(query, tokens);\n const tokenKey = tokens.map((token) => token.value).join('|');\n const key = structure\n ? `${id}@${String(revision ?? '')}:${structure.editorRevision}:${tokenKey}`\n : revision === undefined\n ? `${id}:${tokenKey}`\n : `${id}@${String(revision)}:${tokenKey}`;\n const resolvedExpanded =\n !collapsible || expanded || query.length > 0 || tokens.length > 0;\n const control = (\n <div\n class={`kui-token-search ${presentation === 'form-field' ? '' : className}`.trim()}\n data-component=\"token-search-field\"\n data-token-search-id={id}\n data-disabled={String(disabled)}\n data-collapsible={String(collapsible)}\n data-expanded={String(resolvedExpanded)}\n data-fill={String(fill)}\n data-has-trailing={String(Boolean(trailing || trailingAction))}\n data-presentation={presentation}\n data-placeholder={tokens.length ? tokenPlaceholder : placeholder}\n data-placeholder-visible={String(\n query.length === 0 && tokens.length === 0,\n )}\n slot={slot}\n >\n {!resolvedExpanded ? (\n <button\n type=\"button\"\n class=\"kui-token-search__expand\"\n data-action={expandAction}\n aria-label={expandLabel ?? label}\n title={expandLabel ?? label}\n disabled={disabled}\n >\n <LucideIcon icon={Search} name=\"search\" />\n </button>\n ) : (\n <>\n <span class=\"kui-token-search__leading\" aria-hidden=\"true\">\n {leading ?? <LucideIcon icon={Search} name=\"search\" />}\n </span>\n <div\n {...editorAttributes}\n class=\"kui-token-search__editor\"\n data-key={key}\n data-morph-skip\n data-token-search-editor={id}\n data-token-count={tokens.length}\n data-placeholder={tokens.length ? tokenPlaceholder : placeholder}\n role=\"searchbox\"\n aria-label={presentation === 'form-field' ? undefined : label}\n aria-labelledby={\n presentation === 'form-field' ? `${id}-label` : undefined\n }\n aria-describedby={\n presentation === 'form-field' && hint ? `${id}-hint` : undefined\n }\n aria-required={required ? 'true' : undefined}\n aria-disabled={disabled ? 'true' : undefined}\n contenteditable={disabled ? 'false' : 'true'}\n spellcheck=\"false\"\n autofocus={autofocus}\n >\n {parts.map((part) =>\n part.kind === 'text' ? (\n <span\n data-token-search-text\n data-empty={String(part.value.length === 0)}\n >\n {part.value || (tokens.length ? '\\u200b' : '')}\n </span>\n ) : (\n <span\n class=\"kui-token-search__token\"\n contenteditable=\"false\"\n data-component=\"token-search-token\"\n data-token-value={part.token.value}\n >\n <button\n type=\"button\"\n class=\"kui-token-search__token-edit\"\n data-action={editAction}\n data-token-value={part.token.value}\n aria-label={`Edit ${part.token.accessibleLabel ?? part.token.label}`}\n disabled={disabled}\n >\n {part.token.label}\n </button>\n <button\n type=\"button\"\n class=\"kui-token-search__token-remove\"\n data-action={removeAction}\n data-token-value={part.token.value}\n aria-label={`Remove ${part.token.accessibleLabel ?? part.token.label}`}\n disabled={disabled}\n >\n <CloseIcon />\n </button>\n </span>\n ),\n )}\n </div>\n {(query || tokens.length > 0) && (\n <button\n type=\"button\"\n class=\"kui-token-search__clear\"\n data-action={clearAction}\n aria-label={clearLabel}\n title={clearLabel}\n disabled={disabled}\n >\n {clearIcon ?? <CloseIcon />}\n </button>\n )}\n {trailingAction ? (\n <button\n {...trailingAction.attributes}\n type=\"button\"\n class=\"kui-token-search__trailing-action\"\n id={trailingAction.id}\n data-action={trailingAction.action}\n aria-label={trailingAction.label}\n aria-expanded={\n trailingAction.expanded === undefined\n ? undefined\n : String(trailingAction.expanded)\n }\n aria-pressed={\n trailingAction.pressed === undefined\n ? undefined\n : String(trailingAction.pressed)\n }\n aria-controls={trailingAction.controls}\n aria-haspopup={trailingAction.haspopup}\n title={trailingAction.label}\n disabled={disabled}\n >\n {trailingAction.icon}\n </button>\n ) : trailing ? (\n <span class=\"kui-token-search__trailing\">{trailing}</span>\n ) : null}\n {!disabled && suggestions.length > 0 && (\n <div\n class=\"kui-token-search__suggestions\"\n data-token-search-keep-open\n >\n {suggestions.map((suggestion) => (\n <button\n type=\"button\"\n class=\"kui-token-search__suggestion\"\n data-token-search-suggestion={suggestion.value}\n >\n {suggestion.label}\n </button>\n ))}\n </div>\n )}\n </>\n )}\n </div>\n );\n if (presentation !== 'form-field') return control;\n return (\n <div\n class={`kui-token-search__field ${className}`.trim()}\n data-token-search-form-field={id}\n >\n <div\n class=\"kui-token-search__field-label\"\n id={`${id}-label`}\n data-token-search-form-label={id}\n >\n {label}\n {required && (\n <span class=\"kui-token-search__field-required\" aria-hidden=\"true\">\n *\n </span>\n )}\n </div>\n {control}\n {hint && (\n <div class=\"kui-token-search__field-hint\" id={`${id}-hint`}>\n {hint}\n </div>\n )}\n </div>\n );\n}\n\n/** Read editable text and ordered token offsets from a rendered TokenSearchField editor. */\nexport function readTokenSearchField(\n editor: HTMLElement,\n knownTokens: readonly TokenSearchToken[] = [],\n): TokenSearchFieldValue {\n let query = '';\n const tokens: TokenSearchToken[] = [];\n const visit = (node: Node): void => {\n if (node.nodeType === Node.TEXT_NODE) {\n query += (node.textContent ?? '')\n .replaceAll('\\u00a0', ' ')\n .replaceAll('\\u200b', '');\n return;\n }\n if (!(node instanceof HTMLElement)) return;\n if (node.matches('[data-component=\"token-search-token\"]')) {\n const value = node.dataset.tokenValue;\n const known = knownTokens.find((token) => token.value === value);\n if (known) tokens.push({ ...known, offset: query.length });\n else if (value)\n tokens.push({ value, label: value, offset: query.length });\n return;\n }\n if (node.tagName === 'BR') {\n query += ' ';\n return;\n }\n for (const child of node.childNodes) visit(child);\n };\n for (const child of editor.childNodes) visit(child);\n return { query, tokens };\n}\n\n/** Focus an editor and place its caret at a text offset, skipping atomic token chips. */\nexport function placeTokenSearchCaret(\n editor: HTMLElement,\n offset?: number,\n): void {\n editor.focus({ preventScroll: true });\n const selection = globalThis.getSelection();\n if (!selection) return;\n const range = document.createRange();\n if (offset === undefined) {\n range.selectNodeContents(editor);\n range.collapse(false);\n } else {\n let remaining = Math.max(0, offset);\n let found = false;\n const walker = document.createTreeWalker(editor, NodeFilter.SHOW_TEXT, {\n acceptNode: (node) =>\n node.parentElement?.closest('[data-component=\"token-search-token\"]')\n ? NodeFilter.FILTER_REJECT\n : NodeFilter.FILTER_ACCEPT,\n });\n for (let node = walker.nextNode(); node; node = walker.nextNode()) {\n const source = node.textContent ?? '';\n const length = source.replaceAll('\\u200b', '').length;\n if (remaining <= length) {\n range.setStart(\n node,\n source === '\\u200b' ? 0 : Math.min(remaining, source.length),\n );\n range.collapse(true);\n found = true;\n break;\n }\n remaining -= length;\n }\n if (!found) {\n range.selectNodeContents(editor);\n range.collapse(false);\n }\n }\n selection.removeAllRanges();\n selection.addRange(range);\n}\n"]}
package/dist/composer.js DELETED
@@ -1,5 +0,0 @@
1
- export { Composer } from './chunk-AV7CPAPT.js';
2
-
3
-
4
-
5
- //# sourceMappingURL=composer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"composer.js"}
@@ -1,46 +0,0 @@
1
- import * as kerfjs from 'kerfjs';
2
- import { LucideNode } from './lucide-icon.js';
3
- import 'lucide';
4
- import './css-values.js';
5
-
6
- type IconButtonAppearance = 'accent' | 'filled' | 'outlined' | 'filled-outlined' | 'plain';
7
- type IconButtonVariant = 'neutral' | 'brand' | 'success' | 'warning' | 'danger';
8
- type IconButtonSize = 'xs' | 's' | 'm' | 'l' | 'xl';
9
- type IconButtonRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
10
- 'data-component'?: never;
11
- 'data-action'?: never;
12
- }>;
13
- interface IconButtonProps {
14
- /** The Lucide-compatible icon node shown alone in the button. */
15
- icon: LucideNode;
16
- /** The icon's stable name, as `LucideIcon` takes it. */
17
- iconName: string;
18
- /** Accessible name; the button has no visible text, so it is required. */
19
- label: string;
20
- /** Delegated `data-action` the application handles. */
21
- action?: string;
22
- /** Web Awesome appearance; defaults to Web Awesome's own. */
23
- appearance?: IconButtonAppearance;
24
- /** Web Awesome semantic variant; defaults to Web Awesome's own. */
25
- variant?: IconButtonVariant;
26
- /** Web Awesome control size; the square follows its control height. */
27
- size?: IconButtonSize;
28
- type?: 'button' | 'submit' | 'reset';
29
- disabled?: boolean;
30
- id?: string;
31
- className?: string;
32
- /** Safe `data-*` metadata; `data-component` and `data-action` stay owned. */
33
- rootAttributes?: IconButtonRootAttributes;
34
- /** Native named-slot assignment when composed inside a web component. */
35
- slot?: string;
36
- }
37
- /**
38
- * An icon-only Web Awesome button with a `LucideIcon`: square, one form
39
- * control height on each side, so it matches an adjacent `wa-input` or
40
- * `Select`. Web Awesome squares a button only for a lone `wa-icon`; this is
41
- * the Kerf form for Lucide icons. Register `wa-button` once
42
- * (`@awesome.me/webawesome/dist/components/button/button.js`).
43
- */
44
- declare function IconButton({ icon, iconName, label, action, appearance, variant, size, type, disabled, id, className, rootAttributes, slot, }: IconButtonProps): kerfjs.SafeHtml;
45
-
46
- export { IconButton, type IconButtonAppearance, type IconButtonProps, type IconButtonSize, type IconButtonVariant };
@@ -1,6 +0,0 @@
1
- export { IconButton } from './chunk-VFYO3UGZ.js';
2
-
3
-
4
-
5
-
6
- //# sourceMappingURL=icon-button.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"icon-button.js"}