@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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/actions/popup-menu/internal/popup-menu-content-cache.ts","../src/components/actions/popup-menu/popup-menu.tsx"],"names":[],"mappings":"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","file":"chunk-7W3GKMN4.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport type { PopupMenuEntry } from '../popup-menu.js';\n\n/**\n * Streaming content hash: slot 0 is the FNV-1a digest that names\n * the menu's `data-key`; slot 1 is an independent check hash (a 31-multiplier\n * polynomial whose dependency chain runs in parallel with the digest's), so\n * the markup cache is keyed by about 64 bits and a digest collision cannot\n * serve another menu's markup. An `Int32Array` keeps both accumulators unboxed\n * between calls.\n */\nconst hashState = new Int32Array(2);\n\nfunction hashCode(code: number): void {\n hashState[0] = Math.imul(hashState[0]! ^ code, 0x01000193);\n hashState[1] = (Math.imul(hashState[1]!, 31) + code) | 0;\n}\n\n/**\n * Hash a string's code points. A surrogate pair is combined into one code\n * point, matching the former `for…of` iteration over the joined key, so the\n * digest, and with it the rendered `data-key`, is unchanged.\n */\nfunction hashText(text: string): void {\n let digest = hashState[0]!;\n let check = hashState[1]!;\n const length = text.length;\n for (let index = 0; index < length; index++) {\n let code = text.charCodeAt(index);\n if ((code & 0xfc00) === 0xd800 && index + 1 < length) {\n const low = text.charCodeAt(index + 1);\n if ((low & 0xfc00) === 0xdc00) {\n code = ((code - 0xd800) << 10) + (low - 0xdc00) + 0x10000;\n index++;\n }\n }\n digest = Math.imul(digest ^ code, 0x01000193);\n check = (Math.imul(check, 31) + code) | 0;\n }\n hashState[0] = digest;\n hashState[1] = check;\n}\n\n/**\n * Parts at least this long (icon and details markup) are hashed through\n * {@link hashLongText}: by a memoized digest of the whole string instead of\n * character by character, so a glyph repeated on every row costs a map lookup.\n */\nexport const LONG_PART_LENGTH = 64;\n\n/** Bound on memoized long-part digests; past it the oldest is evicted. */\nexport const PART_DIGEST_LIMIT = 4096;\nconst partDigests = new Map<string, readonly [number, number]>();\n\n/**\n * Feed a long part as its own two hashes. A Lucide SVG is a few hundred\n * characters and repeats across every row's menu, so hashing its characters\n * dominated an unchanged menu's cost; V8 hashes a string key natively (once\n * per string object) and compares equal strings quickly.\n */\nfunction hashLongText(text: string): void {\n let pair = partDigests.get(text);\n if (!pair) {\n const digest = hashState[0]!;\n const check = hashState[1]!;\n hashState[0] = 0x811c9dc5;\n hashState[1] = 0x9747b28c;\n hashText(text);\n pair = [hashState[0], hashState[1]];\n hashState[0] = digest;\n hashState[1] = check;\n if (partDigests.size >= PART_DIGEST_LIMIT)\n partDigests.delete(partDigests.keys().next().value!);\n partDigests.set(text, pair);\n }\n hashCode(pair[0]);\n hashCode(pair[1]);\n}\n\n/** Hash a part, through its memoized digest when it is long. */\nfunction hashPart(text: string): void {\n if (text.length >= LONG_PART_LENGTH) hashLongText(text);\n else hashText(text);\n}\n\nconst PART_SEPARATOR = 0x00;\nconst FIELD_SEPARATOR = 0x01;\n\n/**\n * Feed one entry's structure: the fields, in order, separated by U+0001, with\n * each submenu entry appended the same way.\n */\nfunction hashEntry(entry: PopupMenuEntry): void {\n if (entry.kind === 'divider') {\n hashCode(0x2d); // '-'\n return;\n }\n if (entry.kind === 'heading') {\n hashCode(0x23); // '#'\n hashText(entry.label);\n return;\n }\n hashText(entry.label);\n hashCode(FIELD_SEPARATOR);\n hashText(entry.action ?? '');\n hashCode(FIELD_SEPARATOR);\n hashText(entry.value ?? '');\n hashCode(FIELD_SEPARATOR);\n hashCode(entry.disabled ? 0x31 : 0x30);\n hashCode(FIELD_SEPARATOR);\n hashCode(entry.checked === undefined ? 0x2d : entry.checked ? 0x31 : 0x30);\n hashCode(FIELD_SEPARATOR);\n hashText(entry.tone ?? '');\n hashCode(FIELD_SEPARATOR);\n hashText(entry.disabledReason ?? '');\n hashCode(FIELD_SEPARATOR);\n // SafeHtml stringifies to its stored markup without copying, and the key\n // must change when an icon or details change.\n hashPart(String(entry.icon ?? ''));\n hashCode(FIELD_SEPARATOR);\n hashPart(String(entry.details ?? ''));\n hashCode(FIELD_SEPARATOR);\n hashText(entry.attributes ? JSON.stringify(entry.attributes) : '{}');\n for (const child of entry.submenu ?? []) {\n hashCode(FIELD_SEPARATOR);\n hashEntry(child);\n }\n}\n\n/**\n * Bounded, least-recently-used cache of each menu's trigger and entry markup,\n * keyed by its content hashes. A list that re-renders unchanged menus then\n * pays one hash pass per menu instead of rendering every entry again, which\n * the morph would discard under `data-morph-skip-children` anyway. Sized above\n * a large list's distinct menus; past it, renders fall back to fresh markup.\n */\nexport const MARKUP_CACHE_LIMIT = 1024;\nconst markupCache = new Map<string, SafeHtml>();\n\n/**\n * The menu's `data-key` and its cache key. The digest covers, in order and\n * separated by U+0000, the trigger parts and then each entry, whose fields are\n * separated by U+0001; it is the FNV-1a hash of that joined text, except that\n * a part of {@link LONG_PART_LENGTH} or more characters contributes its own\n * two hashes in place of its characters.\n */\nexport function popupMenuContentKey(\n triggerParts: readonly string[],\n items: readonly PopupMenuEntry[],\n): { key: string; cacheKey: string } {\n hashState[0] = 0x811c9dc5;\n hashState[1] = 0x9747b28c;\n for (let index = 0; index < triggerParts.length; index++) {\n if (index > 0) hashCode(PART_SEPARATOR);\n hashPart(triggerParts[index]!);\n }\n for (const entry of items) {\n hashCode(PART_SEPARATOR);\n hashEntry(entry);\n }\n const digest = (hashState[0]! >>> 0).toString(36);\n return {\n key: `kui-popup-menu-${digest}`,\n cacheKey: `${digest}:${(hashState[1]! >>> 0).toString(36)}`,\n };\n}\n\n/** Cached markup for a cache key, refreshed as most recently used. */\nexport function cachedPopupMenuContent(cacheKey: string): SafeHtml | undefined {\n const content = markupCache.get(cacheKey);\n if (content) {\n markupCache.delete(cacheKey);\n markupCache.set(cacheKey, content);\n }\n return content;\n}\n\n/**\n * Remember rendered markup, evicting the least recently used entry when full.\n * Only static markup is reusable: content that holds a keyed list must be\n * rendered in each pass for the list reconciler.\n */\nexport function cachePopupMenuContent(\n cacheKey: string,\n content: SafeHtml,\n): void {\n if (content.__segment.kind !== 'static') return;\n if (markupCache.size >= MARKUP_CACHE_LIMIT)\n markupCache.delete(markupCache.keys().next().value!);\n markupCache.set(cacheKey, content);\n}\n\n/** Test hook: drop cached menu markup and memoized part digests. */\nexport function _clearPopupMenuMarkupCache(): void {\n markupCache.clear();\n partDigests.clear();\n}\n\n/** Test hook: the number of memoized long-part digests. */\nexport function _popupMenuPartDigestCount(): number {\n return partDigests.size;\n}\n\n/** Test hook: the number of cached menu markups. */\nexport function _popupMenuMarkupCacheSize(): number {\n return markupCache.size;\n}\n","import type { SafeHtml } from 'kerfjs';\nimport { Check } from 'lucide';\n\nimport type { KerfUiContent } from '../../../shared/content/semantic-content.js';\nimport {\n PopupCaretGlyph,\n PopupSubmenuGlyph,\n} from '../../../shared/popup/popup-glyphs.js';\nimport { LucideIcon } from '../../media/lucide-icon/lucide-icon.js';\nimport {\n cachedPopupMenuContent,\n cachePopupMenuContent,\n popupMenuContentKey,\n} from './internal/popup-menu-content-cache.js';\nimport {\n POPUP_MENU_CLOSE_EVENT,\n POPUP_MENU_OPEN_EVENT,\n type PopupMenuOpenDetail,\n} from './internal/popup-menu-events.js';\n\nexport type PopupMenuPlacement =\n 'bottom-start' | 'bottom' | 'bottom-end' | 'top-start' | 'top' | 'top-end';\n\ntype PopupMenuDataAttributes = Readonly<\n Record<`data-${string}`, string | undefined> & {\n 'data-action'?: never;\n 'data-component'?: never;\n 'data-key'?: never;\n 'data-morph-skip-children'?: never;\n }\n>;\n\n/** One command in the menu. */\nexport interface PopupMenuItem {\n kind?: 'item';\n label: string;\n /** Delegated `data-action` the app handles when the item is chosen. */\n action?: string;\n /** The item's value, reported in the menu's `kui-menu-select` event. */\n value?: string;\n /** Leading icon, typically a `LucideIcon`, before the label. */\n icon?: SafeHtml;\n /** A checkbox choice, including nested choices; omit for a plain command. */\n checked?: boolean;\n /** Trailing safe content, such as secondary status. */\n details?: SafeHtml;\n /** Destructive command styling. */\n tone?: 'default' | 'danger';\n disabled?: boolean;\n /** Native tooltip text for a disabled command. */\n disabledReason?: string;\n /** Application `data-*` metadata such as a record id. */\n attributes?: PopupMenuDataAttributes;\n /** Child commands, headings, and dividers opened by hover or keyboard navigation. */\n submenu?: readonly PopupMenuEntry[];\n}\n\n/** A labeled group heading; items that follow it belong to the group. */\nexport interface PopupMenuHeading {\n kind: 'heading';\n label: string;\n}\n\n/** A separator between groups of items. */\nexport interface PopupMenuDivider {\n kind: 'divider';\n}\n\nexport type PopupMenuEntry =\n PopupMenuItem | PopupMenuHeading | PopupMenuDivider;\n\ntype PopupMenuTriggerName =\n | {\n /** Visible trigger text, which is also its accessible name. */\n text: string;\n label?: never;\n triggerContent?: never;\n }\n | {\n text?: never;\n /**\n * Accessible name of an icon-only trigger, rendered as visually hidden\n * text inside the trigger button.\n */\n label: string;\n triggerContent?: never;\n }\n | {\n text?: never;\n /**\n * The trigger's accessible name (\"Status: Started\"); the visible\n * content is hidden from assistive technology.\n */\n label: string;\n /**\n * Visible content that is the whole trigger, such as a `Badge` showing\n * the current status. Kerf owns the bare button around it (no chrome,\n * a pill focus ring, the pointer cursor, `aria-haspopup`), and the\n * caret is off unless `caret` is set.\n */\n triggerContent: KerfUiContent;\n icon?: never;\n };\n\n/** A context PopupMenu's viewport anchor point. */\nexport interface PopupMenuAnchor {\n x: number;\n y: number;\n}\n\ntype PopupMenuTrigger =\n | (PopupMenuTriggerName & { context?: false; anchor?: never })\n | {\n context: true;\n label: string;\n triggerContent?: never;\n /**\n * The viewport point (CSS pixels, as in `MouseEvent.clientX/Y`) the\n * menu opens from. Rendered into the menu itself, so it survives\n * re-renders and replacement; open it with `openPopupMenu`.\n */\n anchor?: PopupMenuAnchor;\n text?: never;\n icon?: never;\n caret?: never;\n disabled?: never;\n };\n\nexport type PopupMenuProps = PopupMenuTrigger & {\n /** Trigger icon, typically a `LucideIcon`, before any visible text. */\n icon?: KerfUiContent;\n items: readonly PopupMenuEntry[];\n /** Where the menu opens relative to its trigger. Defaults to `bottom-start`. */\n placement?: PopupMenuPlacement;\n /** Show the disclosure caret after the trigger content. Defaults to true. */\n caret?: boolean;\n disabled?: boolean;\n /** Application `data-*` metadata on the menu root. */\n rootAttributes?: PopupMenuDataAttributes;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n};\n\ntype PopupMenuCommand = PopupMenuItem & { kind?: 'item' };\n\nconst isCommand = (entry: PopupMenuEntry): entry is PopupMenuCommand =>\n entry.kind !== 'heading' && entry.kind !== 'divider';\n\n/** Whether a menu level holds a checkbox choice, so its plain items reserve the check column. */\nfunction hasChoice(entries: readonly PopupMenuEntry[]): boolean {\n return entries.some(\n (entry) => isCommand(entry) && entry.checked !== undefined,\n );\n}\n\nfunction renderItem(entry: PopupMenuCommand, levelHasChoice: boolean) {\n // A plain command beside checkbox choices keeps their check column, so its\n // icon and label line up with theirs.\n const choice = entry.checked !== undefined;\n const item = (\n <button\n {...(entry.attributes ?? {})}\n type=\"button\"\n class=\"kui-popup-menu__item\"\n role={choice ? 'menuitemcheckbox' : 'menuitem'}\n tabindex={-1}\n data-action={entry.action}\n value={entry.value}\n data-tone={entry.tone === 'danger' ? 'danger' : undefined}\n aria-checked={choice ? String(entry.checked) : undefined}\n aria-disabled={entry.disabled ? 'true' : undefined}\n aria-haspopup={entry.submenu ? 'menu' : undefined}\n aria-expanded={entry.submenu ? 'false' : undefined}\n title={entry.disabled ? entry.disabledReason : undefined}\n >\n {levelHasChoice ? (\n <span class=\"kui-popup-menu__check\" aria-hidden=\"true\">\n {choice ? <LucideIcon icon={Check} name=\"check\" /> : null}\n </span>\n ) : null}\n {entry.icon ? (\n <span class=\"kui-popup-menu__icon\" aria-hidden=\"true\">\n {entry.icon}\n </span>\n ) : null}\n <span class=\"kui-popup-menu__item-label\">{entry.label}</span>\n {entry.details ? (\n <span class=\"kui-popup-menu__details\">{entry.details}</span>\n ) : null}\n {entry.submenu ? (\n <span class=\"kui-popup-menu__submenu-icon\" aria-hidden=\"true\">\n <PopupSubmenuGlyph />\n </span>\n ) : null}\n </button>\n );\n if (!entry.submenu) return item;\n return (\n <div class=\"kui-popup-menu__submenu-host\" role=\"none\">\n {item}\n {renderMenu(entry.submenu, entry.label, true)}\n </div>\n );\n}\n\n/**\n * One menu level: its entries in order, with each heading opening a labeled\n * group that holds the items up to the next heading or divider.\n */\nfunction renderEntries(entries: readonly PopupMenuEntry[]): SafeHtml[] {\n const levelHasChoice = hasChoice(entries);\n const out: SafeHtml[] = [];\n let index = 0;\n while (index < entries.length) {\n const entry = entries[index]!;\n if (entry.kind === 'divider') {\n out.push(<div class=\"kui-popup-menu__divider\" role=\"separator\" />);\n index += 1;\n continue;\n }\n if (entry.kind === 'heading') {\n const members: SafeHtml[] = [];\n index += 1;\n while (index < entries.length) {\n const member = entries[index]!;\n if (!isCommand(member)) break;\n members.push(renderItem(member, levelHasChoice));\n index += 1;\n }\n out.push(\n <div\n class=\"kui-popup-menu__group\"\n role=\"group\"\n aria-label={entry.label}\n >\n <div class=\"kui-popup-menu__heading\" aria-hidden=\"true\">\n {entry.label}\n </div>\n {members}\n </div>,\n );\n continue;\n }\n out.push(renderItem(entry, levelHasChoice));\n index += 1;\n }\n return out;\n}\n\nfunction renderMenu(\n entries: readonly PopupMenuEntry[],\n name: string | undefined,\n submenu: boolean,\n) {\n return (\n <div\n class=\"kui-popup-menu__menu\"\n role=\"menu\"\n popover=\"manual\"\n tabindex={-1}\n aria-label={name}\n data-submenu={submenu ? '' : undefined}\n >\n {renderEntries(entries)}\n </div>\n );\n}\n\n/** A rendered PopupMenu root, the element the open and close helpers take. */\nexport type PopupMenuElement = HTMLElement;\n\nfunction requestOpen(menu: PopupMenuElement, detail: PopupMenuOpenDetail) {\n menu.dispatchEvent(\n new CustomEvent<PopupMenuOpenDetail>(POPUP_MENU_OPEN_EVENT, { detail }),\n );\n}\n\n/**\n * Open a PopupMenu at viewport pointer coordinates. A `context` menu rendered\n * without `anchor` moves its invisible anchor there (a menu rendered with\n * `anchor` opens with `openPopupMenu` instead). A button-triggered menu (such\n * as a `ListActionRow` trailing menu) opens `bottom-start` from the point,\n * like a context menu, for this opening only; its next opening returns to its\n * trigger and placement. Needs the `/register` entry.\n */\nexport function openPopupMenuAt(\n menu: PopupMenuElement,\n x: number,\n y: number,\n): void {\n menu.style.setProperty('--kui-popup-menu-context-x', `${x}px`);\n menu.style.setProperty('--kui-popup-menu-context-y', `${y}px`);\n requestOpen(menu, { point: { x, y } });\n}\n\n/**\n * Open a PopupMenu from its trigger, or a context PopupMenu at the `anchor`\n * it was rendered with (or the point a previous `openPopupMenuAt` set).\n * Needs the `/register` entry.\n */\nexport function openPopupMenu(menu: PopupMenuElement): void {\n requestOpen(menu, {});\n}\n\n/** Close an open PopupMenu, and any submenu it shows. */\nexport function closePopupMenu(menu: PopupMenuElement): void {\n menu.dispatchEvent(new CustomEvent(POPUP_MENU_CLOSE_EVENT));\n}\n\ninterface PopupMenuContentProps {\n context: boolean;\n label: string | undefined;\n icon: KerfUiContent;\n triggerContent: KerfUiContent;\n text: string | undefined;\n caret: boolean;\n disabled: boolean;\n items: readonly PopupMenuEntry[];\n}\n\n/** The trigger and the menu: everything inside the root. */\nfunction renderContent({\n context,\n label,\n icon,\n triggerContent,\n text,\n caret,\n disabled,\n items,\n}: PopupMenuContentProps): SafeHtml {\n return (\n <>\n {context ? (\n <button\n type=\"button\"\n class=\"kui-popup-menu__context-anchor\"\n aria-hidden=\"true\"\n tabindex={-1}\n />\n ) : (\n <button\n type=\"button\"\n class=\"kui-popup-menu__trigger\"\n aria-haspopup=\"menu\"\n aria-expanded=\"false\"\n disabled={disabled}\n >\n {icon}\n {triggerContent === undefined ? null : (\n <span class=\"kui-popup-menu__trigger-content\" aria-hidden=\"true\">\n {triggerContent}\n </span>\n )}\n {text ? (\n <span class=\"kui-popup-menu__text\">{text}</span>\n ) : (\n <span class=\"kui-popup-menu__label\">{label}</span>\n )}\n {caret ? (\n <span class=\"kui-popup-menu__caret\" aria-hidden=\"true\">\n <PopupCaretGlyph />\n </span>\n ) : null}\n </button>\n )}\n {renderMenu(items, text ?? label, false)}\n </>\n );\n}\n\n/**\n * An action menu: a trigger button that opens a list of commands in the top\n * layer. A `single` `ToolbarControlGroup` (with `nestedDropdown`) or a\n * `PopupSurface` sizes and insets it as usual. Items dispatch through\n * delegated `data-action`s, and the root reports each choice as a bubbling\n * `kui-menu-select` event; the app owns the commands and any open-state reaction.\n * Import `@kerfjs/ui/popup-menu/register` once to wire opening, keyboard\n * navigation, submenus, and dismissal. At viewport widths up to 480px,\n * submenus appear above or below their parent menu so their rows do not cover\n * the parent list.\n */\nexport function PopupMenu({\n text,\n label,\n icon,\n triggerContent,\n items,\n placement = 'bottom-start',\n caret = triggerContent === undefined,\n disabled = false,\n rootAttributes = {},\n slot,\n context = false,\n anchor,\n}: PopupMenuProps) {\n if (\n anchor !== undefined &&\n (!context || !Number.isFinite(anchor.x) || !Number.isFinite(anchor.y))\n )\n throw new RangeError(\n 'PopupMenu anchor requires context mode and finite x and y coordinates',\n );\n // The register owns the open menu's state (shown popovers, `aria-expanded`,\n // checked toggles, focus), so the morph skips the children; the content key\n // rebuilds the menu when they change. An unchanged menu reuses its cached\n // markup and costs one hash pass.\n const { key, cacheKey } = popupMenuContentKey(\n [\n text ?? '',\n label ?? '',\n String(icon ?? ''),\n String(caret),\n String(disabled),\n String(context),\n // Only a content trigger adds a part, so other menus keep their keys.\n ...(triggerContent === undefined ? [] : [String(triggerContent)]),\n ],\n items,\n );\n let content = cachedPopupMenuContent(cacheKey);\n if (!content) {\n content = renderContent({\n context,\n label,\n icon,\n triggerContent,\n text,\n caret,\n disabled,\n items,\n });\n cachePopupMenuContent(cacheKey, content);\n }\n return (\n <span\n {...rootAttributes}\n class=\"kui-popup-menu\"\n data-component=\"popup-menu\"\n data-key={key}\n data-morph-skip-children\n data-trigger={\n context\n ? 'context'\n : triggerContent === undefined\n ? 'button'\n : 'content'\n }\n data-placement={placement}\n style={\n anchor\n ? `--kui-popup-menu-context-x:${anchor.x}px;--kui-popup-menu-context-y:${anchor.y}px`\n : undefined\n }\n slot={slot}\n >\n {content}\n </span>\n );\n}\n"]}
@@ -0,0 +1,371 @@
1
+ import { COLOR_PICKER_SWATCH_ACTION, COLOR_PICKER_CHANNELS, colorPickerChannels, colorPickerStyle, colorPickerAreaText } from './chunk-EKBMUXFV.js';
2
+ import { hsvForValue, hslToRgb, rgbToHsv, formatHex, hsvToRgb } from './chunk-TNJLNLVE.js';
3
+
4
+ // src/components/forms/color-picker/wiring/wire-color-pickers.ts
5
+ var clamp = (value, min, max) => Math.min(max, Math.max(min, value));
6
+ var isMode = (value) => value === "rgb" || value === "hsl" || value === "hsb" || value === "gray";
7
+ function wireColorPickers(root, { onInput, onChange } = {}) {
8
+ const states = /* @__PURE__ */ new WeakMap();
9
+ const pickerOf = (element) => element?.closest('[data-component="color-picker"]') ?? null;
10
+ const alphaOn = (picker) => picker.hasAttribute("data-alpha");
11
+ const stateOf = (picker) => {
12
+ let state = states.get(picker);
13
+ if (!state) {
14
+ const value = picker.dataset.value;
15
+ state = {
16
+ hsv: hsvForValue(value),
17
+ mode: picker.dataset.mode,
18
+ value
19
+ };
20
+ states.set(picker, state);
21
+ }
22
+ return state;
23
+ };
24
+ const hexOf = (picker, hsv) => formatHex(hsvToRgb(alphaOn(picker) ? hsv : { ...hsv, a: 1 }));
25
+ const paint = (picker, skipField) => {
26
+ const { hsv, mode } = stateOf(picker);
27
+ const surface = picker.querySelector(
28
+ ".kui-color-picker__surface"
29
+ );
30
+ surface.setAttribute("style", colorPickerStyle(hsv));
31
+ const area = surface.querySelector(".kui-color-picker__area");
32
+ area?.setAttribute("aria-valuenow", String(Math.round(hsv.s * 100)));
33
+ area?.setAttribute("aria-valuetext", colorPickerAreaText(hsv));
34
+ const hue = surface.querySelector(
35
+ ".kui-color-picker__hue"
36
+ );
37
+ if (hue && hue !== skipField) hue.value = String(Math.round(hsv.h));
38
+ const opacity = `${Math.round(hsv.a * 100)}%`;
39
+ const slider = surface.querySelector(
40
+ ".kui-color-picker__opacity"
41
+ );
42
+ if (slider && slider !== skipField) {
43
+ slider.value = String(Math.round(hsv.a * 100));
44
+ slider.setAttribute("aria-valuetext", opacity);
45
+ }
46
+ const channels = COLOR_PICKER_CHANNELS[mode];
47
+ const values = colorPickerChannels(mode, hsv);
48
+ surface.querySelector(".kui-color-picker__channels")?.setAttribute("data-count", String(channels.length));
49
+ for (const field of surface.querySelectorAll(
50
+ ".kui-color-picker__channel"
51
+ )) {
52
+ const index = Number(field.dataset.channel);
53
+ const channel = channels[index];
54
+ const label = field.closest("label");
55
+ label.hidden = channel === void 0;
56
+ label.querySelector(".kui-color-picker__field-label").textContent = channel === void 0 ? "" : channel.short;
57
+ if (channel) field.setAttribute("aria-label", channel.name);
58
+ if (field !== skipField)
59
+ field.value = channel ? String(values[index]) : "";
60
+ field.dataset.shown = field.value;
61
+ }
62
+ const hex = hexOf(picker, hsv);
63
+ const hexField = surface.querySelector(
64
+ ".kui-color-picker__hex"
65
+ );
66
+ if (hexField !== skipField) hexField.value = hex.slice(1).toUpperCase();
67
+ hexField.dataset.shown = hexField.value;
68
+ const opacityField = surface.querySelector(
69
+ ".kui-color-picker__opacity-field"
70
+ );
71
+ if (opacityField && opacityField !== skipField)
72
+ opacityField.value = opacity;
73
+ if (opacityField) opacityField.dataset.shown = opacityField.value;
74
+ const hidden = surface.querySelector(
75
+ 'input[type="hidden"]'
76
+ );
77
+ if (hidden) hidden.value = hex;
78
+ surface.querySelector(".kui-color-picker__mode").value = mode;
79
+ };
80
+ const report = (picker, committed) => {
81
+ const state = stateOf(picker);
82
+ const value = hexOf(picker, state.hsv);
83
+ state.value = value;
84
+ const change = {
85
+ id: picker.dataset.colorPickerId,
86
+ value,
87
+ mode: state.mode,
88
+ element: picker
89
+ };
90
+ picker.dispatchEvent(
91
+ new CustomEvent(committed ? "kui-color-change" : "kui-color-input", {
92
+ bubbles: true,
93
+ detail: { value, mode: state.mode }
94
+ })
95
+ );
96
+ if (committed) onChange?.(change);
97
+ else onInput?.(change);
98
+ };
99
+ const update = (picker, next, committed, skipField) => {
100
+ const state = stateOf(picker);
101
+ state.hsv = { ...state.hsv, ...next };
102
+ paint(picker, skipField);
103
+ report(picker, committed);
104
+ };
105
+ const disabled = (picker) => picker.hasAttribute("data-disabled");
106
+ let dragging;
107
+ const fromPointer = (event, area) => {
108
+ const box = area.getBoundingClientRect();
109
+ return {
110
+ s: clamp((event.clientX - box.left) / box.width, 0, 1),
111
+ v: clamp(1 - (event.clientY - box.top) / box.height, 0, 1)
112
+ };
113
+ };
114
+ const onPointerDown = (event) => {
115
+ const area = event.target.closest(
116
+ ".kui-color-picker__area"
117
+ );
118
+ const picker = pickerOf(area);
119
+ if (!area || !picker || disabled(picker) || event.button !== 0) return;
120
+ event.preventDefault();
121
+ area.focus();
122
+ area.setPointerCapture?.(event.pointerId);
123
+ dragging = { picker, area };
124
+ update(picker, fromPointer(event, area), false);
125
+ };
126
+ const onPointerMove = (event) => {
127
+ if (!dragging) return;
128
+ update(dragging.picker, fromPointer(event, dragging.area), false);
129
+ };
130
+ const onPointerUp = () => {
131
+ if (!dragging) return;
132
+ const { picker } = dragging;
133
+ dragging = void 0;
134
+ report(picker, true);
135
+ };
136
+ const onKeyDown = (event) => {
137
+ const area = event.target.closest(
138
+ ".kui-color-picker__area"
139
+ );
140
+ const picker = pickerOf(area);
141
+ if (!area || !picker || disabled(picker)) {
142
+ onFieldKey(event);
143
+ return;
144
+ }
145
+ const step = event.shiftKey ? 0.1 : 0.01;
146
+ const { s, v } = stateOf(picker).hsv;
147
+ const rtl = globalThis.getComputedStyle(area).direction === "rtl";
148
+ const moves = {
149
+ ArrowRight: { s: clamp(s + (rtl ? -step : step), 0, 1) },
150
+ ArrowLeft: { s: clamp(s - (rtl ? -step : step), 0, 1) },
151
+ ArrowUp: { v: clamp(v + step, 0, 1) },
152
+ ArrowDown: { v: clamp(v - step, 0, 1) },
153
+ PageUp: { v: clamp(v + 0.1, 0, 1) },
154
+ PageDown: { v: clamp(v - 0.1, 0, 1) },
155
+ Home: { s: 0 },
156
+ End: { s: 1 }
157
+ };
158
+ const move = moves[event.key];
159
+ if (!move) return;
160
+ event.preventDefault();
161
+ update(picker, move, false);
162
+ };
163
+ const onKeyUp = (event) => {
164
+ const picker = pickerOf(
165
+ event.target.closest(".kui-color-picker__area")
166
+ );
167
+ if (picker && /^(Arrow|Page|Home$|End$)/.test(event.key) && !disabled(picker))
168
+ report(picker, true);
169
+ };
170
+ const commitField = (field) => {
171
+ const picker = pickerOf(field);
172
+ if (!picker) return;
173
+ if (field.value === (field.dataset.shown ?? field.getAttribute("value")))
174
+ return;
175
+ const state = stateOf(picker);
176
+ if (field.classList.contains("kui-color-picker__hex")) {
177
+ const raw = field.value.trim().replace(/^#/, "");
178
+ const next2 = /^[\da-f]{3,8}$/i.test(raw) ? hsvForValue(`#${raw}`, state.hsv) : void 0;
179
+ if (next2 && [3, 4, 6, 8].includes(raw.length)) {
180
+ update(picker, alphaOn(picker) ? next2 : { ...next2, a: 1 }, true);
181
+ return;
182
+ }
183
+ paint(picker);
184
+ return;
185
+ }
186
+ if (field.classList.contains("kui-color-picker__opacity-field")) {
187
+ const number2 = Number.parseFloat(field.value);
188
+ if (Number.isFinite(number2))
189
+ update(picker, { a: clamp(number2, 0, 100) / 100 }, true);
190
+ else paint(picker);
191
+ return;
192
+ }
193
+ const index = Number(field.dataset.channel);
194
+ const channels = COLOR_PICKER_CHANNELS[state.mode];
195
+ const channel = channels[index];
196
+ const number = Number.parseFloat(field.value);
197
+ if (!channel || !Number.isFinite(number)) {
198
+ paint(picker);
199
+ return;
200
+ }
201
+ const values = colorPickerChannels(state.mode, state.hsv);
202
+ values[index] = clamp(number, 0, channel.max);
203
+ const { a } = state.hsv;
204
+ let next;
205
+ switch (state.mode) {
206
+ case "rgb":
207
+ next = rgbToHsv({ r: values[0], g: values[1], b: values[2], a });
208
+ if (next.s === 0) next.h = state.hsv.h;
209
+ break;
210
+ case "hsl": {
211
+ const rgba = hslToRgb({
212
+ h: values[0],
213
+ s: values[1] / 100,
214
+ l: values[2] / 100,
215
+ a
216
+ });
217
+ next = { ...rgbToHsv(rgba), h: values[0] };
218
+ break;
219
+ }
220
+ case "hsb":
221
+ next = { h: values[0], s: values[1] / 100, v: values[2] / 100, a };
222
+ break;
223
+ case "gray":
224
+ next = { h: state.hsv.h, s: 0, v: values[0] / 100, a };
225
+ break;
226
+ }
227
+ update(picker, next, true);
228
+ };
229
+ const onFieldKey = (event) => {
230
+ const field = event.target;
231
+ if (!(field instanceof HTMLInputElement) || !field.matches(
232
+ ".kui-color-picker__channel, .kui-color-picker__hex, .kui-color-picker__opacity-field"
233
+ ))
234
+ return;
235
+ if (event.key === "Enter") {
236
+ event.preventDefault();
237
+ commitField(field);
238
+ } else if (event.key === "Escape") {
239
+ const picker = pickerOf(field);
240
+ if (picker) paint(picker);
241
+ }
242
+ };
243
+ const onFocusOut = (event) => {
244
+ const field = event.target;
245
+ if (field instanceof HTMLInputElement && field.matches(
246
+ ".kui-color-picker__channel, .kui-color-picker__hex, .kui-color-picker__opacity-field"
247
+ ))
248
+ commitField(field);
249
+ };
250
+ const onInputEvent = (event) => {
251
+ const input = event.target;
252
+ if (!(input instanceof HTMLInputElement)) return;
253
+ const picker = pickerOf(input);
254
+ if (!picker) return;
255
+ if (input.classList.contains("kui-color-picker__hue")) {
256
+ event.stopPropagation();
257
+ update(picker, { h: Number(input.value) }, false, input);
258
+ } else if (input.classList.contains("kui-color-picker__opacity")) {
259
+ event.stopPropagation();
260
+ update(picker, { a: Number(input.value) / 100 }, false, input);
261
+ }
262
+ };
263
+ const onChangeEvent = (event) => {
264
+ const target = event.target;
265
+ const picker = pickerOf(target);
266
+ if (!picker) return;
267
+ if (target instanceof HTMLInputElement && target.matches(".kui-color-picker__hue, .kui-color-picker__opacity")) {
268
+ event.stopPropagation();
269
+ report(picker, true);
270
+ return;
271
+ }
272
+ if (target instanceof HTMLSelectElement && target.classList.contains("kui-color-picker__mode") && isMode(target.value)) {
273
+ event.stopPropagation();
274
+ stateOf(picker).mode = target.value;
275
+ paint(picker);
276
+ report(picker, true);
277
+ return;
278
+ }
279
+ if (target instanceof HTMLInputElement && target.dataset.action === COLOR_PICKER_SWATCH_ACTION) {
280
+ event.stopPropagation();
281
+ const state = stateOf(picker);
282
+ const next = hsvForValue(target.value, state.hsv);
283
+ if (next) update(picker, next, true);
284
+ }
285
+ };
286
+ const EyeDropperApi = globalThis.EyeDropper;
287
+ const revealSamplers = () => {
288
+ if (!EyeDropperApi) return;
289
+ for (const button of root.querySelectorAll(
290
+ ".kui-color-picker__eyedropper[hidden]"
291
+ ))
292
+ button.hidden = false;
293
+ };
294
+ const onClick = (event) => {
295
+ const button = event.target.closest(
296
+ ".kui-color-picker__eyedropper"
297
+ );
298
+ const picker = pickerOf(button);
299
+ if (!button || !picker || !EyeDropperApi || disabled(picker)) return;
300
+ new EyeDropperApi().open().then(
301
+ ({ sRGBHex }) => {
302
+ const state = stateOf(picker);
303
+ const next = hsvForValue(sRGBHex, state.hsv);
304
+ if (next) update(picker, { ...next, a: state.hsv.a }, true);
305
+ },
306
+ () => {
307
+ }
308
+ );
309
+ };
310
+ const adopt = (picker, attribute) => {
311
+ const state = stateOf(picker);
312
+ if (attribute === "data-mode") {
313
+ const mode = picker.dataset.mode;
314
+ if (isMode(mode) && mode !== state.mode) {
315
+ state.mode = mode;
316
+ paint(picker);
317
+ }
318
+ return;
319
+ }
320
+ const value = picker.dataset.value;
321
+ if (value === void 0 || value === state.value) return;
322
+ const next = hsvForValue(value, state.hsv);
323
+ if (!next) return;
324
+ state.hsv = next;
325
+ state.value = value;
326
+ paint(picker);
327
+ };
328
+ const observer = new MutationObserver((records) => {
329
+ revealSamplers();
330
+ for (const record of records) {
331
+ if (record.type !== "attributes") continue;
332
+ const picker = record.target;
333
+ if (picker.matches('[data-component="color-picker"]'))
334
+ adopt(picker, record.attributeName);
335
+ }
336
+ });
337
+ observer.observe(root, {
338
+ childList: true,
339
+ subtree: true,
340
+ attributes: true,
341
+ attributeFilter: ["data-value", "data-mode"]
342
+ });
343
+ revealSamplers();
344
+ root.addEventListener("pointerdown", onPointerDown);
345
+ root.addEventListener("pointermove", onPointerMove);
346
+ root.addEventListener("pointerup", onPointerUp);
347
+ root.addEventListener("pointercancel", onPointerUp);
348
+ root.addEventListener("keydown", onKeyDown);
349
+ root.addEventListener("keyup", onKeyUp);
350
+ root.addEventListener("focusout", onFocusOut);
351
+ root.addEventListener("input", onInputEvent);
352
+ root.addEventListener("change", onChangeEvent);
353
+ root.addEventListener("click", onClick);
354
+ return () => {
355
+ observer.disconnect();
356
+ root.removeEventListener("pointerdown", onPointerDown);
357
+ root.removeEventListener("pointermove", onPointerMove);
358
+ root.removeEventListener("pointerup", onPointerUp);
359
+ root.removeEventListener("pointercancel", onPointerUp);
360
+ root.removeEventListener("keydown", onKeyDown);
361
+ root.removeEventListener("keyup", onKeyUp);
362
+ root.removeEventListener("focusout", onFocusOut);
363
+ root.removeEventListener("input", onInputEvent);
364
+ root.removeEventListener("change", onChangeEvent);
365
+ root.removeEventListener("click", onClick);
366
+ };
367
+ }
368
+
369
+ export { wireColorPickers };
370
+
371
+ //# sourceMappingURL=chunk-ACUKTVS3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/forms/color-picker/wiring/wire-color-pickers.ts"],"names":["next","number"],"mappings":"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","file":"chunk-ACUKTVS3.js","sourcesContent":["import {\n COLOR_PICKER_CHANNELS,\n COLOR_PICKER_SWATCH_ACTION,\n colorPickerAreaText,\n colorPickerChannels,\n type ColorPickerMode,\n colorPickerStyle,\n} from '../color-picker.js';\nimport {\n formatHex,\n hslToRgb,\n type Hsva,\n hsvForValue,\n hsvToRgb,\n rgbToHsv,\n} from '../model/color-model.js';\n\n/** Reported to {@link WireColorPickersOptions.onInput} and `onChange`. */\nexport interface ColorPickerChange {\n id: string;\n /** `#rrggbb`, or `#rrggbbaa` below full opacity. */\n value: string;\n mode: ColorPickerMode;\n element: HTMLElement;\n}\n\nexport interface WireColorPickersOptions {\n /** Every live change: a drag, an arrow key, a field edit. */\n onInput?: (change: ColorPickerChange) => void;\n /** A committed change: a drag or key run ending, a field or swatch commit, a mode switch. */\n onChange?: (change: ColorPickerChange) => void;\n}\n\n/** The live color each wired picker shows, keyed by its root element. */\ninterface PickerState {\n hsv: Hsva;\n mode: ColorPickerMode;\n /** The hex last reported or adopted, to tell an app re-render from an echo. */\n value: string;\n}\n\nconst clamp = (value: number, min: number, max: number) =>\n Math.min(max, Math.max(min, value));\n\nconst isMode = (value: string | undefined): value is ColorPickerMode =>\n value === 'rgb' || value === 'hsl' || value === 'hsb' || value === 'gray';\n\n/**\n * Make every ColorPicker under `root` interactive. The area takes pointer\n * drags and the arrow keys (Shift for steps of 10%); the hue and opacity\n * sliders are native ranges; channel, hex, and opacity fields commit on Enter\n * or blur; the model menu switches the channel fields; the screen sampler\n * opens the EyeDropper where the browser has it; preset and sample swatches\n * apply their color. Each change updates the picker at once, dispatches a\n * bubbling `kui-color-input` (or `kui-color-change` when committed) event\n * with `{ value, mode }`, and calls `onInput` / `onChange`. When the app\n * re-renders a picker with a different `value`, the picker adopts it.\n * Returns a disposer.\n */\nexport function wireColorPickers(\n root: HTMLElement,\n { onInput, onChange }: WireColorPickersOptions = {},\n): () => void {\n const states = new WeakMap<HTMLElement, PickerState>();\n\n const pickerOf = (element: Element | null) =>\n element?.closest<HTMLElement>('[data-component=\"color-picker\"]') ?? null;\n\n const alphaOn = (picker: HTMLElement) => picker.hasAttribute('data-alpha');\n\n const stateOf = (picker: HTMLElement): PickerState => {\n let state = states.get(picker);\n if (!state) {\n // The render always writes a formatted hex and a model.\n const value = picker.dataset.value!;\n state = {\n hsv: hsvForValue(value)!,\n mode: picker.dataset.mode as ColorPickerMode,\n value,\n };\n states.set(picker, state);\n }\n return state;\n };\n\n const hexOf = (picker: HTMLElement, hsv: Hsva) =>\n formatHex(hsvToRgb(alphaOn(picker) ? hsv : { ...hsv, a: 1 }));\n\n /** Repaint the wiring-owned surface from the state. */\n const paint = (picker: HTMLElement, skipField?: Element) => {\n const { hsv, mode } = stateOf(picker);\n const surface = picker.querySelector<HTMLElement>(\n '.kui-color-picker__surface',\n )!;\n surface.setAttribute('style', colorPickerStyle(hsv));\n const area = surface.querySelector<HTMLElement>('.kui-color-picker__area');\n area?.setAttribute('aria-valuenow', String(Math.round(hsv.s * 100)));\n area?.setAttribute('aria-valuetext', colorPickerAreaText(hsv));\n const hue = surface.querySelector<HTMLInputElement>(\n '.kui-color-picker__hue',\n );\n if (hue && hue !== skipField) hue.value = String(Math.round(hsv.h));\n const opacity = `${Math.round(hsv.a * 100)}%`;\n const slider = surface.querySelector<HTMLInputElement>(\n '.kui-color-picker__opacity',\n );\n if (slider && slider !== skipField) {\n slider.value = String(Math.round(hsv.a * 100));\n slider.setAttribute('aria-valuetext', opacity);\n }\n const channels = COLOR_PICKER_CHANNELS[mode];\n const values = colorPickerChannels(mode, hsv);\n surface\n .querySelector('.kui-color-picker__channels')\n ?.setAttribute('data-count', String(channels.length));\n for (const field of surface.querySelectorAll<HTMLInputElement>(\n '.kui-color-picker__channel',\n )) {\n const index = Number(field.dataset.channel);\n const channel = channels[index];\n const label = field.closest('label')!;\n label.hidden = channel === undefined;\n label.querySelector('.kui-color-picker__field-label')!.textContent =\n channel === undefined ? '' : channel.short;\n if (channel) field.setAttribute('aria-label', channel.name);\n if (field !== skipField)\n field.value = channel ? String(values[index]) : '';\n field.dataset.shown = field.value;\n }\n const hex = hexOf(picker, hsv);\n const hexField = surface.querySelector<HTMLInputElement>(\n '.kui-color-picker__hex',\n )!;\n if (hexField !== skipField) hexField.value = hex.slice(1).toUpperCase();\n hexField.dataset.shown = hexField.value;\n const opacityField = surface.querySelector<HTMLInputElement>(\n '.kui-color-picker__opacity-field',\n );\n if (opacityField && opacityField !== skipField)\n opacityField.value = opacity;\n if (opacityField) opacityField.dataset.shown = opacityField.value;\n const hidden = surface.querySelector<HTMLInputElement>(\n 'input[type=\"hidden\"]',\n );\n if (hidden) hidden.value = hex;\n surface.querySelector<HTMLSelectElement>('.kui-color-picker__mode')!.value =\n mode;\n };\n\n const report = (picker: HTMLElement, committed: boolean) => {\n const state = stateOf(picker);\n const value = hexOf(picker, state.hsv);\n state.value = value;\n const change: ColorPickerChange = {\n id: picker.dataset.colorPickerId!,\n value,\n mode: state.mode,\n element: picker,\n };\n picker.dispatchEvent(\n new CustomEvent(committed ? 'kui-color-change' : 'kui-color-input', {\n bubbles: true,\n detail: { value, mode: state.mode },\n }),\n );\n if (committed) onChange?.(change);\n else onInput?.(change);\n };\n\n const update = (\n picker: HTMLElement,\n next: Partial<Hsva>,\n committed: boolean,\n skipField?: Element,\n ) => {\n const state = stateOf(picker);\n state.hsv = { ...state.hsv, ...next };\n paint(picker, skipField);\n report(picker, committed);\n };\n\n const disabled = (picker: HTMLElement) =>\n picker.hasAttribute('data-disabled');\n\n // The area: pointer drags.\n let dragging: { picker: HTMLElement; area: HTMLElement } | undefined;\n const fromPointer = (event: PointerEvent, area: HTMLElement) => {\n const box = area.getBoundingClientRect();\n return {\n s: clamp((event.clientX - box.left) / box.width, 0, 1),\n v: clamp(1 - (event.clientY - box.top) / box.height, 0, 1),\n };\n };\n const onPointerDown = (event: PointerEvent) => {\n const area = (event.target as Element).closest<HTMLElement>(\n '.kui-color-picker__area',\n );\n const picker = pickerOf(area);\n if (!area || !picker || disabled(picker) || event.button !== 0) return;\n event.preventDefault();\n area.focus();\n area.setPointerCapture?.(event.pointerId);\n dragging = { picker, area };\n update(picker, fromPointer(event, area), false);\n };\n const onPointerMove = (event: PointerEvent) => {\n if (!dragging) return;\n update(dragging.picker, fromPointer(event, dragging.area), false);\n };\n const onPointerUp = () => {\n if (!dragging) return;\n const { picker } = dragging;\n dragging = undefined;\n report(picker, true);\n };\n\n // The area: the arrow keys, Home / End, and Page Up / Down.\n const onKeyDown = (event: KeyboardEvent) => {\n const area = (event.target as Element).closest<HTMLElement>(\n '.kui-color-picker__area',\n );\n const picker = pickerOf(area);\n if (!area || !picker || disabled(picker)) {\n onFieldKey(event);\n return;\n }\n const step = event.shiftKey ? 0.1 : 0.01;\n const { s, v } = stateOf(picker).hsv;\n const rtl = globalThis.getComputedStyle(area).direction === 'rtl';\n const moves: Record<string, Partial<Hsva>> = {\n ArrowRight: { s: clamp(s + (rtl ? -step : step), 0, 1) },\n ArrowLeft: { s: clamp(s - (rtl ? -step : step), 0, 1) },\n ArrowUp: { v: clamp(v + step, 0, 1) },\n ArrowDown: { v: clamp(v - step, 0, 1) },\n PageUp: { v: clamp(v + 0.1, 0, 1) },\n PageDown: { v: clamp(v - 0.1, 0, 1) },\n Home: { s: 0 },\n End: { s: 1 },\n };\n const move = moves[event.key];\n if (!move) return;\n event.preventDefault();\n update(picker, move, false);\n };\n const onKeyUp = (event: KeyboardEvent) => {\n const picker = pickerOf(\n (event.target as Element).closest('.kui-color-picker__area'),\n );\n if (\n picker &&\n /^(Arrow|Page|Home$|End$)/.test(event.key) &&\n !disabled(picker)\n )\n report(picker, true);\n };\n\n // Fields: Enter commits; Escape restores the shown value.\n const commitField = (field: HTMLInputElement) => {\n const picker = pickerOf(field);\n if (!picker) return;\n // Leaving a field the person did not edit commits nothing.\n if (field.value === (field.dataset.shown ?? field.getAttribute('value')))\n return;\n const state = stateOf(picker);\n if (field.classList.contains('kui-color-picker__hex')) {\n const raw = field.value.trim().replace(/^#/, '');\n const next = /^[\\da-f]{3,8}$/i.test(raw)\n ? hsvForValue(`#${raw}`, state.hsv)\n : undefined;\n if (next && [3, 4, 6, 8].includes(raw.length)) {\n update(picker, alphaOn(picker) ? next : { ...next, a: 1 }, true);\n return;\n }\n paint(picker);\n return;\n }\n if (field.classList.contains('kui-color-picker__opacity-field')) {\n const number = Number.parseFloat(field.value);\n if (Number.isFinite(number))\n update(picker, { a: clamp(number, 0, 100) / 100 }, true);\n else paint(picker);\n return;\n }\n const index = Number(field.dataset.channel);\n const channels = COLOR_PICKER_CHANNELS[state.mode];\n const channel = channels[index];\n const number = Number.parseFloat(field.value);\n if (!channel || !Number.isFinite(number)) {\n paint(picker);\n return;\n }\n const values = colorPickerChannels(state.mode, state.hsv);\n values[index] = clamp(number, 0, channel.max);\n const { a } = state.hsv;\n let next: Hsva;\n switch (state.mode) {\n case 'rgb':\n next = rgbToHsv({ r: values[0]!, g: values[1]!, b: values[2]!, a });\n if (next.s === 0) next.h = state.hsv.h;\n break;\n case 'hsl': {\n const rgba = hslToRgb({\n h: values[0]!,\n s: values[1]! / 100,\n l: values[2]! / 100,\n a,\n });\n next = { ...rgbToHsv(rgba), h: values[0]! };\n break;\n }\n case 'hsb':\n next = { h: values[0]!, s: values[1]! / 100, v: values[2]! / 100, a };\n break;\n case 'gray':\n next = { h: state.hsv.h, s: 0, v: values[0]! / 100, a };\n break;\n }\n update(picker, next, true);\n };\n const onFieldKey = (event: KeyboardEvent) => {\n const field = event.target;\n if (\n !(field instanceof HTMLInputElement) ||\n !field.matches(\n '.kui-color-picker__channel, .kui-color-picker__hex, .kui-color-picker__opacity-field',\n )\n )\n return;\n if (event.key === 'Enter') {\n event.preventDefault();\n commitField(field);\n } else if (event.key === 'Escape') {\n const picker = pickerOf(field);\n if (picker) paint(picker);\n }\n };\n const onFocusOut = (event: FocusEvent) => {\n const field = event.target;\n if (\n field instanceof HTMLInputElement &&\n field.matches(\n '.kui-color-picker__channel, .kui-color-picker__hex, .kui-color-picker__opacity-field',\n )\n )\n commitField(field);\n };\n\n // Sliders, the model menu, and swatches.\n const onInputEvent = (event: Event) => {\n const input = event.target;\n if (!(input instanceof HTMLInputElement)) return;\n const picker = pickerOf(input);\n if (!picker) return;\n if (input.classList.contains('kui-color-picker__hue')) {\n event.stopPropagation();\n update(picker, { h: Number(input.value) }, false, input);\n } else if (input.classList.contains('kui-color-picker__opacity')) {\n event.stopPropagation();\n update(picker, { a: Number(input.value) / 100 }, false, input);\n }\n };\n const onChangeEvent = (event: Event) => {\n const target = event.target;\n const picker = pickerOf(target as Element);\n if (!picker) return;\n if (\n target instanceof HTMLInputElement &&\n target.matches('.kui-color-picker__hue, .kui-color-picker__opacity')\n ) {\n event.stopPropagation();\n report(picker, true);\n return;\n }\n if (\n target instanceof HTMLSelectElement &&\n target.classList.contains('kui-color-picker__mode') &&\n isMode(target.value)\n ) {\n event.stopPropagation();\n stateOf(picker).mode = target.value;\n paint(picker);\n report(picker, true);\n return;\n }\n if (\n target instanceof HTMLInputElement &&\n target.dataset.action === COLOR_PICKER_SWATCH_ACTION\n ) {\n event.stopPropagation();\n const state = stateOf(picker);\n const next = hsvForValue(target.value, state.hsv);\n if (next) update(picker, next, true);\n }\n };\n\n // The screen sampler, where the browser has it.\n type EyeDropperConstructor = new () => {\n open(): Promise<{ sRGBHex: string }>;\n };\n const EyeDropperApi = (\n globalThis as typeof globalThis & { EyeDropper?: EyeDropperConstructor }\n ).EyeDropper;\n const revealSamplers = () => {\n if (!EyeDropperApi) return;\n for (const button of root.querySelectorAll<HTMLButtonElement>(\n '.kui-color-picker__eyedropper[hidden]',\n ))\n button.hidden = false;\n };\n const onClick = (event: MouseEvent) => {\n const button = (event.target as Element).closest<HTMLButtonElement>(\n '.kui-color-picker__eyedropper',\n );\n const picker = pickerOf(button);\n if (!button || !picker || !EyeDropperApi || disabled(picker)) return;\n new EyeDropperApi().open().then(\n ({ sRGBHex }) => {\n const state = stateOf(picker);\n const next = hsvForValue(sRGBHex, state.hsv);\n if (next) update(picker, { ...next, a: state.hsv.a }, true);\n },\n () => {\n // The person dismissed the sampler; nothing changes.\n },\n );\n };\n\n // Adopt a new controlled value or mode from an app re-render. Only the\n // attribute that actually changed is adopted, so a value-only re-render\n // keeps a model the person switched to.\n const adopt = (picker: HTMLElement, attribute: string | null) => {\n const state = stateOf(picker);\n if (attribute === 'data-mode') {\n const mode = picker.dataset.mode;\n if (isMode(mode) && mode !== state.mode) {\n state.mode = mode;\n paint(picker);\n }\n return;\n }\n const value = picker.dataset.value;\n if (value === undefined || value === state.value) return;\n const next = hsvForValue(value, state.hsv);\n if (!next) return;\n state.hsv = next;\n state.value = value;\n paint(picker);\n };\n const observer = new MutationObserver((records) => {\n revealSamplers();\n for (const record of records) {\n if (record.type !== 'attributes') continue;\n const picker = record.target as HTMLElement;\n if (picker.matches('[data-component=\"color-picker\"]'))\n adopt(picker, record.attributeName);\n }\n });\n observer.observe(root, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['data-value', 'data-mode'],\n });\n revealSamplers();\n\n root.addEventListener('pointerdown', onPointerDown);\n root.addEventListener('pointermove', onPointerMove);\n root.addEventListener('pointerup', onPointerUp);\n root.addEventListener('pointercancel', onPointerUp);\n root.addEventListener('keydown', onKeyDown);\n root.addEventListener('keyup', onKeyUp);\n root.addEventListener('focusout', onFocusOut);\n root.addEventListener('input', onInputEvent);\n root.addEventListener('change', onChangeEvent);\n root.addEventListener('click', onClick);\n return () => {\n observer.disconnect();\n root.removeEventListener('pointerdown', onPointerDown);\n root.removeEventListener('pointermove', onPointerMove);\n root.removeEventListener('pointerup', onPointerUp);\n root.removeEventListener('pointercancel', onPointerUp);\n root.removeEventListener('keydown', onKeyDown);\n root.removeEventListener('keyup', onKeyUp);\n root.removeEventListener('focusout', onFocusOut);\n root.removeEventListener('input', onInputEvent);\n root.removeEventListener('change', onChangeEvent);\n root.removeEventListener('click', onClick);\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { verticalAlignment, horizontalAlignment } from './chunk-MXNIVEVL.js';
1
+ import { verticalAlignment, horizontalAlignment } from './chunk-D4MXSAMI.js';
2
2
  import { gapLength } from './chunk-MHMWQ7RB.js';
3
3
  import { filterRootAttributes } from './chunk-KH4KEMSP.js';
4
4
  import { jsx } from 'kerfjs/jsx-runtime';
@@ -56,4 +56,4 @@ function Row({
56
56
 
57
57
  export { Row };
58
58
 
59
- //# sourceMappingURL=chunk-YQ2AC4E2.js.map
59
+ //# sourceMappingURL=chunk-AMIHGFLP.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/layout/row/row.tsx"],"names":[],"mappings":";;;;;AAmBA,IAAM,sBAAA,uBAA6B,GAAA,CAAI;AAAA,EACrC,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAC,CAAA;AA+CM,SAAS,GAAA,CAAI;AAAA,EAClB,QAAA;AAAA,EACA,MAAA,GAAS,MAAA;AAAA,EACT,MAAA,GAAS,MAAA;AAAA,EACT,GAAA,GAAM,IAAA;AAAA,EACN,IAAA,GAAO,KAAA;AAAA,EACP,IAAA,GAAO,KAAA;AAAA,EACP,IAAA,GAAO,KAAA;AAAA,EACP,UAAA,GAAa,EAAA;AAAA,EACb,aAAA,GAAgB,EAAA;AAAA,EAChB,SAAA,GAAY,EAAA;AAAA,EACZ,iBAAiB,EAAC;AAAA,EAClB;AACF,CAAA,EAAa;AACX,EAAA,MAAM,kBAAA,GAAqB,oBAAA;AAAA,IACzB,cAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,WACJ,OAAO,GAAA,KAAQ,WACX,CAAA,eAAA,EAAkB,SAAA,CAAU,GAAG,CAAC,CAAA,CAAA,GAChC,CAAA,sBAAA,EAAyB,SAAA,CAAU,IAAI,MAAM,CAAC,uBAAuB,SAAA,CAAU,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA;AAC7F,EAAA,MAAM,SAAA,GAAY,IAAA,KAAS,IAAA,GAAO,UAAA,GAAa,IAAA,IAAQ,MAAA;AACvD,EAAA,MAAM,KAAA,GAAQ,CAAC,QAAA,EAAU,SAAA,GAAY,CAAA,gBAAA,EAAmB,SAAS,CAAA,CAAA,GAAK,EAAE,CAAA,CACrE,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEX,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,kBAAA;AAAA,MACJ,KAAA,EAAO,CAAA,QAAA,EAAW,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MACnC,gBAAA,EAAe,KAAA;AAAA,MACf,cAAA,EAAc,oBAAoB,MAAM,CAAA;AAAA,MACxC,cAAA,EAAc,kBAAkB,MAAM,CAAA;AAAA,MACtC,WAAA,EAAW,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,MAC/B,WAAA,EAAW,OAAO,MAAA,GAAS,MAAA;AAAA,MAC3B,WAAA,EAAW,OAAO,IAAI,CAAA;AAAA,MACtB,oBAAkB,UAAA,IAAc,MAAA;AAAA,MAChC,uBAAqB,aAAA,IAAiB,MAAA;AAAA,MACtC,KAAA;AAAA,MACA,IAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ","file":"chunk-YQ2AC4E2.js","sourcesContent":["import type { KerfUiContent } from '../../../shared/content/semantic-content.js';\nimport {\n filterRootAttributes,\n type StructuralRootAttributes,\n} from '../../../shared/dom/extension-attributes.js';\nimport {\n type HorizontalAlignment,\n horizontalAlignment,\n type VerticalAlignment,\n verticalAlignment,\n} from '../../../shared/layout/flex-alignment.js';\nimport { gapLength } from '../../../shared/layout/gap.js';\nimport type { Sides } from '../../../shared/layout/sides.js';\nimport {\n type CssFlex,\n type CssFlexKeyword,\n type UiGap,\n} from '../../../shared/styles/css-values.js';\n\nconst rowProtectedAttributes = new Set([\n 'data-component',\n 'data-h-align',\n 'data-v-align',\n 'data-flex',\n 'data-fill',\n 'data-wrap',\n 'data-text-insets',\n 'data-control-insets',\n]);\n\ntype RowRootAttributes = StructuralRootAttributes &\n Readonly<{\n 'data-component'?: never;\n 'data-h-align'?: never;\n 'data-v-align'?: never;\n 'data-flex'?: never;\n 'data-fill'?: never;\n 'data-wrap'?: never;\n 'data-text-insets'?: never;\n 'data-control-insets'?: never;\n }>;\n\nexport interface RowProps {\n children?: KerfUiContent;\n /** Horizontal distribution. Defaults to left. */\n hAlign?: HorizontalAlignment;\n /** Vertical alignment and wrapped-line distribution. Defaults to full. */\n vAlign?: VerticalAlignment;\n /** One spacing value or separate column and row values. Defaults to xs. */\n gap?: UiGap;\n /** Allow this row to grow/shrink, use a keyword, or supply a typed CSS flex shorthand. */\n flex?: boolean | CssFlexKeyword | CssFlex;\n /**\n * Fill the height of a parent with a definite height, such as an app root or\n * a fixed-height frame, when this row is that parent's layout root. Inside a\n * flex layout use `flex` instead. Defaults to false.\n */\n fill?: boolean;\n /** Allow children to wrap onto additional lines. */\n wrap?: boolean;\n /** Physical sides that receive the standard 17px text inset. */\n textInsets?: Sides;\n /** Physical sides that receive the standard 8px control inset. Text insets win on overlap. */\n controlInsets?: Sides;\n className?: string;\n /**\n * Safe `data-*`, `aria-*`, and structural `role` metadata (a named\n * `region`, a `group`); Row-owned structural attributes remain protected.\n */\n rootAttributes?: RowRootAttributes;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\n/** A horizontal flex row with explicit physical-axis alignment and spacing. */\nexport function Row({\n children,\n hAlign = 'left',\n vAlign = 'full',\n gap = 'xs',\n flex = false,\n fill = false,\n wrap = false,\n textInsets = '',\n controlInsets = '',\n className = '',\n rootAttributes = {},\n slot,\n}: RowProps) {\n const safeRootAttributes = filterRootAttributes(\n rootAttributes,\n rowProtectedAttributes,\n );\n const gapStyle =\n typeof gap === 'string'\n ? `--_kui-row-gap:${gapLength(gap)}`\n : `--_kui-row-column-gap:${gapLength(gap.column)};--_kui-row-row-gap:${gapLength(gap.row)}`;\n const flexValue = flex === true ? '1 1 auto' : flex || undefined;\n const style = [gapStyle, flexValue ? `--_kui-row-flex:${flexValue}` : '']\n .filter(Boolean)\n .join(';');\n\n return (\n <div\n {...safeRootAttributes}\n class={`kui-row ${className}`.trim()}\n data-component=\"row\"\n data-h-align={horizontalAlignment(hAlign)}\n data-v-align={verticalAlignment(vAlign)}\n data-flex={String(Boolean(flex))}\n data-fill={fill ? 'true' : undefined}\n data-wrap={String(wrap)}\n data-text-insets={textInsets || undefined}\n data-control-insets={controlInsets || undefined}\n style={style}\n slot={slot}\n >\n {children}\n </div>\n );\n}\n\nexport type {\n HorizontalAlignment,\n VerticalAlignment,\n} from '../../../shared/layout/flex-alignment.js';\nexport type { Sides } from '../../../shared/layout/sides.js';\nexport type {\n CssFlex,\n CssFlexKeyword,\n CssLength,\n UiGap,\n UiGapValue,\n UiSpaceName,\n} from '../../../shared/styles/css-values.js';\n"]}
1
+ {"version":3,"sources":["../src/components/layout/row/row.tsx"],"names":[],"mappings":";;;;;AAmBA,IAAM,sBAAA,uBAA6B,GAAA,CAAI;AAAA,EACrC,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAC,CAAA;AA+CM,SAAS,GAAA,CAAI;AAAA,EAClB,QAAA;AAAA,EACA,MAAA,GAAS,MAAA;AAAA,EACT,MAAA,GAAS,MAAA;AAAA,EACT,GAAA,GAAM,IAAA;AAAA,EACN,IAAA,GAAO,KAAA;AAAA,EACP,IAAA,GAAO,KAAA;AAAA,EACP,IAAA,GAAO,KAAA;AAAA,EACP,UAAA,GAAa,EAAA;AAAA,EACb,aAAA,GAAgB,EAAA;AAAA,EAChB,SAAA,GAAY,EAAA;AAAA,EACZ,iBAAiB,EAAC;AAAA,EAClB;AACF,CAAA,EAAa;AACX,EAAA,MAAM,kBAAA,GAAqB,oBAAA;AAAA,IACzB,cAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,WACJ,OAAO,GAAA,KAAQ,WACX,CAAA,eAAA,EAAkB,SAAA,CAAU,GAAG,CAAC,CAAA,CAAA,GAChC,CAAA,sBAAA,EAAyB,SAAA,CAAU,IAAI,MAAM,CAAC,uBAAuB,SAAA,CAAU,GAAA,CAAI,GAAG,CAAC,CAAA,CAAA;AAC7F,EAAA,MAAM,SAAA,GAAY,IAAA,KAAS,IAAA,GAAO,UAAA,GAAa,IAAA,IAAQ,MAAA;AACvD,EAAA,MAAM,KAAA,GAAQ,CAAC,QAAA,EAAU,SAAA,GAAY,CAAA,gBAAA,EAAmB,SAAS,CAAA,CAAA,GAAK,EAAE,CAAA,CACrE,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEX,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,kBAAA;AAAA,MACJ,KAAA,EAAO,CAAA,QAAA,EAAW,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MACnC,gBAAA,EAAe,KAAA;AAAA,MACf,cAAA,EAAc,oBAAoB,MAAM,CAAA;AAAA,MACxC,cAAA,EAAc,kBAAkB,MAAM,CAAA;AAAA,MACtC,WAAA,EAAW,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,MAC/B,WAAA,EAAW,OAAO,MAAA,GAAS,MAAA;AAAA,MAC3B,WAAA,EAAW,OAAO,IAAI,CAAA;AAAA,MACtB,oBAAkB,UAAA,IAAc,MAAA;AAAA,MAChC,uBAAqB,aAAA,IAAiB,MAAA;AAAA,MACtC,KAAA;AAAA,MACA,IAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ","file":"chunk-AMIHGFLP.js","sourcesContent":["import type { KerfUiContent } from '../../../shared/content/semantic-content.js';\nimport {\n filterRootAttributes,\n type StructuralRootAttributes,\n} from '../../../shared/dom/extension-attributes.js';\nimport {\n type HorizontalAlignment,\n horizontalAlignment,\n type VerticalAlignment,\n verticalAlignment,\n} from '../../../shared/layout/flex-alignment.js';\nimport { gapLength } from '../../../shared/layout/gap.js';\nimport type { Sides } from '../../../shared/layout/sides.js';\nimport {\n type CssFlex,\n type CssFlexKeyword,\n type UiGap,\n} from '../../../shared/styles/css-values.js';\n\nconst rowProtectedAttributes = new Set([\n 'data-component',\n 'data-h-align',\n 'data-v-align',\n 'data-flex',\n 'data-fill',\n 'data-wrap',\n 'data-text-insets',\n 'data-control-insets',\n]);\n\ntype RowRootAttributes = StructuralRootAttributes &\n Readonly<{\n 'data-component'?: never;\n 'data-h-align'?: never;\n 'data-v-align'?: never;\n 'data-flex'?: never;\n 'data-fill'?: never;\n 'data-wrap'?: never;\n 'data-text-insets'?: never;\n 'data-control-insets'?: never;\n }>;\n\nexport interface RowProps {\n children?: KerfUiContent;\n /** Horizontal distribution. Defaults to left. */\n hAlign?: HorizontalAlignment;\n /** Vertical alignment and wrapped-line distribution. Defaults to full. */\n vAlign?: VerticalAlignment;\n /** One spacing value or separate column and row values. Defaults to xs. */\n gap?: UiGap;\n /** Allow this row to grow/shrink, use a keyword, or supply a typed CSS flex shorthand. */\n flex?: boolean | CssFlexKeyword | CssFlex;\n /**\n * Fill the height of a parent with a definite height, such as an app root or\n * a fixed-height frame, when this row is that parent's layout root. Inside a\n * flex layout use `flex` instead. Defaults to false.\n */\n fill?: boolean;\n /** Allow children to wrap onto additional lines. */\n wrap?: boolean;\n /** Physical sides that receive the standard 17px text inset. */\n textInsets?: Sides;\n /** Physical sides that receive the standard 8px control inset. Text insets win on overlap. */\n controlInsets?: Sides;\n className?: string;\n /**\n * Safe `data-*`, `aria-*`, and structural `role` metadata (a named\n * `region`, a `group`); Row-owned structural attributes remain protected.\n */\n rootAttributes?: RowRootAttributes;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\n/** A horizontal flex row with explicit physical-axis alignment and spacing. */\nexport function Row({\n children,\n hAlign = 'left',\n vAlign = 'full',\n gap = 'xs',\n flex = false,\n fill = false,\n wrap = false,\n textInsets = '',\n controlInsets = '',\n className = '',\n rootAttributes = {},\n slot,\n}: RowProps) {\n const safeRootAttributes = filterRootAttributes(\n rootAttributes,\n rowProtectedAttributes,\n );\n const gapStyle =\n typeof gap === 'string'\n ? `--_kui-row-gap:${gapLength(gap)}`\n : `--_kui-row-column-gap:${gapLength(gap.column)};--_kui-row-row-gap:${gapLength(gap.row)}`;\n const flexValue = flex === true ? '1 1 auto' : flex || undefined;\n const style = [gapStyle, flexValue ? `--_kui-row-flex:${flexValue}` : '']\n .filter(Boolean)\n .join(';');\n\n return (\n <div\n {...safeRootAttributes}\n class={`kui-row ${className}`.trim()}\n data-component=\"row\"\n data-h-align={horizontalAlignment(hAlign)}\n data-v-align={verticalAlignment(vAlign)}\n data-flex={String(Boolean(flex))}\n data-fill={fill ? 'true' : undefined}\n data-wrap={String(wrap)}\n data-text-insets={textInsets || undefined}\n data-control-insets={controlInsets || undefined}\n style={style}\n slot={slot}\n >\n {children}\n </div>\n );\n}\n\nexport type {\n HorizontalAlignment,\n VerticalAlignment,\n} from '../../../shared/layout/flex-alignment.js';\nexport type { Sides } from '../../../shared/layout/sides.js';\nexport type {\n CssFlex,\n CssFlexKeyword,\n CssLength,\n UiGap,\n UiGapValue,\n UiSpaceName,\n} from '../../../shared/styles/css-values.js';\n"]}