@helixui/library 0.3.4 → 1.0.0

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 (406) hide show
  1. package/custom-elements.json +13562 -12579
  2. package/dist/components/hx-accordion/hx-accordion-item.d.ts +2 -0
  3. package/dist/components/hx-accordion/hx-accordion-item.d.ts.map +1 -1
  4. package/dist/components/hx-accordion/hx-accordion.d.ts +8 -0
  5. package/dist/components/hx-accordion/hx-accordion.d.ts.map +1 -1
  6. package/dist/components/hx-accordion/index.js +1 -1
  7. package/dist/components/hx-action-bar/hx-action-bar.d.ts.map +1 -1
  8. package/dist/components/hx-action-bar/index.js +1 -1
  9. package/dist/components/hx-alert/hx-alert.d.ts +2 -5
  10. package/dist/components/hx-alert/hx-alert.d.ts.map +1 -1
  11. package/dist/components/hx-alert/index.js +1 -1
  12. package/dist/components/hx-avatar/hx-avatar.d.ts.map +1 -1
  13. package/dist/components/hx-avatar/index.js +1 -1
  14. package/dist/components/hx-banner/hx-banner.d.ts +99 -0
  15. package/dist/components/hx-banner/hx-banner.d.ts.map +1 -0
  16. package/dist/components/hx-banner/hx-banner.styles.d.ts +2 -0
  17. package/dist/components/hx-banner/hx-banner.styles.d.ts.map +1 -0
  18. package/dist/components/hx-banner/index.d.ts +3 -0
  19. package/dist/components/hx-banner/index.d.ts.map +1 -0
  20. package/dist/components/hx-banner/index.js +5 -0
  21. package/dist/components/hx-banner/index.js.map +1 -0
  22. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts +5 -0
  23. package/dist/components/hx-breadcrumb/hx-breadcrumb.d.ts.map +1 -1
  24. package/dist/components/hx-breadcrumb/index.js +1 -1
  25. package/dist/components/hx-button/hx-button.d.ts +17 -0
  26. package/dist/components/hx-button/hx-button.d.ts.map +1 -1
  27. package/dist/components/hx-button/hx-button.styles.d.ts.map +1 -1
  28. package/dist/components/hx-button/index.js +1 -1
  29. package/dist/components/hx-button-group/hx-button-group.d.ts +8 -0
  30. package/dist/components/hx-button-group/hx-button-group.d.ts.map +1 -1
  31. package/dist/components/hx-button-group/index.js +1 -1
  32. package/dist/components/hx-card/hx-card.d.ts +16 -0
  33. package/dist/components/hx-card/hx-card.d.ts.map +1 -1
  34. package/dist/components/hx-card/hx-card.styles.d.ts.map +1 -1
  35. package/dist/components/hx-card/index.js +1 -1
  36. package/dist/components/hx-carousel/hx-carousel.d.ts +122 -0
  37. package/dist/components/hx-carousel/hx-carousel.d.ts.map +1 -1
  38. package/dist/components/hx-carousel/index.js +1 -1
  39. package/dist/components/hx-checkbox/hx-checkbox.d.ts +3 -1
  40. package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
  41. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +5 -1
  42. package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
  43. package/dist/components/hx-checkbox-group/index.js +1 -1
  44. package/dist/components/hx-code-snippet/hx-code-snippet.d.ts +21 -6
  45. package/dist/components/hx-code-snippet/hx-code-snippet.d.ts.map +1 -1
  46. package/dist/components/hx-code-snippet/index.js +1 -1
  47. package/dist/components/hx-color-picker/hx-color-picker.d.ts +13 -0
  48. package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
  49. package/dist/components/hx-color-picker/hx-color-picker.styles.d.ts.map +1 -1
  50. package/dist/components/hx-color-picker/index.js +1 -1
  51. package/dist/components/hx-combobox/hx-combobox.d.ts +24 -0
  52. package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
  53. package/dist/components/hx-combobox/hx-combobox.styles.d.ts.map +1 -1
  54. package/dist/components/hx-combobox/index.js +1 -1
  55. package/dist/components/hx-container/hx-container.d.ts +3 -1
  56. package/dist/components/hx-container/hx-container.d.ts.map +1 -1
  57. package/dist/components/hx-copy-button/hx-copy-button.d.ts +6 -0
  58. package/dist/components/hx-copy-button/hx-copy-button.d.ts.map +1 -1
  59. package/dist/components/hx-copy-button/index.js +1 -1
  60. package/dist/components/hx-counter/hx-counter.d.ts +79 -0
  61. package/dist/components/hx-counter/hx-counter.d.ts.map +1 -0
  62. package/dist/components/hx-counter/hx-counter.styles.d.ts +2 -0
  63. package/dist/components/hx-counter/hx-counter.styles.d.ts.map +1 -0
  64. package/dist/components/hx-counter/index.d.ts +3 -0
  65. package/dist/components/hx-counter/index.d.ts.map +1 -0
  66. package/dist/components/hx-counter/index.js +5 -0
  67. package/dist/components/hx-counter/index.js.map +1 -0
  68. package/dist/components/hx-data-table/hx-data-table.d.ts +6 -0
  69. package/dist/components/hx-data-table/hx-data-table.d.ts.map +1 -1
  70. package/dist/components/hx-data-table/hx-data-table.styles.d.ts.map +1 -1
  71. package/dist/components/hx-data-table/index.js +1 -1
  72. package/dist/components/hx-date-picker/hx-date-picker.d.ts +124 -0
  73. package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
  74. package/dist/components/hx-date-picker/index.js +1 -1
  75. package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
  76. package/dist/components/hx-dialog/index.js +1 -1
  77. package/dist/components/hx-divider/hx-divider.d.ts +3 -0
  78. package/dist/components/hx-divider/hx-divider.d.ts.map +1 -1
  79. package/dist/components/hx-drawer/hx-drawer.d.ts +54 -1
  80. package/dist/components/hx-drawer/hx-drawer.d.ts.map +1 -1
  81. package/dist/components/hx-drawer/index.js +1 -1
  82. package/dist/components/hx-dropdown/hx-dropdown.d.ts +5 -0
  83. package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
  84. package/dist/components/hx-field/hx-field.d.ts +31 -1
  85. package/dist/components/hx-field/hx-field.d.ts.map +1 -1
  86. package/dist/components/hx-field/index.js +1 -1
  87. package/dist/components/hx-file-upload/hx-file-upload.d.ts +12 -0
  88. package/dist/components/hx-file-upload/hx-file-upload.d.ts.map +1 -1
  89. package/dist/components/hx-file-upload/index.js +1 -1
  90. package/dist/components/hx-form/hx-form.d.ts +24 -0
  91. package/dist/components/hx-form/hx-form.d.ts.map +1 -1
  92. package/dist/components/hx-form/index.js +1 -1
  93. package/dist/components/hx-help-text/hx-help-text.d.ts +3 -0
  94. package/dist/components/hx-help-text/hx-help-text.d.ts.map +1 -1
  95. package/dist/components/hx-icon-button/hx-icon-button.d.ts.map +1 -1
  96. package/dist/components/hx-icon-button/index.js +1 -1
  97. package/dist/components/hx-list/hx-list.d.ts.map +1 -1
  98. package/dist/components/hx-list/index.js +1 -1
  99. package/dist/components/hx-menu/hx-menu.d.ts +12 -0
  100. package/dist/components/hx-menu/hx-menu.d.ts.map +1 -1
  101. package/dist/components/hx-menu/index.js +1 -1
  102. package/dist/components/hx-meter/hx-meter.d.ts +2 -0
  103. package/dist/components/hx-meter/hx-meter.d.ts.map +1 -1
  104. package/dist/components/hx-meter/index.js +1 -1
  105. package/dist/components/hx-nav/hx-nav.d.ts +15 -1
  106. package/dist/components/hx-nav/hx-nav.d.ts.map +1 -1
  107. package/dist/components/hx-nav/index.js +1 -1
  108. package/dist/components/hx-number-input/hx-number-input.d.ts +2 -0
  109. package/dist/components/hx-number-input/hx-number-input.d.ts.map +1 -1
  110. package/dist/components/hx-number-input/index.js +1 -1
  111. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts +14 -0
  112. package/dist/components/hx-overflow-menu/hx-overflow-menu.d.ts.map +1 -1
  113. package/dist/components/hx-overflow-menu/index.js +1 -1
  114. package/dist/components/hx-pagination/hx-pagination.d.ts +5 -0
  115. package/dist/components/hx-pagination/hx-pagination.d.ts.map +1 -1
  116. package/dist/components/hx-pagination/index.js +1 -1
  117. package/dist/components/hx-popover/hx-popover.d.ts +10 -38
  118. package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
  119. package/dist/components/hx-popover/index.js +1 -1
  120. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts +10 -0
  121. package/dist/components/hx-progress-bar/hx-progress-bar.d.ts.map +1 -1
  122. package/dist/components/hx-progress-bar/index.js +1 -1
  123. package/dist/components/hx-progress-ring/hx-progress-ring.d.ts.map +1 -1
  124. package/dist/components/hx-progress-ring/index.js +1 -1
  125. package/dist/components/hx-radio-group/hx-radio-group.d.ts +75 -3
  126. package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
  127. package/dist/components/hx-radio-group/hx-radio.d.ts +3 -1
  128. package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
  129. package/dist/components/hx-radio-group/index.js +1 -1
  130. package/dist/components/hx-rating/hx-rating.d.ts +18 -3
  131. package/dist/components/hx-rating/hx-rating.d.ts.map +1 -1
  132. package/dist/components/hx-rating/index.js +1 -1
  133. package/dist/components/hx-select/hx-select.d.ts +9 -0
  134. package/dist/components/hx-select/hx-select.d.ts.map +1 -1
  135. package/dist/components/hx-select/index.js +1 -1
  136. package/dist/components/hx-side-nav/hx-side-nav.d.ts.map +1 -1
  137. package/dist/components/hx-side-nav/index.js +1 -1
  138. package/dist/components/hx-slider/hx-slider.d.ts +2 -0
  139. package/dist/components/hx-slider/hx-slider.d.ts.map +1 -1
  140. package/dist/components/hx-slider/index.js +1 -1
  141. package/dist/components/hx-split-button/hx-split-button.d.ts +16 -0
  142. package/dist/components/hx-split-button/hx-split-button.d.ts.map +1 -1
  143. package/dist/components/hx-split-button/index.js +1 -1
  144. package/dist/components/hx-split-panel/hx-split-panel.d.ts +11 -0
  145. package/dist/components/hx-split-panel/hx-split-panel.d.ts.map +1 -1
  146. package/dist/components/hx-stat/hx-stat.d.ts +71 -0
  147. package/dist/components/hx-stat/hx-stat.d.ts.map +1 -0
  148. package/dist/components/hx-stat/hx-stat.styles.d.ts +2 -0
  149. package/dist/components/hx-stat/hx-stat.styles.d.ts.map +1 -0
  150. package/dist/components/hx-stat/index.d.ts +3 -0
  151. package/dist/components/hx-stat/index.d.ts.map +1 -0
  152. package/dist/components/hx-stat/index.js +5 -0
  153. package/dist/components/hx-stat/index.js.map +1 -0
  154. package/dist/components/hx-steps/hx-steps.d.ts +5 -0
  155. package/dist/components/hx-steps/hx-steps.d.ts.map +1 -1
  156. package/dist/components/hx-steps/index.js +1 -1
  157. package/dist/components/hx-structured-list/hx-structured-list.d.ts +2 -0
  158. package/dist/components/hx-structured-list/hx-structured-list.d.ts.map +1 -1
  159. package/dist/components/hx-structured-list/index.js +1 -1
  160. package/dist/components/hx-switch/hx-switch.d.ts +2 -0
  161. package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
  162. package/dist/components/hx-switch/index.js +1 -1
  163. package/dist/components/hx-table/hx-table.d.ts +60 -0
  164. package/dist/components/hx-table/hx-table.d.ts.map +1 -0
  165. package/dist/components/hx-table/hx-table.styles.d.ts +9 -0
  166. package/dist/components/hx-table/hx-table.styles.d.ts.map +1 -0
  167. package/dist/components/hx-table/hx-tbody.d.ts +23 -0
  168. package/dist/components/hx-table/hx-tbody.d.ts.map +1 -0
  169. package/dist/components/hx-table/hx-td.d.ts +46 -0
  170. package/dist/components/hx-table/hx-td.d.ts.map +1 -0
  171. package/dist/components/hx-table/hx-tfoot.d.ts +23 -0
  172. package/dist/components/hx-table/hx-tfoot.d.ts.map +1 -0
  173. package/dist/components/hx-table/hx-th.d.ts +61 -0
  174. package/dist/components/hx-table/hx-th.d.ts.map +1 -0
  175. package/dist/components/hx-table/hx-thead.d.ts +23 -0
  176. package/dist/components/hx-table/hx-thead.d.ts.map +1 -0
  177. package/dist/components/hx-table/hx-tr.d.ts +33 -0
  178. package/dist/components/hx-table/hx-tr.d.ts.map +1 -0
  179. package/dist/components/hx-table/index.d.ts +9 -0
  180. package/dist/components/hx-table/index.d.ts.map +1 -0
  181. package/dist/components/hx-table/index.js +11 -0
  182. package/dist/components/hx-table/index.js.map +1 -0
  183. package/dist/components/hx-tabs/hx-tabs.d.ts.map +1 -1
  184. package/dist/components/hx-tabs/index.js +1 -1
  185. package/dist/components/hx-text-input/hx-text-input.d.ts +1 -0
  186. package/dist/components/hx-text-input/hx-text-input.d.ts.map +1 -1
  187. package/dist/components/hx-text-input/index.js +1 -1
  188. package/dist/components/hx-textarea/hx-textarea.d.ts +14 -0
  189. package/dist/components/hx-textarea/hx-textarea.d.ts.map +1 -1
  190. package/dist/components/hx-textarea/hx-textarea.styles.d.ts.map +1 -1
  191. package/dist/components/hx-textarea/index.js +1 -1
  192. package/dist/components/hx-time-picker/hx-time-picker.d.ts +22 -1
  193. package/dist/components/hx-time-picker/hx-time-picker.d.ts.map +1 -1
  194. package/dist/components/hx-time-picker/index.js +1 -1
  195. package/dist/components/hx-toast/hx-toast-stack.d.ts +36 -0
  196. package/dist/components/hx-toast/hx-toast-stack.d.ts.map +1 -0
  197. package/dist/components/hx-toast/hx-toast.d.ts +0 -52
  198. package/dist/components/hx-toast/hx-toast.d.ts.map +1 -1
  199. package/dist/components/hx-toast/index.d.ts +6 -2
  200. package/dist/components/hx-toast/index.d.ts.map +1 -1
  201. package/dist/components/hx-toast/index.js +1 -1
  202. package/dist/components/hx-toast/toast-factory.d.ts +25 -0
  203. package/dist/components/hx-toast/toast-factory.d.ts.map +1 -0
  204. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +1 -0
  205. package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
  206. package/dist/components/hx-toggle-button/index.js +1 -1
  207. package/dist/components/hx-tooltip/hx-tooltip.d.ts +1 -45
  208. package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
  209. package/dist/components/hx-tooltip/index.js +1 -1
  210. package/dist/components/hx-top-nav/hx-top-nav.d.ts.map +1 -1
  211. package/dist/components/hx-top-nav/index.js +1 -1
  212. package/dist/components/hx-tree-view/hx-tree-item.d.ts +50 -0
  213. package/dist/components/hx-tree-view/hx-tree-item.d.ts.map +1 -1
  214. package/dist/components/hx-tree-view/hx-tree-view.d.ts +15 -0
  215. package/dist/components/hx-tree-view/hx-tree-view.d.ts.map +1 -1
  216. package/dist/components/hx-tree-view/index.js +1 -1
  217. package/dist/index.d.ts +20 -2
  218. package/dist/index.d.ts.map +1 -1
  219. package/dist/index.js +168 -154
  220. package/dist/index.js.map +1 -1
  221. package/dist/shared/body-scroll-lock-VBa5TFP-.js +12 -0
  222. package/dist/shared/body-scroll-lock-VBa5TFP-.js.map +1 -0
  223. package/dist/shared/dev-warn-YlwPHjtX.js +6 -0
  224. package/dist/shared/dev-warn-YlwPHjtX.js.map +1 -0
  225. package/dist/shared/{hx-accordion-D95XSAft.js → hx-accordion-Cyswa6J3.js} +46 -43
  226. package/dist/shared/hx-accordion-Cyswa6J3.js.map +1 -0
  227. package/dist/shared/{hx-action-bar-B4i9tBCP.js → hx-action-bar-we_WJety.js} +41 -40
  228. package/dist/shared/hx-action-bar-we_WJety.js.map +1 -0
  229. package/dist/shared/{hx-alert-BQpT4gL3.js → hx-alert-Cg-zxRiU.js} +2 -2
  230. package/dist/shared/hx-alert-Cg-zxRiU.js.map +1 -0
  231. package/dist/shared/{hx-avatar-yHjmNdtf.js → hx-avatar-Cep6Urm3.js} +62 -65
  232. package/dist/shared/hx-avatar-Cep6Urm3.js.map +1 -0
  233. package/dist/shared/hx-banner-lxAIJ2kR.js +349 -0
  234. package/dist/shared/hx-banner-lxAIJ2kR.js.map +1 -0
  235. package/dist/shared/{hx-breadcrumb-item-DtSxRZ_W.js → hx-breadcrumb-item-C0rz0fzV.js} +46 -44
  236. package/dist/shared/hx-breadcrumb-item-C0rz0fzV.js.map +1 -0
  237. package/dist/shared/{hx-button-CtiJsmOg.js → hx-button-Cbhqpm5i.js} +111 -28
  238. package/dist/shared/hx-button-Cbhqpm5i.js.map +1 -0
  239. package/dist/shared/{hx-button-group-BMV5qFs4.js → hx-button-group-CWjWv-wS.js} +10 -10
  240. package/dist/shared/hx-button-group-CWjWv-wS.js.map +1 -0
  241. package/dist/shared/{hx-card-DAkEfpJd.js → hx-card-Bg4W4uXC.js} +16 -16
  242. package/dist/shared/hx-card-Bg4W4uXC.js.map +1 -0
  243. package/dist/shared/{hx-carousel-item-C2yBnM0r.js → hx-carousel-item-BKpmFbUT.js} +101 -63
  244. package/dist/shared/hx-carousel-item-BKpmFbUT.js.map +1 -0
  245. package/dist/shared/hx-checkbox-BMayOpAM.js.map +1 -1
  246. package/dist/shared/{hx-checkbox-group-DTS9iT4b.js → hx-checkbox-group-ydUdV9Sx.js} +7 -7
  247. package/dist/shared/hx-checkbox-group-ydUdV9Sx.js.map +1 -0
  248. package/dist/shared/{hx-code-snippet-DdEqy-1B.js → hx-code-snippet-B4hV7rWG.js} +65 -53
  249. package/dist/shared/hx-code-snippet-B4hV7rWG.js.map +1 -0
  250. package/dist/shared/{hx-color-picker-K2x_dyeG.js → hx-color-picker-BvfJ_h16.js} +100 -90
  251. package/dist/shared/hx-color-picker-BvfJ_h16.js.map +1 -0
  252. package/dist/shared/{hx-combobox-DjMigccw.js → hx-combobox-BBi3izKJ.js} +80 -44
  253. package/dist/shared/hx-combobox-BBi3izKJ.js.map +1 -0
  254. package/dist/shared/hx-container-DLUKnTi9.js.map +1 -1
  255. package/dist/shared/{hx-copy-button-BXL1xkxb.js → hx-copy-button-CLBA31to.js} +45 -50
  256. package/dist/shared/hx-copy-button-CLBA31to.js.map +1 -0
  257. package/dist/shared/hx-counter-D-1NXzGs.js +138 -0
  258. package/dist/shared/hx-counter-D-1NXzGs.js.map +1 -0
  259. package/dist/shared/{hx-data-table-D3NZvc3P.js → hx-data-table-DNiDVWR2.js} +100 -95
  260. package/dist/shared/hx-data-table-DNiDVWR2.js.map +1 -0
  261. package/dist/shared/{hx-date-picker-CIHwx9b3.js → hx-date-picker-D7yCK0nk.js} +17 -12
  262. package/dist/shared/hx-date-picker-D7yCK0nk.js.map +1 -0
  263. package/dist/shared/{hx-dialog-e4CSD8xX.js → hx-dialog-Z7Ou_AZ9.js} +37 -36
  264. package/dist/shared/hx-dialog-Z7Ou_AZ9.js.map +1 -0
  265. package/dist/shared/hx-divider-XgWIz4Mr.js.map +1 -1
  266. package/dist/shared/{hx-drawer-bTF0nbrg.js → hx-drawer-Dk-_xzy0.js} +59 -58
  267. package/dist/shared/hx-drawer-Dk-_xzy0.js.map +1 -0
  268. package/dist/shared/hx-dropdown-DnjLnkTj.js.map +1 -1
  269. package/dist/shared/{hx-field-Dz-7M_SC.js → hx-field-CDP8EXuj.js} +22 -19
  270. package/dist/shared/hx-field-CDP8EXuj.js.map +1 -0
  271. package/dist/shared/{hx-file-upload-DnYiIhyN.js → hx-file-upload-CUORgnKc.js} +17 -14
  272. package/dist/shared/hx-file-upload-CUORgnKc.js.map +1 -0
  273. package/dist/shared/{hx-form-BJeLK34m.js → hx-form-BFv_N1dm.js} +9 -1
  274. package/dist/shared/{hx-form-BJeLK34m.js.map → hx-form-BFv_N1dm.js.map} +1 -1
  275. package/dist/shared/hx-help-text-DaOPN1iB.js.map +1 -1
  276. package/dist/shared/{hx-icon-button-C_fsUJW4.js → hx-icon-button-C83bCR0K.js} +2 -4
  277. package/dist/shared/hx-icon-button-C83bCR0K.js.map +1 -0
  278. package/dist/shared/{hx-list-CF-AAnp-.js → hx-list-CdRNgeoP.js} +7 -9
  279. package/dist/shared/{hx-list-CF-AAnp-.js.map → hx-list-CdRNgeoP.js.map} +1 -1
  280. package/dist/shared/{hx-menu-divider-Buc5XA9E.js → hx-menu-divider-11Dp2VfM.js} +50 -48
  281. package/dist/shared/hx-menu-divider-11Dp2VfM.js.map +1 -0
  282. package/dist/shared/{hx-meter-qcXl0zCL.js → hx-meter-UinDQjl6.js} +43 -37
  283. package/dist/shared/hx-meter-UinDQjl6.js.map +1 -0
  284. package/dist/shared/{hx-nav-CWwByFdq.js → hx-nav-DSpwWYUX.js} +81 -81
  285. package/dist/shared/hx-nav-DSpwWYUX.js.map +1 -0
  286. package/dist/shared/{hx-nav-item-DItaMWl0.js → hx-nav-item-D54-5eUM.js} +12 -12
  287. package/dist/shared/hx-nav-item-D54-5eUM.js.map +1 -0
  288. package/dist/shared/{hx-number-input-CS6_w1lT.js → hx-number-input-BP6TIA92.js} +5 -1
  289. package/dist/shared/hx-number-input-BP6TIA92.js.map +1 -0
  290. package/dist/shared/{hx-overflow-menu-CAS1Mlus.js → hx-overflow-menu-C7k5wlZy.js} +39 -34
  291. package/dist/shared/hx-overflow-menu-C7k5wlZy.js.map +1 -0
  292. package/dist/shared/{hx-pagination-DNFgXQm3.js → hx-pagination-BQ0cLTuB.js} +65 -62
  293. package/dist/shared/hx-pagination-BQ0cLTuB.js.map +1 -0
  294. package/dist/shared/{hx-popover-BjAyLbzp.js → hx-popover-BQsgrJCW.js} +7 -7
  295. package/dist/shared/hx-popover-BQsgrJCW.js.map +1 -0
  296. package/dist/shared/{hx-progress-bar-b3_m1hna.js → hx-progress-bar-C_mdPVF-.js} +61 -52
  297. package/dist/shared/hx-progress-bar-C_mdPVF-.js.map +1 -0
  298. package/dist/shared/{hx-progress-ring-wOSv2y_I.js → hx-progress-ring-BHJBaXNk.js} +2 -4
  299. package/dist/shared/hx-progress-ring-BHJBaXNk.js.map +1 -0
  300. package/dist/shared/{hx-radio-CGtFKls2.js → hx-radio-Bqyi8re3.js} +44 -12
  301. package/dist/shared/hx-radio-Bqyi8re3.js.map +1 -0
  302. package/dist/shared/{hx-rating-C4kTOyHF.js → hx-rating-Y_t7Z4qb.js} +104 -67
  303. package/dist/shared/hx-rating-Y_t7Z4qb.js.map +1 -0
  304. package/dist/shared/{hx-select-D9bYJcDv.js → hx-select-BBae2LqN.js} +16 -10
  305. package/dist/shared/hx-select-BBae2LqN.js.map +1 -0
  306. package/dist/shared/{hx-slider-Duzmuid9.js → hx-slider-CpnxH2UP.js} +9 -5
  307. package/dist/shared/{hx-slider-Duzmuid9.js.map → hx-slider-CpnxH2UP.js.map} +1 -1
  308. package/dist/shared/{hx-split-button-DhncgAtZ.js → hx-split-button-BvwoG8h2.js} +14 -13
  309. package/dist/shared/hx-split-button-BvwoG8h2.js.map +1 -0
  310. package/dist/shared/hx-split-panel-Cxkeauwe.js.map +1 -1
  311. package/dist/shared/hx-stat-C2wfph8W.js +212 -0
  312. package/dist/shared/hx-stat-C2wfph8W.js.map +1 -0
  313. package/dist/shared/{hx-step-nMT0fHEn.js → hx-step-DYoIumpR.js} +29 -29
  314. package/dist/shared/hx-step-DYoIumpR.js.map +1 -0
  315. package/dist/shared/{hx-structured-list-CMja1VXz.js → hx-structured-list-CMWllxGg.js} +23 -17
  316. package/dist/shared/{hx-structured-list-CMja1VXz.js.map → hx-structured-list-CMWllxGg.js.map} +1 -1
  317. package/dist/shared/{hx-switch-BPvIcDpM.js → hx-switch-DkKchcuP.js} +8 -3
  318. package/dist/shared/{hx-switch-BPvIcDpM.js.map → hx-switch-DkKchcuP.js.map} +1 -1
  319. package/dist/shared/{hx-tab-panel-C7h5lRpw.js → hx-tab-panel-CHB0u1zF.js} +91 -85
  320. package/dist/shared/hx-tab-panel-CHB0u1zF.js.map +1 -0
  321. package/dist/shared/hx-td-CVwCGBYf.js +604 -0
  322. package/dist/shared/hx-td-CVwCGBYf.js.map +1 -0
  323. package/dist/shared/{hx-text-input-BUMgOQHX.js → hx-text-input-BrCjo4fJ.js} +5 -1
  324. package/dist/shared/hx-text-input-BrCjo4fJ.js.map +1 -0
  325. package/dist/shared/{hx-textarea-B_nmxzhC.js → hx-textarea-BsQdB1Rk.js} +51 -18
  326. package/dist/shared/hx-textarea-BsQdB1Rk.js.map +1 -0
  327. package/dist/shared/{hx-time-picker-a-BCkecJ.js → hx-time-picker-DRRAFuVd.js} +62 -54
  328. package/dist/shared/hx-time-picker-DRRAFuVd.js.map +1 -0
  329. package/dist/shared/{hx-toggle-button--xCXWRJW.js → hx-toggle-button-D4F1soEM.js} +34 -22
  330. package/dist/shared/{hx-toggle-button--xCXWRJW.js.map → hx-toggle-button-D4F1soEM.js.map} +1 -1
  331. package/dist/shared/{hx-tooltip-DN6lMlP5.js → hx-tooltip-Bk1iQRHs.js} +23 -23
  332. package/dist/shared/hx-tooltip-Bk1iQRHs.js.map +1 -0
  333. package/dist/shared/{hx-top-nav-8lDKNZUj.js → hx-top-nav-DzW7XLv-.js} +42 -29
  334. package/dist/shared/{hx-top-nav-8lDKNZUj.js.map → hx-top-nav-DzW7XLv-.js.map} +1 -1
  335. package/dist/shared/{hx-tree-item-Cesh_du5.js → hx-tree-item-DdH6RbMs.js} +170 -111
  336. package/dist/shared/hx-tree-item-DdH6RbMs.js.map +1 -0
  337. package/dist/shared/{hx-toast-ikwh9Y03.js → toast-factory-B8jicczW.js} +69 -66
  338. package/dist/shared/toast-factory-B8jicczW.js.map +1 -0
  339. package/dist/tools/cem-a11y-analyzer/analyzers/aria-analyzer.d.ts +12 -0
  340. package/dist/tools/cem-a11y-analyzer/analyzers/aria-analyzer.d.ts.map +1 -0
  341. package/dist/tools/cem-a11y-analyzer/analyzers/focus-analyzer.d.ts +13 -0
  342. package/dist/tools/cem-a11y-analyzer/analyzers/focus-analyzer.d.ts.map +1 -0
  343. package/dist/tools/cem-a11y-analyzer/analyzers/form-analyzer.d.ts +13 -0
  344. package/dist/tools/cem-a11y-analyzer/analyzers/form-analyzer.d.ts.map +1 -0
  345. package/dist/tools/cem-a11y-analyzer/analyzers/keyboard-analyzer.d.ts +12 -0
  346. package/dist/tools/cem-a11y-analyzer/analyzers/keyboard-analyzer.d.ts.map +1 -0
  347. package/dist/tools/cem-a11y-analyzer/analyzers/label-analyzer.d.ts +13 -0
  348. package/dist/tools/cem-a11y-analyzer/analyzers/label-analyzer.d.ts.map +1 -0
  349. package/dist/tools/cem-a11y-analyzer/analyzers/motion-analyzer.d.ts +12 -0
  350. package/dist/tools/cem-a11y-analyzer/analyzers/motion-analyzer.d.ts.map +1 -0
  351. package/dist/tools/cem-a11y-analyzer/index.d.ts +14 -0
  352. package/dist/tools/cem-a11y-analyzer/index.d.ts.map +1 -0
  353. package/dist/tools/cem-a11y-analyzer/reporter.d.ts +6 -0
  354. package/dist/tools/cem-a11y-analyzer/reporter.d.ts.map +1 -0
  355. package/dist/tools/cem-a11y-analyzer/scorer.d.ts +22 -0
  356. package/dist/tools/cem-a11y-analyzer/scorer.d.ts.map +1 -0
  357. package/dist/tools/cem-a11y-analyzer/types.d.ts +171 -0
  358. package/dist/tools/cem-a11y-analyzer/types.d.ts.map +1 -0
  359. package/dist/utils/body-scroll-lock.d.ts +34 -0
  360. package/dist/utils/body-scroll-lock.d.ts.map +1 -0
  361. package/dist/utils/dev-warn.d.ts +19 -0
  362. package/dist/utils/dev-warn.d.ts.map +1 -0
  363. package/package.json +1 -1
  364. package/dist/shared/hx-accordion-D95XSAft.js.map +0 -1
  365. package/dist/shared/hx-action-bar-B4i9tBCP.js.map +0 -1
  366. package/dist/shared/hx-alert-BQpT4gL3.js.map +0 -1
  367. package/dist/shared/hx-avatar-yHjmNdtf.js.map +0 -1
  368. package/dist/shared/hx-breadcrumb-item-DtSxRZ_W.js.map +0 -1
  369. package/dist/shared/hx-button-CtiJsmOg.js.map +0 -1
  370. package/dist/shared/hx-button-group-BMV5qFs4.js.map +0 -1
  371. package/dist/shared/hx-card-DAkEfpJd.js.map +0 -1
  372. package/dist/shared/hx-carousel-item-C2yBnM0r.js.map +0 -1
  373. package/dist/shared/hx-checkbox-group-DTS9iT4b.js.map +0 -1
  374. package/dist/shared/hx-code-snippet-DdEqy-1B.js.map +0 -1
  375. package/dist/shared/hx-color-picker-K2x_dyeG.js.map +0 -1
  376. package/dist/shared/hx-combobox-DjMigccw.js.map +0 -1
  377. package/dist/shared/hx-copy-button-BXL1xkxb.js.map +0 -1
  378. package/dist/shared/hx-data-table-D3NZvc3P.js.map +0 -1
  379. package/dist/shared/hx-date-picker-CIHwx9b3.js.map +0 -1
  380. package/dist/shared/hx-dialog-e4CSD8xX.js.map +0 -1
  381. package/dist/shared/hx-drawer-bTF0nbrg.js.map +0 -1
  382. package/dist/shared/hx-field-Dz-7M_SC.js.map +0 -1
  383. package/dist/shared/hx-file-upload-DnYiIhyN.js.map +0 -1
  384. package/dist/shared/hx-icon-button-C_fsUJW4.js.map +0 -1
  385. package/dist/shared/hx-menu-divider-Buc5XA9E.js.map +0 -1
  386. package/dist/shared/hx-meter-qcXl0zCL.js.map +0 -1
  387. package/dist/shared/hx-nav-CWwByFdq.js.map +0 -1
  388. package/dist/shared/hx-nav-item-DItaMWl0.js.map +0 -1
  389. package/dist/shared/hx-number-input-CS6_w1lT.js.map +0 -1
  390. package/dist/shared/hx-overflow-menu-CAS1Mlus.js.map +0 -1
  391. package/dist/shared/hx-pagination-DNFgXQm3.js.map +0 -1
  392. package/dist/shared/hx-popover-BjAyLbzp.js.map +0 -1
  393. package/dist/shared/hx-progress-bar-b3_m1hna.js.map +0 -1
  394. package/dist/shared/hx-progress-ring-wOSv2y_I.js.map +0 -1
  395. package/dist/shared/hx-radio-CGtFKls2.js.map +0 -1
  396. package/dist/shared/hx-rating-C4kTOyHF.js.map +0 -1
  397. package/dist/shared/hx-select-D9bYJcDv.js.map +0 -1
  398. package/dist/shared/hx-split-button-DhncgAtZ.js.map +0 -1
  399. package/dist/shared/hx-step-nMT0fHEn.js.map +0 -1
  400. package/dist/shared/hx-tab-panel-C7h5lRpw.js.map +0 -1
  401. package/dist/shared/hx-text-input-BUMgOQHX.js.map +0 -1
  402. package/dist/shared/hx-textarea-B_nmxzhC.js.map +0 -1
  403. package/dist/shared/hx-time-picker-a-BCkecJ.js.map +0 -1
  404. package/dist/shared/hx-toast-ikwh9Y03.js.map +0 -1
  405. package/dist/shared/hx-tooltip-DN6lMlP5.js.map +0 -1
  406. package/dist/shared/hx-tree-item-Cesh_du5.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import { css as H, LitElement as O, html as p, nothing as k } from "lit";
