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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (759) hide show
  1. package/README.md +163 -116
  2. package/ai/application-ui-profile.defaults.json +125 -4
  3. package/ai/compile-time-contracts-v1.json +11 -11
  4. package/ai/component-catalog.json +2606 -627
  5. package/ai/component-composition-rules.json +11 -10
  6. package/ai/component-composition.json +1689 -300
  7. package/ai/components/README.md +66 -48
  8. package/ai/components/application-tabs.md +4 -4
  9. package/ai/components/badge.md +1 -0
  10. package/ai/components/button.md +91 -0
  11. package/ai/components/checkbox.md +89 -0
  12. package/ai/components/choice-chips.md +9 -3
  13. package/ai/components/color-field.md +92 -0
  14. package/ai/components/color-picker.md +90 -0
  15. package/ai/components/color-swatches.md +82 -0
  16. package/ai/components/combobox.md +6 -4
  17. package/ai/components/content-item.md +5 -2
  18. package/ai/components/disclosure.md +83 -0
  19. package/ai/components/file-picker.md +1 -0
  20. package/ai/components/foundation.md +1 -1
  21. package/ai/components/list-action-row.md +3 -3
  22. package/ai/components/list-detail-dialog.md +90 -0
  23. package/ai/components/list.md +2 -0
  24. package/ai/components/lucide-icon.md +2 -0
  25. package/ai/components/{composer.md → message-composer.md} +17 -16
  26. package/ai/components/pane.md +3 -1
  27. package/ai/components/popup-menu.md +12 -9
  28. package/ai/components/progress-bar.md +82 -0
  29. package/ai/components/progress-ring.md +80 -0
  30. package/ai/components/radio-group.md +88 -0
  31. package/ai/components/recipe-list-detail-dialog.md +5 -5
  32. package/ai/components/search-field.md +108 -0
  33. package/ai/components/select.md +15 -13
  34. package/ai/components/slider.md +84 -0
  35. package/ai/components/surface-scaffold.md +16 -13
  36. package/ai/components/switch.md +81 -0
  37. package/ai/components/tab-bar.md +6 -6
  38. package/ai/components/tab-navigator.md +2 -2
  39. package/ai/components/tabs.md +7 -7
  40. package/ai/components/tag-field.md +86 -0
  41. package/ai/components/text-field.md +98 -0
  42. package/ai/components/text.md +1 -0
  43. package/ai/components/toast.md +85 -0
  44. package/ai/components/toolbar-control-group.md +3 -3
  45. package/ai/components/tooltip.md +81 -0
  46. package/ai/components/wa-accordion-item.md +11 -5
  47. package/ai/components/wa-accordion.md +11 -5
  48. package/ai/components/wa-animated-image.md +2 -1
  49. package/ai/components/wa-animation.md +1 -0
  50. package/ai/components/wa-avatar.md +1 -0
  51. package/ai/components/wa-badge.md +10 -3
  52. package/ai/components/wa-breadcrumb-item.md +1 -0
  53. package/ai/components/wa-breadcrumb.md +1 -0
  54. package/ai/components/wa-button-group.md +6 -4
  55. package/ai/components/wa-button.md +7 -5
  56. package/ai/components/wa-callout.md +7 -5
  57. package/ai/components/wa-card.md +12 -4
  58. package/ai/components/wa-carousel-item.md +1 -0
  59. package/ai/components/wa-carousel.md +1 -0
  60. package/ai/components/wa-checkbox-group.md +11 -4
  61. package/ai/components/wa-checkbox.md +10 -4
  62. package/ai/components/wa-color-picker.md +13 -5
  63. package/ai/components/wa-comparison.md +2 -1
  64. package/ai/components/wa-copy-button.md +1 -0
  65. package/ai/components/wa-details.md +11 -5
  66. package/ai/components/wa-dialog.md +10 -4
  67. package/ai/components/wa-divider.md +1 -0
  68. package/ai/components/wa-drawer.md +12 -5
  69. package/ai/components/wa-dropdown-item.md +8 -6
  70. package/ai/components/wa-dropdown.md +8 -6
  71. package/ai/components/wa-format-bytes.md +1 -0
  72. package/ai/components/wa-format-date.md +1 -0
  73. package/ai/components/wa-format-number.md +1 -0
  74. package/ai/components/wa-icon.md +2 -1
  75. package/ai/components/wa-include.md +6 -4
  76. package/ai/components/wa-input.md +9 -6
  77. package/ai/components/wa-intersection-observer.md +1 -0
  78. package/ai/components/wa-known-date.md +1 -0
  79. package/ai/components/wa-markdown.md +1 -0
  80. package/ai/components/wa-mutation-observer.md +1 -0
  81. package/ai/components/wa-number-input.md +1 -0
  82. package/ai/components/wa-option.md +7 -5
  83. package/ai/components/wa-otp-input.md +1 -0
  84. package/ai/components/wa-page.md +13 -4
  85. package/ai/components/wa-pagination.md +1 -0
  86. package/ai/components/wa-popover.md +11 -5
  87. package/ai/components/wa-popup.md +11 -4
  88. package/ai/components/wa-progress-bar.md +11 -4
  89. package/ai/components/wa-progress-ring.md +11 -4
  90. package/ai/components/wa-qr-code.md +1 -0
  91. package/ai/components/wa-radio-group.md +12 -4
  92. package/ai/components/wa-radio.md +10 -4
  93. package/ai/components/wa-random-content.md +1 -0
  94. package/ai/components/wa-rating.md +1 -0
  95. package/ai/components/wa-relative-time.md +1 -0
  96. package/ai/components/wa-resize-observer.md +1 -0
  97. package/ai/components/wa-scroller.md +12 -4
  98. package/ai/components/wa-select.md +7 -5
  99. package/ai/components/wa-skeleton.md +10 -3
  100. package/ai/components/wa-slider.md +11 -5
  101. package/ai/components/wa-spinner.md +7 -5
  102. package/ai/components/wa-split-panel.md +7 -5
  103. package/ai/components/wa-step.md +56 -0
  104. package/ai/components/wa-stepper.md +56 -0
  105. package/ai/components/wa-switch.md +10 -3
  106. package/ai/components/wa-tab-group.md +8 -6
  107. package/ai/components/wa-tab-panel.md +7 -5
  108. package/ai/components/wa-tab.md +8 -6
  109. package/ai/components/wa-tag-input.md +62 -0
  110. package/ai/components/wa-tag.md +9 -6
  111. package/ai/components/wa-textarea.md +10 -3
  112. package/ai/components/wa-time-input.md +1 -0
  113. package/ai/components/wa-toast-item.md +9 -7
  114. package/ai/components/wa-toast.md +9 -7
  115. package/ai/components/wa-tooltip.md +11 -5
  116. package/ai/components/wa-tree-item.md +2 -1
  117. package/ai/components/wa-tree.md +2 -1
  118. package/ai/components/wa-zoomable-frame.md +2 -1
  119. package/ai/components/workbench-dialog.md +90 -0
  120. package/ai/public-api-signatures-v1.md +1577 -245
  121. package/ai/skill.md +83 -50
  122. package/ai/webawesome-jsx-signatures-v1.md +4 -1
  123. package/dist/badge.d.ts +9 -1
  124. package/dist/badge.js +1 -1
  125. package/dist/browser/button.js +5 -0
  126. package/dist/browser/catalog.js +3 -2
  127. package/dist/browser/{icon-button.js → checkbox.js} +2 -2
  128. package/dist/browser/color-field.js +4 -0
  129. package/dist/browser/color-picker.js +5 -0
  130. package/dist/browser/color-swatches.js +3 -0
  131. package/dist/browser/disclosure.js +5 -0
  132. package/dist/browser/list-action-row.js +1 -0
  133. package/dist/browser/list-detail-dialog.js +14 -0
  134. package/dist/browser/message-composer.js +5 -0
  135. package/dist/browser/popup-menu.js +1 -0
  136. package/dist/browser/progress-bar.js +3 -0
  137. package/dist/browser/progress-ring.js +3 -0
  138. package/dist/browser/radio-group.js +3 -0
  139. package/dist/browser/search-field.js +4 -0
  140. package/dist/browser/slider.js +3 -0
  141. package/dist/browser/surface-scaffold.js +1 -0
  142. package/dist/browser/switch.js +3 -0
  143. package/dist/browser/tab-bar-item.js +4 -0
  144. package/dist/browser/tag-field.js +5 -0
  145. package/dist/browser/text-field.js +4 -0
  146. package/dist/browser/workbench-dialog.js +15 -0
  147. package/dist/button.d.ts +108 -0
  148. package/dist/button.js +7 -0
  149. package/dist/button.js.map +1 -0
  150. package/dist/catalog-resources.d.ts +1 -1
  151. package/dist/catalog.d.ts +3 -3
  152. package/dist/catalog.js +57 -27
  153. package/dist/catalog.js.map +1 -1
  154. package/dist/checkbox.d.ts +45 -0
  155. package/dist/checkbox.js +6 -0
  156. package/dist/checkbox.js.map +1 -0
  157. package/dist/choice-chips.d.ts +49 -15
  158. package/dist/choice-chips.js +1 -1
  159. package/dist/chunk-23PPPNH6.js +93 -0
  160. package/dist/chunk-23PPPNH6.js.map +1 -0
  161. package/dist/{chunk-FNZQOUZ5.js → chunk-2FW7D4IG.js} +2 -2
  162. package/dist/{chunk-FNZQOUZ5.js.map → chunk-2FW7D4IG.js.map} +1 -1
  163. package/dist/{chunk-ZYU5WRC3.js → chunk-3GLYIIFR.js} +2 -2
  164. package/dist/{chunk-ZYU5WRC3.js.map → chunk-3GLYIIFR.js.map} +1 -1
  165. package/dist/{chunk-5NQF35VO.js → chunk-4RECPEHI.js} +2 -2
  166. package/dist/{chunk-5NQF35VO.js.map → chunk-4RECPEHI.js.map} +1 -1
  167. package/dist/{chunk-7IUEBNCO.js → chunk-5USKCWGL.js} +8 -3
  168. package/dist/chunk-5USKCWGL.js.map +1 -0
  169. package/dist/chunk-6VVIW7VB.js +69 -0
  170. package/dist/chunk-6VVIW7VB.js.map +1 -0
  171. package/dist/{chunk-LL45C7BB.js → chunk-7K6U6FCN.js} +1 -1
  172. package/dist/chunk-7K6U6FCN.js.map +1 -0
  173. package/dist/{chunk-HQZYKJ56.js → chunk-7W3GKMN4.js} +110 -74
  174. package/dist/chunk-7W3GKMN4.js.map +1 -0
  175. package/dist/chunk-ACUKTVS3.js +371 -0
  176. package/dist/chunk-ACUKTVS3.js.map +1 -0
  177. package/dist/{chunk-YQ2AC4E2.js → chunk-AMIHGFLP.js} +2 -2
  178. package/dist/{chunk-YQ2AC4E2.js.map → chunk-AMIHGFLP.js.map} +1 -1
  179. package/dist/chunk-ATGAJVZ6.js +268 -0
  180. package/dist/chunk-ATGAJVZ6.js.map +1 -0
  181. package/dist/chunk-AYPGXR2E.js +20 -0
  182. package/dist/chunk-AYPGXR2E.js.map +1 -0
  183. package/dist/{chunk-ETCWQLJV.js → chunk-BKUMG2KB.js} +38 -28
  184. package/dist/chunk-BKUMG2KB.js.map +1 -0
  185. package/dist/chunk-C26Q6P4Q.js +76 -0
  186. package/dist/chunk-C26Q6P4Q.js.map +1 -0
  187. package/dist/chunk-C3RLKKFQ.js +452 -0
  188. package/dist/chunk-C3RLKKFQ.js.map +1 -0
  189. package/dist/{chunk-IM3GKYOG.js → chunk-CIAUILRR.js} +52 -32
  190. package/dist/chunk-CIAUILRR.js.map +1 -0
  191. package/dist/chunk-CNM6ZWP2.js +38 -0
  192. package/dist/chunk-CNM6ZWP2.js.map +1 -0
  193. package/dist/{chunk-LPHU44S3.js → chunk-CTQUDCY5.js} +3 -1
  194. package/dist/chunk-CTQUDCY5.js.map +1 -0
  195. package/dist/{chunk-MXNIVEVL.js → chunk-D4MXSAMI.js} +5 -3
  196. package/dist/chunk-D4MXSAMI.js.map +1 -0
  197. package/dist/{chunk-YBWQR2OK.js → chunk-DDSCVEO5.js} +10 -9
  198. package/dist/chunk-DDSCVEO5.js.map +1 -0
  199. package/dist/{chunk-SIW64V65.js → chunk-DF2YKGIX.js} +3 -3
  200. package/dist/{chunk-SIW64V65.js.map → chunk-DF2YKGIX.js.map} +1 -1
  201. package/dist/{chunk-3SKAEPPZ.js → chunk-ECFCAKWE.js} +4 -4
  202. package/dist/{chunk-3SKAEPPZ.js.map → chunk-ECFCAKWE.js.map} +1 -1
  203. package/dist/chunk-EKBMUXFV.js +298 -0
  204. package/dist/chunk-EKBMUXFV.js.map +1 -0
  205. package/dist/{chunk-IXLUZHGT.js → chunk-FG6U7KQQ.js} +5 -5
  206. package/dist/{chunk-IXLUZHGT.js.map → chunk-FG6U7KQQ.js.map} +1 -1
  207. package/dist/chunk-FKKJHGN5.js +147 -0
  208. package/dist/chunk-FKKJHGN5.js.map +1 -0
  209. package/dist/{chunk-FDZNYD4C.js → chunk-GCAK23PU.js} +34 -3
  210. package/dist/chunk-GCAK23PU.js.map +1 -0
  211. package/dist/chunk-GXSX6Q6O.js +42 -0
  212. package/dist/chunk-GXSX6Q6O.js.map +1 -0
  213. package/dist/{chunk-LOSRXZAH.js → chunk-HJXVVFBT.js} +14 -6
  214. package/dist/chunk-HJXVVFBT.js.map +1 -0
  215. package/dist/{chunk-M5KZ26VV.js → chunk-HQZG3OFL.js} +11 -1
  216. package/dist/chunk-HQZG3OFL.js.map +1 -0
  217. package/dist/{chunk-ELCMSQNJ.js → chunk-HTERKONR.js} +8 -8
  218. package/dist/chunk-HTERKONR.js.map +1 -0
  219. package/dist/chunk-HYORKKYP.js +8 -0
  220. package/dist/chunk-HYORKKYP.js.map +1 -0
  221. package/dist/chunk-IO27YTL3.js +73 -0
  222. package/dist/chunk-IO27YTL3.js.map +1 -0
  223. package/dist/chunk-ITUQC4FW.js +163 -0
  224. package/dist/chunk-ITUQC4FW.js.map +1 -0
  225. package/dist/chunk-K57NINLH.js +137 -0
  226. package/dist/chunk-K57NINLH.js.map +1 -0
  227. package/dist/chunk-KC6WUSNS.js +34 -0
  228. package/dist/chunk-KC6WUSNS.js.map +1 -0
  229. package/dist/{chunk-W4IK7AWD.js → chunk-KDQZ3E5C.js} +3 -1
  230. package/dist/chunk-KDQZ3E5C.js.map +1 -0
  231. package/dist/{chunk-2MSPNRWJ.js → chunk-KK3S5OTW.js} +27 -11
  232. package/dist/chunk-KK3S5OTW.js.map +1 -0
  233. package/dist/chunk-LTBVP6VN.js +59 -0
  234. package/dist/chunk-LTBVP6VN.js.map +1 -0
  235. package/dist/chunk-OHPYT2BH.js +82 -0
  236. package/dist/chunk-OHPYT2BH.js.map +1 -0
  237. package/dist/{chunk-HZPHCSCS.js → chunk-OY2MXIBB.js} +8 -2
  238. package/dist/chunk-OY2MXIBB.js.map +1 -0
  239. package/dist/chunk-PE2KPZDW.js +85 -0
  240. package/dist/chunk-PE2KPZDW.js.map +1 -0
  241. package/dist/{chunk-QTSMHH5J.js → chunk-QPTJ5DOO.js} +5 -3
  242. package/dist/chunk-QPTJ5DOO.js.map +1 -0
  243. package/dist/{chunk-JOR5LGYE.js → chunk-RFLW4FPL.js} +1 -1
  244. package/dist/chunk-RFLW4FPL.js.map +1 -0
  245. package/dist/{chunk-U6QYTMDB.js → chunk-RMWNO6BA.js} +6 -2
  246. package/dist/chunk-RMWNO6BA.js.map +1 -0
  247. package/dist/{chunk-TDMHA7C3.js → chunk-SQ2Q3OQI.js} +112 -63
  248. package/dist/chunk-SQ2Q3OQI.js.map +1 -0
  249. package/dist/{chunk-K4AT3V3J.js → chunk-T74YB76U.js} +13 -11
  250. package/dist/chunk-T74YB76U.js.map +1 -0
  251. package/dist/{chunk-BYFTHA4I.js → chunk-TAHR457X.js} +53 -6
  252. package/dist/chunk-TAHR457X.js.map +1 -0
  253. package/dist/{chunk-3VXDSIBJ.js → chunk-TKNVL53O.js} +2 -2
  254. package/dist/{chunk-3VXDSIBJ.js.map → chunk-TKNVL53O.js.map} +1 -1
  255. package/dist/chunk-TNJLNLVE.js +115 -0
  256. package/dist/chunk-TNJLNLVE.js.map +1 -0
  257. package/dist/chunk-TUID42UE.js +15 -0
  258. package/dist/chunk-TUID42UE.js.map +1 -0
  259. package/dist/{chunk-PKL6QJKK.js → chunk-UMNHJSIO.js} +93 -80
  260. package/dist/chunk-UMNHJSIO.js.map +1 -0
  261. package/dist/chunk-UTCAOOXU.js +116 -0
  262. package/dist/chunk-UTCAOOXU.js.map +1 -0
  263. package/dist/{chunk-MF6ZUUJZ.js → chunk-VEME3D7K.js} +38 -40
  264. package/dist/chunk-VEME3D7K.js.map +1 -0
  265. package/dist/{chunk-HLDRH23D.js → chunk-WJKHLOP5.js} +2 -2
  266. package/dist/{chunk-HLDRH23D.js.map → chunk-WJKHLOP5.js.map} +1 -1
  267. package/dist/chunk-WU57BYYM.js +115 -0
  268. package/dist/chunk-WU57BYYM.js.map +1 -0
  269. package/dist/{chunk-TGLUDQP2.js → chunk-ZCDRLN3B.js} +11 -11
  270. package/dist/chunk-ZCDRLN3B.js.map +1 -0
  271. package/dist/chunk-ZX2QQJXD.js +249 -0
  272. package/dist/chunk-ZX2QQJXD.js.map +1 -0
  273. package/dist/{chunk-6E2H2E5A.js → chunk-ZXZAECHZ.js} +6 -6
  274. package/dist/{chunk-6E2H2E5A.js.map → chunk-ZXZAECHZ.js.map} +1 -1
  275. package/dist/collapsible-panel.js +3 -3
  276. package/dist/color-field.d.ts +51 -0
  277. package/dist/color-field.js +92 -0
  278. package/dist/color-field.js.map +1 -0
  279. package/dist/color-picker.d.ts +88 -0
  280. package/dist/color-picker.js +8 -0
  281. package/dist/color-picker.js.map +1 -0
  282. package/dist/color-swatches.d.ts +56 -0
  283. package/dist/color-swatches.js +4 -0
  284. package/dist/color-swatches.js.map +1 -0
  285. package/dist/combobox.js +1 -1
  286. package/dist/content-item.d.ts +13 -1
  287. package/dist/content-item.js +1 -1
  288. package/dist/disclosure-arrow.js +1 -1
  289. package/dist/disclosure.d.ts +57 -0
  290. package/dist/disclosure.js +51 -0
  291. package/dist/disclosure.js.map +1 -0
  292. package/dist/file-picker.d.ts +7 -0
  293. package/dist/file-picker.js +1 -1
  294. package/dist/help-tags-register.d.ts +8 -8
  295. package/dist/help-tags-register.js +3 -2
  296. package/dist/help-tags-register.js.map +1 -1
  297. package/dist/index.d.ts +16 -9
  298. package/dist/index.js +58 -46
  299. package/dist/list-action-row.js +4 -1
  300. package/dist/list-detail-dialog.d.ts +117 -0
  301. package/dist/list-detail-dialog.js +165 -0
  302. package/dist/list-detail-dialog.js.map +1 -0
  303. package/dist/list-header.js +1 -1
  304. package/dist/list-item.js +1 -1
  305. package/dist/list.d.ts +17 -2
  306. package/dist/list.js +1 -1
  307. package/dist/lucide-icon.d.ts +9 -1
  308. package/dist/lucide-icon.js +1 -1
  309. package/dist/{composer.d.ts → message-composer.d.ts} +20 -12
  310. package/dist/message-composer.js +6 -0
  311. package/dist/message-composer.js.map +1 -0
  312. package/dist/nav-stack.js +1 -1
  313. package/dist/pane.d.ts +36 -3
  314. package/dist/pane.js +1 -1
  315. package/dist/popup-menu-register.d.ts +6 -5
  316. package/dist/popup-menu-register.js +3 -326
  317. package/dist/popup-menu-register.js.map +1 -1
  318. package/dist/popup-menu.d.ts +41 -23
  319. package/dist/popup-menu.js +5 -1
  320. package/dist/progress-bar.d.ts +52 -0
  321. package/dist/progress-bar.js +68 -0
  322. package/dist/progress-bar.js.map +1 -0
  323. package/dist/progress-ring.d.ts +44 -0
  324. package/dist/progress-ring.js +73 -0
  325. package/dist/progress-ring.js.map +1 -0
  326. package/dist/radio-group.d.ts +62 -0
  327. package/dist/radio-group.js +4 -0
  328. package/dist/radio-group.js.map +1 -0
  329. package/dist/row.js +1 -1
  330. package/dist/{token-search-model-aYR0YAei.d.ts → search-field-CrGTN5sa.d.ts} +67 -43
  331. package/dist/search-field-model.d.ts +3 -0
  332. package/dist/search-field-model.js +3 -0
  333. package/dist/search-field-model.js.map +1 -0
  334. package/dist/search-field.d.ts +3 -0
  335. package/dist/search-field.js +5 -0
  336. package/dist/search-field.js.map +1 -0
  337. package/dist/select-register.d.ts +6 -3
  338. package/dist/select-register.js +383 -241
  339. package/dist/select-register.js.map +1 -1
  340. package/dist/select.d.ts +30 -6
  341. package/dist/select.js +3 -1
  342. package/dist/selection.d.ts +54 -0
  343. package/dist/selection.js +3 -0
  344. package/dist/selection.js.map +1 -0
  345. package/dist/slider.d.ts +74 -0
  346. package/dist/slider.js +103 -0
  347. package/dist/slider.js.map +1 -0
  348. package/dist/split-button.js +1 -1
  349. package/dist/split-view.d.ts +5 -2
  350. package/dist/split-view.js +18 -159
  351. package/dist/split-view.js.map +1 -1
  352. package/dist/state-banner.js +1 -1
  353. package/dist/styles/badge.css +18 -6
  354. package/dist/styles/button.css +230 -0
  355. package/dist/styles/catalog/components/catalog-example.css +13 -4
  356. package/dist/styles/checkbox.css +121 -0
  357. package/dist/styles/choice-chips.css +58 -7
  358. package/dist/styles/color-field.css +125 -0
  359. package/dist/styles/color-picker.css +331 -0
  360. package/dist/styles/color-swatches.css +122 -0
  361. package/dist/styles/combobox.css +7 -5
  362. package/dist/styles/components/actions/button/button.css +230 -0
  363. package/dist/styles/components/actions/popup-menu/popup-menu.css +326 -198
  364. package/dist/styles/components/actions/toolbar/toolbar.css +25 -3
  365. package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +67 -104
  366. package/dist/styles/components/actions/toolbar-text/toolbar-text.css +5 -18
  367. package/dist/styles/components/collections/list/list.css +37 -0
  368. package/dist/styles/components/feedback/badge/badge.css +18 -6
  369. package/dist/styles/components/feedback/progress-bar/progress-bar.css +168 -0
  370. package/dist/styles/components/feedback/progress-ring/progress-ring.css +91 -0
  371. package/dist/styles/components/feedback/state-banner/state-banner.css +18 -3
  372. package/dist/styles/components/forms/checkbox/checkbox.css +121 -0
  373. package/dist/styles/components/forms/choice-chips/choice-chips.css +58 -7
  374. package/dist/styles/components/forms/color-field/color-field.css +125 -0
  375. package/dist/styles/components/forms/color-picker/color-picker.css +331 -0
  376. package/dist/styles/components/forms/color-swatches/color-swatches.css +122 -0
  377. package/dist/styles/components/forms/combobox/combobox.css +7 -5
  378. package/dist/styles/components/forms/{composer/composer.css → message-composer/message-composer.css} +17 -33
  379. package/dist/styles/components/forms/radio-group/radio-group.css +156 -0
  380. package/dist/styles/{token-search-field.css → components/forms/search-field/search-field.css} +111 -102
  381. package/dist/styles/components/forms/select/select.css +370 -249
  382. package/dist/styles/components/forms/slider/slider.css +241 -0
  383. package/dist/styles/components/forms/switch/switch.css +132 -0
  384. package/dist/styles/components/forms/tag-field/tag-field.css +8 -0
  385. package/dist/styles/components/forms/text-field/text-field.css +193 -0
  386. package/dist/styles/components/layout/pane/pane.css +254 -0
  387. package/dist/styles/components/layout/resizable-region/resizable-region.css +3 -2
  388. package/dist/styles/components/layout/row/row.css +11 -0
  389. package/dist/styles/components/layout/split-view/split-view.css +25 -0
  390. package/dist/styles/components/layout/workbench/workbench.css +12 -4
  391. package/dist/styles/components/navigation/disclosure-arrow/disclosure-arrow.css +20 -0
  392. package/dist/styles/components/navigation/tab-bar/tab-bar.css +7 -7
  393. package/dist/styles/components/navigation/{app-tab/app-tab.css → tab-bar-item/tab-bar-item.css} +95 -90
  394. package/dist/styles/components/surfaces/disclosure/disclosure.css +98 -0
  395. package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +263 -116
  396. package/dist/styles/components/typography/text/text.css +14 -12
  397. package/dist/styles/disclosure-arrow.css +20 -0
  398. package/dist/styles/disclosure.css +98 -0
  399. package/dist/styles/foundation.css +6 -4
  400. package/dist/styles/list-detail-dialog.css +11 -0
  401. package/dist/styles/list.css +37 -0
  402. package/dist/styles/{composer.css → message-composer.css} +17 -33
  403. package/dist/styles/overlay-toast.css +149 -0
  404. package/dist/styles/overlay-tooltip.css +55 -0
  405. package/dist/styles/pane.css +254 -0
  406. package/dist/styles/popup-menu.css +326 -198
  407. package/dist/styles/progress-bar.css +168 -0
  408. package/dist/styles/progress-ring.css +91 -0
  409. package/dist/styles/radio-group.css +156 -0
  410. package/dist/styles/resizable-region.css +3 -2
  411. package/dist/styles/row.css +11 -0
  412. package/dist/styles/{components/forms/token-search-field/token-search-field.css → search-field.css} +111 -102
  413. package/dist/styles/select.css +370 -249
  414. package/dist/styles/slider.css +241 -0
  415. package/dist/styles/split-view.css +25 -0
  416. package/dist/styles/state-banner.css +18 -3
  417. package/dist/styles/styles.css +16 -5
  418. package/dist/styles/surface-scaffold.css +263 -116
  419. package/dist/styles/switch.css +132 -0
  420. package/dist/styles/{app-tab.css → tab-bar-item.css} +95 -90
  421. package/dist/styles/tab-bar.css +7 -7
  422. package/dist/styles/tag-field.css +8 -0
  423. package/dist/styles/text-field.css +193 -0
  424. package/dist/styles/text.css +14 -12
  425. package/dist/styles/toolbar-control-group.css +67 -104
  426. package/dist/styles/toolbar-text.css +5 -18
  427. package/dist/styles/toolbar.css +25 -3
  428. package/dist/styles/webawesome.css +9 -0
  429. package/dist/styles/workbench-dialog.css +10 -0
  430. package/dist/styles/workbench.css +12 -4
  431. package/dist/surface-scaffold-register.d.ts +7 -5
  432. package/dist/surface-scaffold-register.js +2 -246
  433. package/dist/surface-scaffold-register.js.map +1 -1
  434. package/dist/surface-scaffold.d.ts +70 -7
  435. package/dist/surface-scaffold.js +5 -1
  436. package/dist/switch.d.ts +38 -0
  437. package/dist/switch.js +4 -0
  438. package/dist/switch.js.map +1 -0
  439. package/dist/{app-tab.d.ts → tab-bar-item.d.ts} +11 -11
  440. package/dist/tab-bar-item.js +6 -0
  441. package/dist/tab-bar-item.js.map +1 -0
  442. package/dist/tab-bar.d.ts +3 -3
  443. package/dist/tab-bar.js +1 -1
  444. package/dist/tab-navigator.js +1 -1
  445. package/dist/tag-field.d.ts +52 -0
  446. package/dist/tag-field.js +6 -0
  447. package/dist/tag-field.js.map +1 -0
  448. package/dist/text-field.d.ts +83 -0
  449. package/dist/text-field.js +6 -0
  450. package/dist/text-field.js.map +1 -0
  451. package/dist/text.d.ts +6 -1
  452. package/dist/text.js +1 -1
  453. package/dist/{types-CVgIwSdq.d.ts → types-DmHWkSd6.d.ts} +19 -1
  454. package/dist/webawesome.d.ts +3 -0
  455. package/dist/wire-catalog.d.ts +8 -2
  456. package/dist/wire-catalog.js +16 -4
  457. package/dist/wire-catalog.js.map +1 -1
  458. package/dist/wire-checkboxes.d.ts +10 -0
  459. package/dist/wire-checkboxes.js +3 -0
  460. package/dist/{wire-composers.js.map → wire-checkboxes.js.map} +1 -1
  461. package/dist/wire-choice-chips.d.ts +17 -0
  462. package/dist/wire-choice-chips.js +4 -0
  463. package/dist/{wire-token-search-fields.js.map → wire-choice-chips.js.map} +1 -1
  464. package/dist/wire-color-fields.d.ts +33 -0
  465. package/dist/wire-color-fields.js +82 -0
  466. package/dist/wire-color-fields.js.map +1 -0
  467. package/dist/wire-color-pickers.d.ts +34 -0
  468. package/dist/wire-color-pickers.js +9 -0
  469. package/dist/wire-color-pickers.js.map +1 -0
  470. package/dist/wire-comboboxes.js +2 -1
  471. package/dist/wire-content-items.d.ts +5 -1
  472. package/dist/wire-content-items.js +84 -15
  473. package/dist/wire-content-items.js.map +1 -1
  474. package/dist/wire-file-pickers.d.ts +3 -2
  475. package/dist/wire-file-pickers.js +1 -1
  476. package/dist/{wire-composers.d.ts → wire-message-composers.d.ts} +5 -4
  477. package/dist/wire-message-composers.js +3 -0
  478. package/dist/wire-message-composers.js.map +1 -0
  479. package/dist/wire-overlay-sheets.js +1 -1
  480. package/dist/wire-pane-chrome.d.ts +21 -0
  481. package/dist/wire-pane-chrome.js +67 -0
  482. package/dist/wire-pane-chrome.js.map +1 -0
  483. package/dist/{wire-token-search-fields.d.ts → wire-search-fields.d.ts} +25 -25
  484. package/dist/wire-search-fields.js +6 -0
  485. package/dist/wire-search-fields.js.map +1 -0
  486. package/dist/wire-sliders.d.ts +12 -0
  487. package/dist/wire-sliders.js +31 -0
  488. package/dist/wire-sliders.js.map +1 -0
  489. package/dist/wire-tab-bars.js +1 -1
  490. package/dist/wire-tag-fields.d.ts +41 -0
  491. package/dist/wire-tag-fields.js +258 -0
  492. package/dist/wire-tag-fields.js.map +1 -0
  493. package/dist/wire-text-fields.d.ts +12 -0
  494. package/dist/wire-text-fields.js +3 -0
  495. package/dist/wire-text-fields.js.map +1 -0
  496. package/dist/workbench-dialog.d.ts +97 -0
  497. package/dist/workbench-dialog.js +124 -0
  498. package/dist/workbench-dialog.js.map +1 -0
  499. package/dist/workbench.d.ts +5 -0
  500. package/dist/workbench.js +1 -1
  501. package/docs/accessibility.md +181 -97
  502. package/docs/anchored-surface.md +8 -7
  503. package/docs/app-layouts.md +28 -0
  504. package/docs/catalog.md +14 -5
  505. package/docs/color-field.md +65 -0
  506. package/docs/color-picker.md +71 -0
  507. package/docs/color-swatches.md +46 -0
  508. package/docs/component-contract.md +31 -32
  509. package/docs/component-selection.md +232 -165
  510. package/docs/design/templates/button/emphasis-dark.svg +1 -0
  511. package/docs/design/templates/button/emphasis.svg +1 -0
  512. package/docs/design/templates/button/icons-dark.svg +1 -0
  513. package/docs/design/templates/button/icons.svg +1 -0
  514. package/docs/design/templates/button/pill-dark.svg +1 -0
  515. package/docs/design/templates/button/pill.svg +1 -0
  516. package/docs/design/templates/button/states-dark.svg +1 -0
  517. package/docs/design/templates/button/states.svg +1 -0
  518. package/docs/design/templates/button/toggles-dark.svg +1 -0
  519. package/docs/design/templates/button/toggles.svg +1 -0
  520. package/docs/design/templates/button/tones-dark.svg +1 -0
  521. package/docs/design/templates/button/tones.svg +1 -0
  522. package/docs/design/templates/button-dark.svg +1 -0
  523. package/docs/design/templates/button.svg +1 -0
  524. package/docs/design/templates/checkbox/compact-dark.svg +1 -0
  525. package/docs/design/templates/checkbox/compact.svg +1 -0
  526. package/docs/design/templates/checkbox/error-dark.svg +1 -0
  527. package/docs/design/templates/checkbox/error.svg +1 -0
  528. package/docs/design/templates/checkbox/mixed-dark.svg +1 -0
  529. package/docs/design/templates/checkbox/mixed.svg +1 -0
  530. package/docs/design/templates/checkbox/states-dark.svg +1 -0
  531. package/docs/design/templates/checkbox/states.svg +1 -0
  532. package/docs/design/templates/checkbox-dark.svg +1 -0
  533. package/docs/design/templates/checkbox.svg +1 -0
  534. package/docs/design/templates/choice-chips/color-palette-dark.svg +1 -1
  535. package/docs/design/templates/choice-chips/color-palette.svg +1 -1
  536. package/docs/design/templates/choice-chips/compact-icons-dark.svg +1 -1
  537. package/docs/design/templates/choice-chips/compact-icons.svg +1 -1
  538. package/docs/design/templates/choice-chips/multiple-dark.svg +1 -1
  539. package/docs/design/templates/choice-chips/multiple.svg +1 -1
  540. package/docs/design/templates/choice-chips-dark.svg +1 -1
  541. package/docs/design/templates/choice-chips.svg +1 -1
  542. package/docs/design/templates/color-field/compact-dark.svg +1 -0
  543. package/docs/design/templates/color-field/compact.svg +1 -0
  544. package/docs/design/templates/color-field/error-dark.svg +1 -0
  545. package/docs/design/templates/color-field/error.svg +1 -0
  546. package/docs/design/templates/color-field/hint-dark.svg +1 -0
  547. package/docs/design/templates/color-field/hint.svg +1 -0
  548. package/docs/design/templates/color-field-dark.svg +1 -0
  549. package/docs/design/templates/color-field.svg +1 -0
  550. package/docs/design/templates/color-picker/gray-dark.svg +1 -0
  551. package/docs/design/templates/color-picker/gray.svg +1 -0
  552. package/docs/design/templates/color-picker/rgb-dark.svg +1 -0
  553. package/docs/design/templates/color-picker/rgb.svg +1 -0
  554. package/docs/design/templates/color-picker-dark.svg +1 -0
  555. package/docs/design/templates/color-picker.svg +1 -0
  556. package/docs/design/templates/color-swatches/palette-dark.svg +1 -0
  557. package/docs/design/templates/color-swatches/palette.svg +1 -0
  558. package/docs/design/templates/color-swatches-dark.svg +1 -0
  559. package/docs/design/templates/color-swatches.svg +1 -0
  560. package/docs/design/templates/disclosure/framed-sunken-dark.svg +1 -0
  561. package/docs/design/templates/disclosure/framed-sunken.svg +1 -0
  562. package/docs/design/templates/disclosure/plain-dark.svg +1 -0
  563. package/docs/design/templates/disclosure/plain.svg +1 -0
  564. package/docs/design/templates/disclosure-dark.svg +1 -0
  565. package/docs/design/templates/disclosure.svg +1 -0
  566. package/docs/design/templates/list-header/size-l-dark.svg +1 -1
  567. package/docs/design/templates/list-header/size-l.svg +1 -1
  568. package/docs/design/templates/list-header/size-m-dark.svg +1 -1
  569. package/docs/design/templates/list-header/size-m.svg +1 -1
  570. package/docs/design/templates/list-header/size-xl-dark.svg +1 -1
  571. package/docs/design/templates/list-header/size-xl.svg +1 -1
  572. package/docs/design/templates/list-header-dark.svg +1 -1
  573. package/docs/design/templates/list-header.svg +1 -1
  574. package/docs/design/templates/message-composer/chat-dark.svg +1 -0
  575. package/docs/design/templates/message-composer/chat.svg +1 -0
  576. package/docs/design/templates/{composer → message-composer}/prompt-dark.svg +1 -1
  577. package/docs/design/templates/{composer → message-composer}/prompt.svg +1 -1
  578. package/docs/design/templates/message-composer-dark.svg +1 -0
  579. package/docs/design/templates/message-composer.svg +1 -0
  580. package/docs/design/templates/progress-bar/determinate-dark.svg +1 -0
  581. package/docs/design/templates/progress-bar/determinate.svg +1 -0
  582. package/docs/design/templates/progress-bar/tones-dark.svg +1 -0
  583. package/docs/design/templates/progress-bar/tones.svg +1 -0
  584. package/docs/design/templates/progress-bar-dark.svg +1 -0
  585. package/docs/design/templates/progress-bar.svg +1 -0
  586. package/docs/design/templates/progress-ring/sizes-dark.svg +1 -0
  587. package/docs/design/templates/progress-ring/sizes.svg +1 -0
  588. package/docs/design/templates/progress-ring/tones-dark.svg +1 -0
  589. package/docs/design/templates/progress-ring/tones.svg +1 -0
  590. package/docs/design/templates/progress-ring-dark.svg +1 -0
  591. package/docs/design/templates/progress-ring.svg +1 -0
  592. package/docs/design/templates/radio-group/horizontal-dark.svg +1 -0
  593. package/docs/design/templates/radio-group/horizontal.svg +1 -0
  594. package/docs/design/templates/radio-group/vertical-dark.svg +1 -0
  595. package/docs/design/templates/radio-group/vertical.svg +1 -0
  596. package/docs/design/templates/radio-group-dark.svg +1 -0
  597. package/docs/design/templates/radio-group.svg +1 -0
  598. package/docs/design/templates/segmented-control/equal-dark.svg +1 -1
  599. package/docs/design/templates/segmented-control/equal.svg +1 -1
  600. package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -1
  601. package/docs/design/templates/segmented-control/pill-small.svg +1 -1
  602. package/docs/design/templates/segmented-control-dark.svg +1 -1
  603. package/docs/design/templates/segmented-control.svg +1 -1
  604. package/docs/design/templates/select/compact-dark.svg +1 -0
  605. package/docs/design/templates/select/compact.svg +1 -0
  606. package/docs/design/templates/select/form-dark.svg +1 -0
  607. package/docs/design/templates/select/form.svg +1 -0
  608. package/docs/design/templates/select/icons-dark.svg +1 -0
  609. package/docs/design/templates/select/icons.svg +1 -0
  610. package/docs/design/templates/select-dark.svg +1 -0
  611. package/docs/design/templates/select.svg +1 -0
  612. package/docs/design/templates/slider/compact-dark.svg +1 -0
  613. package/docs/design/templates/slider/compact.svg +1 -0
  614. package/docs/design/templates/slider/readout-dark.svg +1 -0
  615. package/docs/design/templates/slider/readout.svg +1 -0
  616. package/docs/design/templates/slider/ticks-dark.svg +1 -0
  617. package/docs/design/templates/slider/ticks.svg +1 -0
  618. package/docs/design/templates/slider-dark.svg +1 -0
  619. package/docs/design/templates/slider.svg +1 -0
  620. package/docs/design/templates/switch/compact-dark.svg +1 -0
  621. package/docs/design/templates/switch/compact.svg +1 -0
  622. package/docs/design/templates/switch/states-dark.svg +1 -0
  623. package/docs/design/templates/switch/states.svg +1 -0
  624. package/docs/design/templates/switch-dark.svg +1 -0
  625. package/docs/design/templates/switch.svg +1 -0
  626. package/docs/design/templates/tag-field/error-dark.svg +1 -0
  627. package/docs/design/templates/tag-field/error.svg +1 -0
  628. package/docs/design/templates/tag-field/tags-dark.svg +1 -0
  629. package/docs/design/templates/tag-field/tags.svg +1 -0
  630. package/docs/design/templates/tag-field-dark.svg +1 -0
  631. package/docs/design/templates/tag-field.svg +1 -0
  632. package/docs/design/templates/text-field/compact-dark.svg +1 -0
  633. package/docs/design/templates/text-field/compact.svg +1 -0
  634. package/docs/design/templates/text-field/error-dark.svg +1 -0
  635. package/docs/design/templates/text-field/error.svg +1 -0
  636. package/docs/design/templates/text-field/labeled-dark.svg +1 -0
  637. package/docs/design/templates/text-field/labeled.svg +1 -0
  638. package/docs/design/templates/text-field/multiline-dark.svg +1 -0
  639. package/docs/design/templates/text-field/multiline.svg +1 -0
  640. package/docs/design/templates/text-field/search-dark.svg +1 -0
  641. package/docs/design/templates/text-field/search.svg +1 -0
  642. package/docs/design/templates/text-field-dark.svg +1 -0
  643. package/docs/design/templates/text-field.svg +1 -0
  644. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
  645. package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
  646. package/docs/design/templates/toolbar/width-visibility-320-dark.svg +1 -1
  647. package/docs/design/templates/toolbar/width-visibility-320.svg +1 -1
  648. package/docs/design/templates/toolbar/width-visibility-600-dark.svg +1 -1
  649. package/docs/design/templates/toolbar/width-visibility-600.svg +1 -1
  650. package/docs/design/templates/toolbar-dark.svg +1 -1
  651. package/docs/design/templates/toolbar.svg +1 -1
  652. package/docs/design/templates/value-table/details-dark.svg +1 -1
  653. package/docs/design/templates/value-table/details.svg +1 -1
  654. package/docs/design/templates/value-table-dark.svg +1 -1
  655. package/docs/design/templates/value-table.svg +1 -1
  656. package/docs/design/templates.md +19 -6
  657. package/docs/design-philosophy.md +6 -6
  658. package/docs/disclosure.md +63 -0
  659. package/docs/examples/component-catalog-extension.json +2 -2
  660. package/docs/layout.md +16 -7
  661. package/docs/list-detail-dialog.md +96 -0
  662. package/docs/manual-test-plan.md +1 -1
  663. package/docs/{composer.md → message-composer.md} +41 -28
  664. package/docs/overlay-toast.md +62 -0
  665. package/docs/overlay-tooltip.md +53 -0
  666. package/docs/progress.md +62 -0
  667. package/docs/recipes.md +15 -21
  668. package/docs/slider.md +64 -0
  669. package/docs/surface-scaffold.md +155 -88
  670. package/docs/tag-field.md +66 -0
  671. package/docs/type-contracts.md +8 -8
  672. package/docs/ui-analyzer.md +1 -1
  673. package/docs/ui-doctor.md +11 -6
  674. package/docs/ux-demo.md +6 -6
  675. package/docs/webawesome-migration.md +80 -0
  676. package/docs/webawesome-theme.md +57 -35
  677. package/docs/workbench-dialog.md +85 -0
  678. package/docs/workbench.md +10 -6
  679. package/docs/writing.md +10 -8
  680. package/doctor/copy-capitalization-checks.mjs +18 -9
  681. package/llms.txt +131 -57
  682. package/package.json +156 -39
  683. package/ux-demo/recipes/composer-form.tsx +18 -19
  684. package/ux-demo/recipes/list-detail-dialog.tsx +55 -162
  685. package/ux-demo/recipes/mount-recipe.ts +7 -6
  686. package/ux-demo/recipes/types.ts +1 -0
  687. package/ai/components/icon-button.md +0 -82
  688. package/ai/components/icon-toggle-button.md +0 -80
  689. package/ai/components/token-search-field.md +0 -107
  690. package/dist/app-tab.js +0 -6
  691. package/dist/app-tab.js.map +0 -1
  692. package/dist/browser/app-tab.js +0 -4
  693. package/dist/browser/composer.js +0 -4
  694. package/dist/browser/icon-toggle-button.js +0 -4
  695. package/dist/browser/token-search-field.js +0 -4
  696. package/dist/chunk-2MSPNRWJ.js.map +0 -1
  697. package/dist/chunk-7IUEBNCO.js.map +0 -1
  698. package/dist/chunk-AV7CPAPT.js +0 -82
  699. package/dist/chunk-AV7CPAPT.js.map +0 -1
  700. package/dist/chunk-BYFTHA4I.js.map +0 -1
  701. package/dist/chunk-CA7LNX3J.js +0 -44
  702. package/dist/chunk-CA7LNX3J.js.map +0 -1
  703. package/dist/chunk-ELCMSQNJ.js.map +0 -1
  704. package/dist/chunk-ETCWQLJV.js.map +0 -1
  705. package/dist/chunk-FDZNYD4C.js.map +0 -1
  706. package/dist/chunk-FR76ZJQC.js +0 -90
  707. package/dist/chunk-FR76ZJQC.js.map +0 -1
  708. package/dist/chunk-HQZYKJ56.js.map +0 -1
  709. package/dist/chunk-HZPHCSCS.js.map +0 -1
  710. package/dist/chunk-IM3GKYOG.js.map +0 -1
  711. package/dist/chunk-JOR5LGYE.js.map +0 -1
  712. package/dist/chunk-K4AT3V3J.js.map +0 -1
  713. package/dist/chunk-LL45C7BB.js.map +0 -1
  714. package/dist/chunk-LOSRXZAH.js.map +0 -1
  715. package/dist/chunk-LPHU44S3.js.map +0 -1
  716. package/dist/chunk-M5KZ26VV.js.map +0 -1
  717. package/dist/chunk-MF6ZUUJZ.js.map +0 -1
  718. package/dist/chunk-MXNIVEVL.js.map +0 -1
  719. package/dist/chunk-NS762OVM.js +0 -222
  720. package/dist/chunk-NS762OVM.js.map +0 -1
  721. package/dist/chunk-PKL6QJKK.js.map +0 -1
  722. package/dist/chunk-QTSMHH5J.js.map +0 -1
  723. package/dist/chunk-TDMHA7C3.js.map +0 -1
  724. package/dist/chunk-TGLUDQP2.js.map +0 -1
  725. package/dist/chunk-U6QYTMDB.js.map +0 -1
  726. package/dist/chunk-VFYO3UGZ.js +0 -45
  727. package/dist/chunk-VFYO3UGZ.js.map +0 -1
  728. package/dist/chunk-W4IK7AWD.js.map +0 -1
  729. package/dist/chunk-YBWQR2OK.js.map +0 -1
  730. package/dist/composer.js +0 -5
  731. package/dist/composer.js.map +0 -1
  732. package/dist/icon-button.d.ts +0 -46
  733. package/dist/icon-button.js +0 -6
  734. package/dist/icon-button.js.map +0 -1
  735. package/dist/icon-toggle-button.d.ts +0 -42
  736. package/dist/icon-toggle-button.js +0 -6
  737. package/dist/icon-toggle-button.js.map +0 -1
  738. package/dist/styles/components/actions/icon-button/icon-button.css +0 -22
  739. package/dist/styles/components/actions/icon-toggle-button/icon-toggle-button.css +0 -83
  740. package/dist/styles/icon-button.css +0 -22
  741. package/dist/styles/icon-toggle-button.css +0 -83
  742. package/dist/token-search-field.d.ts +0 -3
  743. package/dist/token-search-field.js +0 -5
  744. package/dist/token-search-field.js.map +0 -1
  745. package/dist/token-search-model.d.ts +0 -3
  746. package/dist/token-search-model.js +0 -3
  747. package/dist/token-search-model.js.map +0 -1
  748. package/dist/wire-composers.js +0 -3
  749. package/dist/wire-token-search-fields.js +0 -6
  750. package/docs/design/templates/composer/chat-dark.svg +0 -1
  751. package/docs/design/templates/composer/chat.svg +0 -1
  752. package/docs/design/templates/composer-dark.svg +0 -1
  753. package/docs/design/templates/composer.svg +0 -1
  754. /package/docs/design/templates/{token-search-field → search-field}/empty-dark.svg +0 -0
  755. /package/docs/design/templates/{token-search-field → search-field}/empty.svg +0 -0
  756. /package/docs/design/templates/{token-search-field → search-field}/tokens-dark.svg +0 -0
  757. /package/docs/design/templates/{token-search-field → search-field}/tokens.svg +0 -0
  758. /package/docs/design/templates/{token-search-field-dark.svg → search-field-dark.svg} +0 -0
  759. /package/docs/design/templates/{token-search-field.svg → search-field.svg} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/forms/select/internal/install-select-actions.ts","../src/components/forms/select/internal/animate-select-popup.ts","../src/components/forms/select/internal/install-select-lifecycle.ts","../src/components/forms/select/internal/install-select-multiple.ts","../src/components/forms/select/register/select-register.ts"],"names":["option"],"mappings":"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","file":"select-register.js","sourcesContent":["type SelectAction = 'all' | 'clear';\n\ninterface SelectActionOption extends HTMLElement {\n disabled: boolean;\n}\n\ninterface SelectActionHost extends HTMLElement {\n multiple: boolean;\n disabled: boolean;\n hasInteracted: boolean;\n valueHasChanged: boolean;\n selectedOptions: SelectActionOption[];\n updateComplete: Promise<unknown>;\n getAllOptions(): SelectActionOption[];\n setSelectedOptions(options: SelectActionOption[]): void;\n}\n\n/** Apply one footer action through Web Awesome's ordinary selection path. */\nexport function runSelectAction(\n host: SelectActionHost,\n action: SelectAction,\n): boolean {\n if (host.disabled || !host.multiple) return false;\n const enabled = host.getAllOptions().filter((option) => !option.disabled);\n const next = action === 'all' ? enabled : [];\n const current = host.selectedOptions;\n if (\n current.length === next.length &&\n current.every((option) => next.includes(option))\n )\n return false;\n host.hasInteracted = true;\n host.valueHasChanged = true;\n host.setSelectedOptions(next);\n void host.updateComplete.then(() => {\n host.dispatchEvent(\n new InputEvent('input', { bubbles: true, composed: true }),\n );\n host.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\n });\n return true;\n}\n\nconst installedDocuments = new WeakSet<Document>();\n\n/** Wire opt-in multiple-select footer buttons at the registration boundary. */\nexport function installSelectActions(doc: Document = document): void {\n if (installedDocuments.has(doc)) return;\n installedDocuments.add(doc);\n // Web Awesome listens for keydown on document while the popup is open. Its\n // option shortcuts would otherwise consume Enter/Space from these native\n // footer buttons before the browser can activate them.\n doc.addEventListener('keydown', (event) => {\n if (event.key === 'Escape' || event.key === 'Tab') return;\n if (!(event.target instanceof Element)) return;\n const button = event.target.closest('button[data-select-action]');\n if (button?.closest('wa-select[data-component=\"select\"]'))\n event.stopImmediatePropagation();\n });\n doc.addEventListener('click', (event) => {\n if (!(event.target instanceof Element)) return;\n const button = event.target.closest<HTMLElement>(\n 'button[data-select-action]',\n );\n if (!button || button.hasAttribute('disabled')) return;\n const host = button.closest<SelectActionHost>(\n 'wa-select[data-component=\"select\"]',\n );\n if (!host) return;\n const action = button.dataset.selectAction;\n if (action === 'all' || action === 'clear') runSelectAction(host, action);\n });\n}\n","/** Run one native Select CSS animation; a reversal owns cancellation and cleanup. */\nexport function animateSelectPopup(\n popup: HTMLElement,\n phase: 'show' | 'hide',\n signal: AbortSignal,\n): Promise<void> {\n return new Promise((resolve) => {\n let settled = false;\n let frame = 0;\n const finish = () => {\n if (settled) return;\n settled = true;\n window.cancelAnimationFrame(frame);\n signal.removeEventListener('abort', finish);\n popup.classList.remove(phase);\n resolve();\n };\n signal.addEventListener('abort', finish, { once: true });\n popup.classList.add(phase);\n // Activation renders asynchronously. Check for reduced/absent motion only\n // after the native popup has had its normal render opportunity.\n frame = window.requestAnimationFrame(() => {\n // Observe these exact animations. An old CSS animationcancel event can\n // arrive after the next phase starts and must not finish that new phase.\n void Promise.all(\n popup\n .getAnimations()\n .map((animation) => animation.finished.catch(() => undefined)),\n ).then(finish);\n });\n if (signal.aborted) finish();\n });\n}\n","import type WaSelect from '@awesome.me/webawesome/dist/components/select/select.js';\nimport { WaAfterHideEvent } from '@awesome.me/webawesome/dist/events/after-hide.js';\nimport { WaAfterShowEvent } from '@awesome.me/webawesome/dist/events/after-show.js';\nimport { WaHideEvent } from '@awesome.me/webawesome/dist/events/hide.js';\nimport { WaShowEvent } from '@awesome.me/webawesome/dist/events/show.js';\n\nimport { animateSelectPopup } from './animate-select-popup.js';\n\n// Web Awesome 3.12/3.13 expose the lifecycle method but not these helper types.\n// Keep this integration boundary local: native option selection, dismissal\n// listeners, popup positioning and rendering remain owned by Web Awesome.\ninterface SelectHost extends Pick<\n WaSelect,\n | 'open'\n | 'disabled'\n | 'isConnected'\n | 'dataset'\n | 'classList'\n | 'listbox'\n | 'currentOption'\n | 'selectedOptions'\n | 'dispatchEvent'\n | 'handleOpenChange'\n | 'updateComplete'\n> {\n // Native Popup starts with no sync policy; its declaration omits undefined.\n popup: Omit<WaSelect['popup'], 'sync'> & {\n sync?: WaSelect['popup']['sync'];\n };\n getFirstOption(): WaSelect['currentOption'];\n setCurrentOption(option: WaSelect['currentOption']): void;\n addOpenListeners(): void;\n removeOpenListeners(): void;\n}\n\n/**\n * WebKit keeps a closed popover's last box in its scroll container's overflow\n * when the popup leaves the top layer, so a Select in a scrolling dialog body\n * scrolls into blank space after its listbox closes. Re-laying out the popup's\n * `display: contents` host for one synchronous layout recomputes that overflow\n * without hiding the trigger, so focus and the caret stay put.\n */\nfunction releaseClosedPopupOverflow(popup: HTMLElement): void {\n const display = popup.style.getPropertyValue('display');\n const priority = popup.style.getPropertyPriority('display');\n popup.style.setProperty('display', 'block');\n void popup.offsetHeight;\n if (display) popup.style.setProperty('display', display, priority);\n else popup.style.removeProperty('display');\n}\n\n/** Install once at the explicit registration boundary, only for Kerf Selects. */\nexport function installSelectLifecycle(\n prototype: Pick<WaSelect, 'handleOpenChange' | 'handleDisabledChange'>,\n): void {\n const installed = Symbol.for('@kerfjs/ui/select-lifecycle');\n if (Object.prototype.hasOwnProperty.call(prototype, installed)) return;\n Object.defineProperty(prototype, installed, { value: true });\n const original = prototype.handleOpenChange;\n const originalDisabled = prototype.handleDisabledChange;\n prototype.handleDisabledChange = function () {\n const host = this as unknown as SelectHost;\n const wasOpen = host.open;\n originalDisabled.call(this);\n // WA's disabled watcher runs after its open watcher in the same Lit update.\n // Its open=false mutation otherwise misses the open lifecycle altogether.\n if (host.dataset.component === 'select' && wasOpen && !host.open) {\n void host.handleOpenChange();\n }\n };\n const transitions = new WeakMap<SelectHost, AbortController>();\n const restorations = new WeakMap<SelectHost, { open: boolean }>();\n prototype.handleOpenChange = async function () {\n const host = this as unknown as SelectHost;\n if (host.dataset.component !== 'select') return original.call(this);\n const restoring = restorations.get(host)?.open === host.open;\n restorations.delete(host);\n if (restoring) return;\n const transition = new AbortController();\n const opening = host.open && !host.disabled;\n const current = () =>\n !transition.signal.aborted &&\n host.isConnected &&\n (host.open && !host.disabled) === opening;\n try {\n if (!host.isConnected) return;\n if (opening) {\n host.setCurrentOption(host.selectedOptions[0] || host.getFirstOption());\n }\n const event = opening ? new WaShowEvent() : new WaHideEvent();\n host.dispatchEvent(event);\n if (event.defaultPrevented) {\n // Restore the accepted state without emitting the opposite transition.\n // Clear at the update checkpoint too: Lit can coalesce a restoration.\n host.open = !opening;\n const restoration = { open: host.open };\n restorations.set(host, restoration);\n void host.updateComplete.then(() => {\n if (restorations.get(host) === restoration) restorations.delete(host);\n });\n return;\n }\n // A consumer can reverse the request synchronously in a lifecycle event.\n if (!current()) return;\n // A rejected reversal must not cancel the previously accepted animation.\n transitions.get(host)?.abort();\n transitions.set(host, transition);\n if (opening) {\n host.addOpenListeners();\n host.listbox.hidden = false;\n // Measure the visible menu rather than a trigger-width wrapper. Native\n // shift/auto-size can then contain the complete surface at either edge.\n host.popup.sync = host.classList.contains('kui-select--fit-menu')\n ? 'width'\n : undefined;\n host.popup.autoSize = 'both';\n host.popup.shiftPadding = 10;\n host.popup.active = true;\n window.requestAnimationFrame(() => {\n if (current()) host.setCurrentOption(host.currentOption);\n });\n } else {\n host.removeOpenListeners();\n }\n await animateSelectPopup(\n host.popup.popup,\n opening ? 'show' : 'hide',\n transition.signal,\n );\n if (!transition.signal.aborted && !host.isConnected) {\n host.removeOpenListeners();\n host.listbox.hidden = true;\n host.popup.active = false;\n }\n if (!current()) return;\n if (opening) {\n // Match native vertical, immediate option reveal without scrolling an\n // ancestor page or moving focus after animation completion.\n const option = host.currentOption;\n if (option) {\n const list = host.listbox;\n const offset = Math.round(\n option.getBoundingClientRect().top -\n list.getBoundingClientRect().top,\n );\n if (offset < 0)\n list.scrollTo({ top: list.scrollTop + offset, behavior: 'auto' });\n else if (offset + option.clientHeight > list.offsetHeight) {\n list.scrollTo({\n top:\n list.scrollTop +\n offset -\n list.offsetHeight +\n option.clientHeight,\n behavior: 'auto',\n });\n }\n }\n host.dispatchEvent(new WaAfterShowEvent());\n } else {\n host.listbox.hidden = true;\n host.popup.active = false;\n void host.popup.updateComplete.then(() => {\n if (!host.open) releaseClosedPopupOverflow(host.popup);\n });\n host.dispatchEvent(new WaAfterHideEvent());\n }\n } finally {\n if (transitions.get(host) === transition) transitions.delete(host);\n }\n };\n}\n","// Web Awesome's multiple select keeps its popup open while choices toggle and\n// closes on an outside press, Escape, or focus leaving; Kerf keeps that\n// behavior. This boundary adapts the rest to Kerf's rendering model, only for\n// Kerf Selects (`data-component=\"select\"`):\n// - the closed control summarizes the chosen labels instead of drawing a\n// removable tag per choice or a \"N options selected\" count; an icon-only\n// trigger (whose value text is hidden) ends its accessible name with that\n// summary instead;\n// - the rendered `selected` attributes are the controlled value, so a\n// re-render that changes them updates the selection (Web Awesome otherwise\n// reads them only until the first interaction).\n\ninterface MultipleOption extends HTMLElement {\n value: string;\n label: string;\n selected: boolean;\n defaultSelected: boolean;\n}\n\ninterface MultipleSelectHost extends HTMLElement {\n multiple: boolean;\n hasUpdated: boolean;\n displayLabel: string;\n value: string | string[] | null;\n selectedOptions: MultipleOption[];\n getAllOptions(): MultipleOption[];\n selectionChanged(): void;\n}\n\ninterface SelectPrototype {\n selectionChanged(this: MultipleSelectHost): void;\n}\n\ninterface OptionPrototype {\n syncDefaultSelected(this: MultipleOption): void;\n}\n\nfunction kerfMultiple(host: Element | null): host is MultipleSelectHost {\n return (\n host instanceof HTMLElement &&\n host.dataset.component === 'select' &&\n (host as MultipleSelectHost).multiple\n );\n}\n\nfunction listLocale(host: HTMLElement): string | undefined {\n const lang = host.closest<HTMLElement>('[lang]')?.lang;\n return lang || undefined;\n}\n\n/** The closed-control text: chosen labels in choice order, as a short list. */\nfunction summarizeSelection(\n labels: readonly string[],\n locale?: string,\n): string {\n if (labels.length === 0) return '';\n try {\n return new Intl.ListFormat(locale, {\n type: 'unit',\n style: 'short',\n }).format(labels);\n } catch {\n return labels.join(', ');\n }\n}\n\n/** Install once at the explicit registration boundary, only for Kerf Selects. */\nexport function installSelectMultiple(\n selectPrototype: object,\n optionPrototype: object,\n): void {\n const installed = Symbol.for('@kerfjs/ui/select-multiple');\n if (Object.prototype.hasOwnProperty.call(selectPrototype, installed)) return;\n Object.defineProperty(selectPrototype, installed, { value: true });\n\n const select = selectPrototype as SelectPrototype;\n const selectionChanged = select.selectionChanged;\n select.selectionChanged = function () {\n selectionChanged.call(this);\n if (!kerfMultiple(this)) return;\n const chosen = new Set(this.selectedOptions);\n const summary = summarizeSelection(\n this.getAllOptions()\n .filter((option) => chosen.has(option))\n .map((option) => option.label),\n listLocale(this),\n );\n const nameSummary = this.querySelector(\n ':scope > [slot=\"label\"] > .kui-select__name-summary',\n );\n if (this.dataset.selectedPresentation === 'icon-only' && nameSummary) {\n // An icon-only trigger carries the summary in its accessible name, so\n // the (visually hidden) value stays empty rather than repeating it.\n nameSummary.textContent = summary ? `: ${summary}` : '';\n this.displayLabel = '';\n return;\n }\n this.displayLabel = summary;\n };\n\n // The summary replaces Web Awesome's per-choice tags.\n const tags = Object.getOwnPropertyDescriptor(selectPrototype, 'tags');\n if (tags?.get) {\n const getTags = tags.get;\n Object.defineProperty(selectPrototype, 'tags', {\n configurable: true,\n get(this: MultipleSelectHost) {\n return kerfMultiple(this) ? [] : getTags.call(this);\n },\n });\n }\n\n const option = optionPrototype as OptionPrototype;\n const syncDefaultSelected = option.syncDefaultSelected;\n option.syncDefaultSelected = function () {\n const host: Element | null = this.closest('[data-component=\"select\"]');\n if (!kerfMultiple(host) || !host.hasUpdated) {\n syncDefaultSelected.call(this);\n return;\n }\n // A re-render changed which options carry `selected`: that is the new\n // controlled value, whether or not the person has interacted.\n host.value = host\n .getAllOptions()\n .filter((candidate) => candidate.hasAttribute('selected'))\n .map((candidate) => candidate.value);\n };\n}\n","import '@awesome.me/webawesome/dist/components/button/button.js';\nimport '@awesome.me/webawesome/dist/components/divider/divider.js';\nimport '@awesome.me/webawesome/dist/components/dropdown/dropdown.js';\nimport '@awesome.me/webawesome/dist/components/dropdown-item/dropdown-item.js';\nimport '@awesome.me/webawesome/dist/components/tooltip/tooltip.js';\n\nimport WaOption from '@awesome.me/webawesome/dist/components/option/option.js';\nimport WaSelect from '@awesome.me/webawesome/dist/components/select/select.js';\n\nimport { installHelpTags } from '../../../../integrations/webawesome/help-tags/install-help-tag.js';\nimport { installSelectActions } from '../internal/install-select-actions.js';\nimport { installSelectLifecycle } from '../internal/install-select-lifecycle.js';\nimport { installSelectMultiple } from '../internal/install-select-multiple.js';\n\ninstallSelectLifecycle(WaSelect.prototype);\ninstallSelectMultiple(WaSelect.prototype, WaOption.prototype);\ninstallSelectActions();\ninstallHelpTags();\n\n/**\n * Marker export for tests and tooling; importing this module performs registration.\n * Registers both the `Select` elements and the `Catalog` related-entries popup-menu\n * elements (`wa-dropdown` / `wa-dropdown-item` / `wa-button`).\n */\nexport const selectElementsRegistered = true;\n"]}
1
+ {"version":3,"sources":["../src/components/forms/select/internal/select-element.ts","../src/components/forms/select/internal/select-controller.ts","../src/components/forms/select/register/select-register.ts"],"names":["isDisabled"],"mappings":"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","file":"select-register.js","sourcesContent":["import { summarizeSelection } from '../model/select-summary.js';\n\nconst OPTION = '.kui-select__option';\n\nconst isDisabled = (option: Element): boolean =>\n option.getAttribute('aria-disabled') === 'true';\n\n/** An option's value. */\nexport const optionValue = (option: Element): string =>\n option.getAttribute('data-value')!;\n\nconst optionLabel = (option: Element): string =>\n option.querySelector('.kui-select__option-label')!.textContent;\n\n/** Every option of a Select, in choice order. */\nexport function optionsOf(root: Element): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(OPTION));\n}\n\n/** The chosen (enabled, `aria-selected`) options of a Select. */\nexport function chosenOptions(root: Element): HTMLElement[] {\n return optionsOf(root).filter(\n (option) =>\n option.getAttribute('aria-selected') === 'true' && !isDisabled(option),\n );\n}\n\n/**\n * Bring the closed trigger in line with the options' selection: the value\n * text (a single choice's label, a multiple Select's summary), a single\n * choice's icon, and an icon-only multiple trigger's name. A custom selected\n * rendering and a count badge are the application's to re-render.\n */\nexport function renderSelection(root: Element): void {\n const trigger = root.querySelector<HTMLElement>(\n ':scope > .kui-select__trigger',\n )!;\n const valueText = trigger.querySelector<HTMLElement>('.kui-select__value')!;\n const chosen = chosenOptions(root);\n const multiple = root.hasAttribute('multiple');\n const iconOnly =\n root.getAttribute('data-selected-presentation') === 'icon-only';\n const summary = multiple ? summarizeSelection(chosen.map(optionLabel)) : '';\n const text = multiple\n ? iconOnly\n ? ''\n : summary\n : chosen[0]\n ? optionLabel(chosen[0])\n : '';\n if (multiple && iconOnly) {\n const base = root\n .querySelector('.kui-select__listbox')!\n .getAttribute('aria-label')!;\n trigger.setAttribute('aria-label', summary ? `${base}: ${summary}` : base);\n }\n if (root.classList.contains('kui-select--custom-selected')) return;\n if (text) {\n valueText.textContent = text;\n valueText.removeAttribute('data-placeholder');\n } else {\n // An empty Select shows its placeholder text, if it has one.\n valueText.textContent = valueText.getAttribute('data-placeholder-text');\n valueText.setAttribute('data-placeholder', 'true');\n }\n if (multiple) return;\n // A single choice leads with its icon; another choice without one drops it.\n trigger.querySelector(':scope > .kui-select__icon--selected')?.remove();\n const icon = chosen[0]?.querySelector('.kui-select__icon');\n if (icon) {\n const copy = icon.cloneNode(true) as HTMLElement;\n copy.classList.add('kui-select__icon--selected');\n trigger.prepend(copy);\n }\n}\n\n/**\n * Choose options: replace a single Select's choice, or set a multiple\n * Select's. Disabled options never become chosen. Returns whether anything\n * changed.\n */\nexport function setChosen(root: Element, values: readonly string[]): boolean {\n const wanted = new Set(values);\n const multiple = root.hasAttribute('multiple');\n let changed = false;\n let found = false;\n for (const option of optionsOf(root)) {\n const next =\n !isDisabled(option) &&\n wanted.has(optionValue(option)) &&\n (multiple || !found);\n if (next) found = true;\n if ((option.getAttribute('aria-selected') === 'true') !== next) {\n option.setAttribute('aria-selected', String(next));\n changed = true;\n }\n }\n if (changed) renderSelection(root);\n return changed;\n}\n\ninterface FormInternals {\n setFormValue(value: string | FormData | null): void;\n readonly form: HTMLFormElement | null;\n}\n\n/**\n * The Select root, `kui-select`: a light-DOM, form-associated control. Its\n * `value` is the chosen value (a string), or the chosen values in choice\n * order (an array) with `multiple`; it submits under `name` like a native\n * select and returns to its rendered value on form reset.\n */\nexport class KuiSelectElement extends HTMLElement {\n static formAssociated = true;\n\n #internals: FormInternals | undefined;\n #observer: MutationObserver | undefined;\n\n constructor() {\n super();\n // Engines without form-associated custom elements still get a working\n // control; it just does not join a form.\n this.#internals =\n typeof this.attachInternals === 'function'\n ? (this.attachInternals() as unknown as FormInternals)\n : undefined;\n }\n\n get name(): string {\n return this.getAttribute('name') ?? '';\n }\n\n get multiple(): boolean {\n return this.hasAttribute('multiple');\n }\n\n get value(): string | string[] {\n const values = chosenOptions(this).map(optionValue);\n return this.multiple ? values : (values[0] ?? '');\n }\n\n set value(next: string | readonly string[]) {\n setChosen(this, typeof next === 'string' ? [next] : next);\n this.syncFormValue();\n }\n\n /** The form the Select submits with, or null. */\n get form(): HTMLFormElement | null {\n return this.#internals?.form ?? null;\n }\n\n connectedCallback(): void {\n this.syncFormValue();\n // A re-render that changes which options are chosen (the application's\n // controlled value) is the new form value too, as are options the parser\n // adds after the element connects (a page parsed with it already defined).\n this.#observer ??= new MutationObserver(() => this.syncFormValue());\n this.#observer.observe(this, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: ['aria-selected'],\n });\n }\n\n disconnectedCallback(): void {\n this.#observer?.disconnect();\n }\n\n /** A form reset returns to the rendered (default) choice. */\n formResetCallback(): void {\n setChosen(\n this,\n optionsOf(this)\n .filter((option) => option.hasAttribute('data-default-selected'))\n .map(optionValue),\n );\n this.syncFormValue();\n }\n\n /** Publish the current choice as the form value. */\n syncFormValue(): void {\n const internals = this.#internals;\n if (!internals) return;\n const values = chosenOptions(this).map(optionValue);\n if (!this.multiple) {\n internals.setFormValue(values[0] ?? null);\n return;\n }\n const data = new FormData();\n for (const value of values) data.append(this.name, value);\n internals.setFormValue(data);\n }\n}\n","import {\n followAnchor,\n positionPopup,\n} from '../../../../shared/popup/position-popup.js';\nimport {\n chosenOptions,\n KuiSelectElement,\n optionsOf,\n optionValue,\n setChosen,\n} from './select-element.js';\n\nconst ROOT = 'kui-select.kui-select';\nconst TRIGGER = '.kui-select__trigger';\nconst POPUP = '.kui-select__popup';\n\n/** A typeahead query resets after this long without a keystroke. */\nexport const SELECT_TYPEAHEAD_RESET = 1000;\n\nconst isOpen = (popup: Element): boolean => popup.matches(':popover-open');\n\nconst isDisabled = (option: Element): boolean =>\n option.getAttribute('aria-disabled') === 'true';\n\nconst triggerOf = (root: Element): HTMLButtonElement =>\n root.querySelector<HTMLButtonElement>(`:scope > ${TRIGGER}`)!;\n\nconst popupOf = (root: Element): HTMLElement =>\n root.querySelector<HTMLElement>(`:scope > ${POPUP}`)!;\n\nconst labelOf = (option: Element): string =>\n option.querySelector('.kui-select__option-label')!.textContent.trim();\n\n/** Scroll the popup by the least amount that shows `option` whole. */\nfunction reveal(option: HTMLElement, popup: HTMLElement): void {\n if (popup.scrollHeight <= popup.clientHeight) return;\n const box = option.getBoundingClientRect();\n const top = popup.getBoundingClientRect().top + popup.clientTop;\n const bottom = top + popup.clientHeight;\n if (box.top < top) popup.scrollTop -= top - box.top;\n else if (box.bottom > bottom) popup.scrollTop += box.bottom - bottom;\n}\n\nconst installed = new WeakSet<Document>();\n\n/**\n * Wire every Select in `doc` and define its `kui-select` root element:\n * opening from the trigger (pointer, Enter, Space, the arrows, or typing),\n * top-layer placement below the trigger (flipping above when short), roving\n * focus through the options with typeahead, choosing (a single Select closes\n * and returns focus; a multiple one toggles and stays open), the opt-in\n * select-all and clear actions, `input` and `change` from the root, and\n * dismissal by Escape, Tab, or a press outside. Idempotent per document.\n */\nexport function installSelects(doc: Document = document): void {\n if (installed.has(doc)) return;\n installed.add(doc);\n const win = doc.defaultView!;\n if (!win.customElements.get('kui-select'))\n win.customElements.define('kui-select', KuiSelectElement);\n const following = new WeakMap<HTMLElement, () => void>();\n const openRoots = new Set<HTMLElement>();\n const typeahead = new WeakMap<\n HTMLElement,\n { query: string; timer: number | undefined }\n >();\n\n // Stop placing a closed Select's listbox and reset its open state.\n const reset = (popup: HTMLElement) => {\n following.get(popup)?.();\n following.delete(popup);\n const root = popup.parentElement!;\n openRoots.delete(root);\n root.removeAttribute('open');\n triggerOf(root).setAttribute('aria-expanded', 'false');\n };\n\n const announce = (root: HTMLElement) => {\n (root as Partial<KuiSelectElement>).syncFormValue?.();\n root.dispatchEvent(\n new InputEvent('input', { bubbles: true, composed: true }),\n );\n root.dispatchEvent(new Event('change', { bubbles: true, composed: true }));\n };\n\n const focusOption = (root: HTMLElement, option: HTMLElement | undefined) => {\n const popup = popupOf(root);\n // A listbox with no options still takes focus, so its keys work.\n (option ?? popup).focus({ preventScroll: true });\n if (option) reveal(option, popup);\n };\n\n const open = (root: HTMLElement, focus: 'chosen' | 'first' | 'last') => {\n const trigger = triggerOf(root);\n const popup = popupOf(root);\n if (trigger.disabled || isOpen(popup)) return;\n popup.showPopover();\n openRoots.add(root);\n root.setAttribute('open', '');\n trigger.setAttribute('aria-expanded', 'true');\n const fit = root.classList.contains('kui-select--fit-menu');\n const place = async () => {\n // Removing an open popover hides it without a toggle event.\n if (!popup.isConnected || !isOpen(popup)) {\n reset(popup);\n return;\n }\n // `fitMenu` matches the trigger; otherwise the listbox takes its\n // content's width within its cap.\n if (fit) popup.style.width = `${trigger.getBoundingClientRect().width}px`;\n await positionPopup(trigger, popup, { placement: 'bottom' });\n };\n const stopFollowing = followAnchor(trigger, popup, () => void place());\n // An application re-render while the listbox is open morphs the trigger\n // and popup back to their rendered (closed) attributes; restore the open\n // state and placement.\n let replacing = false;\n const restore = new MutationObserver(() => {\n // A Select disabled while open closes, so nothing more can be chosen.\n if (trigger.disabled) {\n close(root, false);\n return;\n }\n if (trigger.getAttribute('aria-expanded') !== 'true')\n trigger.setAttribute('aria-expanded', 'true');\n if (popup.style.top || replacing) return;\n // Placement writes its own styles before `top`; restore once.\n replacing = true;\n void place().finally(() => {\n replacing = false;\n });\n });\n restore.observe(trigger, {\n attributeFilter: ['aria-expanded', 'disabled'],\n });\n restore.observe(popup, { attributeFilter: ['style'] });\n following.set(popup, () => {\n restore.disconnect();\n stopFollowing();\n });\n const options = optionsOf(root);\n const target =\n focus === 'last'\n ? options[options.length - 1]\n : focus === 'first'\n ? options[0]\n : (chosenOptions(root)[0] ?? options[0]);\n focusOption(root, target);\n };\n\n const close = (root: HTMLElement, restoreFocus: boolean) => {\n const popup = popupOf(root);\n const focusInside = popup.contains(doc.activeElement);\n popup.hidePopover();\n if (restoreFocus && focusInside)\n triggerOf(root).focus({ preventScroll: true });\n };\n\n const choose = (root: HTMLElement, option: HTMLElement) => {\n if (isDisabled(option) || triggerOf(root).disabled) return;\n const value = optionValue(option);\n const multiple = root.hasAttribute('multiple');\n const values = chosenOptions(root).map(optionValue);\n const next = multiple\n ? values.includes(value)\n ? values.filter((candidate) => candidate !== value)\n : [...values, value]\n : [value];\n if (setChosen(root, next)) announce(root);\n if (!multiple) close(root, true);\n };\n\n const runAction = (root: HTMLElement, action: string) => {\n const next =\n action === 'all'\n ? optionsOf(root)\n .filter((option) => !isDisabled(option))\n .map(optionValue)\n : [];\n if (setChosen(root, next)) announce(root);\n };\n\n const runTypeahead = (root: HTMLElement, key: string): boolean => {\n const state = typeahead.get(root) ?? { query: '', timer: undefined };\n typeahead.set(root, state);\n win.clearTimeout(state.timer);\n state.timer = win.setTimeout(() => {\n state.query = '';\n }, SELECT_TYPEAHEAD_RESET);\n state.query =\n key === 'Backspace'\n ? state.query.slice(0, -1)\n : state.query + key.toLowerCase();\n const match = optionsOf(root).find((option) =>\n labelOf(option).toLowerCase().startsWith(state.query),\n );\n if (!match) return false;\n focusOption(root, match);\n return true;\n };\n\n // A press outside an open Select (and its trigger) closes it.\n doc.addEventListener(\n 'pointerdown',\n (event) => {\n const path = event.composedPath();\n for (const root of [...openRoots]) {\n if (!root.isConnected || !isOpen(popupOf(root))) {\n openRoots.delete(root);\n continue;\n }\n if (!path.includes(root)) close(root, false);\n }\n },\n true,\n );\n\n doc.addEventListener(\n 'click',\n (event) => {\n const target = event.target;\n if (!(target instanceof Element)) return;\n const root = target.closest<HTMLElement>(ROOT);\n if (!root) return;\n const trigger = target.closest(TRIGGER);\n if (trigger?.parentElement === root) {\n const popup = popupOf(root);\n if (popup && isOpen(popup)) close(root, true);\n else open(root, 'chosen');\n return;\n }\n // The visible label focuses the trigger, as a native label would.\n if (target.closest('.kui-select__label')?.parentElement === root) {\n triggerOf(root).focus();\n return;\n }\n const action = target.closest<HTMLElement>('[data-select-action]');\n if (action) {\n runAction(root, action.getAttribute('data-select-action')!);\n return;\n }\n const option = target.closest<HTMLElement>('.kui-select__option');\n if (option) choose(root, option);\n },\n true,\n );\n\n doc.addEventListener(\n 'keydown',\n (event) => {\n const target = event.target;\n if (!(target instanceof Element)) return;\n const root = target.closest<HTMLElement>(ROOT);\n if (!root || event.altKey || event.ctrlKey || event.metaKey) return;\n const popup = popupOf(root);\n const query = typeahead.get(root)?.query ?? '';\n // On the closed trigger: open, or open and find a typed choice.\n if (target.closest(TRIGGER)?.parentElement === root) {\n if (isOpen(popup)) return;\n switch (event.key) {\n case 'Enter':\n case ' ':\n case 'ArrowDown':\n event.preventDefault();\n open(root, 'chosen');\n return;\n case 'ArrowUp':\n event.preventDefault();\n open(root, 'chosen');\n return;\n case 'Home':\n case 'End':\n event.preventDefault();\n open(root, event.key === 'Home' ? 'first' : 'last');\n return;\n default:\n if (event.key.length === 1) {\n event.preventDefault();\n open(root, 'chosen');\n runTypeahead(root, event.key);\n }\n }\n return;\n }\n if (!popup.contains(target) || !isOpen(popup)) return;\n // Footer actions are native buttons: Enter and Space press them.\n const onAction = target.closest('[data-select-action]') !== null;\n const options = optionsOf(root);\n const current = target.closest<HTMLElement>('.kui-select__option');\n const index = current ? options.indexOf(current) : -1;\n const move = (next: HTMLElement | undefined) => {\n event.preventDefault();\n event.stopPropagation();\n focusOption(root, next);\n };\n switch (event.key) {\n case 'ArrowDown':\n move(\n options[index >= 0 && index < options.length - 1 ? index + 1 : 0],\n );\n return;\n case 'ArrowUp':\n move(options[index > 0 ? index - 1 : options.length - 1]);\n return;\n case 'Home':\n move(options[0]);\n return;\n case 'End':\n move(options[options.length - 1]);\n return;\n case 'Escape':\n event.preventDefault();\n event.stopPropagation();\n close(root, true);\n return;\n case 'Tab':\n close(root, false);\n triggerOf(root).focus({ preventScroll: true });\n return;\n case 'Enter':\n if (onAction || !current) return;\n event.preventDefault();\n choose(root, current);\n return;\n case ' ':\n if (onAction || !current) return;\n event.preventDefault();\n if (query) runTypeahead(root, ' ');\n else choose(root, current);\n return;\n default:\n if (\n (event.key.length === 1 || event.key === 'Backspace') &&\n !onAction &&\n runTypeahead(root, event.key)\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n },\n true,\n );\n\n // However a Select closes, its placement stops and its state resets.\n doc.addEventListener(\n 'beforetoggle',\n (event) => {\n const popup = event.target as HTMLElement;\n if (popup.matches(POPUP) && (event as ToggleEvent).newState === 'closed')\n reset(popup);\n },\n true,\n );\n}\n","import { installHelpTags } from '../../../../wiring/help-tags.js';\nimport { installPopupMenus } from '../../../actions/popup-menu/internal/popup-menu-controller.js';\nimport { installSelects } from '../internal/select-controller.js';\n\ninstallSelects();\n// The Catalog's related-entries menus are PopupMenus.\ninstallPopupMenus();\ninstallHelpTags();\n\n/**\n * Marker export for tests and tooling; importing this module defines the\n * `kui-select` root element and wires every `Select` in the document:\n * opening, placement, keyboard navigation and typeahead, choosing, the\n * select-all and clear actions, form participation, and dismissal. It also\n * wires the `Catalog` related-entries `PopupMenu`s and registers the help tag\n * an icon-only trigger shows on hover or keyboard focus.\n */\nexport const selectElementsRegistered = true;\n"]}
package/dist/select.d.ts CHANGED
@@ -1,9 +1,26 @@
1
1
  import { SafeHtml } from 'kerfjs';
2
+ import { KerfCustomElement } from 'kerfjs/jsx-runtime';
2
3
  import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
3
- import { CssForegroundColor } from './css-values.js';
4
+ import { CssForegroundColor, CssLength } from './css-values.js';
4
5
  import { LucideNode } from './lucide-icon.js';
5
6
  import 'lucide';
6
7
 
8
+ declare module 'kerfjs/jsx-runtime' {
9
+ namespace JSX {
10
+ interface IntrinsicElements {
11
+ /** The Select root: a light-DOM form control defined by `select/register`. */
12
+ 'kui-select': KerfCustomElement & {
13
+ class?: string;
14
+ name?: string;
15
+ value?: string;
16
+ multiple?: boolean;
17
+ disabled?: boolean;
18
+ style?: string;
19
+ slot?: string;
20
+ };
21
+ }
22
+ }
23
+ }
7
24
  interface SelectChoice<Value extends string = string> {
8
25
  value: Value;
9
26
  label: string;
@@ -45,9 +62,9 @@ interface SelectBaseProps<Value extends string = string> {
45
62
  name: string;
46
63
  choices: readonly SelectChoice<Value>[];
47
64
  className?: string;
48
- /** Empty-value hint text shown in the closed control (the native select placeholder). */
65
+ /** Empty-value hint text shown in the closed control. */
49
66
  placeholderText?: string;
50
- /** Supporting text shown below the control and associated with its combobox. */
67
+ /** Supporting text shown below the control and announced as its description. */
51
68
  hint?: string;
52
69
  disabled?: boolean;
53
70
  /** Match menu width to the trigger; default menus grow to content within viewport gutters. */
@@ -59,6 +76,13 @@ interface SelectBaseProps<Value extends string = string> {
59
76
  size?: SelectSize;
60
77
  /** Closed trigger width; omit to keep the presentation's default. */
61
78
  triggerWidth?: SelectTriggerWidth;
79
+ /**
80
+ * The widest the closed trigger grows, under any presentation; its value
81
+ * (or `renderSelected` content) ellipsizes inside it and the caret stays.
82
+ */
83
+ maxTriggerWidth?: CssLength;
84
+ /** The narrowest the closed trigger gets. */
85
+ minTriggerWidth?: CssLength;
62
86
  /** Show the disclosure caret (default); omit it for a compact icon-only trigger. */
63
87
  caret?: boolean;
64
88
  /** Let an enclosing ToolbarControlGroup paint the composed focus ring. */
@@ -83,8 +107,8 @@ interface SelectSingleValueProps<Value extends string = string> {
83
107
  }
84
108
  /**
85
109
  * Any number of chosen values. The popup stays open while the person toggles
86
- * choices and closes on an outside click, Escape, or focus leaving; the closed
87
- * control summarizes the chosen labels in choice order.
110
+ * choices and closes on an outside press, Escape, or Tab; the closed control
111
+ * summarizes the chosen labels in choice order.
88
112
  */
89
113
  interface SelectMultipleLabelProps<Value extends string = string> {
90
114
  multiple: true;
@@ -101,7 +125,7 @@ interface SelectMultipleLabelProps<Value extends string = string> {
101
125
  * A multiple Select drawn as an icon-only toolbar trigger, such as a
102
126
  * "Filter by label" funnel. No single choice is selected, so the trigger shows
103
127
  * a fixed `triggerIcon` naming the menu's purpose; while any choice is chosen
104
- * a count badge sits beside it, and the combobox's accessible name ends with
128
+ * a count badge sits beside it, and the trigger's accessible name ends with
105
129
  * the chosen labels in choice order.
106
130
  */
107
131
  interface SelectMultipleIconProps<Value extends string = string> {
package/dist/select.js CHANGED
@@ -1,4 +1,6 @@
1
- export { Select } from './chunk-NS762OVM.js';
1
+ export { Select } from './chunk-ZX2QQJXD.js';
2
+
3
+
2
4
 
3
5
 
4
6
 
@@ -0,0 +1,54 @@
1
+ /**
2
+ * What a pointer or key activation does to a multi-selection:
3
+ * - `replace`: select only the target (a plain click or Enter);
4
+ * - `toggle`: add or remove the target, keeping the rest (Cmd on Apple
5
+ * platforms, Ctrl elsewhere);
6
+ * - `extend`: select the range from the anchor to the target (Shift).
7
+ */
8
+ type SelectionGesture = 'replace' | 'toggle' | 'extend';
9
+ /** The modifier state of a `MouseEvent` or `KeyboardEvent`. */
10
+ interface SelectionModifiers {
11
+ readonly shiftKey: boolean;
12
+ readonly metaKey: boolean;
13
+ readonly ctrlKey: boolean;
14
+ }
15
+ /** True on macOS, iOS, and iPadOS, where Cmd (not Ctrl) toggles one item. */
16
+ declare function isApplePlatform(navigatorLike?: Pick<Navigator, 'platform' | 'userAgent'> | undefined): boolean;
17
+ /**
18
+ * Map an activation's modifiers to a {@link SelectionGesture}, normalized for
19
+ * the host platform: Shift extends; Cmd on Apple platforms, Ctrl elsewhere,
20
+ * toggles; anything else replaces.
21
+ */
22
+ declare function selectionGesture(modifiers: SelectionModifiers, apple?: boolean): SelectionGesture;
23
+ interface ApplySelectionOptions<Id> {
24
+ /** Every selectable id, in display order (leave out disabled items). */
25
+ readonly items: readonly Id[];
26
+ /** The current selection. */
27
+ readonly selected: readonly Id[];
28
+ /**
29
+ * The last replaced or toggled item; a Shift range starts here. Without
30
+ * one, the range starts at the first selected item, then at the target.
31
+ */
32
+ readonly anchor?: Id;
33
+ /** The activated item. */
34
+ readonly target: Id;
35
+ readonly gesture: SelectionGesture;
36
+ }
37
+ interface SelectionResult<Id> {
38
+ /** The new selection, in display order. */
39
+ readonly selected: Id[];
40
+ /** The anchor for the next Shift range. */
41
+ readonly anchor: Id;
42
+ }
43
+ /**
44
+ * Apply one selection gesture to a multi-selection, the conventional desktop
45
+ * list model: `replace` selects only the target, `toggle` flips it and keeps
46
+ * the rest, and `extend` selects the range from the anchor (the first
47
+ * selected item when there is none, else the target) to the target. The anchor moves to the target on
48
+ * `replace` and `toggle` and stays put on `extend`, so successive Shift
49
+ * activations pivot around one item. A target missing from `items` (such as a
50
+ * disabled item) leaves the selection unchanged.
51
+ */
52
+ declare function applySelection<Id>({ items, selected, anchor, target, gesture, }: ApplySelectionOptions<Id>): SelectionResult<Id>;
53
+
54
+ export { type ApplySelectionOptions, type SelectionGesture, type SelectionModifiers, type SelectionResult, applySelection, isApplePlatform, selectionGesture };
@@ -0,0 +1,3 @@
1
+ export { applySelection, isApplePlatform, selectionGesture } from './chunk-GXSX6Q6O.js';
2
+
3
+ //# sourceMappingURL=selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"selection.js"}
@@ -0,0 +1,74 @@
1
+ import * as kerfjs from 'kerfjs';
2
+ import { CssLength } from './css-values.js';
3
+
4
+ /** `default` is a 4px track with a 20px thumb at 16px text; `compact` 3px, 16px, and 14px. */
5
+ type SliderSize = 'default' | 'compact';
6
+ /** `horizontal` (default), or `vertical` with its minimum at the bottom. */
7
+ type SliderOrientation = 'horizontal' | 'vertical';
8
+ /**
9
+ * A labeled stop under the track: a value and the text shown for it. The
10
+ * labels are visual; the input still reports its value to assistive
11
+ * technology. (No `<datalist>`: Chromium shrinks a styled range's track when
12
+ * the input has a `list`.)
13
+ */
14
+ interface SliderTick {
15
+ value: number;
16
+ label?: string;
17
+ }
18
+ /** Application `data-*` metadata; the Slider's own markers stay protected. */
19
+ type SliderRootAttributes = Readonly<Record<`data-${string}`, string | undefined>>;
20
+ type SliderProps = {
21
+ /** The input's id; it also derives the readout, hint, and tick ids. */
22
+ id: string;
23
+ /** The current value (default the midpoint of `min` and `max`, snapped to `step`). */
24
+ value?: number;
25
+ /** The lowest value (default 0). */
26
+ min?: number;
27
+ /** The highest value (default 100). */
28
+ max?: number;
29
+ /** The step between values (default 1). */
30
+ step?: number;
31
+ name?: string;
32
+ /** Show the current value at the end of the label row, live while dragging. */
33
+ showValue?: boolean;
34
+ /** Text after the readout's number, such as `%` or ` px`. */
35
+ unit?: string;
36
+ /** Supporting text below the slider, also its description. */
37
+ hint?: string;
38
+ /** Labeled stops under the track. */
39
+ ticks?: readonly SliderTick[];
40
+ /**
41
+ * `vertical` stands the slider up (a volume control in a popup), minimum at
42
+ * the bottom, `length` tall; it takes no `ticks`.
43
+ */
44
+ orientation?: SliderOrientation;
45
+ /** A vertical slider's length (default 160px). */
46
+ length?: CssLength;
47
+ size?: SliderSize;
48
+ disabled?: boolean;
49
+ /** Delegated `data-action` on the input; listen for `input` or `change`. */
50
+ action?: string;
51
+ /** Associate the input with a form outside its ancestor chain. */
52
+ form?: string;
53
+ className?: string;
54
+ rootAttributes?: SliderRootAttributes;
55
+ /** Native named-slot assignment when composed inside a web component. */
56
+ slot?: string;
57
+ } & ({
58
+ label: string;
59
+ ariaLabel?: never;
60
+ } | {
61
+ label?: never;
62
+ ariaLabel: string;
63
+ });
64
+ /**
65
+ * A value on a continuous or stepped range: a native `<input type="range">`
66
+ * drawn as a track, a brand fill up to the value, and a thumb, with a label
67
+ * row, an optional live readout (`<output>`), labeled tick stops, and a hint.
68
+ * Keyboard, pointer, and screen-reader behavior are the platform's. Wire
69
+ * `wireSliders` from `@kerfjs/ui/wire-sliders` above it so the fill and the
70
+ * readout follow a drag before the app re-renders.
71
+ */
72
+ declare function Slider({ id, value, min, max, step, name, label, ariaLabel, showValue, unit, hint, ticks, size, orientation, length, disabled, action, form, className, rootAttributes, slot, }: SliderProps): kerfjs.SafeHtml;
73
+
74
+ export { Slider, type SliderOrientation, type SliderProps, type SliderRootAttributes, type SliderSize, type SliderTick };
package/dist/slider.js ADDED
@@ -0,0 +1,103 @@
1
+ import { filterDataAttributes } from './chunk-KH4KEMSP.js';
2
+ import { jsxs, jsx } from 'kerfjs/jsx-runtime';
3
+
4
+ var SLIDER_PROTECTED = /* @__PURE__ */ new Set([
5
+ "data-component",
6
+ "data-size",
7
+ "data-orientation",
8
+ "data-unit"
9
+ ]);
10
+ function fractionOf(value, min, max) {
11
+ return max === min ? 0 : (value - min) / (max - min);
12
+ }
13
+ function percent(fraction) {
14
+ return `${Number((fraction * 100).toFixed(4))}%`;
15
+ }
16
+ function Slider({
17
+ id,
18
+ value,
19
+ min = 0,
20
+ max = 100,
21
+ step = 1,
22
+ name,
23
+ label,
24
+ ariaLabel,
25
+ showValue = false,
26
+ unit = "",
27
+ hint,
28
+ ticks,
29
+ size = "default",
30
+ orientation = "horizontal",
31
+ length,
32
+ disabled = false,
33
+ action,
34
+ form,
35
+ className = "",
36
+ rootAttributes = {},
37
+ slot
38
+ }) {
39
+ if (!Number.isFinite(min) || !Number.isFinite(max) || max < min)
40
+ throw new RangeError("Slider max must be a number at least min.");
41
+ if (!Number.isFinite(step) || step <= 0)
42
+ throw new RangeError("Slider step must be a positive number.");
43
+ if (orientation === "vertical" && ticks !== void 0)
44
+ throw new TypeError("A vertical Slider takes no ticks.");
45
+ const current = Math.min(
46
+ max,
47
+ Math.max(min, value ?? min + Math.round((max - min) / 2 / step) * step)
48
+ );
49
+ const hintId = hint === void 0 ? void 0 : `${id}-hint`;
50
+ const ticksId = ticks === void 0 ? void 0 : `${id}-ticks`;
51
+ return /* @__PURE__ */ jsxs(
52
+ "div",
53
+ {
54
+ ...filterDataAttributes(rootAttributes, SLIDER_PROTECTED),
55
+ class: `kui-slider ${className}`.trim(),
56
+ "data-component": "slider",
57
+ "data-size": size,
58
+ "data-orientation": orientation === "vertical" ? "vertical" : void 0,
59
+ "data-unit": unit || void 0,
60
+ style: length === void 0 ? void 0 : `--_kui-slider-length:${length}`,
61
+ slot,
62
+ children: [
63
+ label === void 0 && !showValue ? null : /* @__PURE__ */ jsxs("div", { class: "kui-slider__header", children: [
64
+ label === void 0 ? null : /* @__PURE__ */ jsx("label", { class: "kui-slider__label", for: id, children: label }),
65
+ showValue ? /* @__PURE__ */ jsx("output", { class: "kui-slider__value", for: id, "aria-hidden": "true", children: `${current}${unit}` }) : null
66
+ ] }),
67
+ /* @__PURE__ */ jsx(
68
+ "input",
69
+ {
70
+ class: "kui-slider__input",
71
+ type: "range",
72
+ id,
73
+ name,
74
+ min,
75
+ max,
76
+ step,
77
+ value: String(current),
78
+ form,
79
+ disabled,
80
+ "data-action": action,
81
+ "aria-label": ariaLabel,
82
+ "aria-describedby": hintId,
83
+ "aria-valuetext": unit ? `${current}${unit}` : void 0,
84
+ style: `--_kui-slider-fill:${percent(fractionOf(current, min, max))}`
85
+ }
86
+ ),
87
+ ticks === void 0 ? null : /* @__PURE__ */ jsx("div", { class: "kui-slider__ticks", id: ticksId, "aria-hidden": "true", children: ticks.map((tick) => /* @__PURE__ */ jsx(
88
+ "span",
89
+ {
90
+ class: "kui-slider__tick",
91
+ style: `--_kui-slider-tick:${percent(fractionOf(Math.min(max, Math.max(min, tick.value)), min, max))}`,
92
+ children: tick.label ?? ""
93
+ }
94
+ )) }),
95
+ hint === void 0 ? null : /* @__PURE__ */ jsx("span", { class: "kui-slider__hint", id: hintId, children: hint })
96
+ ]
97
+ }
98
+ );
99
+ }
100
+
101
+ export { Slider };
102
+
103
+ //# sourceMappingURL=slider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/forms/slider/slider.tsx"],"names":[],"mappings":";;;AAyBA,IAAM,gBAAA,uBAAuB,GAAA,CAAI;AAAA,EAC/B,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAC,CAAA;AA2CD,SAAS,UAAA,CAAW,KAAA,EAAe,GAAA,EAAa,GAAA,EAAqB;AACnE,EAAA,OAAO,GAAA,KAAQ,GAAA,GAAM,CAAA,GAAA,CAAK,KAAA,GAAQ,QAAQ,GAAA,GAAM,GAAA,CAAA;AAClD;AAEA,SAAS,QAAQ,QAAA,EAA0B;AACzC,EAAA,OAAO,GAAG,MAAA,CAAA,CAAQ,QAAA,GAAW,KAAK,OAAA,CAAQ,CAAC,CAAC,CAAC,CAAA,CAAA,CAAA;AAC/C;AAUO,SAAS,MAAA,CAAO;AAAA,EACrB,EAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA,GAAM,CAAA;AAAA,EACN,GAAA,GAAM,GAAA;AAAA,EACN,IAAA,GAAO,CAAA;AAAA,EACP,IAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,IAAA,GAAO,EAAA;AAAA,EACP,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,WAAA,GAAc,YAAA;AAAA,EACd,MAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,MAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,iBAAiB,EAAC;AAAA,EAClB;AACF,CAAA,EAAgB;AACd,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,IAAK,CAAC,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,IAAK,GAAA,GAAM,GAAA;AAC1D,IAAA,MAAM,IAAI,WAAW,2CAA2C,CAAA;AAClE,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,IAAI,KAAK,IAAA,IAAQ,CAAA;AACpC,IAAA,MAAM,IAAI,WAAW,wCAAwC,CAAA;AAC/D,EAAA,IAAI,WAAA,KAAgB,cAAc,KAAA,KAAU,MAAA;AAC1C,IAAA,MAAM,IAAI,UAAU,mCAAmC,CAAA;AACzD,EAAA,MAAM,UAAU,IAAA,CAAK,GAAA;AAAA,IACnB,GAAA;AAAA,IACA,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAA,IAAS,GAAA,GAAM,IAAA,CAAK,KAAA,CAAA,CAAO,GAAA,GAAM,GAAA,IAAO,CAAA,GAAI,IAAI,CAAA,GAAI,IAAI;AAAA,GACxE;AACA,EAAA,MAAM,MAAA,GAAS,IAAA,KAAS,MAAA,GAAY,MAAA,GAAY,GAAG,EAAE,CAAA,KAAA,CAAA;AACrD,EAAA,MAAM,OAAA,GAAU,KAAA,KAAU,MAAA,GAAY,MAAA,GAAY,GAAG,EAAE,CAAA,MAAA,CAAA;AACvD,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,oBAAA,CAAqB,cAAA,EAAgB,gBAAgB,CAAA;AAAA,MACzD,KAAA,EAAO,CAAA,WAAA,EAAc,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MACtC,gBAAA,EAAe,QAAA;AAAA,MACf,WAAA,EAAW,IAAA;AAAA,MACX,kBAAA,EAAkB,WAAA,KAAgB,UAAA,GAAa,UAAA,GAAa,MAAA;AAAA,MAC5D,aAAW,IAAA,IAAQ,MAAA;AAAA,MACnB,KAAA,EACE,MAAA,KAAW,MAAA,GAAY,MAAA,GAAY,wBAAwB,MAAM,CAAA,CAAA;AAAA,MAEnE,IAAA;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,KAAA,KAAU,UAAa,CAAC,SAAA,GAAY,uBACnC,IAAA,CAAC,KAAA,EAAA,EAAI,OAAM,oBAAA,EACR,QAAA,EAAA;AAAA,UAAA,KAAA,KAAU,MAAA,GAAY,uBACrB,GAAA,CAAC,OAAA,EAAA,EAAM,OAAM,mBAAA,EAAoB,GAAA,EAAK,IACnC,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,UAED,SAAA,mBACC,GAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,qBAAoB,GAAA,EAAK,EAAA,EAAI,aAAA,EAAY,MAAA,EACpD,QAAA,EAAA,CAAA,EAAG,OAAO,CAAA,EAAG,IAAI,IACpB,CAAA,GACE;AAAA,SAAA,EACN,CAAA;AAAA,wBAEF,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,mBAAA;AAAA,YACN,IAAA,EAAK,OAAA;AAAA,YACL,EAAA;AAAA,YACA,IAAA;AAAA,YACA,GAAA;AAAA,YACA,GAAA;AAAA,YACA,IAAA;AAAA,YACA,KAAA,EAAO,OAAO,OAAO,CAAA;AAAA,YACrB,IAAA;AAAA,YACA,QAAA;AAAA,YACA,aAAA,EAAa,MAAA;AAAA,YACb,YAAA,EAAY,SAAA;AAAA,YACZ,kBAAA,EAAkB,MAAA;AAAA,YAClB,kBAAgB,IAAA,GAAO,CAAA,EAAG,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,GAAK,MAAA;AAAA,YAC7C,KAAA,EAAO,sBAAsB,OAAA,CAAQ,UAAA,CAAW,SAAS,GAAA,EAAK,GAAG,CAAC,CAAC,CAAA;AAAA;AAAA,SACrE;AAAA,QACC,KAAA,KAAU,MAAA,GAAY,IAAA,mBACrB,GAAA,CAAC,SAAI,KAAA,EAAM,mBAAA,EAAoB,EAAA,EAAI,OAAA,EAAS,aAAA,EAAY,MAAA,EACrD,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACV,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,kBAAA;AAAA,YACN,OAAO,CAAA,mBAAA,EAAsB,OAAA,CAAQ,UAAA,CAAW,IAAA,CAAK,IAAI,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAK,KAAK,CAAC,GAAG,GAAA,EAAK,GAAG,CAAC,CAAC,CAAA,CAAA;AAAA,YAEnG,eAAK,KAAA,IAAS;AAAA;AAAA,SAElB,CAAA,EACH,CAAA;AAAA,QAED,IAAA,KAAS,SAAY,IAAA,mBACpB,GAAA,CAAC,UAAK,KAAA,EAAM,kBAAA,EAAmB,EAAA,EAAI,MAAA,EAChC,QAAA,EAAA,IAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ","file":"slider.js","sourcesContent":["import { filterDataAttributes } from '../../../shared/dom/extension-attributes.js';\nimport type { CssLength } from '../../../shared/styles/css-values.js';\n\n/** `default` is a 4px track with a 20px thumb at 16px text; `compact` 3px, 16px, and 14px. */\nexport type SliderSize = 'default' | 'compact';\n\n/** `horizontal` (default), or `vertical` with its minimum at the bottom. */\nexport type SliderOrientation = 'horizontal' | 'vertical';\n\n/**\n * A labeled stop under the track: a value and the text shown for it. The\n * labels are visual; the input still reports its value to assistive\n * technology. (No `<datalist>`: Chromium shrinks a styled range's track when\n * the input has a `list`.)\n */\nexport interface SliderTick {\n value: number;\n label?: string;\n}\n\n/** Application `data-*` metadata; the Slider's own markers stay protected. */\nexport type SliderRootAttributes = Readonly<\n Record<`data-${string}`, string | undefined>\n>;\n\nconst SLIDER_PROTECTED = new Set([\n 'data-component',\n 'data-size',\n 'data-orientation',\n 'data-unit',\n]);\n\nexport type SliderProps = {\n /** The input's id; it also derives the readout, hint, and tick ids. */\n id: string;\n /** The current value (default the midpoint of `min` and `max`, snapped to `step`). */\n value?: number;\n /** The lowest value (default 0). */\n min?: number;\n /** The highest value (default 100). */\n max?: number;\n /** The step between values (default 1). */\n step?: number;\n name?: string;\n /** Show the current value at the end of the label row, live while dragging. */\n showValue?: boolean;\n /** Text after the readout's number, such as `%` or ` px`. */\n unit?: string;\n /** Supporting text below the slider, also its description. */\n hint?: string;\n /** Labeled stops under the track. */\n ticks?: readonly SliderTick[];\n /**\n * `vertical` stands the slider up (a volume control in a popup), minimum at\n * the bottom, `length` tall; it takes no `ticks`.\n */\n orientation?: SliderOrientation;\n /** A vertical slider's length (default 160px). */\n length?: CssLength;\n size?: SliderSize;\n disabled?: boolean;\n /** Delegated `data-action` on the input; listen for `input` or `change`. */\n action?: string;\n /** Associate the input with a form outside its ancestor chain. */\n form?: string;\n className?: string;\n rootAttributes?: SliderRootAttributes;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n} & (\n { label: string; ariaLabel?: never } | { label?: never; ariaLabel: string }\n);\n\nfunction fractionOf(value: number, min: number, max: number): number {\n return max === min ? 0 : (value - min) / (max - min);\n}\n\nfunction percent(fraction: number): string {\n return `${Number((fraction * 100).toFixed(4))}%`;\n}\n\n/**\n * A value on a continuous or stepped range: a native `<input type=\"range\">`\n * drawn as a track, a brand fill up to the value, and a thumb, with a label\n * row, an optional live readout (`<output>`), labeled tick stops, and a hint.\n * Keyboard, pointer, and screen-reader behavior are the platform's. Wire\n * `wireSliders` from `@kerfjs/ui/wire-sliders` above it so the fill and the\n * readout follow a drag before the app re-renders.\n */\nexport function Slider({\n id,\n value,\n min = 0,\n max = 100,\n step = 1,\n name,\n label,\n ariaLabel,\n showValue = false,\n unit = '',\n hint,\n ticks,\n size = 'default',\n orientation = 'horizontal',\n length,\n disabled = false,\n action,\n form,\n className = '',\n rootAttributes = {},\n slot,\n}: SliderProps) {\n if (!Number.isFinite(min) || !Number.isFinite(max) || max < min)\n throw new RangeError('Slider max must be a number at least min.');\n if (!Number.isFinite(step) || step <= 0)\n throw new RangeError('Slider step must be a positive number.');\n if (orientation === 'vertical' && ticks !== undefined)\n throw new TypeError('A vertical Slider takes no ticks.');\n const current = Math.min(\n max,\n Math.max(min, value ?? min + Math.round((max - min) / 2 / step) * step),\n );\n const hintId = hint === undefined ? undefined : `${id}-hint`;\n const ticksId = ticks === undefined ? undefined : `${id}-ticks`;\n return (\n <div\n {...filterDataAttributes(rootAttributes, SLIDER_PROTECTED)}\n class={`kui-slider ${className}`.trim()}\n data-component=\"slider\"\n data-size={size}\n data-orientation={orientation === 'vertical' ? 'vertical' : undefined}\n data-unit={unit || undefined}\n style={\n length === undefined ? undefined : `--_kui-slider-length:${length}`\n }\n slot={slot}\n >\n {label === undefined && !showValue ? null : (\n <div class=\"kui-slider__header\">\n {label === undefined ? null : (\n <label class=\"kui-slider__label\" for={id}>\n {label}\n </label>\n )}\n {showValue ? (\n <output class=\"kui-slider__value\" for={id} aria-hidden=\"true\">\n {`${current}${unit}`}\n </output>\n ) : null}\n </div>\n )}\n <input\n class=\"kui-slider__input\"\n type=\"range\"\n id={id}\n name={name}\n min={min}\n max={max}\n step={step}\n value={String(current)}\n form={form}\n disabled={disabled}\n data-action={action}\n aria-label={ariaLabel}\n aria-describedby={hintId}\n aria-valuetext={unit ? `${current}${unit}` : undefined}\n style={`--_kui-slider-fill:${percent(fractionOf(current, min, max))}`}\n />\n {ticks === undefined ? null : (\n <div class=\"kui-slider__ticks\" id={ticksId} aria-hidden=\"true\">\n {ticks.map((tick) => (\n <span\n class=\"kui-slider__tick\"\n style={`--_kui-slider-tick:${percent(fractionOf(Math.min(max, Math.max(min, tick.value)), min, max))}`}\n >\n {tick.label ?? ''}\n </span>\n ))}\n </div>\n )}\n {hint === undefined ? null : (\n <span class=\"kui-slider__hint\" id={hintId}>\n {hint}\n </span>\n )}\n </div>\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
- export { SplitButton } from './chunk-HLDRH23D.js';
1
+ export { SplitButton } from './chunk-WJKHLOP5.js';
2
2
 
3
3
 
4
4
 
@@ -27,8 +27,11 @@ interface SplitViewResizable extends Pick<ResizableRegionProps, 'separator' | 'h
27
27
  min: number;
28
28
  max: number;
29
29
  }
30
- /** One compact view's top- and bottom-toolbar content (see `NavStackView`). */
31
- type SplitViewCompactViewToolbars = Pick<NavStackView, 'toolbar' | 'bottomToolbar'>;
30
+ /**
31
+ * One compact view's top- and bottom-toolbar content and pinned footer (see
32
+ * `NavStackView`).
33
+ */
34
+ type SplitViewCompactViewToolbars = Pick<NavStackView, 'toolbar' | 'bottomToolbar' | 'footer'>;
32
35
  /**
33
36
  * The compact `NavStack`'s configuration: its toolbar configuration, back
34
37
  * control, persistent bottom toolbar, chrome dividers, and chrome and