2
- import { property as m, state as F, customElement as E } from "lit/decorators.js";
3
- import { styleMap as v } from "lit/directives/style-map.js";
4
- import { tokenStyles as G } from "@helixui/tokens/lit";
5
- const V = H`
2
+ import { property as m, state as F, customElement as G } from "lit/decorators.js";
3
+ import { styleMap as f } from "lit/directives/style-map.js";
4
+ import { tokenStyles as I } from "@helixui/tokens/lit";
5
+ const E = H`
6
6
  :host {
7
7
  display: inline-block;
8
8
  position: relative;
@@ -121,11 +121,14 @@ const V = H`
121
121
  width: 12px;
122
122
  height: 12px;
123
123
  border-radius: 50%;
124
- /* P1-6: was hardcoded #fff */
125
- border: 2px solid var(--hx-color-picker-thumb-border, var(--hx-color-neutral-0, #fff));
126
- /* P1-6: was hardcoded rgba(0,0,0,0.3) */
127
- box-shadow: 0 0 0 1px
128
- var(--hx-color-picker-thumb-shadow, var(--hx-overlay-black-30, rgba(0, 0, 0, 0.3)));
124
+ /* A11y fix (WCAG 1.4.11): double-ring ensures thumb visibility on light hue backgrounds
125
+ (yellow, cyan) where a white-only border falls below 3:1 non-text contrast.
126
+ Inner dark ring at 1px provides contrast against light backgrounds;
127
+ outer white ring at 2px provides contrast against dark backgrounds. */
128
+ border: none;
129
+ box-shadow:
130
+ 0 0 0 2px var(--hx-color-picker-thumb-border, var(--hx-color-neutral-0, #fff)),
131
+ 0 0 0 3px var(--hx-color-picker-thumb-shadow, var(--hx-overlay-black-30, rgba(0, 0, 0, 0.3)));
129
132
  transform: translate(-50%, -50%);
130
133
  pointer-events: none;
131
134
  top: var(--_thumb-y, 0%);
@@ -180,11 +183,14 @@ const V = H`
180
183
  width: 16px;
181
184
  height: 16px;
182
185
  border-radius: 50%;
183
- /* P1-6: was hardcoded #fff */
184
- border: 2px solid var(--hx-color-picker-thumb-border, var(--hx-color-neutral-0, #fff));
185
- /* P1-6: was hardcoded rgba(0,0,0,0.3) */
186
- box-shadow: 0 0 0 1px
187
- var(--hx-color-picker-thumb-shadow, var(--hx-overlay-black-30, rgba(0, 0, 0, 0.3)));
186
+ /* A11y fix (WCAG 1.4.11): double-ring ensures thumb visibility on light hue backgrounds
187
+ (yellow, cyan) where a white-only border falls below 3:1 non-text contrast.
188
+ Inner dark ring at 1px provides contrast against light backgrounds;
189
+ outer white ring at 2px provides contrast against dark backgrounds. */
190
+ border: none;
191
+ box-shadow:
192
+ 0 0 0 2px var(--hx-color-picker-thumb-border, var(--hx-color-neutral-0, #fff)),
193
+ 0 0 0 3px var(--hx-color-picker-thumb-shadow, var(--hx-overlay-black-30, rgba(0, 0, 0, 0.3)));
188
194
  transform: translate(-50%, -50%);
189
195
  pointer-events: none;
190
196
  left: var(--_slider-pct, 0%);
@@ -294,15 +300,15 @@ const V = H`
294
300
  }
295
301
  }
296
302
  `;
297
- var I = Object.defineProperty, U = Object.getOwnPropertyDescriptor, c = (t, e, r, i) => {
298
- for (var a = i > 1 ? void 0 : i ? U(e, r) : e, s = t.length - 1, o; s >= 0; s--)
299
- (o = t[s]) && (a = (i ? o(e, r, a) : o(a)) || a);
300
- return i && a && I(e, r, a), a;
303
+ var V = Object.defineProperty, U = Object.getOwnPropertyDescriptor, c = (t, e, r, i) => {
304
+ for (var o = i > 1 ? void 0 : i ? U(e, r) : e, a = t.length - 1, s; a >= 0; a--)
305
+ (s = t[a]) && (o = (i ? s(e, r, o) : s(o)) || o);
306
+ return i && o && V(e, r, o), o;
301
307
  };
302
308
  function g(t, e, r) {
303
309
  return Math.max(e, Math.min(r, t));
304
310
  }
305
- function R(t) {
311
+ function A(t) {
306
312
  let e = t.trim().replace(/^#/, "");
307
313
  if (e.length === 3 && (e = e.replace(/(.)/g, "$1$1")), e.length === 4 && (e = e.replace(/(.)/g, "$1$1")), e.length === 6 && (e += "ff"), e.length !== 8) return null;
308
314
  const r = parseInt(e, 16);
@@ -316,102 +322,104 @@ function R(t) {
316
322
  function $(t) {
317
323
  return Math.round(g(t, 0, 255)).toString(16).padStart(2, "0");
318
324
  }
319
- function T(t, e) {
325
+ function R(t, e) {
320
326
  const r = `#${$(t.r)}${$(t.g)}${$(t.b)}`;
321
327
  return e && t.a < 1 ? r + $(t.a * 255) : r;
322
328
  }
323
- function S(t) {
324
- const e = t.r / 255, r = t.g / 255, i = t.b / 255, a = Math.max(e, r, i), s = Math.min(e, r, i), o = a - s, h = a === 0 ? 0 : o / a, l = a;
329
+ function D(t) {
330
+ const e = t.r / 255, r = t.g / 255, i = t.b / 255, o = Math.max(e, r, i), a = Math.min(e, r, i), s = o - a, h = o === 0 ? 0 : s / o, l = o;
325
331
  let n = 0;
326
- return o !== 0 && (a === e ? n = ((r - i) / o + (r < i ? 6 : 0)) / 6 : a === r ? n = ((i - e) / o + 2) / 6 : n = ((e - r) / o + 4) / 6), { h: n * 360, s: h * 100, v: l * 100, a: t.a };
332
+ return s !== 0 && (o === e ? n = ((r - i) / s + (r < i ? 6 : 0)) / 6 : o === r ? n = ((i - e) / s + 2) / 6 : n = ((e - r) / s + 4) / 6), { h: n * 360, s: h * 100, v: l * 100, a: t.a };
327
333
  }
328
- function D(t) {
329
- const e = t.h / 360, r = t.s / 100, i = t.v / 100, a = Math.floor(e * 6), s = e * 6 - a, o = i * (1 - r), h = i * (1 - s * r), l = i * (1 - (1 - s) * r);
330
- let n = 0, u = 0, f = 0;
331
- switch (a % 6) {
334
+ function S(t) {
335
+ const e = t.h / 360, r = t.s / 100, i = t.v / 100, o = Math.floor(e * 6), a = e * 6 - o, s = i * (1 - r), h = i * (1 - a * r), l = i * (1 - (1 - a) * r);
336
+ let n = 0, u = 0, v = 0;
337
+ switch (o % 6) {
332
338
  case 0:
333
- n = i, u = l, f = o;
339
+ n = i, u = l, v = s;
334
340
  break;
335
341
  case 1:
336
- n = h, u = i, f = o;
342
+ n = h, u = i, v = s;
337
343
  break;
338
344
  case 2:
339
- n = o, u = i, f = l;
345
+ n = s, u = i, v = l;
340
346
  break;
341
347
  case 3:
342
- n = o, u = h, f = i;
348
+ n = s, u = h, v = i;
343
349
  break;
344
350
  case 4:
345
- n = l, u = o, f = i;
351
+ n = l, u = s, v = i;
346
352
  break;
347
353
  case 5:
348
- n = i, u = o, f = h;
354
+ n = i, u = s, v = h;
349
355
  break;
350
356
  }
351
- return { r: Math.round(n * 255), g: Math.round(u * 255), b: Math.round(f * 255), a: t.a };
357
+ return { r: Math.round(n * 255), g: Math.round(u * 255), b: Math.round(v * 255), a: t.a };
352
358
  }
353
- function z(t) {
354
- const e = t.r / 255, r = t.g / 255, i = t.b / 255, a = Math.max(e, r, i), s = Math.min(e, r, i), o = (a + s) / 2;
359
+ function T(t) {
360
+ const e = t.r / 255, r = t.g / 255, i = t.b / 255, o = Math.max(e, r, i), a = Math.min(e, r, i), s = (o + a) / 2;
355
361
  let h = 0, l = 0;
356
- if (a !== s) {
357
- const n = a - s;
358
- l = o > 0.5 ? n / (2 - a - s) : n / (a + s), a === e ? h = ((r - i) / n + (r < i ? 6 : 0)) / 6 : a === r ? h = ((i - e) / n + 2) / 6 : h = ((e - r) / n + 4) / 6;
362
+ if (o !== a) {
363
+ const n = o - a;
364
+ l = s > 0.5 ? n / (2 - o - a) : n / (o + a), o === e ? h = ((r - i) / n + (r < i ? 6 : 0)) / 6 : o === r ? h = ((i - e) / n + 2) / 6 : h = ((e - r) / n + 4) / 6;
359
365
  }
360
- return { h: h * 360, s: l * 100, l: o * 100, a: t.a };
366
+ return { h: h * 360, s: l * 100, l: s * 100, a: t.a };
361
367
  }
362
368
  function P(t) {
363
369
  if (!t) return null;
364
370
  if (t.startsWith("#")) {
365
- const a = R(t);
366
- return a ? S(a) : null;
371
+ const o = A(t);
372
+ return o ? D(o) : null;
367
373
  }
368
- const e = t.match(/rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)(?:\s*,\s*([\d.]+))?\s*\)/);
374
+ const e = t.match(
375
+ /rgba?\(\s*(\d+)(?:\s*,\s*|\s+)(\d+)(?:\s*,\s*|\s+)(\d+)(?:\s*(?:\/|,)\s*([\d.]+))?\s*\)/
376
+ );
369
377
  if (e) {
370
- const [, a, s, o, h] = e;
371
- return S({
372
- r: parseInt(a ?? "0", 10),
373
- g: parseInt(s ?? "0", 10),
374
- b: parseInt(o ?? "0", 10),
378
+ const [, o, a, s, h] = e;
379
+ return D({
380
+ r: parseInt(o ?? "0", 10),
381
+ g: parseInt(a ?? "0", 10),
382
+ b: parseInt(s ?? "0", 10),
375
383
  a: h !== void 0 ? parseFloat(h) : 1
376
384
  });
377
385
  }
378
386
  const r = t.match(
379
- /hsla?\(\s*([\d.]+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%(?:\s*,\s*([\d.]+))?\s*\)/
387
+ /hsla?\(\s*([\d.]+)(?:\s*,\s*|\s+)([\d.]+)%(?:\s*,\s*|\s+)([\d.]+)%(?:\s*(?:\/|,)\s*([\d.]+))?\s*\)/
380
388
  );
381
389
  if (r) {
382
- const [, a, s, o, h] = r, l = parseFloat(a ?? "0"), n = parseFloat(s ?? "0") / 100, u = parseFloat(o ?? "0") / 100, f = h !== void 0 ? parseFloat(h) : 1, b = (1 - Math.abs(2 * u - 1)) * n, _ = b * (1 - Math.abs(l / 60 % 2 - 1)), M = u - b / 2;
390
+ const [, o, a, s, h] = r, l = parseFloat(o ?? "0"), n = parseFloat(a ?? "0") / 100, u = parseFloat(s ?? "0") / 100, v = h !== void 0 ? parseFloat(h) : 1, b = (1 - Math.abs(2 * u - 1)) * n, _ = b * (1 - Math.abs(l / 60 % 2 - 1)), M = u - b / 2;
383
391
  let x = 0, w = 0, y = 0;
384
- return l < 60 ? (x = b, w = _) : l < 120 ? (x = _, w = b) : l < 180 ? (w = b, y = _) : l < 240 ? (w = _, y = b) : l < 300 ? (x = _, y = b) : (x = b, y = _), S({
392
+ return l < 60 ? (x = b, w = _) : l < 120 ? (x = _, w = b) : l < 180 ? (w = b, y = _) : l < 240 ? (w = _, y = b) : l < 300 ? (x = _, y = b) : (x = b, y = _), D({
385
393
  r: Math.round((x + M) * 255),
386
394
  g: Math.round((w + M) * 255),
387
395
  b: Math.round((y + M) * 255),
388
- a: f
396
+ a: v
389
397
  });
390
398
  }
391
399
  const i = t.match(
392
400
  /hsva?\(\s*([\d.]+)\s*,\s*([\d.]+)%\s*,\s*([\d.]+)%(?:\s*,\s*([\d.]+))?\s*\)/
393
401
  );
394
402
  if (i) {
395
- const [, a, s, o, h] = i;
403
+ const [, o, a, s, h] = i;
396
404
  return {
397
- h: parseFloat(a ?? "0"),
398
- s: parseFloat(s ?? "0"),
399
- v: parseFloat(o ?? "0"),
405
+ h: parseFloat(o ?? "0"),
406
+ s: parseFloat(a ?? "0"),
407
+ v: parseFloat(s ?? "0"),
400
408
  a: h !== void 0 ? parseFloat(h) : 1
401
409
  };
402
410
  }
403
411
  return null;
404
412
  }
405
413
  function C(t, e, r) {
406
- const i = D(t);
414
+ const i = S(t);
407
415
  switch (e) {
408
416
  case "hex":
409
- return T(i, r);
417
+ return R(i, r);
410
418
  case "rgb":
411
- return r && t.a < 1 ? `rgba(${i.r}, ${i.g}, ${i.b}, ${Math.round(t.a * 100) / 100})` : `rgb(${i.r}, ${i.g}, ${i.b})`;
419
+ return r && t.a < 1 ? `rgb(${i.r} ${i.g} ${i.b} / ${Math.round(t.a * 100) / 100})` : `rgb(${i.r} ${i.g} ${i.b})`;
412
420
  case "hsl": {
413
- const a = z(i);
414
- return r && t.a < 1 ? `hsla(${Math.round(a.h)}, ${Math.round(a.s)}%, ${Math.round(a.l)}%, ${Math.round(t.a * 100) / 100})` : `hsl(${Math.round(a.h)}, ${Math.round(a.s)}%, ${Math.round(a.l)}%)`;
421
+ const o = T(i);
422
+ return r && t.a < 1 ? `hsl(${Math.round(o.h)} ${Math.round(o.s)}% ${Math.round(o.l)}% / ${Math.round(t.a * 100) / 100})` : `hsl(${Math.round(o.h)} ${Math.round(o.s)}% ${Math.round(o.l)}%)`;
415
423
  }
416
424
  case "hsv":
417
425
  return r && t.a < 1 ? `hsva(${Math.round(t.h)}, ${Math.round(t.s)}%, ${Math.round(t.v)}%, ${Math.round(t.a * 100) / 100})` : `hsv(${Math.round(t.h)}, ${Math.round(t.s)}%, ${Math.round(t.v)}%)`;
@@ -419,14 +427,14 @@ function C(t, e, r) {
419
427
  }
420
428
  let d = class extends O {
421
429
  constructor() {
422
- super(), this.value = "#000000", this.format = "hex", this.opacity = !1, this.swatches = [], this.swatchesOnly = !1, this.disabled = !1, this.name = "", this.inline = !1, this._hsv = { h: 0, s: 0, v: 0, a: 1 }, this._open = !1, this._inputValue = "#000000", this._draggingGrid = !1, this._draggingHue = !1, this._draggingOpacity = !1, this._internals = this.attachInternals(), this._boundPointerMove = this._handlePointerMove.bind(this), this._boundPointerUp = this._handlePointerUp.bind(this);
430
+ super(), this.value = "#000000", this.format = "hex", this.opacity = !1, this.swatches = [], this.swatchesOnly = !1, this.disabled = !1, this.name = "", this.inline = !1, this._hsv = { h: 0, s: 0, v: 0, a: 1 }, this._open = !1, this._inputValue = "#000000", this._draggingGrid = !1, this._draggingHue = !1, this._draggingOpacity = !1, this._internals = this.attachInternals(), this._boundPointerMove = this._handlePointerMove.bind(this), this._boundPointerUp = this._handlePointerUp.bind(this), this._boundDocumentClick = this._handleDocumentClick.bind(this);
423
431
  }
424
432
  // ─── Lifecycle ───────────────────────────────────────────────────────────
425
433
  connectedCallback() {
426
- super.connectedCallback(), this._syncFromValue(), this._handleDocumentClick = this._handleDocumentClick.bind(this), document.addEventListener("click", this._handleDocumentClick, !0), document.addEventListener("pointermove", this._boundPointerMove), document.addEventListener("pointerup", this._boundPointerUp);
434
+ super.connectedCallback(), this._syncFromValue(), document.addEventListener("click", this._boundDocumentClick, !0), document.addEventListener("pointermove", this._boundPointerMove), document.addEventListener("pointerup", this._boundPointerUp);
427
435
  }
428
436
  disconnectedCallback() {
429
- super.disconnectedCallback(), document.removeEventListener("click", this._handleDocumentClick, !0), document.removeEventListener("pointermove", this._boundPointerMove), document.removeEventListener("pointerup", this._boundPointerUp);
437
+ super.disconnectedCallback(), document.removeEventListener("click", this._boundDocumentClick, !0), document.removeEventListener("pointermove", this._boundPointerMove), document.removeEventListener("pointerup", this._boundPointerUp);
430
438
  }
431
439
  willUpdate(t) {
432
440
  t.has("value") && this._syncFromValue();
@@ -436,6 +444,10 @@ let d = class extends O {
436
444
  const t = P(this.value);
437
445
  t && (this._hsv = t), this._inputValue = C(this._hsv, this.format, this.opacity), this._internals.setFormValue(this.value);
438
446
  }
447
+ /** Called when a parent fieldset is disabled/enabled. */
448
+ formDisabledCallback(t) {
449
+ this.disabled = t;
450
+ }
439
451
  _commit(t) {
440
452
  const e = C(this._hsv, this.format, this.opacity);
441
453
  this.value = e, this._inputValue = e, this._internals.setFormValue(e);
@@ -468,11 +480,11 @@ let d = class extends O {
468
480
  this.disabled || (t.preventDefault(), this._draggingGrid = !0, t.currentTarget.setPointerCapture(t.pointerId), this._updateGridFromPointer(t));
469
481
  }
470
482
  _updateGridFromPointer(t) {
471
- var s;
472
- const e = (s = this.shadowRoot) == null ? void 0 : s.querySelector('[part="grid"]');
483
+ var a;
484
+ const e = (a = this.shadowRoot) == null ? void 0 : a.querySelector('[part="grid"]');
473
485
  if (!e) return;
474
- const r = e.getBoundingClientRect(), i = g((t.clientX - r.left) / r.width, 0, 1), a = g((t.clientY - r.top) / r.height, 0, 1);
475
- this._hsv = { ...this._hsv, s: i * 100, v: (1 - a) * 100 }, this._commit("drag"), this.requestUpdate();
486
+ const r = e.getBoundingClientRect(), i = g((t.clientX - r.left) / r.width, 0, 1), o = g((t.clientY - r.top) / r.height, 0, 1);
487
+ this._hsv = { ...this._hsv, s: i * 100, v: (1 - o) * 100 }, this._commit("drag"), this.requestUpdate();
476
488
  }
477
489
  // P0-1: Keyboard support for gradient grid — fixes WCAG 2.1 SC 2.1.1 failure
478
490
  _handleGridKeydown(t) {
@@ -501,8 +513,8 @@ let d = class extends O {
501
513
  this.disabled || (t.preventDefault(), this._draggingHue = !0, t.currentTarget.setPointerCapture(t.pointerId), this._updateHueFromPointer(t));
502
514
  }
503
515
  _updateHueFromPointer(t) {
504
- var a;
505
- const e = (a = this.shadowRoot) == null ? void 0 : a.querySelector('[part="hue-slider"]');
516
+ var o;
517
+ const e = (o = this.shadowRoot) == null ? void 0 : o.querySelector('[part="hue-slider"]');
506
518
  if (!e) return;
507
519
  const r = e.getBoundingClientRect(), i = g((t.clientX - r.left) / r.width, 0, 1);
508
520
  this._hsv = { ...this._hsv, h: i * 360 }, this._commit("drag"), this.requestUpdate();
@@ -512,8 +524,8 @@ let d = class extends O {
512
524
  this.disabled || (t.preventDefault(), this._draggingOpacity = !0, t.currentTarget.setPointerCapture(t.pointerId), this._updateOpacityFromPointer(t));
513
525
  }
514
526
  _updateOpacityFromPointer(t) {
515
- var a;
516
- const e = (a = this.shadowRoot) == null ? void 0 : a.querySelector('[part="opacity-slider"]');
527
+ var o;
528
+ const e = (o = this.shadowRoot) == null ? void 0 : o.querySelector('[part="opacity-slider"]');
517
529
  if (!e) return;
518
530
  const r = e.getBoundingClientRect(), i = g((t.clientX - r.left) / r.width, 0, 1);
519
531
  this._hsv = { ...this._hsv, a: i }, this._commit("drag"), this.requestUpdate();
@@ -580,8 +592,8 @@ let d = class extends O {
580
592
  return `hsl(${Math.round(this._hsv.h)}, 100%, 50%)`;
581
593
  }
582
594
  _previewColor() {
583
- const t = D(this._hsv);
584
- return this.opacity && this._hsv.a < 1 ? `rgba(${t.r}, ${t.g}, ${t.b}, ${this._hsv.a})` : `rgb(${t.r}, ${t.g}, ${t.b})`;
595
+ const t = S(this._hsv);
596
+ return this.opacity && this._hsv.a < 1 ? `rgb(${t.r} ${t.g} ${t.b} / ${Math.round(this._hsv.a * 100) / 100})` : `rgb(${t.r} ${t.g} ${t.b})`;
585
597
  }
586
598
  // ─── Render helpers ───────────────────────────────────────────────────────
587
599
  _renderGrid() {
@@ -600,10 +612,10 @@ let d = class extends O {
600
612
  @pointerdown=${this._handleGridPointerDown}
601
613
  @keydown=${this._handleGridKeydown}
602
614
  >
603
- <div class="gradient-grid-bg" style=${v({ "--_hue-color": r })}></div>
615
+ <div class="gradient-grid-bg" style=${f({ "--_hue-color": r })}></div>
604
616
  <div
605
617
  class="gradient-thumb"
606
- style=${v({ "--_thumb-x": t, "--_thumb-y": e })}
618
+ style=${f({ "--_thumb-x": t, "--_thumb-y": e })}
607
619
  aria-hidden="true"
608
620
  ></div>
609
621
  </div>
@@ -627,7 +639,7 @@ let d = class extends O {
627
639
  >
628
640
  <div
629
641
  class="slider-thumb"
630
- style=${v({ "--_slider-pct": t, "--_thumb-color": e })}
642
+ style=${f({ "--_slider-pct": t, "--_thumb-color": e })}
631
643
  aria-hidden="true"
632
644
  ></div>
633
645
  </div>
@@ -635,7 +647,7 @@ let d = class extends O {
635
647
  }
636
648
  _renderOpacitySlider() {
637
649
  if (!this.opacity) return k;
638
- const t = `${this._hsv.a * 100}%`, e = D(this._hsv), r = `rgba(${e.r}, ${e.g}, ${e.b}, ${this._hsv.a})`, i = this._hueColor();
650
+ const t = `${this._hsv.a * 100}%`, e = S(this._hsv), r = `rgb(${e.r} ${e.g} ${e.b} / ${Math.round(this._hsv.a * 100) / 100})`, i = this._hueColor();
639
651
  return p`
640
652
  <div
641
653
  part="slider opacity-slider"
@@ -647,13 +659,13 @@ let d = class extends O {
647
659
  aria-valuemax="100"
648
660
  aria-valuenow=${Math.round(this._hsv.a * 100)}
649
661
  aria-valuetext="${Math.round(this._hsv.a * 100)}%"
650
- style=${v({ "--_hue-color": i })}
662
+ style=${f({ "--_hue-color": i })}
651
663
  @pointerdown=${this._handleOpacityPointerDown}
652
664
  @keydown=${this._handleOpacityKeydown}
653
665
  >
654
666
  <div
655
667
  class="slider-thumb"
656
- style=${v({ "--_slider-pct": t, "--_thumb-color": r })}
668
+ style=${f({ "--_slider-pct": t, "--_thumb-color": r })}
657
669
  aria-hidden="true"
658
670
  ></div>
659
671
  </div>
@@ -668,7 +680,7 @@ let d = class extends O {
668
680
  <button
669
681
  type="button"
670
682
  class="swatch-btn"
671
- style=${v({ background: e })}
683
+ style=${f({ background: e })}
672
684
  aria-label=${e}
673
685
  title=${e}
674
686
  @click=${() => this._handleSwatchClick(e)}
@@ -683,7 +695,7 @@ let d = class extends O {
683
695
  <div part="input" class="input-area">
684
696
  <div
685
697
  class="input-preview"
686
- style=${v({ "--_preview-color": this._previewColor() })}
698
+ style=${f({ "--_preview-color": this._previewColor() })}
687
699
  aria-hidden="true"
688
700
  ></div>
689
701
  <button
@@ -712,9 +724,8 @@ let d = class extends O {
712
724
  return p`
713
725
  <div
714
726
  class="panel"
715
- role="dialog"
727
+ role="group"
716
728
  aria-label="Color picker"
717
- aria-modal="true"
718
729
  tabindex="-1"
719
730
  @keydown=${this._handlePanelKeydown}
720
731
  >
@@ -727,17 +738,16 @@ let d = class extends O {
727
738
  render() {
728
739
  const t = this._previewColor();
729
740
  return this.inline ? p`
730
- <div style=${v({ "--_preview-color": t })}>${this._renderPanel()}</div>
741
+ <div style=${f({ "--_preview-color": t })}>${this._renderPanel()}</div>
731
742
  ` : p`
732
743
  <button
733
744
  part="trigger"
734
745
  type="button"
735
746
  class="trigger"
736
747
  aria-label="Choose color: ${this._inputValue}"
737
- aria-haspopup="dialog"
738
748
  aria-expanded=${this._open ? "true" : "false"}
739
749
  ?disabled=${this.disabled}
740
- style=${v({ "--_preview-color": t })}
750
+ style=${f({ "--_preview-color": t })}
741
751
  @click=${this._handleTriggerClick}
742
752
  >
743
753
  <slot name="trigger">
@@ -749,7 +759,7 @@ let d = class extends O {
749
759
  `;
750
760
  }
751
761
  };
752
- d.styles = [G, V];
762
+ d.styles = [I, E];
753
763
  d.formAssociated = !0;
754
764
  c([
755
765
  m({ type: String, reflect: !0 })
@@ -785,9 +795,9 @@ c([
785
795
  F()
786
796
  ], d.prototype, "_inputValue", 2);
787
797
  d = c([
788
- E("hx-color-picker")
798
+ G("hx-color-picker")
789
799
  ], d);
790
800
  export {
791
801
  d as H
792
802
  };
793
- //# sourceMappingURL=hx-color-picker-K2x_dyeG.js.map
803
+ //# sourceMappingURL=hx-color-picker-BvfJ_h16.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hx-color-picker-BvfJ_h16.js","sources":["../../src/components/hx-color-picker/hx-color-picker.styles.ts","../../src/components/hx-color-picker/hx-color-picker.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const helixColorPickerStyles = css`\n :host {\n display: inline-block;\n position: relative;\n font-family: var(--hx-font-family-base, sans-serif);\n font-size: var(--hx-font-size-sm, 0.875rem);\n }\n\n :host([disabled]) {\n pointer-events: none;\n opacity: var(--hx-opacity-disabled, 0.4);\n }\n\n /* ─── Trigger ─── */\n\n .trigger {\n display: inline-flex;\n align-items: center;\n gap: var(--hx-space-2, 0.5rem);\n padding: var(--hx-space-1, 0.25rem);\n border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #d1d5db);\n border-radius: var(--hx-border-radius-md, 0.375rem);\n background: var(--hx-color-neutral-0, #fff);\n cursor: pointer;\n transition: border-color var(--hx-transition-fast, 0.15s ease);\n }\n\n .trigger:hover:not([disabled]) {\n border-color: var(--hx-color-primary-500, #3b82f6);\n }\n\n .trigger:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #2563eb);\n outline-offset: var(--hx-focus-ring-offset, 2px);\n }\n\n .trigger-swatch {\n width: 1.5rem;\n height: 1.5rem;\n border-radius: var(--hx-border-radius-sm, 0.25rem);\n /* P1-6: was hardcoded rgba(0,0,0,0.1) */\n border: var(--hx-border-width-thin, 1px) solid\n var(--hx-color-picker-swatch-border, var(--hx-overlay-black-10, rgba(0, 0, 0, 0.1)));\n background: var(--_preview-color, #000);\n display: block;\n flex-shrink: 0;\n }\n\n .trigger-label {\n font-size: var(--hx-font-size-sm, 0.875rem);\n color: var(--hx-color-neutral-700, #374151);\n font-family: var(--hx-font-family-mono, monospace);\n white-space: nowrap;\n }\n\n /* ─── Panel ─── */\n\n .panel {\n position: absolute;\n z-index: var(--hx-color-picker-z-index, 1000);\n top: calc(100% + 4px);\n left: 0;\n background: var(--hx-color-neutral-0, #fff);\n /* P1-6: border width now uses token */\n border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e5e7eb);\n border-radius: var(--hx-border-radius-lg, 0.5rem);\n /* P1-6: panel shadow uses component token */\n box-shadow: 0 8px 24px\n var(--hx-color-picker-panel-shadow, var(--hx-overlay-black-15, rgba(0, 0, 0, 0.15)));\n padding: var(--hx-space-4, 1rem);\n /* P2-8: panel width is now a CSS custom property */\n width: var(--hx-color-picker-width, 260px);\n display: flex;\n flex-direction: column;\n gap: var(--hx-space-3, 0.75rem);\n outline: none;\n }\n\n :host([inline]) .panel {\n position: static;\n box-shadow: none;\n border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-200, #e5e7eb);\n border-radius: var(--hx-border-radius-lg, 0.5rem);\n }\n\n /* ─── Gradient Grid ─── */\n\n .gradient-grid {\n position: relative;\n width: 100%;\n /* P2-8: grid height is now a CSS custom property */\n height: var(--hx-color-picker-grid-height, 160px);\n border-radius: var(--hx-border-radius-sm, 0.25rem);\n cursor: crosshair;\n overflow: hidden;\n touch-action: none;\n flex-shrink: 0;\n }\n\n /* P0-1: focus ring for keyboard-operable gradient grid */\n .gradient-grid:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #2563eb);\n outline-offset: var(--hx-focus-ring-offset, 2px);\n }\n\n .gradient-grid-bg {\n position: absolute;\n inset: 0;\n background:\n linear-gradient(to bottom, transparent, #000),\n linear-gradient(to right, #fff, var(--_hue-color, hsl(0, 100%, 50%)));\n pointer-events: none;\n }\n\n .gradient-thumb {\n position: absolute;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n /* A11y fix (WCAG 1.4.11): double-ring ensures thumb visibility on light hue backgrounds\n (yellow, cyan) where a white-only border falls below 3:1 non-text contrast.\n Inner dark ring at 1px provides contrast against light backgrounds;\n outer white ring at 2px provides contrast against dark backgrounds. */\n border: none;\n box-shadow:\n 0 0 0 2px var(--hx-color-picker-thumb-border, var(--hx-color-neutral-0, #fff)),\n 0 0 0 3px var(--hx-color-picker-thumb-shadow, var(--hx-overlay-black-30, rgba(0, 0, 0, 0.3)));\n transform: translate(-50%, -50%);\n pointer-events: none;\n top: var(--_thumb-y, 0%);\n left: var(--_thumb-x, 100%);\n }\n\n /* ─── Sliders ─── */\n\n .slider-track {\n position: relative;\n width: 100%;\n height: 12px;\n border-radius: 6px;\n cursor: pointer;\n touch-action: none;\n flex-shrink: 0;\n }\n\n .slider-track:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #2563eb);\n outline-offset: var(--hx-focus-ring-offset, 2px);\n }\n\n .hue-track {\n background: linear-gradient(\n to right,\n hsl(0, 100%, 50%),\n hsl(30, 100%, 50%),\n hsl(60, 100%, 50%),\n hsl(90, 100%, 50%),\n hsl(120, 100%, 50%),\n hsl(150, 100%, 50%),\n hsl(180, 100%, 50%),\n hsl(210, 100%, 50%),\n hsl(240, 100%, 50%),\n hsl(270, 100%, 50%),\n hsl(300, 100%, 50%),\n hsl(330, 100%, 50%),\n hsl(360, 100%, 50%)\n );\n }\n\n .opacity-track {\n background-image:\n linear-gradient(to right, transparent, var(--_hue-color, hsl(0, 100%, 50%))),\n repeating-conic-gradient(#ccc 0% 25%, #fff 0% 50%) 0 0 / 12px 12px;\n }\n\n .slider-thumb {\n position: absolute;\n top: 50%;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n /* A11y fix (WCAG 1.4.11): double-ring ensures thumb visibility on light hue backgrounds\n (yellow, cyan) where a white-only border falls below 3:1 non-text contrast.\n Inner dark ring at 1px provides contrast against light backgrounds;\n outer white ring at 2px provides contrast against dark backgrounds. */\n border: none;\n box-shadow:\n 0 0 0 2px var(--hx-color-picker-thumb-border, var(--hx-color-neutral-0, #fff)),\n 0 0 0 3px var(--hx-color-picker-thumb-shadow, var(--hx-overlay-black-30, rgba(0, 0, 0, 0.3)));\n transform: translate(-50%, -50%);\n pointer-events: none;\n left: var(--_slider-pct, 0%);\n background: var(--_thumb-color, hsl(0, 100%, 50%));\n }\n\n /* ─── Swatches ─── */\n\n .swatches {\n display: flex;\n flex-wrap: wrap;\n gap: var(--hx-space-1, 0.25rem);\n }\n\n .swatch-btn {\n width: 20px;\n height: 20px;\n border-radius: var(--hx-border-radius-sm, 0.25rem);\n /* P1-6: was hardcoded rgba(0,0,0,0.1) */\n border: var(--hx-border-width-thin, 1px) solid\n var(--hx-color-picker-swatch-border, var(--hx-overlay-black-10, rgba(0, 0, 0, 0.1)));\n cursor: pointer;\n padding: 0;\n flex-shrink: 0;\n transition: transform var(--hx-transition-fast, 0.15s ease);\n }\n\n .swatch-btn:hover {\n transform: scale(1.15);\n /* P1-6: was hardcoded rgba(0,0,0,0.3) */\n border-color: var(\n --hx-color-picker-swatch-border-hover,\n var(--hx-overlay-black-30, rgba(0, 0, 0, 0.3))\n );\n }\n\n .swatch-btn:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #2563eb);\n outline-offset: var(--hx-focus-ring-offset, 2px);\n }\n\n /* ─── Input ─── */\n\n .input-area {\n display: flex;\n align-items: center;\n gap: var(--hx-space-2, 0.5rem);\n }\n\n .format-btn {\n flex-shrink: 0;\n padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);\n background: var(--hx-color-neutral-100, #f3f4f6);\n border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #d1d5db);\n border-radius: var(--hx-border-radius-sm, 0.25rem);\n cursor: pointer;\n font-size: var(--hx-font-size-xs, 0.75rem);\n color: var(--hx-color-neutral-600, #4b5563);\n text-transform: uppercase;\n font-weight: var(--hx-font-weight-semibold, 600);\n letter-spacing: 0.05em;\n }\n\n .format-btn:focus-visible {\n outline: var(--hx-focus-ring-width, 2px) solid var(--hx-focus-ring-color, #2563eb);\n outline-offset: var(--hx-focus-ring-offset, 2px);\n }\n\n .color-input {\n flex: 1;\n min-width: 0;\n padding: var(--hx-space-1, 0.25rem) var(--hx-space-2, 0.5rem);\n border: var(--hx-border-width-thin, 1px) solid var(--hx-color-neutral-300, #d1d5db);\n border-radius: var(--hx-border-radius-sm, 0.25rem);\n font-family: var(--hx-font-family-mono, monospace);\n font-size: var(--hx-font-size-sm, 0.875rem);\n color: var(--hx-color-neutral-900, #111827);\n background: var(--hx-color-neutral-0, #fff);\n outline: none;\n }\n\n .color-input:focus {\n border-color: var(--hx-focus-ring-color, #2563eb);\n /* P1-5: was invalid \"box-shadow: ... / 0.2\" syntax; replaced with valid box-shadow */\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--hx-focus-ring-color, #2563eb) 20%, transparent);\n }\n\n /* ─── Color preview strip in input area ─── */\n\n .input-preview {\n width: 24px;\n height: 24px;\n border-radius: var(--hx-border-radius-sm, 0.25rem);\n /* P1-6: was hardcoded rgba(0,0,0,0.1) */\n border: var(--hx-border-width-thin, 1px) solid\n var(--hx-color-picker-swatch-border, var(--hx-overlay-black-10, rgba(0, 0, 0, 0.1)));\n background: var(--_preview-color, #000);\n flex-shrink: 0;\n }\n\n /* ─── Reduced Motion ─── */\n\n @media (prefers-reduced-motion: reduce) {\n .trigger,\n .swatch-btn {\n transition: none;\n }\n }\n`;\n","import { LitElement, html, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { tokenStyles } from '@helixui/tokens/lit';\nimport { helixColorPickerStyles } from './hx-color-picker.styles.js';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type ColorFormat = 'hex' | 'rgb' | 'hsl' | 'hsv';\n\ninterface HSV {\n h: number; // 0-360\n s: number; // 0-100\n v: number; // 0-100\n a: number; // 0-1\n}\n\ninterface RGB {\n r: number; // 0-255\n g: number; // 0-255\n b: number; // 0-255\n a: number; // 0-1\n}\n\n// ─── Color utilities ──────────────────────────────────────────────────────────\n\nfunction clamp(n: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, n));\n}\n\nfunction hexToRgb(hex: string): RGB | null {\n let h = hex.trim().replace(/^#/, '');\n if (h.length === 3) h = h.replace(/(.)/g, '$1$1');\n if (h.length === 4) h = h.replace(/(.)/g, '$1$1');\n if (h.length === 6) h += 'ff';\n if (h.length !== 8) return null;\n const n = parseInt(h, 16);\n if (isNaN(n)) return null;\n return {\n r: (n >>> 24) & 0xff,\n g: (n >>> 16) & 0xff,\n b: (n >>> 8) & 0xff,\n a: (n & 0xff) / 255,\n };\n}\n\nfunction toHex2(n: number): string {\n return Math.round(clamp(n, 0, 255))\n .toString(16)\n .padStart(2, '0');\n}\n\nfunction rgbToHex(rgb: RGB, includeAlpha: boolean): string {\n const base = `#${toHex2(rgb.r)}${toHex2(rgb.g)}${toHex2(rgb.b)}`;\n if (includeAlpha && rgb.a < 1) return base + toHex2(rgb.a * 255);\n return base;\n}\n\nfunction rgbToHsv(rgb: RGB): HSV {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const d = max - min;\n const s = max === 0 ? 0 : d / max;\n const v = max;\n let h = 0;\n if (d !== 0) {\n if (max === r) h = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n else if (max === g) h = ((b - r) / d + 2) / 6;\n else h = ((r - g) / d + 4) / 6;\n }\n return { h: h * 360, s: s * 100, v: v * 100, a: rgb.a };\n}\n\nfunction hsvToRgb(hsv: HSV): RGB {\n const h = hsv.h / 360;\n const s = hsv.s / 100;\n const v = hsv.v / 100;\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n let r = 0;\n let g = 0;\n let b = 0;\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n }\n return { r: Math.round(r * 255), g: Math.round(g * 255), b: Math.round(b * 255), a: hsv.a };\n}\n\nfunction rgbToHsl(rgb: RGB): { h: number; s: number; l: number; a: number } {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h = 0;\n let s = 0;\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n if (max === r) h = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n else if (max === g) h = ((b - r) / d + 2) / 6;\n else h = ((r - g) / d + 4) / 6;\n }\n return { h: h * 360, s: s * 100, l: l * 100, a: rgb.a };\n}\n\n// P2-1: parseColor now handles HSV/HSVA input strings for round-trip correctness\nfunction parseColor(value: string): HSV | null {\n if (!value) return null;\n\n if (value.startsWith('#')) {\n const rgb = hexToRgb(value);\n return rgb ? rgbToHsv(rgb) : null;\n }\n\n const rgbMatch = value.match(\n /rgba?\\(\\s*(\\d+)(?:\\s*,\\s*|\\s+)(\\d+)(?:\\s*,\\s*|\\s+)(\\d+)(?:\\s*(?:\\/|,)\\s*([\\d.]+))?\\s*\\)/,\n );\n if (rgbMatch) {\n const [, rm1, rm2, rm3, rm4] = rgbMatch;\n return rgbToHsv({\n r: parseInt(rm1 ?? '0', 10),\n g: parseInt(rm2 ?? '0', 10),\n b: parseInt(rm3 ?? '0', 10),\n a: rm4 !== undefined ? parseFloat(rm4) : 1,\n });\n }\n\n const hslMatch = value.match(\n /hsla?\\(\\s*([\\d.]+)(?:\\s*,\\s*|\\s+)([\\d.]+)%(?:\\s*,\\s*|\\s+)([\\d.]+)%(?:\\s*(?:\\/|,)\\s*([\\d.]+))?\\s*\\)/,\n );\n if (hslMatch) {\n const [, hm1, hm2, hm3, hm4] = hslMatch;\n const h = parseFloat(hm1 ?? '0');\n const s = parseFloat(hm2 ?? '0') / 100;\n const l = parseFloat(hm3 ?? '0') / 100;\n const a = hm4 !== undefined ? parseFloat(hm4) : 1;\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = l - c / 2;\n let r = 0;\n let g = 0;\n let b = 0;\n if (h < 60) {\n r = c;\n g = x;\n } else if (h < 120) {\n r = x;\n g = c;\n } else if (h < 180) {\n g = c;\n b = x;\n } else if (h < 240) {\n g = x;\n b = c;\n } else if (h < 300) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n return rgbToHsv({\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255),\n a,\n });\n }\n\n // P2-1: Support HSV/HSVA input strings (component's own output format)\n const hsvMatch = value.match(\n /hsva?\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)%\\s*,\\s*([\\d.]+)%(?:\\s*,\\s*([\\d.]+))?\\s*\\)/,\n );\n if (hsvMatch) {\n const [, hm1, hm2, hm3, hm4] = hsvMatch;\n return {\n h: parseFloat(hm1 ?? '0'),\n s: parseFloat(hm2 ?? '0'),\n v: parseFloat(hm3 ?? '0'),\n a: hm4 !== undefined ? parseFloat(hm4) : 1,\n };\n }\n\n return null;\n}\n\nfunction formatColor(hsv: HSV, format: ColorFormat, includeAlpha: boolean): string {\n const rgb = hsvToRgb(hsv);\n switch (format) {\n case 'hex':\n return rgbToHex(rgb, includeAlpha);\n case 'rgb': {\n if (includeAlpha && hsv.a < 1) {\n return `rgb(${rgb.r} ${rgb.g} ${rgb.b} / ${Math.round(hsv.a * 100) / 100})`;\n }\n return `rgb(${rgb.r} ${rgb.g} ${rgb.b})`;\n }\n case 'hsl': {\n const hsl = rgbToHsl(rgb);\n if (includeAlpha && hsv.a < 1) {\n return `hsl(${Math.round(hsl.h)} ${Math.round(hsl.s)}% ${Math.round(hsl.l)}% / ${Math.round(hsv.a * 100) / 100})`;\n }\n return `hsl(${Math.round(hsl.h)} ${Math.round(hsl.s)}% ${Math.round(hsl.l)}%)`;\n }\n case 'hsv': {\n if (includeAlpha && hsv.a < 1) {\n return `hsva(${Math.round(hsv.h)}, ${Math.round(hsv.s)}%, ${Math.round(hsv.v)}%, ${Math.round(hsv.a * 100) / 100})`;\n }\n return `hsv(${Math.round(hsv.h)}, ${Math.round(hsv.s)}%, ${Math.round(hsv.v)}%)`;\n }\n }\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * A color picker control with gradient picker, hue/opacity sliders, swatches,\n * and formatted text input. Supports hex, rgb, hsl, and hsv output formats.\n *\n * @summary Color selection control with swatches, gradient picker, and formatted input.\n *\n * @tag hx-color-picker\n *\n * @slot trigger - Custom trigger element. Default: a color swatch button.\n *\n * @fires {CustomEvent<{value: string}>} hx-input - Dispatched while dragging sliders or grid.\n * @fires {CustomEvent<{value: string}>} hx-change - Dispatched when a color is committed.\n *\n * @csspart trigger - The trigger button element.\n * @csspart swatches - The swatch color buttons container.\n * @csspart grid - The 2D saturation/value gradient picker area.\n * @csspart slider - Shared slider container (also on hue-slider and opacity-slider).\n * @csspart hue-slider - The hue slider track.\n * @csspart opacity-slider - The alpha/opacity slider track.\n * @csspart input - The text input area.\n *\n * @cssprop [--hx-color-picker-z-index=1000] - z-index of the popover panel.\n * @cssprop [--hx-color-picker-width=260px] - Width of the picker panel.\n * @cssprop [--hx-color-picker-grid-height=160px] - Height of the gradient grid.\n * @cssprop [--hx-color-picker-thumb-border=#fff] - Border color of slider/grid thumbs.\n * @cssprop [--hx-color-picker-thumb-shadow=rgba(0,0,0,0.3)] - Shadow color of slider/grid thumbs.\n * @cssprop [--hx-color-picker-panel-shadow=rgba(0,0,0,0.15)] - Panel drop-shadow color.\n * @cssprop [--hx-color-picker-swatch-border=rgba(0,0,0,0.1)] - Swatch button border color.\n * @cssprop [--hx-color-picker-swatch-border-hover=rgba(0,0,0,0.3)] - Swatch button border on hover.\n *\n * @example\n * ```html\n * <hx-color-picker value=\"#3b82f6\" format=\"hex\"></hx-color-picker>\n * ```\n *\n * @example Drupal / Twig usage\n * The `swatches` property must be set via JavaScript (Drupal behavior) because arrays\n * cannot be serialized as HTML attributes:\n * ```js\n * // my-theme/js/color-picker-behavior.js\n * Drupal.behaviors.helixColorPicker = {\n * attach(context) {\n * context.querySelectorAll('hx-color-picker[data-swatches]').forEach((el) => {\n * el.swatches = JSON.parse(el.dataset.swatches);\n * });\n * },\n * };\n * ```\n * ```twig\n * <hx-color-picker\n * value=\"{{ color }}\"\n * data-swatches='{{ swatches | json_encode }}'\n * ></hx-color-picker>\n * ```\n */\n@customElement('hx-color-picker')\nexport class HelixColorPicker extends LitElement {\n static override styles = [tokenStyles, helixColorPickerStyles];\n\n /** @internal */\n static formAssociated = true;\n\n /** @internal */\n private _internals: ElementInternals;\n\n constructor() {\n super();\n this._internals = this.attachInternals();\n // P1-1: Store bound references so connectedCallback/disconnectedCallback use the same object\n this._boundPointerMove = this._handlePointerMove.bind(this);\n this._boundPointerUp = this._handlePointerUp.bind(this);\n this._boundDocumentClick = this._handleDocumentClick.bind(this);\n }\n\n // ─── Public Properties ───────────────────────────────────────────────────\n\n /**\n * Current color value as a CSS color string.\n * @attr value\n */\n @property({ type: String, reflect: true })\n value = '#000000';\n\n /**\n * Output format for the color value.\n * @attr format\n */\n @property({ type: String, reflect: true })\n format: ColorFormat = 'hex';\n\n /**\n * Whether to show the alpha/opacity channel slider and include alpha in the output.\n * @attr opacity\n */\n @property({ type: Boolean, reflect: true })\n opacity = false;\n\n /**\n * Array of preset swatch color strings.\n * Set via JS property only — arrays cannot be serialized as HTML attributes.\n * In Drupal/Twig, use a behavior to read `data-swatches` and set this property.\n * See JSDoc example above.\n */\n @property({ attribute: false })\n swatches: string[] = [];\n\n /**\n * When true, hides the gradient grid and sliders, showing only swatches and the input.\n * Useful for compact preset-only color selection UIs.\n * @attr swatches-only\n */\n @property({ type: Boolean, reflect: true, attribute: 'swatches-only' })\n swatchesOnly = false;\n\n /**\n * Whether the control is disabled.\n * @attr disabled\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * Form field name for form participation.\n * @attr name\n */\n @property({ type: String, reflect: true })\n name = '';\n\n /**\n * When true the picker is shown inline instead of in a popover.\n * @attr inline\n */\n @property({ type: Boolean, reflect: true })\n inline = false;\n\n // ─── Internal State ──────────────────────────────────────────────────────\n\n /** @internal */\n @state() private _hsv: HSV = { h: 0, s: 0, v: 0, a: 1 };\n /** @internal */\n @state() private _open = false;\n /** @internal */\n @state() private _inputValue = '#000000';\n\n // ─── Dragging state (not reactive, managed manually) ─────────────────────\n\n /** @internal */\n private _draggingGrid = false;\n /** @internal */\n private _draggingHue = false;\n /** @internal */\n private _draggingOpacity = false;\n\n // P1-1: Stored bound references to prevent memory leaks\n /** @internal */\n private _boundPointerMove: (e: PointerEvent) => void;\n /** @internal */\n private _boundPointerUp: () => void;\n private _boundDocumentClick: (e: MouseEvent) => void;\n\n // ─── Lifecycle ───────────────────────────────────────────────────────────\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._syncFromValue();\n // P1-1: Use stored bound references (not inline .bind() which creates new objects)\n document.addEventListener('click', this._boundDocumentClick, true);\n document.addEventListener('pointermove', this._boundPointerMove);\n document.addEventListener('pointerup', this._boundPointerUp);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n // P1-1: Remove using the same stored references added in connectedCallback\n document.removeEventListener('click', this._boundDocumentClick, true);\n document.removeEventListener('pointermove', this._boundPointerMove);\n document.removeEventListener('pointerup', this._boundPointerUp);\n }\n\n override willUpdate(changedProperties: Map<string, unknown>): void {\n if (changedProperties.has('value')) {\n this._syncFromValue();\n }\n }\n\n // ─── Sync ────────────────────────────────────────────────────────────────\n\n private _syncFromValue(): void {\n const parsed = parseColor(this.value);\n if (parsed) {\n this._hsv = parsed;\n }\n this._inputValue = formatColor(this._hsv, this.format, this.opacity);\n this._internals.setFormValue(this.value);\n }\n\n /** Called when a parent fieldset is disabled/enabled. */\n formDisabledCallback(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n private _commit(source: 'drag' | 'change'): void {\n const formatted = formatColor(this._hsv, this.format, this.opacity);\n this.value = formatted;\n this._inputValue = formatted;\n this._internals.setFormValue(formatted);\n const detail = { value: formatted };\n const opts: CustomEventInit<{ value: string }> = {\n bubbles: true,\n composed: true,\n detail,\n };\n if (source === 'drag') {\n this.dispatchEvent(new CustomEvent('hx-input', opts));\n } else {\n this.dispatchEvent(new CustomEvent('hx-change', opts));\n }\n }\n\n // ─── Panel open/close ────────────────────────────────────────────────────\n\n private _show(): void {\n if (this._open || this.inline) return;\n this._open = true;\n }\n\n private _hide(): void {\n if (!this._open) return;\n this._open = false;\n }\n\n private _handleDocumentClick(e: MouseEvent): void {\n if (!this._open) return;\n if (!e.composedPath().includes(this)) {\n this._hide();\n }\n }\n\n private _handleTriggerClick(e: MouseEvent): void {\n e.stopPropagation();\n if (this._open) {\n this._hide();\n } else {\n this._show();\n }\n }\n\n private _handlePanelKeydown(e: KeyboardEvent): void {\n if (e.key === 'Escape') {\n e.stopPropagation();\n this._hide();\n this.shadowRoot?.querySelector<HTMLElement>('[part=\"trigger\"]')?.focus();\n }\n }\n\n // ─── Gradient grid dragging ───────────────────────────────────────────────\n\n private _handleGridPointerDown(e: PointerEvent): void {\n if (this.disabled) return;\n e.preventDefault();\n this._draggingGrid = true;\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n this._updateGridFromPointer(e);\n }\n\n private _updateGridFromPointer(e: PointerEvent): void {\n const grid = this.shadowRoot?.querySelector<HTMLElement>('[part=\"grid\"]');\n if (!grid) return;\n const rect = grid.getBoundingClientRect();\n const x = clamp((e.clientX - rect.left) / rect.width, 0, 1);\n const y = clamp((e.clientY - rect.top) / rect.height, 0, 1);\n this._hsv = { ...this._hsv, s: x * 100, v: (1 - y) * 100 };\n this._commit('drag');\n this.requestUpdate();\n }\n\n // P0-1: Keyboard support for gradient grid — fixes WCAG 2.1 SC 2.1.1 failure\n private _handleGridKeydown(e: KeyboardEvent): void {\n let sDelta = 0;\n let vDelta = 0;\n if (e.key === 'ArrowLeft') sDelta = -1;\n else if (e.key === 'ArrowRight') sDelta = 1;\n else if (e.key === 'ArrowUp') vDelta = 1;\n else if (e.key === 'ArrowDown') vDelta = -1;\n else if (e.key === 'PageUp') vDelta = 10;\n else if (e.key === 'PageDown') vDelta = -10;\n else if (e.key === 'Home') {\n this._hsv = { ...this._hsv, s: 0, v: 100 };\n this._commit('change');\n return;\n } else if (e.key === 'End') {\n this._hsv = { ...this._hsv, s: 100, v: 0 };\n this._commit('change');\n return;\n }\n if (sDelta !== 0 || vDelta !== 0) {\n e.preventDefault();\n this._hsv = {\n ...this._hsv,\n s: clamp(this._hsv.s + sDelta, 0, 100),\n v: clamp(this._hsv.v + vDelta, 0, 100),\n };\n this._commit('change');\n }\n }\n\n // ─── Hue slider dragging ─────────────────────────────────────────────────\n\n private _handleHuePointerDown(e: PointerEvent): void {\n if (this.disabled) return;\n e.preventDefault();\n this._draggingHue = true;\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n this._updateHueFromPointer(e);\n }\n\n private _updateHueFromPointer(e: PointerEvent): void {\n const track = this.shadowRoot?.querySelector<HTMLElement>('[part=\"hue-slider\"]');\n if (!track) return;\n const rect = track.getBoundingClientRect();\n const pct = clamp((e.clientX - rect.left) / rect.width, 0, 1);\n this._hsv = { ...this._hsv, h: pct * 360 };\n this._commit('drag');\n this.requestUpdate();\n }\n\n // ─── Opacity slider dragging ──────────────────────────────────────────────\n\n private _handleOpacityPointerDown(e: PointerEvent): void {\n if (this.disabled) return;\n e.preventDefault();\n this._draggingOpacity = true;\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n this._updateOpacityFromPointer(e);\n }\n\n private _updateOpacityFromPointer(e: PointerEvent): void {\n const track = this.shadowRoot?.querySelector<HTMLElement>('[part=\"opacity-slider\"]');\n if (!track) return;\n const rect = track.getBoundingClientRect();\n const pct = clamp((e.clientX - rect.left) / rect.width, 0, 1);\n this._hsv = { ...this._hsv, a: pct };\n this._commit('drag');\n this.requestUpdate();\n }\n\n // ─── Document-level pointer handlers ─────────────────────────────────────\n\n private _handlePointerMove(e: PointerEvent): void {\n if (this._draggingGrid) this._updateGridFromPointer(e);\n else if (this._draggingHue) this._updateHueFromPointer(e);\n else if (this._draggingOpacity) this._updateOpacityFromPointer(e);\n }\n\n private _handlePointerUp(): void {\n if (this._draggingGrid || this._draggingHue || this._draggingOpacity) {\n this._draggingGrid = false;\n this._draggingHue = false;\n this._draggingOpacity = false;\n this._commit('change');\n }\n }\n\n // ─── Keyboard handling for sliders ───────────────────────────────────────\n\n private _handleHueKeydown(e: KeyboardEvent): void {\n let delta = 0;\n if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') delta = -1;\n else if (e.key === 'ArrowRight' || e.key === 'ArrowUp') delta = 1;\n else if (e.key === 'PageDown') delta = -10;\n else if (e.key === 'PageUp') delta = 10;\n else if (e.key === 'Home') {\n this._hsv = { ...this._hsv, h: 0 };\n this._commit('change');\n return;\n } else if (e.key === 'End') {\n this._hsv = { ...this._hsv, h: 360 };\n this._commit('change');\n return;\n }\n if (delta !== 0) {\n e.preventDefault();\n this._hsv = { ...this._hsv, h: clamp(this._hsv.h + delta, 0, 360) };\n this._commit('change');\n }\n }\n\n private _handleOpacityKeydown(e: KeyboardEvent): void {\n let delta = 0;\n if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') delta = -0.01;\n else if (e.key === 'ArrowRight' || e.key === 'ArrowUp') delta = 0.01;\n else if (e.key === 'PageDown') delta = -0.1;\n else if (e.key === 'PageUp') delta = 0.1;\n else if (e.key === 'Home') {\n this._hsv = { ...this._hsv, a: 0 };\n this._commit('change');\n return;\n } else if (e.key === 'End') {\n this._hsv = { ...this._hsv, a: 1 };\n this._commit('change');\n return;\n }\n if (delta !== 0) {\n e.preventDefault();\n this._hsv = { ...this._hsv, a: clamp(this._hsv.a + delta, 0, 1) };\n this._commit('change');\n }\n }\n\n // ─── Input ───────────────────────────────────────────────────────────────\n\n // P1-7: Bound to @input (was @change) for real-time color preview while typing\n private _handleInputChange(e: Event): void {\n const input = e.target as HTMLInputElement;\n const parsed = parseColor(input.value.trim());\n if (parsed) {\n this._hsv = parsed;\n this._commit('change');\n }\n this._inputValue = input.value;\n }\n\n private _handleInputBlur(e: FocusEvent): void {\n const input = e.target as HTMLInputElement;\n const parsed = parseColor(input.value.trim());\n if (parsed) {\n this._hsv = parsed;\n this._commit('change');\n } else {\n // Revert to current valid value\n this._inputValue = formatColor(this._hsv, this.format, this.opacity);\n }\n }\n\n private _handleFormatCycle(): void {\n const formats: ColorFormat[] = ['hex', 'rgb', 'hsl', 'hsv'];\n const idx = formats.indexOf(this.format);\n const next = formats[(idx + 1) % formats.length];\n if (next !== undefined) this.format = next;\n this._inputValue = formatColor(this._hsv, this.format, this.opacity);\n }\n\n // ─── Swatches ────────────────────────────────────────────────────────────\n\n private _handleSwatchClick(color: string): void {\n const parsed = parseColor(color);\n if (parsed) {\n this._hsv = parsed;\n this._commit('change');\n }\n }\n\n // ─── Computed values ──────────────────────────────────────────────────────\n\n private _hueColor(): string {\n return `hsl(${Math.round(this._hsv.h)}, 100%, 50%)`;\n }\n\n private _previewColor(): string {\n const rgb = hsvToRgb(this._hsv);\n if (this.opacity && this._hsv.a < 1) {\n return `rgb(${rgb.r} ${rgb.g} ${rgb.b} / ${Math.round(this._hsv.a * 100) / 100})`;\n }\n return `rgb(${rgb.r} ${rgb.g} ${rgb.b})`;\n }\n\n // ─── Render helpers ───────────────────────────────────────────────────────\n\n private _renderGrid() {\n const thumbX = `${this._hsv.s}%`;\n const thumbY = `${100 - this._hsv.v}%`;\n const hueColor = this._hueColor();\n\n // P0-1: Grid is now keyboard-operable — WCAG 2.1 SC 2.1.1 compliance\n // Arrow keys adjust saturation (left/right) and value (up/down)\n //\n // A11y note (WCAG 4.1.2 — 2D slider aria-valuenow limitation): The ARIA slider role\n // requires a single numeric aria-valuenow. This 2D control has two axes (saturation and\n // value), so aria-valuenow reports only saturation (the primary/horizontal axis) per\n // the ARIA 1.2 \"slider\" pattern. aria-valuetext compensates by announcing both axes\n // (\"Saturation X%, Value Y%\") for all assistive technologies that support it.\n return html`\n <div\n part=\"grid\"\n class=\"gradient-grid\"\n role=\"slider\"\n tabindex=\"0\"\n aria-label=\"Color gradient\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow=${Math.round(this._hsv.s)}\n aria-valuetext=\"Saturation ${Math.round(this._hsv.s)}%, Value ${Math.round(this._hsv.v)}%\"\n @pointerdown=${this._handleGridPointerDown}\n @keydown=${this._handleGridKeydown}\n >\n <div class=\"gradient-grid-bg\" style=${styleMap({ '--_hue-color': hueColor })}></div>\n <div\n class=\"gradient-thumb\"\n style=${styleMap({ '--_thumb-x': thumbX, '--_thumb-y': thumbY })}\n aria-hidden=\"true\"\n ></div>\n </div>\n `;\n }\n\n private _renderHueSlider() {\n const pct = `${(this._hsv.h / 360) * 100}%`;\n const hueColor = this._hueColor();\n\n // P1-8: part=\"slider hue-slider\" — exposes the documented shared \"slider\" CSS part\n // P1-4: aria-valuetext announces the hue angle with degree symbol\n return html`\n <div\n part=\"slider hue-slider\"\n class=\"slider-track hue-track\"\n role=\"slider\"\n tabindex=\"0\"\n aria-label=\"Hue\"\n aria-valuemin=\"0\"\n aria-valuemax=\"360\"\n aria-valuenow=${Math.round(this._hsv.h)}\n aria-valuetext=\"${Math.round(this._hsv.h)}°\"\n @pointerdown=${this._handleHuePointerDown}\n @keydown=${this._handleHueKeydown}\n >\n <div\n class=\"slider-thumb\"\n style=${styleMap({ '--_slider-pct': pct, '--_thumb-color': hueColor })}\n aria-hidden=\"true\"\n ></div>\n </div>\n `;\n }\n\n private _renderOpacitySlider() {\n if (!this.opacity) return nothing;\n const pct = `${this._hsv.a * 100}%`;\n const rgb = hsvToRgb(this._hsv);\n const thumbColor = `rgb(${rgb.r} ${rgb.g} ${rgb.b} / ${Math.round(this._hsv.a * 100) / 100})`;\n const hueColor = this._hueColor();\n\n // P1-8: part=\"slider opacity-slider\" — exposes the documented shared \"slider\" CSS part\n // P1-4: aria-valuetext announces the opacity as a percentage\n return html`\n <div\n part=\"slider opacity-slider\"\n class=\"slider-track opacity-track\"\n role=\"slider\"\n tabindex=\"0\"\n aria-label=\"Opacity\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow=${Math.round(this._hsv.a * 100)}\n aria-valuetext=\"${Math.round(this._hsv.a * 100)}%\"\n style=${styleMap({ '--_hue-color': hueColor })}\n @pointerdown=${this._handleOpacityPointerDown}\n @keydown=${this._handleOpacityKeydown}\n >\n <div\n class=\"slider-thumb\"\n style=${styleMap({ '--_slider-pct': pct, '--_thumb-color': thumbColor })}\n aria-hidden=\"true\"\n ></div>\n </div>\n `;\n }\n\n private _renderSwatches() {\n if (!this.swatches?.length) return nothing;\n return html`\n <div part=\"swatches\" class=\"swatches\" role=\"group\" aria-label=\"Preset colors\">\n ${this.swatches.map(\n (color) => html`\n <button\n type=\"button\"\n class=\"swatch-btn\"\n style=${styleMap({ background: color })}\n aria-label=${color}\n title=${color}\n @click=${() => this._handleSwatchClick(color)}\n ></button>\n `,\n )}\n </div>\n `;\n }\n\n private _renderInput() {\n return html`\n <div part=\"input\" class=\"input-area\">\n <div\n class=\"input-preview\"\n style=${styleMap({ '--_preview-color': this._previewColor() })}\n aria-hidden=\"true\"\n ></div>\n <button\n type=\"button\"\n class=\"format-btn\"\n aria-label=\"Switch color format\"\n title=\"Switch format\"\n @click=${this._handleFormatCycle}\n >\n ${this.format}\n </button>\n <input\n type=\"text\"\n class=\"color-input\"\n .value=${this._inputValue}\n aria-label=\"Color value\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n @input=${this._handleInputChange}\n @blur=${this._handleInputBlur}\n />\n </div>\n `;\n }\n\n private _renderPanel() {\n // A11y fix (WCAG 4.1.2): use role=\"group\" instead of role=\"dialog\" + aria-modal=\"true\".\n // aria-modal=\"true\" requires a programmatic focus trap so screen readers restrict virtual\n // cursor navigation to the dialog. Without Tab-key trapping, aria-modal causes JAWS/NVDA\n // to hide all content outside the panel, stranding keyboard users who Tab out. role=\"group\"\n // with aria-label provides the same grouping semantics without the false modal contract.\n return html`\n <div\n class=\"panel\"\n role=\"group\"\n aria-label=\"Color picker\"\n tabindex=\"-1\"\n @keydown=${this._handlePanelKeydown}\n >\n ${this.swatchesOnly\n ? nothing\n : html`${this._renderGrid()} ${this._renderHueSlider()} ${this._renderOpacitySlider()}`}\n ${this._renderSwatches()} ${this._renderInput()}\n </div>\n `;\n }\n\n // ─── Main render ─────────────────────────────────────────────────────────\n\n override render() {\n const previewColor = this._previewColor();\n\n if (this.inline) {\n return html`\n <div style=${styleMap({ '--_preview-color': previewColor })}>${this._renderPanel()}</div>\n `;\n }\n\n // P1-3: aria-label includes the current color value so AT users know the selected color\n return html`\n <button\n part=\"trigger\"\n type=\"button\"\n class=\"trigger\"\n aria-label=\"Choose color: ${this._inputValue}\"\n aria-expanded=${this._open ? 'true' : 'false'}\n ?disabled=${this.disabled}\n style=${styleMap({ '--_preview-color': previewColor })}\n @click=${this._handleTriggerClick}\n >\n <slot name=\"trigger\">\n <span class=\"trigger-swatch\" aria-hidden=\"true\"></span>\n <span class=\"trigger-label\">${this._inputValue}</span>\n </slot>\n </button>\n ${this._open ? this._renderPanel() : nothing}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'hx-color-picker': HelixColorPicker;\n }\n}\n"],"names":["helixColorPickerStyles","css","clamp","n","min","max","hexToRgb","hex","h","toHex2","rgbToHex","rgb","includeAlpha","base","rgbToHsv","r","g","b","d","s","v","hsvToRgb","hsv","i","f","p","q","t","rgbToHsl","l","parseColor","value","rgbMatch","rm1","rm2","rm3","rm4","hslMatch","hm1","hm2","hm3","hm4","a","c","x","m","hsvMatch","formatColor","format","hsl","HelixColorPicker","LitElement","changedProperties","parsed","disabled","source","formatted","opts","e","_b","_a","grid","rect","y","sDelta","vDelta","track","pct","delta","input","formats","idx","next","color","thumbX","thumbY","hueColor","html","styleMap","nothing","thumbColor","previewColor","tokenStyles","__decorateClass","property","state","customElement"],"mappings":";;;;AAEO,MAAMA,IAAyBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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"}