@techzyapp/ui-library 1.0.8 → 1.0.10

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 (333) hide show
  1. package/dist/{Alert-BL8hDdEl.js → Alert-B3rDvpbO.js} +3 -3
  2. package/dist/{Alert-BL8hDdEl.js.map → Alert-B3rDvpbO.js.map} +1 -1
  3. package/dist/{Alert-C9yBIMq0.cjs → Alert-D99G0StL.cjs} +2 -2
  4. package/dist/{Alert-C9yBIMq0.cjs.map → Alert-D99G0StL.cjs.map} +1 -1
  5. package/dist/AuthLayout-DGCe90w0.js +43 -0
  6. package/dist/AuthLayout-DGCe90w0.js.map +1 -0
  7. package/dist/AuthLayout-pvqB9w-B.cjs +2 -0
  8. package/dist/AuthLayout-pvqB9w-B.cjs.map +1 -0
  9. package/dist/{Breadcrumbs-DhBx2UgK.cjs → Breadcrumbs-BnxhmyK5.cjs} +2 -2
  10. package/dist/{Breadcrumbs-DhBx2UgK.cjs.map → Breadcrumbs-BnxhmyK5.cjs.map} +1 -1
  11. package/dist/{Breadcrumbs-BC_QSlJZ.js → Breadcrumbs-DvgctFLS.js} +3 -3
  12. package/dist/{Breadcrumbs-BC_QSlJZ.js.map → Breadcrumbs-DvgctFLS.js.map} +1 -1
  13. package/dist/{Button-BT8XmR_T.js → Button-CUsXYM-m.js} +2 -2
  14. package/dist/{Button-BT8XmR_T.js.map → Button-CUsXYM-m.js.map} +1 -1
  15. package/dist/{Button-C_HPI97g.cjs → Button-Cj6pckNl.cjs} +2 -2
  16. package/dist/{Button-C_HPI97g.cjs.map → Button-Cj6pckNl.cjs.map} +1 -1
  17. package/dist/{Calendar-CCCife5b.cjs → Calendar-Br4C0x0n.cjs} +2 -2
  18. package/dist/{Calendar-CCCife5b.cjs.map → Calendar-Br4C0x0n.cjs.map} +1 -1
  19. package/dist/{Calendar-B9mXn_zD.js → Calendar-CE_9WNAB.js} +3 -3
  20. package/dist/{Calendar-B9mXn_zD.js.map → Calendar-CE_9WNAB.js.map} +1 -1
  21. package/dist/{Card-DfVntHqn.cjs → Card-DD9SWHzZ.cjs} +2 -2
  22. package/dist/{Card-DfVntHqn.cjs.map → Card-DD9SWHzZ.cjs.map} +1 -1
  23. package/dist/{Card-DHPAefzg.js → Card-DhpudGvF.js} +2 -2
  24. package/dist/{Card-DHPAefzg.js.map → Card-DhpudGvF.js.map} +1 -1
  25. package/dist/{Chip-BoHt3WYS.cjs → Chip-B2lY4TJ0.cjs} +2 -2
  26. package/dist/{Chip-BoHt3WYS.cjs.map → Chip-B2lY4TJ0.cjs.map} +1 -1
  27. package/dist/{Chip-DX3QECcs.js → Chip-DulHqhuf.js} +2 -2
  28. package/dist/{Chip-DX3QECcs.js.map → Chip-DulHqhuf.js.map} +1 -1
  29. package/dist/{CodeBlock-CPWEOym2.js → CodeBlock-DwBMghs2.js} +3 -3
  30. package/dist/{CodeBlock-CPWEOym2.js.map → CodeBlock-DwBMghs2.js.map} +1 -1
  31. package/dist/{CodeBlock-DKhIGQBg.cjs → CodeBlock-EhB7v9-R.cjs} +2 -2
  32. package/dist/{CodeBlock-DKhIGQBg.cjs.map → CodeBlock-EhB7v9-R.cjs.map} +1 -1
  33. package/dist/{ColorPicker-2qD8vZkR.js → ColorPicker-DJgTeHht.js} +3 -3
  34. package/dist/{ColorPicker-2qD8vZkR.js.map → ColorPicker-DJgTeHht.js.map} +1 -1
  35. package/dist/{ColorPicker-BAJWvC3h.cjs → ColorPicker-Dc1y9Zuu.cjs} +2 -2
  36. package/dist/{ColorPicker-BAJWvC3h.cjs.map → ColorPicker-Dc1y9Zuu.cjs.map} +1 -1
  37. package/dist/{ColorPickerPanel-CovWDIRt.js → ColorPickerPanel-9tOQUL38.js} +2 -2
  38. package/dist/{ColorPickerPanel-CovWDIRt.js.map → ColorPickerPanel-9tOQUL38.js.map} +1 -1
  39. package/dist/{ColorPickerPanel-CkB2pNnX.cjs → ColorPickerPanel-nXEliruE.cjs} +2 -2
  40. package/dist/{ColorPickerPanel-CkB2pNnX.cjs.map → ColorPickerPanel-nXEliruE.cjs.map} +1 -1
  41. package/dist/{ConfigProvider-DFy6pL-C.cjs → ConfigProvider-BHNx-NHV.cjs} +2 -2
  42. package/dist/{ConfigProvider-DFy6pL-C.cjs.map → ConfigProvider-BHNx-NHV.cjs.map} +1 -1
  43. package/dist/{ConfigProvider-sEZzNTeU.js → ConfigProvider-BYruQYHC.js} +2 -2
  44. package/dist/{ConfigProvider-sEZzNTeU.js.map → ConfigProvider-BYruQYHC.js.map} +1 -1
  45. package/dist/CopyButton-B4-OYsYr.js +31 -0
  46. package/dist/CopyButton-B4-OYsYr.js.map +1 -0
  47. package/dist/CopyButton-D_DCLHhb.cjs +2 -0
  48. package/dist/CopyButton-D_DCLHhb.cjs.map +1 -0
  49. package/dist/{DatePicker-TLaQ3ZyB.cjs → DatePicker-CEczjGZy.cjs} +2 -2
  50. package/dist/{DatePicker-TLaQ3ZyB.cjs.map → DatePicker-CEczjGZy.cjs.map} +1 -1
  51. package/dist/{DatePicker-BVHriq5B.js → DatePicker-DkvfSN1K.js} +4 -4
  52. package/dist/{DatePicker-BVHriq5B.js.map → DatePicker-DkvfSN1K.js.map} +1 -1
  53. package/dist/{DateTimePicker-Dq2jJ2yb.cjs → DateTimePicker-CDyGxUBX.cjs} +2 -2
  54. package/dist/{DateTimePicker-Dq2jJ2yb.cjs.map → DateTimePicker-CDyGxUBX.cjs.map} +1 -1
  55. package/dist/{DateTimePicker-BWxsgyGB.js → DateTimePicker-DPomyrnN.js} +7 -7
  56. package/dist/{DateTimePicker-BWxsgyGB.js.map → DateTimePicker-DPomyrnN.js.map} +1 -1
  57. package/dist/{EmptyState-B2WgeL-H.cjs → EmptyState-B77utgEn.cjs} +2 -2
  58. package/dist/{EmptyState-B2WgeL-H.cjs.map → EmptyState-B77utgEn.cjs.map} +1 -1
  59. package/dist/{EmptyState-D8eUxb8v.js → EmptyState-CVyFXprK.js} +2 -2
  60. package/dist/{EmptyState-D8eUxb8v.js.map → EmptyState-CVyFXprK.js.map} +1 -1
  61. package/dist/FileCard-Cpc5frNm.js +148 -0
  62. package/dist/FileCard-Cpc5frNm.js.map +1 -0
  63. package/dist/FileCard-CsGW2sxE.cjs +2 -0
  64. package/dist/FileCard-CsGW2sxE.cjs.map +1 -0
  65. package/dist/{FileUploader-I0G-2WSe.js → FileUploader-B_nKMh_K.js} +5 -5
  66. package/dist/{FileUploader-I0G-2WSe.js.map → FileUploader-B_nKMh_K.js.map} +1 -1
  67. package/dist/{FileUploader-qsnWX-i5.cjs → FileUploader-DDi_uzIx.cjs} +2 -2
  68. package/dist/{FileUploader-qsnWX-i5.cjs.map → FileUploader-DDi_uzIx.cjs.map} +1 -1
  69. package/dist/{Flag-Bxl1Pa9m.cjs → Flag-BJLWKB9J.cjs} +2 -2
  70. package/dist/{Flag-Bxl1Pa9m.cjs.map → Flag-BJLWKB9J.cjs.map} +1 -1
  71. package/dist/{Flag-CvIo_Eqp.js → Flag-Ck1xK22A.js} +2 -2
  72. package/dist/{Flag-CvIo_Eqp.js.map → Flag-Ck1xK22A.js.map} +1 -1
  73. package/dist/{FullscreenToggle-CRMGYmB8.js → FullscreenToggle-DmC0jTay.js} +3 -3
  74. package/dist/{FullscreenToggle-CRMGYmB8.js.map → FullscreenToggle-DmC0jTay.js.map} +1 -1
  75. package/dist/{FullscreenToggle-CEOkPSLp.cjs → FullscreenToggle-MCxGzAEe.cjs} +2 -2
  76. package/dist/{FullscreenToggle-CEOkPSLp.cjs.map → FullscreenToggle-MCxGzAEe.cjs.map} +1 -1
  77. package/dist/{IconButton-BZ2jJn_T.js → IconButton-B8FPGgDn.js} +2 -2
  78. package/dist/{IconButton-BZ2jJn_T.js.map → IconButton-B8FPGgDn.js.map} +1 -1
  79. package/dist/{IconButton-ChUfK0pG.cjs → IconButton-BoY2y_pV.cjs} +2 -2
  80. package/dist/{IconButton-ChUfK0pG.cjs.map → IconButton-BoY2y_pV.cjs.map} +1 -1
  81. package/dist/{Loader-plA9fgHf.cjs → Loader-Cwb1bOHj.cjs} +2 -2
  82. package/dist/{Loader-plA9fgHf.cjs.map → Loader-Cwb1bOHj.cjs.map} +1 -1
  83. package/dist/{Loader-DFlpw5Zc.js → Loader-UzzqvFyo.js} +2 -2
  84. package/dist/{Loader-DFlpw5Zc.js.map → Loader-UzzqvFyo.js.map} +1 -1
  85. package/dist/Masonry-9LrJKlhI.cjs +2 -0
  86. package/dist/Masonry-9LrJKlhI.cjs.map +1 -0
  87. package/dist/Masonry-BsRWG-oN.js +92 -0
  88. package/dist/Masonry-BsRWG-oN.js.map +1 -0
  89. package/dist/{Modal-BaieUdge.cjs → Modal-CO3c3sGY.cjs} +2 -2
  90. package/dist/{Modal-BaieUdge.cjs.map → Modal-CO3c3sGY.cjs.map} +1 -1
  91. package/dist/{Modal-CRH_i5uU.js → Modal-XMRDPHvQ.js} +3 -3
  92. package/dist/{Modal-CRH_i5uU.js.map → Modal-XMRDPHvQ.js.map} +1 -1
  93. package/dist/{MultiSelect-BmkzNHTE.js → MultiSelect-BPLctumx.js} +4 -4
  94. package/dist/{MultiSelect-BmkzNHTE.js.map → MultiSelect-BPLctumx.js.map} +1 -1
  95. package/dist/{MultiSelect-Cb-N8GIs.cjs → MultiSelect-DVOVHuIm.cjs} +2 -2
  96. package/dist/{MultiSelect-Cb-N8GIs.cjs.map → MultiSelect-DVOVHuIm.cjs.map} +1 -1
  97. package/dist/{NumberField-DBwNn3-f.cjs → NumberField-BH237Vt2.cjs} +2 -2
  98. package/dist/{NumberField-DBwNn3-f.cjs.map → NumberField-BH237Vt2.cjs.map} +1 -1
  99. package/dist/{NumberField-D71JI2Wv.js → NumberField-X2HsSpu9.js} +3 -3
  100. package/dist/{NumberField-D71JI2Wv.js.map → NumberField-X2HsSpu9.js.map} +1 -1
  101. package/dist/{OtpField-DOz-JmuX.js → OtpField-CB05q0NX.js} +2 -2
  102. package/dist/{OtpField-DOz-JmuX.js.map → OtpField-CB05q0NX.js.map} +1 -1
  103. package/dist/{OtpField-C-SiHxKa.cjs → OtpField-CXP59zM2.cjs} +2 -2
  104. package/dist/{OtpField-C-SiHxKa.cjs.map → OtpField-CXP59zM2.cjs.map} +1 -1
  105. package/dist/{PageLayout-qF5ThZKO.cjs → PageLayout-CuVuZEbR.cjs} +2 -2
  106. package/dist/{PageLayout-qF5ThZKO.cjs.map → PageLayout-CuVuZEbR.cjs.map} +1 -1
  107. package/dist/{PageLayout-BIdgUKsN.js → PageLayout-WKWnj5cw.js} +2 -2
  108. package/dist/{PageLayout-BIdgUKsN.js.map → PageLayout-WKWnj5cw.js.map} +1 -1
  109. package/dist/{PageNotFound-CsgH9tY0.js → PageNotFound-CmT-Wr9m.js} +5 -5
  110. package/dist/{PageNotFound-CsgH9tY0.js.map → PageNotFound-CmT-Wr9m.js.map} +1 -1
  111. package/dist/{PageNotFound-DObWgQ0Z.cjs → PageNotFound-CxLUFoJa.cjs} +2 -2
  112. package/dist/{PageNotFound-DObWgQ0Z.cjs.map → PageNotFound-CxLUFoJa.cjs.map} +1 -1
  113. package/dist/{Pagination-Kj7ZDi3N.js → Pagination-BuP4N1bj.js} +2 -2
  114. package/dist/{Pagination-Kj7ZDi3N.js.map → Pagination-BuP4N1bj.js.map} +1 -1
  115. package/dist/{Pagination-S3hENjDy.cjs → Pagination-Dcs_Znx3.cjs} +2 -2
  116. package/dist/{Pagination-S3hENjDy.cjs.map → Pagination-Dcs_Znx3.cjs.map} +1 -1
  117. package/dist/{RemoveDialog-BZ0gUf1p.cjs → RemoveDialog-Cwtq9wAt.cjs} +2 -2
  118. package/dist/{RemoveDialog-BZ0gUf1p.cjs.map → RemoveDialog-Cwtq9wAt.cjs.map} +1 -1
  119. package/dist/{RemoveDialog-D9a0GttZ.js → RemoveDialog-DU6MqkO8.js} +4 -4
  120. package/dist/{RemoveDialog-D9a0GttZ.js.map → RemoveDialog-DU6MqkO8.js.map} +1 -1
  121. package/dist/{RichTextEditor-BX6twJ9D.cjs → RichTextEditor-GxbnzLRe.cjs} +2 -2
  122. package/dist/{RichTextEditor-BX6twJ9D.cjs.map → RichTextEditor-GxbnzLRe.cjs.map} +1 -1
  123. package/dist/{RichTextEditor-D05Czeif.js → RichTextEditor-k-NlWb4Y.js} +7 -7
  124. package/dist/{RichTextEditor-D05Czeif.js.map → RichTextEditor-k-NlWb4Y.js.map} +1 -1
  125. package/dist/{RootLayout-BR_pPr3d.cjs → RootLayout-4GV6dfdB.cjs} +2 -2
  126. package/dist/{RootLayout-BR_pPr3d.cjs.map → RootLayout-4GV6dfdB.cjs.map} +1 -1
  127. package/dist/{RootLayout-CgI03ZNA.js → RootLayout-BPSWgWlI.js} +11 -11
  128. package/dist/{RootLayout-CgI03ZNA.js.map → RootLayout-BPSWgWlI.js.map} +1 -1
  129. package/dist/{Select-BZPA2Ytp.js → Select-D7KJ-YMU.js} +3 -3
  130. package/dist/{Select-BZPA2Ytp.js.map → Select-D7KJ-YMU.js.map} +1 -1
  131. package/dist/{Select-Dpl8dq_9.cjs → Select-DjMZec8c.cjs} +2 -2
  132. package/dist/{Select-Dpl8dq_9.cjs.map → Select-DjMZec8c.cjs.map} +1 -1
  133. package/dist/{Sidebar-6SAObU0u.cjs → Sidebar-CT_NUo_7.cjs} +2 -2
  134. package/dist/{Sidebar-6SAObU0u.cjs.map → Sidebar-CT_NUo_7.cjs.map} +1 -1
  135. package/dist/{Sidebar-DEBW6lDA.js → Sidebar-Csd3iKbS.js} +3 -3
  136. package/dist/{Sidebar-DEBW6lDA.js.map → Sidebar-Csd3iKbS.js.map} +1 -1
  137. package/dist/{SpeedDial-Dex0rF2z.cjs → SpeedDial-CyiPagdu.cjs} +2 -2
  138. package/dist/{SpeedDial-Dex0rF2z.cjs.map → SpeedDial-CyiPagdu.cjs.map} +1 -1
  139. package/dist/{SpeedDial-C3PnANAx.js → SpeedDial-DEWzAGXi.js} +2 -2
  140. package/dist/{SpeedDial-C3PnANAx.js.map → SpeedDial-DEWzAGXi.js.map} +1 -1
  141. package/dist/{Stepper-0e90ZJaw.js → Stepper-CS6s0dMF.js} +2 -2
  142. package/dist/{Stepper-0e90ZJaw.js.map → Stepper-CS6s0dMF.js.map} +1 -1
  143. package/dist/{Stepper-yKwUaxOU.cjs → Stepper-PW7c45PV.cjs} +2 -2
  144. package/dist/{Stepper-yKwUaxOU.cjs.map → Stepper-PW7c45PV.cjs.map} +1 -1
  145. package/dist/{Table-BekBXEnW.cjs → Table-C_Ov-kvK.cjs} +2 -2
  146. package/dist/{Table-BekBXEnW.cjs.map → Table-C_Ov-kvK.cjs.map} +1 -1
  147. package/dist/{Table-KEOUL2u3.js → Table-IIAKXYOh.js} +15 -15
  148. package/dist/{Table-KEOUL2u3.js.map → Table-IIAKXYOh.js.map} +1 -1
  149. package/dist/{Tabs-DYUS945Y.cjs → Tabs-CaHTJ99w.cjs} +2 -2
  150. package/dist/{Tabs-DYUS945Y.cjs.map → Tabs-CaHTJ99w.cjs.map} +1 -1
  151. package/dist/{Tabs-BHk2B50R.js → Tabs-D3wztVB1.js} +2 -2
  152. package/dist/{Tabs-BHk2B50R.js.map → Tabs-D3wztVB1.js.map} +1 -1
  153. package/dist/{TagsField-DKh9SbG5.cjs → TagsField-BQIwSX5m.cjs} +2 -2
  154. package/dist/{TagsField-DKh9SbG5.cjs.map → TagsField-BQIwSX5m.cjs.map} +1 -1
  155. package/dist/{TagsField-BkC5OmIT.js → TagsField-BR9Z5pik.js} +4 -4
  156. package/dist/{TagsField-BkC5OmIT.js.map → TagsField-BR9Z5pik.js.map} +1 -1
  157. package/dist/{TextField-12HcFD7u.js → TextField-Bg4TwkVD.js} +3 -3
  158. package/dist/{TextField-12HcFD7u.js.map → TextField-Bg4TwkVD.js.map} +1 -1
  159. package/dist/{TextField-C9cPPP-B.cjs → TextField-fmt7aacg.cjs} +2 -2
  160. package/dist/{TextField-C9cPPP-B.cjs.map → TextField-fmt7aacg.cjs.map} +1 -1
  161. package/dist/{ThemeToggle-DIXVvqZ7.cjs → ThemeToggle-Cz5I2-DL.cjs} +2 -2
  162. package/dist/{ThemeToggle-DIXVvqZ7.cjs.map → ThemeToggle-Cz5I2-DL.cjs.map} +1 -1
  163. package/dist/{ThemeToggle-DUtDXl1Z.js → ThemeToggle-DEfXczDs.js} +3 -3
  164. package/dist/{ThemeToggle-DUtDXl1Z.js.map → ThemeToggle-DEfXczDs.js.map} +1 -1
  165. package/dist/{TimeColumns-BLhP81oI.js → TimeColumns-B-vtakk8.js} +2 -2
  166. package/dist/{TimeColumns-BLhP81oI.js.map → TimeColumns-B-vtakk8.js.map} +1 -1
  167. package/dist/{TimeColumns-CgjyPGjs.cjs → TimeColumns-IBmjExao.cjs} +2 -2
  168. package/dist/{TimeColumns-CgjyPGjs.cjs.map → TimeColumns-IBmjExao.cjs.map} +1 -1
  169. package/dist/{TimePicker-CNAXFtJa.cjs → TimePicker-B-c6uIaY.cjs} +2 -2
  170. package/dist/{TimePicker-CNAXFtJa.cjs.map → TimePicker-B-c6uIaY.cjs.map} +1 -1
  171. package/dist/{TimePicker-CJWjGVqT.js → TimePicker-i2RnZHV1.js} +5 -5
  172. package/dist/{TimePicker-CJWjGVqT.js.map → TimePicker-i2RnZHV1.js.map} +1 -1
  173. package/dist/{Toaster-B3Mut6eM.js → Toaster-Da8F_SFV.js} +2 -2
  174. package/dist/{Toaster-B3Mut6eM.js.map → Toaster-Da8F_SFV.js.map} +1 -1
  175. package/dist/{Toaster-CYt_Hvlh.cjs → Toaster-qdS8Urgy.cjs} +2 -2
  176. package/dist/{Toaster-CYt_Hvlh.cjs.map → Toaster-qdS8Urgy.cjs.map} +1 -1
  177. package/dist/TranslatedFields-C30ww45c.cjs +2 -0
  178. package/dist/TranslatedFields-C30ww45c.cjs.map +1 -0
  179. package/dist/TranslatedFields-Ck9JTF27.js +86 -0
  180. package/dist/TranslatedFields-Ck9JTF27.js.map +1 -0
  181. package/dist/{UserCard-Dve-LOSB.js → UserCard-0ZF29bkK.js} +3 -3
  182. package/dist/{UserCard-Dve-LOSB.js.map → UserCard-0ZF29bkK.js.map} +1 -1
  183. package/dist/{UserCard-sIguy8Jp.cjs → UserCard-C8rC_gzD.cjs} +2 -2
  184. package/dist/{UserCard-sIguy8Jp.cjs.map → UserCard-C8rC_gzD.cjs.map} +1 -1
  185. package/dist/components/Alert/index.cjs +1 -1
  186. package/dist/components/Alert/index.js +1 -1
  187. package/dist/components/AuthLayout/AuthLayout.d.cts +39 -0
  188. package/dist/components/AuthLayout/AuthLayout.d.ts +39 -0
  189. package/dist/components/AuthLayout/index.cjs +2 -0
  190. package/dist/components/AuthLayout/index.cjs.map +1 -0
  191. package/dist/components/AuthLayout/index.d.cts +2 -0
  192. package/dist/components/AuthLayout/index.d.ts +2 -0
  193. package/dist/components/AuthLayout/index.js +6 -0
  194. package/dist/components/AuthLayout/index.js.map +1 -0
  195. package/dist/components/Breadcrumbs/index.cjs +1 -1
  196. package/dist/components/Breadcrumbs/index.js +1 -1
  197. package/dist/components/Button/index.cjs +1 -1
  198. package/dist/components/Button/index.js +1 -1
  199. package/dist/components/Card/index.cjs +1 -1
  200. package/dist/components/Card/index.js +1 -1
  201. package/dist/components/Chip/index.cjs +1 -1
  202. package/dist/components/Chip/index.js +1 -1
  203. package/dist/components/CodeBlock/index.cjs +1 -1
  204. package/dist/components/CodeBlock/index.js +1 -1
  205. package/dist/components/ColorPicker/index.cjs +1 -1
  206. package/dist/components/ColorPicker/index.js +1 -1
  207. package/dist/components/CopyButton/CopyButton.d.cts +32 -0
  208. package/dist/components/CopyButton/CopyButton.d.ts +32 -0
  209. package/dist/components/CopyButton/index.cjs +2 -0
  210. package/dist/components/CopyButton/index.cjs.map +1 -0
  211. package/dist/components/CopyButton/index.d.cts +2 -0
  212. package/dist/components/CopyButton/index.d.ts +2 -0
  213. package/dist/components/CopyButton/index.js +6 -0
  214. package/dist/components/CopyButton/index.js.map +1 -0
  215. package/dist/components/DatePicker/index.cjs +1 -1
  216. package/dist/components/DatePicker/index.js +1 -1
  217. package/dist/components/DateTimePicker/index.cjs +1 -1
  218. package/dist/components/DateTimePicker/index.js +1 -1
  219. package/dist/components/EmptyState/index.cjs +1 -1
  220. package/dist/components/EmptyState/index.js +1 -1
  221. package/dist/components/FileCard/FileCard.d.cts +45 -0
  222. package/dist/components/FileCard/FileCard.d.ts +45 -0
  223. package/dist/components/FileCard/index.cjs +2 -0
  224. package/dist/components/FileCard/index.cjs.map +1 -0
  225. package/dist/components/FileCard/index.d.cts +2 -0
  226. package/dist/components/FileCard/index.d.ts +2 -0
  227. package/dist/components/FileCard/index.js +6 -0
  228. package/dist/components/FileCard/index.js.map +1 -0
  229. package/dist/components/FileUploader/index.cjs +1 -1
  230. package/dist/components/FileUploader/index.js +1 -1
  231. package/dist/components/Flag/index.cjs +1 -1
  232. package/dist/components/Flag/index.js +1 -1
  233. package/dist/components/FullscreenToggle/index.cjs +1 -1
  234. package/dist/components/FullscreenToggle/index.js +1 -1
  235. package/dist/components/IconButton/index.cjs +1 -1
  236. package/dist/components/IconButton/index.js +1 -1
  237. package/dist/components/Loader/index.cjs +1 -1
  238. package/dist/components/Loader/index.js +1 -1
  239. package/dist/components/Masonry/Masonry.d.cts +14 -7
  240. package/dist/components/Masonry/Masonry.d.ts +14 -7
  241. package/dist/components/Masonry/index.cjs +1 -1
  242. package/dist/components/Masonry/index.js +1 -1
  243. package/dist/components/Modal/index.cjs +1 -1
  244. package/dist/components/Modal/index.js +1 -1
  245. package/dist/components/MultiSelect/index.cjs +1 -1
  246. package/dist/components/MultiSelect/index.js +1 -1
  247. package/dist/components/NumberField/index.cjs +1 -1
  248. package/dist/components/NumberField/index.js +1 -1
  249. package/dist/components/OtpField/index.cjs +1 -1
  250. package/dist/components/OtpField/index.js +1 -1
  251. package/dist/components/PageLayout/index.cjs +1 -1
  252. package/dist/components/PageLayout/index.js +1 -1
  253. package/dist/components/PageNotFound/index.cjs +1 -1
  254. package/dist/components/PageNotFound/index.js +1 -1
  255. package/dist/components/Pagination/index.cjs +1 -1
  256. package/dist/components/Pagination/index.js +1 -1
  257. package/dist/components/RemoveDialog/index.cjs +1 -1
  258. package/dist/components/RemoveDialog/index.js +1 -1
  259. package/dist/components/RichTextEditor/index.cjs +1 -1
  260. package/dist/components/RichTextEditor/index.js +1 -1
  261. package/dist/components/RootLayout/index.cjs +1 -1
  262. package/dist/components/RootLayout/index.js +1 -1
  263. package/dist/components/Select/index.cjs +1 -1
  264. package/dist/components/Select/index.js +1 -1
  265. package/dist/components/Sidebar/index.cjs +1 -1
  266. package/dist/components/Sidebar/index.js +1 -1
  267. package/dist/components/SpeedDial/index.cjs +1 -1
  268. package/dist/components/SpeedDial/index.js +1 -1
  269. package/dist/components/Stepper/index.cjs +1 -1
  270. package/dist/components/Stepper/index.js +1 -1
  271. package/dist/components/Table/index.cjs +1 -1
  272. package/dist/components/Table/index.js +1 -1
  273. package/dist/components/Tabs/index.cjs +1 -1
  274. package/dist/components/Tabs/index.js +1 -1
  275. package/dist/components/TagsField/index.cjs +1 -1
  276. package/dist/components/TagsField/index.js +1 -1
  277. package/dist/components/TextField/index.cjs +1 -1
  278. package/dist/components/TextField/index.js +1 -1
  279. package/dist/components/ThemeToggle/index.cjs +1 -1
  280. package/dist/components/ThemeToggle/index.js +1 -1
  281. package/dist/components/TimePicker/index.cjs +1 -1
  282. package/dist/components/TimePicker/index.js +1 -1
  283. package/dist/components/Toast/index.cjs +1 -1
  284. package/dist/components/Toast/index.js +1 -1
  285. package/dist/components/TranslatedFields/TranslatedFields.d.cts +9 -2
  286. package/dist/components/TranslatedFields/TranslatedFields.d.ts +9 -2
  287. package/dist/components/TranslatedFields/index.cjs +1 -1
  288. package/dist/components/TranslatedFields/index.js +1 -1
  289. package/dist/components/UserCard/index.cjs +1 -1
  290. package/dist/components/UserCard/index.js +1 -1
  291. package/dist/components/index.d.cts +3 -0
  292. package/dist/components/index.d.ts +3 -0
  293. package/dist/entries/components.cjs +1 -1
  294. package/dist/entries/components.js +147 -141
  295. package/dist/entries/components.js.map +1 -1
  296. package/dist/entries/hooks.cjs +1 -1
  297. package/dist/entries/hooks.d.cts +2 -0
  298. package/dist/entries/hooks.d.ts +2 -0
  299. package/dist/entries/hooks.js +6 -4
  300. package/dist/entries/hooks.js.map +1 -1
  301. package/dist/entries/i18n.cjs +1 -1
  302. package/dist/entries/i18n.js +2 -2
  303. package/dist/entries/theme.cjs +1 -1
  304. package/dist/entries/theme.js +1 -1
  305. package/dist/hooks/index.d.cts +2 -0
  306. package/dist/hooks/index.d.ts +2 -0
  307. package/dist/hooks/useClipboard.d.cts +28 -0
  308. package/dist/hooks/useClipboard.d.ts +28 -0
  309. package/dist/i18n/messages.d.cts +3 -0
  310. package/dist/i18n/messages.d.ts +3 -0
  311. package/dist/index.cjs +1 -1
  312. package/dist/index.css +1 -1
  313. package/dist/index.js +196 -188
  314. package/dist/index.js.map +1 -1
  315. package/dist/{messages-CVISEA5N.js → messages-BOKick2l.js} +35 -14
  316. package/dist/messages-BOKick2l.js.map +1 -0
  317. package/dist/{messages-BJiUtJ2E.cjs → messages-Jxz2YMcA.cjs} +9 -9
  318. package/dist/messages-Jxz2YMcA.cjs.map +1 -0
  319. package/dist/useClipboard-BjTIX-4g.cjs +2 -0
  320. package/dist/useClipboard-BjTIX-4g.cjs.map +1 -0
  321. package/dist/useClipboard-CEw_Juiq.js +23 -0
  322. package/dist/useClipboard-CEw_Juiq.js.map +1 -0
  323. package/package.json +4 -3
  324. package/dist/Masonry-BObKcPmo.js +0 -82
  325. package/dist/Masonry-BObKcPmo.js.map +0 -1
  326. package/dist/Masonry-BVphuk2X.cjs +0 -2
  327. package/dist/Masonry-BVphuk2X.cjs.map +0 -1
  328. package/dist/TranslatedFields-BEaS1esD.js +0 -82
  329. package/dist/TranslatedFields-BEaS1esD.js.map +0 -1
  330. package/dist/TranslatedFields-DshwXj6d.cjs +0 -2
  331. package/dist/TranslatedFields-DshwXj6d.cjs.map +0 -1
  332. package/dist/messages-BJiUtJ2E.cjs.map +0 -1
  333. package/dist/messages-CVISEA5N.js.map +0 -1
@@ -1,2 +1,2 @@
1
- "use strict";const r=require("react/jsx-runtime"),t=require("react"),p=require("clsx"),X=require("./formContext-bTWrqdEV.cjs"),Y=require("./FloatingPanel-U6sGYiSK.cjs"),I=require("./Typography-BFatE1_A.cjs"),e=require("./ColorPickerPanel-CkB2pNnX.cjs"),Z=require("./ConfigProvider-DFy6pL-C.cjs"),ee=232,se=t.forwardRef(function({label:y,size:w="md",error:S,helperText:V,required:E=!1,fullWidth:O=!0,disabled:C=!1,value:P,defaultValue:H,onChange:f,swatches:W,name:o,placeholder:g,id:D,className:L,style:U},a){const _=Z.useT(),$=t.useId(),x=D??$,j=`${x}-helper`,c=X.useFormContext(),k=!!(c&&o),l=c&&o?c.field(o):void 0,T=P!==void 0?P:k?c.values[o]??"":void 0,q=T!==void 0,[z,A]=t.useState(H??""),R=q?T:z,i=e.parseColor(R||""),u=i?e.formatColor(i):null,G=u?u[0]==="#"?u.toUpperCase():u:null,v=S??(l==null?void 0:l.error)??!1,h=V??(l==null?void 0:l.helperText),J=s=>{q||A(s),k&&c.setValue(o,s),f==null||f(s)},d=t.useRef(null),N=t.useRef(null),[m,b]=t.useState(!1),K=t.useCallback(s=>{d.current=s,typeof a=="function"?a(s):a&&(a.current=s)},[a]),M=t.useCallback(s=>{var n;b(!1),s&&((n=d.current)==null||n.focus())},[]),Q=s=>{var B,F;const n=s.relatedTarget;n&&((B=N.current)!=null&&B.contains(n)||(F=d.current)!=null&&F.contains(n))||l==null||l.onBlur(s)};return r.jsxs("div",{className:p.clsx(e.styles.field,e.styles[w],O&&e.styles.fullWidth,v&&e.styles.error,C&&e.styles.disabled,L),style:U,children:[y!=null&&r.jsxs("label",{htmlFor:x,className:e.styles.label,children:[r.jsx(I.Typography,{as:"span",variant:"bodySmall",color:"muted",children:y}),E&&r.jsx("span",{className:e.styles.required,"aria-hidden":"true",children:"*"})]}),r.jsxs("button",{ref:K,id:x,name:o,type:"button",className:p.clsx(e.styles.control,m&&e.styles.open),disabled:C,"aria-haspopup":"dialog","aria-expanded":m,"aria-invalid":v||void 0,"aria-describedby":h!=null?j:void 0,"aria-label":y||i||g?void 0:_("colorPicker.pick"),onClick:()=>b(s=>!s),onBlur:Q,children:[r.jsx("span",{className:p.clsx(e.styles.value,!i&&e.styles.placeholder),children:G??g}),r.jsx("span",{className:p.clsx(e.styles.preview,!i&&e.styles.previewEmpty),style:i?{"--cp-fill":u}:void 0,"aria-hidden":"true"})]}),r.jsx(Y.FloatingPanel,{ref:N,open:m,triggerRef:d,onClose:M,role:"dialog",ariaLabel:"Color picker",width:ee,children:r.jsx(e.ColorPickerPanel,{value:R,onChange:J,swatches:W})}),h!=null&&r.jsx(I.Typography,{as:"span",id:j,variant:"bodySmall",color:v?"error":"muted",className:e.styles.helper,children:h})]})});exports.ColorPicker=se;
2
- //# sourceMappingURL=ColorPicker-BAJWvC3h.cjs.map
1
+ "use strict";const r=require("react/jsx-runtime"),t=require("react"),p=require("clsx"),X=require("./formContext-bTWrqdEV.cjs"),Y=require("./FloatingPanel-U6sGYiSK.cjs"),I=require("./Typography-BFatE1_A.cjs"),e=require("./ColorPickerPanel-nXEliruE.cjs"),Z=require("./ConfigProvider-BHNx-NHV.cjs"),ee=232,se=t.forwardRef(function({label:y,size:w="md",error:S,helperText:V,required:E=!1,fullWidth:O=!0,disabled:C=!1,value:P,defaultValue:H,onChange:f,swatches:W,name:o,placeholder:g,id:D,className:L,style:U},a){const _=Z.useT(),$=t.useId(),x=D??$,j=`${x}-helper`,c=X.useFormContext(),k=!!(c&&o),l=c&&o?c.field(o):void 0,T=P!==void 0?P:k?c.values[o]??"":void 0,q=T!==void 0,[z,A]=t.useState(H??""),R=q?T:z,i=e.parseColor(R||""),u=i?e.formatColor(i):null,G=u?u[0]==="#"?u.toUpperCase():u:null,v=S??(l==null?void 0:l.error)??!1,h=V??(l==null?void 0:l.helperText),J=s=>{q||A(s),k&&c.setValue(o,s),f==null||f(s)},d=t.useRef(null),N=t.useRef(null),[m,b]=t.useState(!1),K=t.useCallback(s=>{d.current=s,typeof a=="function"?a(s):a&&(a.current=s)},[a]),M=t.useCallback(s=>{var n;b(!1),s&&((n=d.current)==null||n.focus())},[]),Q=s=>{var B,F;const n=s.relatedTarget;n&&((B=N.current)!=null&&B.contains(n)||(F=d.current)!=null&&F.contains(n))||l==null||l.onBlur(s)};return r.jsxs("div",{className:p.clsx(e.styles.field,e.styles[w],O&&e.styles.fullWidth,v&&e.styles.error,C&&e.styles.disabled,L),style:U,children:[y!=null&&r.jsxs("label",{htmlFor:x,className:e.styles.label,children:[r.jsx(I.Typography,{as:"span",variant:"bodySmall",color:"muted",children:y}),E&&r.jsx("span",{className:e.styles.required,"aria-hidden":"true",children:"*"})]}),r.jsxs("button",{ref:K,id:x,name:o,type:"button",className:p.clsx(e.styles.control,m&&e.styles.open),disabled:C,"aria-haspopup":"dialog","aria-expanded":m,"aria-invalid":v||void 0,"aria-describedby":h!=null?j:void 0,"aria-label":y||i||g?void 0:_("colorPicker.pick"),onClick:()=>b(s=>!s),onBlur:Q,children:[r.jsx("span",{className:p.clsx(e.styles.value,!i&&e.styles.placeholder),children:G??g}),r.jsx("span",{className:p.clsx(e.styles.preview,!i&&e.styles.previewEmpty),style:i?{"--cp-fill":u}:void 0,"aria-hidden":"true"})]}),r.jsx(Y.FloatingPanel,{ref:N,open:m,triggerRef:d,onClose:M,role:"dialog",ariaLabel:"Color picker",width:ee,children:r.jsx(e.ColorPickerPanel,{value:R,onChange:J,swatches:W})}),h!=null&&r.jsx(I.Typography,{as:"span",id:j,variant:"bodySmall",color:v?"error":"muted",className:e.styles.helper,children:h})]})});exports.ColorPicker=se;
2
+ //# sourceMappingURL=ColorPicker-Dc1y9Zuu.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColorPicker-BAJWvC3h.cjs","sources":["../src/components/ColorPicker/ColorPicker.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type FocusEvent,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useFormContext } from '../../form/formContext'\nimport { useT } from '../../theme'\nimport { FloatingPanel } from '../FloatingPanel/FloatingPanel'\nimport { Typography } from '../Typography'\nimport { ColorPickerPanel } from './ColorPickerPanel'\nimport { formatColor, parseColor } from './colorUtils'\nimport styles from './ColorPicker.module.css'\n\nexport type ColorPickerSize = 'sm' | 'md' | 'lg'\n\n/** Popover width (px). */\nconst POPOVER_WIDTH = 232\n\nexport interface ColorPickerProps {\n /** Label rendered above the field. */\n label?: ReactNode\n /** Preset size — control height, swatch and font. */\n size?: ColorPickerSize\n /** Marks the field invalid: red border/ring + the `helperText` in the error color. */\n error?: boolean\n /** Helper / validation text under the field. Adopts the error color while `error`. */\n helperText?: ReactNode\n /** Adds a red asterisk after the label. */\n required?: boolean\n /** Stretches the field to fill its container width. Defaults to `true`. */\n fullWidth?: boolean\n /** Disables the field. */\n disabled?: boolean\n /** Controlled value — a CSS color string: `#rrggbb` hex, or `rgba(r, g, b, a)` when translucent. */\n value?: string\n /** Initial value for uncontrolled use (hex or `rgb()`/`rgba()`). */\n defaultValue?: string\n /** Fires with the next color: `#rrggbb` when opaque, `rgba(r, g, b, a)` when not (or `''` when cleared). */\n onChange?: (color: string) => void\n /** Quick-pick swatches shown in the popover. Defaults to a curated palette. */\n swatches?: string[]\n /** Form field name — auto-binds to a surrounding `<Form>` (value is the hex string). */\n name?: string\n /** Placeholder shown in the trigger when no color is set. Omit to show nothing. */\n placeholder?: string\n /** Id for the trigger (label association). */\n id?: string\n className?: string\n style?: CSSProperties\n}\n\n/**\n * A color field with a beautiful popover picker: a saturation/value square, a hue slider, an alpha\n * (opacity) slider, a color input, quick-pick swatches and a clear button. The input accepts hex\n * (`#rgb`/`#rrggbb`/`#rrggbbaa`) or `rgb()`/`rgba()`, and the value comes back as `#rrggbb` when\n * fully opaque or `rgba(r, g, b, a)` when translucent. Clicking the trigger opens the popover, which\n * — like `Dropdown` — is portaled to `<body>`, opens below (flips above only when it would\n * overflow), locks page scroll and re-positions on scroll/resize. Controlled (`value` + `onChange`)\n * or uncontrolled (`defaultValue`), and binds to a surrounding `<Form>` by `name` (its form value is\n * the color string; validate with e.g. `z.string().regex(/^#[0-9a-f]{6}$/i, 'Pick a color')`, or a\n * looser pattern if you allow `rgba()`). Styling uses `--tz-*` tokens (the spectrum gradients and\n * the alpha checkerboard are the unavoidable exceptions).\n */\nexport const ColorPicker = forwardRef<HTMLButtonElement, ColorPickerProps>(function ColorPicker(\n {\n label,\n size = 'md',\n error,\n helperText,\n required = false,\n fullWidth = true,\n disabled = false,\n value,\n defaultValue,\n onChange,\n swatches,\n name,\n placeholder,\n id: idProp,\n className,\n style,\n },\n ref,\n) {\n const t = useT()\n const reactId = useId()\n const id = idProp ?? reactId\n const helperId = `${id}-helper`\n\n // Auto-bind to a surrounding <Form> by `name` — the form value is the hex string.\n const form = useFormContext()\n const isFormBound = Boolean(form && name)\n const bound = form && name ? form.field(name) : undefined\n\n const externalValue: string | undefined =\n value !== undefined\n ? value\n : isFormBound\n ? ((form!.values[name!] as string | undefined) ?? '')\n : undefined\n const isControlled = externalValue !== undefined\n const [internal, setInternal] = useState<string>(defaultValue ?? '')\n const currentColor = isControlled ? externalValue! : internal\n const parsed = parseColor(currentColor || '')\n // canonical string for the value (`#rrggbb` when opaque, `rgba(...)` when not), null when unset\n const displayValue = parsed ? formatColor(parsed) : null\n // hex shows uppercase in the trigger; rgba() stays as-is\n const displayText = displayValue\n ? displayValue[0] === '#'\n ? displayValue.toUpperCase()\n : displayValue\n : null\n\n const resolvedError = error ?? bound?.error ?? false\n const resolvedHelperText = helperText ?? bound?.helperText\n\n const commit = (color: string) => {\n if (!isControlled) setInternal(color)\n if (isFormBound) form!.setValue(name!, color)\n onChange?.(color)\n }\n\n // ── popover (positioning / scroll-lock / dismiss come from FloatingPanel) ──────────────────────\n const triggerRef = useRef<HTMLButtonElement | null>(null)\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const [open, setOpen] = useState(false)\n\n const setTriggerRef = useCallback(\n (node: HTMLButtonElement | null) => {\n triggerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as { current: HTMLButtonElement | null }).current = node\n },\n [ref],\n )\n\n const closePopover = useCallback((refocus: boolean) => {\n setOpen(false)\n if (refocus) triggerRef.current?.focus()\n }, [])\n\n // mark the form field touched when focus leaves the whole widget — but not when it moves into the\n // (portaled) popover or stays on the trigger, so a form-bound picker shows its error like every\n // other popover field (Select/DatePicker) instead of only after submit\n const handleTriggerBlur = (event: FocusEvent<HTMLButtonElement>) => {\n const next = event.relatedTarget as Node | null\n if (next && (popoverRef.current?.contains(next) || triggerRef.current?.contains(next))) return\n bound?.onBlur(event as unknown as FocusEvent<HTMLInputElement>)\n }\n\n return (\n <div\n className={clsx(\n styles.field,\n styles[size],\n fullWidth && styles.fullWidth,\n resolvedError && styles.error,\n disabled && styles.disabled,\n className,\n )}\n style={style}\n >\n {label != null && (\n <label htmlFor={id} className={styles.label}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n\n <button\n ref={setTriggerRef}\n id={id}\n name={name}\n type=\"button\"\n className={clsx(styles.control, open && styles.open)}\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-invalid={resolvedError || undefined}\n aria-describedby={resolvedHelperText != null ? helperId : undefined}\n aria-label={label || parsed || placeholder ? undefined : t('colorPicker.pick')}\n onClick={() => setOpen((o) => !o)}\n onBlur={handleTriggerBlur}\n >\n <span className={clsx(styles.value, !parsed && styles.placeholder)}>\n {displayText ?? placeholder}\n </span>\n <span\n className={clsx(styles.preview, !parsed && styles.previewEmpty)}\n style={parsed ? ({ '--cp-fill': displayValue } as CSSProperties) : undefined}\n aria-hidden=\"true\"\n />\n </button>\n\n <FloatingPanel\n ref={popoverRef}\n open={open}\n triggerRef={triggerRef}\n onClose={closePopover}\n role=\"dialog\"\n ariaLabel=\"Color picker\"\n width={POPOVER_WIDTH}\n >\n <ColorPickerPanel value={currentColor} onChange={commit} swatches={swatches} />\n </FloatingPanel>\n\n {resolvedHelperText != null && (\n <Typography\n as=\"span\"\n id={helperId}\n variant=\"bodySmall\"\n color={resolvedError ? 'error' : 'muted'}\n className={styles.helper}\n >\n {resolvedHelperText}\n </Typography>\n )}\n </div>\n )\n})\n"],"names":["POPOVER_WIDTH","ColorPicker","forwardRef","label","size","error","helperText","required","fullWidth","disabled","value","defaultValue","onChange","swatches","name","placeholder","idProp","className","style","ref","t","useT","reactId","useId","id","helperId","form","useFormContext","isFormBound","bound","externalValue","isControlled","internal","setInternal","useState","currentColor","parsed","parseColor","displayValue","formatColor","displayText","resolvedError","resolvedHelperText","commit","color","triggerRef","useRef","popoverRef","open","setOpen","setTriggerRef","useCallback","node","closePopover","refocus","_a","handleTriggerBlur","event","next","_b","jsxs","clsx","styles","jsx","Typography","o","FloatingPanel","ColorPickerPanel"],"mappings":"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"}
1
+ {"version":3,"file":"ColorPicker-Dc1y9Zuu.cjs","sources":["../src/components/ColorPicker/ColorPicker.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type FocusEvent,\n type ReactNode,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useFormContext } from '../../form/formContext'\nimport { useT } from '../../theme'\nimport { FloatingPanel } from '../FloatingPanel/FloatingPanel'\nimport { Typography } from '../Typography'\nimport { ColorPickerPanel } from './ColorPickerPanel'\nimport { formatColor, parseColor } from './colorUtils'\nimport styles from './ColorPicker.module.css'\n\nexport type ColorPickerSize = 'sm' | 'md' | 'lg'\n\n/** Popover width (px). */\nconst POPOVER_WIDTH = 232\n\nexport interface ColorPickerProps {\n /** Label rendered above the field. */\n label?: ReactNode\n /** Preset size — control height, swatch and font. */\n size?: ColorPickerSize\n /** Marks the field invalid: red border/ring + the `helperText` in the error color. */\n error?: boolean\n /** Helper / validation text under the field. Adopts the error color while `error`. */\n helperText?: ReactNode\n /** Adds a red asterisk after the label. */\n required?: boolean\n /** Stretches the field to fill its container width. Defaults to `true`. */\n fullWidth?: boolean\n /** Disables the field. */\n disabled?: boolean\n /** Controlled value — a CSS color string: `#rrggbb` hex, or `rgba(r, g, b, a)` when translucent. */\n value?: string\n /** Initial value for uncontrolled use (hex or `rgb()`/`rgba()`). */\n defaultValue?: string\n /** Fires with the next color: `#rrggbb` when opaque, `rgba(r, g, b, a)` when not (or `''` when cleared). */\n onChange?: (color: string) => void\n /** Quick-pick swatches shown in the popover. Defaults to a curated palette. */\n swatches?: string[]\n /** Form field name — auto-binds to a surrounding `<Form>` (value is the hex string). */\n name?: string\n /** Placeholder shown in the trigger when no color is set. Omit to show nothing. */\n placeholder?: string\n /** Id for the trigger (label association). */\n id?: string\n className?: string\n style?: CSSProperties\n}\n\n/**\n * A color field with a beautiful popover picker: a saturation/value square, a hue slider, an alpha\n * (opacity) slider, a color input, quick-pick swatches and a clear button. The input accepts hex\n * (`#rgb`/`#rrggbb`/`#rrggbbaa`) or `rgb()`/`rgba()`, and the value comes back as `#rrggbb` when\n * fully opaque or `rgba(r, g, b, a)` when translucent. Clicking the trigger opens the popover, which\n * — like `Dropdown` — is portaled to `<body>`, opens below (flips above only when it would\n * overflow), locks page scroll and re-positions on scroll/resize. Controlled (`value` + `onChange`)\n * or uncontrolled (`defaultValue`), and binds to a surrounding `<Form>` by `name` (its form value is\n * the color string; validate with e.g. `z.string().regex(/^#[0-9a-f]{6}$/i, 'Pick a color')`, or a\n * looser pattern if you allow `rgba()`). Styling uses `--tz-*` tokens (the spectrum gradients and\n * the alpha checkerboard are the unavoidable exceptions).\n */\nexport const ColorPicker = forwardRef<HTMLButtonElement, ColorPickerProps>(function ColorPicker(\n {\n label,\n size = 'md',\n error,\n helperText,\n required = false,\n fullWidth = true,\n disabled = false,\n value,\n defaultValue,\n onChange,\n swatches,\n name,\n placeholder,\n id: idProp,\n className,\n style,\n },\n ref,\n) {\n const t = useT()\n const reactId = useId()\n const id = idProp ?? reactId\n const helperId = `${id}-helper`\n\n // Auto-bind to a surrounding <Form> by `name` — the form value is the hex string.\n const form = useFormContext()\n const isFormBound = Boolean(form && name)\n const bound = form && name ? form.field(name) : undefined\n\n const externalValue: string | undefined =\n value !== undefined\n ? value\n : isFormBound\n ? ((form!.values[name!] as string | undefined) ?? '')\n : undefined\n const isControlled = externalValue !== undefined\n const [internal, setInternal] = useState<string>(defaultValue ?? '')\n const currentColor = isControlled ? externalValue! : internal\n const parsed = parseColor(currentColor || '')\n // canonical string for the value (`#rrggbb` when opaque, `rgba(...)` when not), null when unset\n const displayValue = parsed ? formatColor(parsed) : null\n // hex shows uppercase in the trigger; rgba() stays as-is\n const displayText = displayValue\n ? displayValue[0] === '#'\n ? displayValue.toUpperCase()\n : displayValue\n : null\n\n const resolvedError = error ?? bound?.error ?? false\n const resolvedHelperText = helperText ?? bound?.helperText\n\n const commit = (color: string) => {\n if (!isControlled) setInternal(color)\n if (isFormBound) form!.setValue(name!, color)\n onChange?.(color)\n }\n\n // ── popover (positioning / scroll-lock / dismiss come from FloatingPanel) ──────────────────────\n const triggerRef = useRef<HTMLButtonElement | null>(null)\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const [open, setOpen] = useState(false)\n\n const setTriggerRef = useCallback(\n (node: HTMLButtonElement | null) => {\n triggerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as { current: HTMLButtonElement | null }).current = node\n },\n [ref],\n )\n\n const closePopover = useCallback((refocus: boolean) => {\n setOpen(false)\n if (refocus) triggerRef.current?.focus()\n }, [])\n\n // mark the form field touched when focus leaves the whole widget — but not when it moves into the\n // (portaled) popover or stays on the trigger, so a form-bound picker shows its error like every\n // other popover field (Select/DatePicker) instead of only after submit\n const handleTriggerBlur = (event: FocusEvent<HTMLButtonElement>) => {\n const next = event.relatedTarget as Node | null\n if (next && (popoverRef.current?.contains(next) || triggerRef.current?.contains(next))) return\n bound?.onBlur(event as unknown as FocusEvent<HTMLInputElement>)\n }\n\n return (\n <div\n className={clsx(\n styles.field,\n styles[size],\n fullWidth && styles.fullWidth,\n resolvedError && styles.error,\n disabled && styles.disabled,\n className,\n )}\n style={style}\n >\n {label != null && (\n <label htmlFor={id} className={styles.label}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n\n <button\n ref={setTriggerRef}\n id={id}\n name={name}\n type=\"button\"\n className={clsx(styles.control, open && styles.open)}\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-invalid={resolvedError || undefined}\n aria-describedby={resolvedHelperText != null ? helperId : undefined}\n aria-label={label || parsed || placeholder ? undefined : t('colorPicker.pick')}\n onClick={() => setOpen((o) => !o)}\n onBlur={handleTriggerBlur}\n >\n <span className={clsx(styles.value, !parsed && styles.placeholder)}>\n {displayText ?? placeholder}\n </span>\n <span\n className={clsx(styles.preview, !parsed && styles.previewEmpty)}\n style={parsed ? ({ '--cp-fill': displayValue } as CSSProperties) : undefined}\n aria-hidden=\"true\"\n />\n </button>\n\n <FloatingPanel\n ref={popoverRef}\n open={open}\n triggerRef={triggerRef}\n onClose={closePopover}\n role=\"dialog\"\n ariaLabel=\"Color picker\"\n width={POPOVER_WIDTH}\n >\n <ColorPickerPanel value={currentColor} onChange={commit} swatches={swatches} />\n </FloatingPanel>\n\n {resolvedHelperText != null && (\n <Typography\n as=\"span\"\n id={helperId}\n variant=\"bodySmall\"\n color={resolvedError ? 'error' : 'muted'}\n className={styles.helper}\n >\n {resolvedHelperText}\n </Typography>\n )}\n </div>\n )\n})\n"],"names":["POPOVER_WIDTH","ColorPicker","forwardRef","label","size","error","helperText","required","fullWidth","disabled","value","defaultValue","onChange","swatches","name","placeholder","idProp","className","style","ref","t","useT","reactId","useId","id","helperId","form","useFormContext","isFormBound","bound","externalValue","isControlled","internal","setInternal","useState","currentColor","parsed","parseColor","displayValue","formatColor","displayText","resolvedError","resolvedHelperText","commit","color","triggerRef","useRef","popoverRef","open","setOpen","setTriggerRef","useCallback","node","closePopover","refocus","_a","handleTriggerBlur","event","next","_b","jsxs","clsx","styles","jsx","Typography","o","FloatingPanel","ColorPickerPanel"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { jsxs as N, jsx as m } from "react/jsx-runtime";
2
2
  import { useState as R, useRef as E, useEffect as P } from "react";
3
3
  import { clsx as te } from "clsx";
4
4
  import { I as L } from "./Icon-CophpkHo.js";
5
- import { a as re } from "./ConfigProvider-sEZzNTeU.js";
5
+ import { a as re } from "./ConfigProvider-BYruQYHC.js";
6
6
  const f = (s) => Math.min(1, Math.max(0, s)), y = (s) => Math.min(255, Math.max(0, Math.round(s)));
7
7
  function ne(s) {
8
8
  let n = s.trim().replace(/^#/, "");
@@ -333,4 +333,4 @@ export {
333
333
  F as p,
334
334
  _ as s
335
335
  };
336
- //# sourceMappingURL=ColorPickerPanel-CovWDIRt.js.map
336
+ //# sourceMappingURL=ColorPickerPanel-9tOQUL38.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColorPickerPanel-CovWDIRt.js","sources":["../src/components/ColorPicker/colorUtils.ts","../src/components/ColorPicker/ColorPickerPanel.tsx"],"sourcesContent":["/** Color math for the ColorPicker: hex ⇄ rgb ⇄ hsv, plus hex validation. All internal, no deps. */\n\nexport interface HSV {\n /** Hue 0–360 */\n h: number\n /** Saturation 0–1 */\n s: number\n /** Value/brightness 0–1 */\n v: number\n}\n\nexport interface RGB {\n r: number\n g: number\n b: number\n}\n\nexport interface RGBA extends RGB {\n /** Alpha 0–1 */\n a: number\n}\n\nexport const clamp01 = (n: number): number => Math.min(1, Math.max(0, n))\nconst clamp255 = (n: number): number => Math.min(255, Math.max(0, Math.round(n)))\n\n/** Normalizes any `#rgb`/`#rrggbb` (with or without `#`) to a lowercase `#rrggbb`, or `null` if invalid. */\nexport function normalizeHex(input: string): string | null {\n let h = input.trim().replace(/^#/, '')\n if (/^[0-9a-fA-F]{3}$/.test(h)) {\n h = h\n .split('')\n .map((c) => c + c)\n .join('')\n }\n return /^[0-9a-fA-F]{6}$/.test(h) ? `#${h.toLowerCase()}` : null\n}\n\n/** True for a complete `#rrggbb` (or `#rgb`) color. */\nexport const isValidHex = (input: string): boolean => normalizeHex(input) !== null\n\nexport function hexToRgb(hex: string): RGB {\n const h = (normalizeHex(hex) ?? '#000000').slice(1)\n return {\n r: parseInt(h.slice(0, 2), 16),\n g: parseInt(h.slice(2, 4), 16),\n b: parseInt(h.slice(4, 6), 16),\n }\n}\n\nexport function rgbToHex({ r, g, b }: RGB): string {\n const to = (n: number) =>\n Math.round(clamp01(n / 255) * 255)\n .toString(16)\n .padStart(2, '0')\n return `#${to(r)}${to(g)}${to(b)}`\n}\n\n/** RGB (0–255) → HSV. */\nexport function rgbToHsv({ r, g, b }: RGB): HSV {\n const rn = r / 255\n const gn = g / 255\n const bn = b / 255\n const max = Math.max(rn, gn, bn)\n const min = Math.min(rn, gn, bn)\n const d = max - min\n\n let h = 0\n if (d !== 0) {\n if (max === rn) h = ((gn - bn) / d) % 6\n else if (max === gn) h = (bn - rn) / d + 2\n else h = (rn - gn) / d + 4\n h *= 60\n if (h < 0) h += 360\n }\n const s = max === 0 ? 0 : d / max\n return { h, s, v: max }\n}\n\n/** HSV → RGB (0–255). */\nexport function hsvToRgb({ h, s, v }: HSV): RGB {\n const c = v * s\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1))\n const m = v - c\n let r = 0\n let g = 0\n let b = 0\n if (h < 60) [r, g, b] = [c, x, 0]\n else if (h < 120) [r, g, b] = [x, c, 0]\n else if (h < 180) [r, g, b] = [0, c, x]\n else if (h < 240) [r, g, b] = [0, x, c]\n else if (h < 300) [r, g, b] = [x, 0, c]\n else [r, g, b] = [c, 0, x]\n return { r: (r + m) * 255, g: (g + m) * 255, b: (b + m) * 255 }\n}\n\nexport const hexToHsv = (hex: string): HSV => rgbToHsv(hexToRgb(hex))\nexport const hsvToHex = (hsv: HSV): string => rgbToHex(hsvToRgb(hsv))\n\n/** A readable text/handle color (near-black or white) for sitting on top of a given hex fill. */\nexport function contrastOn(hex: string): string {\n const { r, g, b } = hexToRgb(hex)\n return (r * 299 + g * 587 + b * 114) / 1000 >= 150 ? '#04202b' : '#ffffff'\n}\n\nconst RGB_FUNC =\n /^rgba?\\(\\s*([\\d.]+)\\s*[, ]\\s*([\\d.]+)\\s*[, ]\\s*([\\d.]+)\\s*(?:[,/]\\s*([\\d.]+%?)\\s*)?\\)$/i\n\n/**\n * Parses any CSS color the picker understands — `#rgb` / `#rgba` / `#rrggbb` / `#rrggbbaa` hex (with\n * or without `#`), or `rgb()` / `rgba()` (alpha as `0–1` or a `%`) — to `{ r, g, b, a }` (`a` is\n * `0–1`), or `null` when it doesn't match.\n */\nexport function parseColor(input: string): RGBA | null {\n const s = input.trim()\n if (!s) return null\n\n // hex (with or without #) — 3 / 4 / 6 / 8 digits (3 & 4 expand each nibble to a byte)\n let h = s.replace(/^#/, '')\n if (/^[0-9a-fA-F]{3,4}$/.test(h)) {\n h = h\n .split('')\n .map((c) => c + c)\n .join('')\n }\n if (/^[0-9a-fA-F]{6}$/.test(h)) {\n return {\n r: parseInt(h.slice(0, 2), 16),\n g: parseInt(h.slice(2, 4), 16),\n b: parseInt(h.slice(4, 6), 16),\n a: 1,\n }\n }\n if (/^[0-9a-fA-F]{8}$/.test(h)) {\n return {\n r: parseInt(h.slice(0, 2), 16),\n g: parseInt(h.slice(2, 4), 16),\n b: parseInt(h.slice(4, 6), 16),\n a: clamp01(parseInt(h.slice(6, 8), 16) / 255),\n }\n }\n\n // rgb() / rgba()\n const m = s.match(RGB_FUNC)\n if (m) {\n let a = 1\n if (m[4] != null) {\n a = m[4].endsWith('%') ? clamp01(parseFloat(m[4]) / 100) : clamp01(parseFloat(m[4]))\n }\n return { r: clamp255(+m[1]), g: clamp255(+m[2]), b: clamp255(+m[3]), a }\n }\n return null\n}\n\n/**\n * Formats `{ r, g, b, a }` back to a CSS string: `#rrggbb` when fully opaque (`a >= 1`), else\n * `rgba(r, g, b, a)` with alpha rounded to 2 decimals.\n */\nexport function formatColor({ r, g, b, a }: RGBA): string {\n if (a >= 1) return rgbToHex({ r, g, b })\n return `rgba(${clamp255(r)}, ${clamp255(g)}, ${clamp255(b)}, ${Math.round(clamp01(a) * 100) / 100})`\n}\n","import {\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { Icon } from '../Icon'\nimport {\n clamp01,\n contrastOn,\n formatColor,\n hexToHsv,\n hsvToRgb,\n parseColor,\n rgbToHex,\n rgbToHsv,\n type HSV,\n} from './colorUtils'\nimport styles from './ColorPicker.module.css'\n\n/** A pleasant default palette shown as quick-pick swatches. */\nexport const DEFAULT_SWATCHES = [\n '#13404e',\n '#039aa1',\n '#00a854',\n '#0ea5e9',\n '#6366f1',\n '#7c3aed',\n '#f04134',\n '#f59e0b',\n '#ffbf00',\n '#10b981',\n '#64748b',\n '#0f172a',\n '#ffffff',\n]\n\nconst FALLBACK_HSV: HSV = hexToHsv('#13404e')\n\nexport interface ColorPickerPanelProps {\n /** Current color — a CSS color string (`#rrggbb`, `rgba(...)`, or `''` when unset). */\n value: string\n /** Fires with the next color: `#rrggbb` when opaque, `rgba(r, g, b, a)` when translucent, `''` when cleared. */\n onChange: (color: string) => void\n /** Quick-pick swatches. Defaults to a curated palette. */\n swatches?: string[]\n /** Show the leading \"no color\" swatch that clears the value. Defaults to `true`. */\n clearable?: boolean\n}\n\n/**\n * The color-picking surface — a saturation/value square, hue + alpha sliders, a color input and\n * quick-pick swatches. Controlled by a single color `string` (`value` / `onChange`), so it drops into\n * any popover. Working state is kept as HSV + alpha (hue survives dragging at grey/black), re-derived\n * from `value` only on external changes. Used by `ColorPicker` (the field) and the `RichTextEditor`\n * text-color control. Token-styled except the spectrum gradients + alpha checkerboard (literal colors).\n */\nexport function ColorPickerPanel({\n value,\n onChange,\n swatches = DEFAULT_SWATCHES,\n clearable = true,\n}: ColorPickerPanelProps) {\n const t = useT()\n const parsed = parseColor(value || '')\n // canonical string for the value (`#rrggbb` when opaque, `rgba(...)` when not), null when unset\n const displayValue = parsed ? formatColor(parsed) : null\n\n // working HSV + alpha (HSV keeps hue stable while dragging at grey/black; alpha is the opacity)\n const [hsv, setHsv] = useState<HSV>(parsed ? rgbToHsv(parsed) : FALLBACK_HSV)\n const hsvRef = useRef(hsv)\n hsvRef.current = hsv\n const [alpha, setAlpha] = useState<number>(parsed?.a ?? 1)\n const alphaRef = useRef(alpha)\n alphaRef.current = alpha\n\n // re-derive HSV + alpha only when the value changes from OUTSIDE our own edits (prop/preset/input)\n useEffect(() => {\n if (!parsed) return\n const cur = formatColor({ ...hsvToRgb(hsvRef.current), a: alphaRef.current })\n if (displayValue !== cur) {\n setHsv(rgbToHsv(parsed))\n setAlpha(parsed.a)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [displayValue])\n\n const applyHsv = (next: HSV) => {\n setHsv(next)\n onChange(formatColor({ ...hsvToRgb(next), a: alphaRef.current }))\n }\n\n const applyAlpha = (next: number) => {\n setAlpha(next)\n onChange(formatColor({ ...hsvToRgb(hsvRef.current), a: next }))\n }\n\n // drag (SV square + hue/alpha sliders)\n const drag =\n (onMove: (clientX: number, clientY: number, rect: DOMRect) => void) =>\n (event: ReactPointerEvent<HTMLDivElement>) => {\n event.preventDefault()\n const el = event.currentTarget\n const move = (clientX: number, clientY: number) =>\n onMove(clientX, clientY, el.getBoundingClientRect())\n move(event.clientX, event.clientY)\n const onPointerMove = (e: PointerEvent) => move(e.clientX, e.clientY)\n const onPointerUp = () => {\n window.removeEventListener('pointermove', onPointerMove)\n window.removeEventListener('pointerup', onPointerUp)\n }\n window.addEventListener('pointermove', onPointerMove)\n window.addEventListener('pointerup', onPointerUp)\n }\n\n const onSvDown = drag((x, y, rect) => {\n const s = clamp01((x - rect.left) / rect.width)\n const v = clamp01(1 - (y - rect.top) / rect.height)\n applyHsv({ ...hsvRef.current, s, v })\n })\n\n const onHueDown = drag((x, _y, rect) => {\n const h = clamp01((x - rect.left) / rect.width) * 360\n applyHsv({ ...hsvRef.current, h })\n })\n\n const onAlphaDown = drag((x, _y, rect) => {\n applyAlpha(clamp01((x - rect.left) / rect.width))\n })\n\n // keyboard control — arrows nudge, Home/End jump to the extents (mirrors Calendar/TimeColumns a11y)\n const SV_STEP = 0.01\n const onSvKey = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const { h, s, v } = hsvRef.current\n let ns = s\n let nv = v\n switch (event.key) {\n case 'ArrowLeft':\n ns = clamp01(s - SV_STEP)\n break\n case 'ArrowRight':\n ns = clamp01(s + SV_STEP)\n break\n case 'ArrowUp':\n nv = clamp01(v + SV_STEP)\n break\n case 'ArrowDown':\n nv = clamp01(v - SV_STEP)\n break\n default:\n return\n }\n event.preventDefault()\n applyHsv({ h, s: ns, v: nv })\n }\n const onHueKey = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const { h } = hsvRef.current\n let nh = h\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n nh = Math.max(0, h - 1)\n break\n case 'ArrowRight':\n case 'ArrowUp':\n nh = Math.min(360, h + 1)\n break\n case 'Home':\n nh = 0\n break\n case 'End':\n nh = 360\n break\n default:\n return\n }\n event.preventDefault()\n applyHsv({ ...hsvRef.current, h: nh })\n }\n const onAlphaKey = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n let na = alphaRef.current\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n na = clamp01(alphaRef.current - 0.01)\n break\n case 'ArrowRight':\n case 'ArrowUp':\n na = clamp01(alphaRef.current + 0.01)\n break\n case 'Home':\n na = 0\n break\n case 'End':\n na = 1\n break\n default:\n return\n }\n event.preventDefault()\n applyAlpha(na)\n }\n\n // color input (accepts hex / rgb() / rgba()) + clear\n const [colorDraft, setColorDraft] = useState('')\n useEffect(() => {\n setColorDraft(displayValue ?? '')\n }, [displayValue])\n\n const onColorInput = (raw: string) => {\n setColorDraft(raw)\n const p = parseColor(raw)\n if (p) {\n setHsv(rgbToHsv(p))\n setAlpha(p.a)\n onChange(formatColor(p))\n }\n }\n\n const handleClear = () => {\n onChange('')\n setHsv(FALLBACK_HSV)\n setAlpha(1)\n }\n\n // working color (hsv + alpha): the current swatch + the SV thumb (opaque) + the alpha track base\n const workingColor = formatColor({ ...hsvToRgb(hsv), a: alpha })\n const solidHex = rgbToHex(hsvToRgb(hsv))\n const cur = hsvToRgb(hsv)\n const cpRgb = `${Math.round(cur.r)}, ${Math.round(cur.g)}, ${Math.round(cur.b)}`\n\n return (\n <div className={styles.popover} style={{ '--cp-hue': hsv.h } as CSSProperties}>\n <div\n className={styles.sv}\n onPointerDown={onSvDown}\n onKeyDown={onSvKey}\n role=\"slider\"\n tabIndex={0}\n aria-label={t('colorPicker.saturation')}\n aria-valuetext={`${Math.round(hsv.s * 100)}% saturation, ${Math.round(hsv.v * 100)}% brightness`}\n >\n <span\n className={styles.svThumb}\n style={{ left: `${hsv.s * 100}%`, top: `${(1 - hsv.v) * 100}%`, background: solidHex }}\n />\n </div>\n\n <div\n className={styles.hue}\n onPointerDown={onHueDown}\n onKeyDown={onHueKey}\n role=\"slider\"\n tabIndex={0}\n aria-label={t('colorPicker.hue')}\n aria-valuemin={0}\n aria-valuemax={360}\n aria-valuenow={Math.round(hsv.h)}\n >\n <span className={styles.hueThumb} style={{ left: `${(hsv.h / 360) * 100}%` }} />\n </div>\n\n <div\n className={styles.alpha}\n onPointerDown={onAlphaDown}\n onKeyDown={onAlphaKey}\n role=\"slider\"\n tabIndex={0}\n aria-label={t('colorPicker.opacity')}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(alpha * 100)}\n style={{ '--cp-rgb': cpRgb } as CSSProperties}\n >\n <span className={styles.alphaThumb} style={{ left: `${alpha * 100}%` }} />\n </div>\n\n <div className={styles.hexRow}>\n <span\n className={styles.currentSwatch}\n style={{ '--cp-fill': workingColor } as CSSProperties}\n />\n <span className={styles.hexField}>\n <input\n className={styles.hexInput}\n value={colorDraft}\n spellCheck={false}\n maxLength={28}\n aria-label={t('colorPicker.value')}\n onChange={(e) => onColorInput(e.target.value)}\n />\n </span>\n </div>\n\n <div className={styles.swatches}>\n {/* \"no color\" — clears the value (the diagonal-stripe swatch); hidden when not clearable */}\n {clearable && (\n <button\n type=\"button\"\n className={clsx(styles.swatch, styles.swatchClear)}\n aria-label={t('colorPicker.noColor')}\n aria-pressed={!parsed}\n onClick={handleClear}\n >\n {!parsed && <Icon name=\"TickCircle\" size=\"sm\" />}\n </button>\n )}\n {swatches.map((sw) => {\n const p = parseColor(sw)\n if (!p) return null\n const swHex = formatColor({ r: p.r, g: p.g, b: p.b, a: 1 })\n const selected = displayValue === swHex\n return (\n <button\n key={sw}\n type=\"button\"\n className={styles.swatch}\n style={{ background: swHex, color: contrastOn(swHex) }}\n aria-label={swHex}\n aria-pressed={selected}\n onClick={() => {\n setHsv(rgbToHsv(p))\n onChange(formatColor({ r: p.r, g: p.g, b: p.b, a: alphaRef.current }))\n }}\n >\n {selected && <Icon name=\"TickCircle\" size=\"sm\" />}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n"],"names":["clamp01","n","clamp255","normalizeHex","input","h","c","hexToRgb","hex","rgbToHex","r","g","b","to","rgbToHsv","rn","gn","bn","max","min","d","s","hsvToRgb","v","x","m","hexToHsv","contrastOn","RGB_FUNC","parseColor","a","formatColor","DEFAULT_SWATCHES","FALLBACK_HSV","ColorPickerPanel","value","onChange","swatches","clearable","t","useT","parsed","displayValue","hsv","setHsv","useState","hsvRef","useRef","alpha","setAlpha","alphaRef","useEffect","cur","applyHsv","next","applyAlpha","drag","onMove","event","el","move","clientX","clientY","onPointerMove","e","onPointerUp","onSvDown","y","rect","onHueDown","_y","onAlphaDown","SV_STEP","onSvKey","ns","nv","onHueKey","nh","onAlphaKey","na","colorDraft","setColorDraft","onColorInput","raw","p","handleClear","workingColor","solidHex","cpRgb","jsxs","styles","jsx","clsx","Icon","sw","swHex","selected"],"mappings":"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"}
1
+ {"version":3,"file":"ColorPickerPanel-9tOQUL38.js","sources":["../src/components/ColorPicker/colorUtils.ts","../src/components/ColorPicker/ColorPickerPanel.tsx"],"sourcesContent":["/** Color math for the ColorPicker: hex ⇄ rgb ⇄ hsv, plus hex validation. All internal, no deps. */\n\nexport interface HSV {\n /** Hue 0–360 */\n h: number\n /** Saturation 0–1 */\n s: number\n /** Value/brightness 0–1 */\n v: number\n}\n\nexport interface RGB {\n r: number\n g: number\n b: number\n}\n\nexport interface RGBA extends RGB {\n /** Alpha 0–1 */\n a: number\n}\n\nexport const clamp01 = (n: number): number => Math.min(1, Math.max(0, n))\nconst clamp255 = (n: number): number => Math.min(255, Math.max(0, Math.round(n)))\n\n/** Normalizes any `#rgb`/`#rrggbb` (with or without `#`) to a lowercase `#rrggbb`, or `null` if invalid. */\nexport function normalizeHex(input: string): string | null {\n let h = input.trim().replace(/^#/, '')\n if (/^[0-9a-fA-F]{3}$/.test(h)) {\n h = h\n .split('')\n .map((c) => c + c)\n .join('')\n }\n return /^[0-9a-fA-F]{6}$/.test(h) ? `#${h.toLowerCase()}` : null\n}\n\n/** True for a complete `#rrggbb` (or `#rgb`) color. */\nexport const isValidHex = (input: string): boolean => normalizeHex(input) !== null\n\nexport function hexToRgb(hex: string): RGB {\n const h = (normalizeHex(hex) ?? '#000000').slice(1)\n return {\n r: parseInt(h.slice(0, 2), 16),\n g: parseInt(h.slice(2, 4), 16),\n b: parseInt(h.slice(4, 6), 16),\n }\n}\n\nexport function rgbToHex({ r, g, b }: RGB): string {\n const to = (n: number) =>\n Math.round(clamp01(n / 255) * 255)\n .toString(16)\n .padStart(2, '0')\n return `#${to(r)}${to(g)}${to(b)}`\n}\n\n/** RGB (0–255) → HSV. */\nexport function rgbToHsv({ r, g, b }: RGB): HSV {\n const rn = r / 255\n const gn = g / 255\n const bn = b / 255\n const max = Math.max(rn, gn, bn)\n const min = Math.min(rn, gn, bn)\n const d = max - min\n\n let h = 0\n if (d !== 0) {\n if (max === rn) h = ((gn - bn) / d) % 6\n else if (max === gn) h = (bn - rn) / d + 2\n else h = (rn - gn) / d + 4\n h *= 60\n if (h < 0) h += 360\n }\n const s = max === 0 ? 0 : d / max\n return { h, s, v: max }\n}\n\n/** HSV → RGB (0–255). */\nexport function hsvToRgb({ h, s, v }: HSV): RGB {\n const c = v * s\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1))\n const m = v - c\n let r = 0\n let g = 0\n let b = 0\n if (h < 60) [r, g, b] = [c, x, 0]\n else if (h < 120) [r, g, b] = [x, c, 0]\n else if (h < 180) [r, g, b] = [0, c, x]\n else if (h < 240) [r, g, b] = [0, x, c]\n else if (h < 300) [r, g, b] = [x, 0, c]\n else [r, g, b] = [c, 0, x]\n return { r: (r + m) * 255, g: (g + m) * 255, b: (b + m) * 255 }\n}\n\nexport const hexToHsv = (hex: string): HSV => rgbToHsv(hexToRgb(hex))\nexport const hsvToHex = (hsv: HSV): string => rgbToHex(hsvToRgb(hsv))\n\n/** A readable text/handle color (near-black or white) for sitting on top of a given hex fill. */\nexport function contrastOn(hex: string): string {\n const { r, g, b } = hexToRgb(hex)\n return (r * 299 + g * 587 + b * 114) / 1000 >= 150 ? '#04202b' : '#ffffff'\n}\n\nconst RGB_FUNC =\n /^rgba?\\(\\s*([\\d.]+)\\s*[, ]\\s*([\\d.]+)\\s*[, ]\\s*([\\d.]+)\\s*(?:[,/]\\s*([\\d.]+%?)\\s*)?\\)$/i\n\n/**\n * Parses any CSS color the picker understands — `#rgb` / `#rgba` / `#rrggbb` / `#rrggbbaa` hex (with\n * or without `#`), or `rgb()` / `rgba()` (alpha as `0–1` or a `%`) — to `{ r, g, b, a }` (`a` is\n * `0–1`), or `null` when it doesn't match.\n */\nexport function parseColor(input: string): RGBA | null {\n const s = input.trim()\n if (!s) return null\n\n // hex (with or without #) — 3 / 4 / 6 / 8 digits (3 & 4 expand each nibble to a byte)\n let h = s.replace(/^#/, '')\n if (/^[0-9a-fA-F]{3,4}$/.test(h)) {\n h = h\n .split('')\n .map((c) => c + c)\n .join('')\n }\n if (/^[0-9a-fA-F]{6}$/.test(h)) {\n return {\n r: parseInt(h.slice(0, 2), 16),\n g: parseInt(h.slice(2, 4), 16),\n b: parseInt(h.slice(4, 6), 16),\n a: 1,\n }\n }\n if (/^[0-9a-fA-F]{8}$/.test(h)) {\n return {\n r: parseInt(h.slice(0, 2), 16),\n g: parseInt(h.slice(2, 4), 16),\n b: parseInt(h.slice(4, 6), 16),\n a: clamp01(parseInt(h.slice(6, 8), 16) / 255),\n }\n }\n\n // rgb() / rgba()\n const m = s.match(RGB_FUNC)\n if (m) {\n let a = 1\n if (m[4] != null) {\n a = m[4].endsWith('%') ? clamp01(parseFloat(m[4]) / 100) : clamp01(parseFloat(m[4]))\n }\n return { r: clamp255(+m[1]), g: clamp255(+m[2]), b: clamp255(+m[3]), a }\n }\n return null\n}\n\n/**\n * Formats `{ r, g, b, a }` back to a CSS string: `#rrggbb` when fully opaque (`a >= 1`), else\n * `rgba(r, g, b, a)` with alpha rounded to 2 decimals.\n */\nexport function formatColor({ r, g, b, a }: RGBA): string {\n if (a >= 1) return rgbToHex({ r, g, b })\n return `rgba(${clamp255(r)}, ${clamp255(g)}, ${clamp255(b)}, ${Math.round(clamp01(a) * 100) / 100})`\n}\n","import {\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { Icon } from '../Icon'\nimport {\n clamp01,\n contrastOn,\n formatColor,\n hexToHsv,\n hsvToRgb,\n parseColor,\n rgbToHex,\n rgbToHsv,\n type HSV,\n} from './colorUtils'\nimport styles from './ColorPicker.module.css'\n\n/** A pleasant default palette shown as quick-pick swatches. */\nexport const DEFAULT_SWATCHES = [\n '#13404e',\n '#039aa1',\n '#00a854',\n '#0ea5e9',\n '#6366f1',\n '#7c3aed',\n '#f04134',\n '#f59e0b',\n '#ffbf00',\n '#10b981',\n '#64748b',\n '#0f172a',\n '#ffffff',\n]\n\nconst FALLBACK_HSV: HSV = hexToHsv('#13404e')\n\nexport interface ColorPickerPanelProps {\n /** Current color — a CSS color string (`#rrggbb`, `rgba(...)`, or `''` when unset). */\n value: string\n /** Fires with the next color: `#rrggbb` when opaque, `rgba(r, g, b, a)` when translucent, `''` when cleared. */\n onChange: (color: string) => void\n /** Quick-pick swatches. Defaults to a curated palette. */\n swatches?: string[]\n /** Show the leading \"no color\" swatch that clears the value. Defaults to `true`. */\n clearable?: boolean\n}\n\n/**\n * The color-picking surface — a saturation/value square, hue + alpha sliders, a color input and\n * quick-pick swatches. Controlled by a single color `string` (`value` / `onChange`), so it drops into\n * any popover. Working state is kept as HSV + alpha (hue survives dragging at grey/black), re-derived\n * from `value` only on external changes. Used by `ColorPicker` (the field) and the `RichTextEditor`\n * text-color control. Token-styled except the spectrum gradients + alpha checkerboard (literal colors).\n */\nexport function ColorPickerPanel({\n value,\n onChange,\n swatches = DEFAULT_SWATCHES,\n clearable = true,\n}: ColorPickerPanelProps) {\n const t = useT()\n const parsed = parseColor(value || '')\n // canonical string for the value (`#rrggbb` when opaque, `rgba(...)` when not), null when unset\n const displayValue = parsed ? formatColor(parsed) : null\n\n // working HSV + alpha (HSV keeps hue stable while dragging at grey/black; alpha is the opacity)\n const [hsv, setHsv] = useState<HSV>(parsed ? rgbToHsv(parsed) : FALLBACK_HSV)\n const hsvRef = useRef(hsv)\n hsvRef.current = hsv\n const [alpha, setAlpha] = useState<number>(parsed?.a ?? 1)\n const alphaRef = useRef(alpha)\n alphaRef.current = alpha\n\n // re-derive HSV + alpha only when the value changes from OUTSIDE our own edits (prop/preset/input)\n useEffect(() => {\n if (!parsed) return\n const cur = formatColor({ ...hsvToRgb(hsvRef.current), a: alphaRef.current })\n if (displayValue !== cur) {\n setHsv(rgbToHsv(parsed))\n setAlpha(parsed.a)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [displayValue])\n\n const applyHsv = (next: HSV) => {\n setHsv(next)\n onChange(formatColor({ ...hsvToRgb(next), a: alphaRef.current }))\n }\n\n const applyAlpha = (next: number) => {\n setAlpha(next)\n onChange(formatColor({ ...hsvToRgb(hsvRef.current), a: next }))\n }\n\n // drag (SV square + hue/alpha sliders)\n const drag =\n (onMove: (clientX: number, clientY: number, rect: DOMRect) => void) =>\n (event: ReactPointerEvent<HTMLDivElement>) => {\n event.preventDefault()\n const el = event.currentTarget\n const move = (clientX: number, clientY: number) =>\n onMove(clientX, clientY, el.getBoundingClientRect())\n move(event.clientX, event.clientY)\n const onPointerMove = (e: PointerEvent) => move(e.clientX, e.clientY)\n const onPointerUp = () => {\n window.removeEventListener('pointermove', onPointerMove)\n window.removeEventListener('pointerup', onPointerUp)\n }\n window.addEventListener('pointermove', onPointerMove)\n window.addEventListener('pointerup', onPointerUp)\n }\n\n const onSvDown = drag((x, y, rect) => {\n const s = clamp01((x - rect.left) / rect.width)\n const v = clamp01(1 - (y - rect.top) / rect.height)\n applyHsv({ ...hsvRef.current, s, v })\n })\n\n const onHueDown = drag((x, _y, rect) => {\n const h = clamp01((x - rect.left) / rect.width) * 360\n applyHsv({ ...hsvRef.current, h })\n })\n\n const onAlphaDown = drag((x, _y, rect) => {\n applyAlpha(clamp01((x - rect.left) / rect.width))\n })\n\n // keyboard control — arrows nudge, Home/End jump to the extents (mirrors Calendar/TimeColumns a11y)\n const SV_STEP = 0.01\n const onSvKey = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const { h, s, v } = hsvRef.current\n let ns = s\n let nv = v\n switch (event.key) {\n case 'ArrowLeft':\n ns = clamp01(s - SV_STEP)\n break\n case 'ArrowRight':\n ns = clamp01(s + SV_STEP)\n break\n case 'ArrowUp':\n nv = clamp01(v + SV_STEP)\n break\n case 'ArrowDown':\n nv = clamp01(v - SV_STEP)\n break\n default:\n return\n }\n event.preventDefault()\n applyHsv({ h, s: ns, v: nv })\n }\n const onHueKey = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const { h } = hsvRef.current\n let nh = h\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n nh = Math.max(0, h - 1)\n break\n case 'ArrowRight':\n case 'ArrowUp':\n nh = Math.min(360, h + 1)\n break\n case 'Home':\n nh = 0\n break\n case 'End':\n nh = 360\n break\n default:\n return\n }\n event.preventDefault()\n applyHsv({ ...hsvRef.current, h: nh })\n }\n const onAlphaKey = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n let na = alphaRef.current\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n na = clamp01(alphaRef.current - 0.01)\n break\n case 'ArrowRight':\n case 'ArrowUp':\n na = clamp01(alphaRef.current + 0.01)\n break\n case 'Home':\n na = 0\n break\n case 'End':\n na = 1\n break\n default:\n return\n }\n event.preventDefault()\n applyAlpha(na)\n }\n\n // color input (accepts hex / rgb() / rgba()) + clear\n const [colorDraft, setColorDraft] = useState('')\n useEffect(() => {\n setColorDraft(displayValue ?? '')\n }, [displayValue])\n\n const onColorInput = (raw: string) => {\n setColorDraft(raw)\n const p = parseColor(raw)\n if (p) {\n setHsv(rgbToHsv(p))\n setAlpha(p.a)\n onChange(formatColor(p))\n }\n }\n\n const handleClear = () => {\n onChange('')\n setHsv(FALLBACK_HSV)\n setAlpha(1)\n }\n\n // working color (hsv + alpha): the current swatch + the SV thumb (opaque) + the alpha track base\n const workingColor = formatColor({ ...hsvToRgb(hsv), a: alpha })\n const solidHex = rgbToHex(hsvToRgb(hsv))\n const cur = hsvToRgb(hsv)\n const cpRgb = `${Math.round(cur.r)}, ${Math.round(cur.g)}, ${Math.round(cur.b)}`\n\n return (\n <div className={styles.popover} style={{ '--cp-hue': hsv.h } as CSSProperties}>\n <div\n className={styles.sv}\n onPointerDown={onSvDown}\n onKeyDown={onSvKey}\n role=\"slider\"\n tabIndex={0}\n aria-label={t('colorPicker.saturation')}\n aria-valuetext={`${Math.round(hsv.s * 100)}% saturation, ${Math.round(hsv.v * 100)}% brightness`}\n >\n <span\n className={styles.svThumb}\n style={{ left: `${hsv.s * 100}%`, top: `${(1 - hsv.v) * 100}%`, background: solidHex }}\n />\n </div>\n\n <div\n className={styles.hue}\n onPointerDown={onHueDown}\n onKeyDown={onHueKey}\n role=\"slider\"\n tabIndex={0}\n aria-label={t('colorPicker.hue')}\n aria-valuemin={0}\n aria-valuemax={360}\n aria-valuenow={Math.round(hsv.h)}\n >\n <span className={styles.hueThumb} style={{ left: `${(hsv.h / 360) * 100}%` }} />\n </div>\n\n <div\n className={styles.alpha}\n onPointerDown={onAlphaDown}\n onKeyDown={onAlphaKey}\n role=\"slider\"\n tabIndex={0}\n aria-label={t('colorPicker.opacity')}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(alpha * 100)}\n style={{ '--cp-rgb': cpRgb } as CSSProperties}\n >\n <span className={styles.alphaThumb} style={{ left: `${alpha * 100}%` }} />\n </div>\n\n <div className={styles.hexRow}>\n <span\n className={styles.currentSwatch}\n style={{ '--cp-fill': workingColor } as CSSProperties}\n />\n <span className={styles.hexField}>\n <input\n className={styles.hexInput}\n value={colorDraft}\n spellCheck={false}\n maxLength={28}\n aria-label={t('colorPicker.value')}\n onChange={(e) => onColorInput(e.target.value)}\n />\n </span>\n </div>\n\n <div className={styles.swatches}>\n {/* \"no color\" — clears the value (the diagonal-stripe swatch); hidden when not clearable */}\n {clearable && (\n <button\n type=\"button\"\n className={clsx(styles.swatch, styles.swatchClear)}\n aria-label={t('colorPicker.noColor')}\n aria-pressed={!parsed}\n onClick={handleClear}\n >\n {!parsed && <Icon name=\"TickCircle\" size=\"sm\" />}\n </button>\n )}\n {swatches.map((sw) => {\n const p = parseColor(sw)\n if (!p) return null\n const swHex = formatColor({ r: p.r, g: p.g, b: p.b, a: 1 })\n const selected = displayValue === swHex\n return (\n <button\n key={sw}\n type=\"button\"\n className={styles.swatch}\n style={{ background: swHex, color: contrastOn(swHex) }}\n aria-label={swHex}\n aria-pressed={selected}\n onClick={() => {\n setHsv(rgbToHsv(p))\n onChange(formatColor({ r: p.r, g: p.g, b: p.b, a: alphaRef.current }))\n }}\n >\n {selected && <Icon name=\"TickCircle\" size=\"sm\" />}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n"],"names":["clamp01","n","clamp255","normalizeHex","input","h","c","hexToRgb","hex","rgbToHex","r","g","b","to","rgbToHsv","rn","gn","bn","max","min","d","s","hsvToRgb","v","x","m","hexToHsv","contrastOn","RGB_FUNC","parseColor","a","formatColor","DEFAULT_SWATCHES","FALLBACK_HSV","ColorPickerPanel","value","onChange","swatches","clearable","t","useT","parsed","displayValue","hsv","setHsv","useState","hsvRef","useRef","alpha","setAlpha","alphaRef","useEffect","cur","applyHsv","next","applyAlpha","drag","onMove","event","el","move","clientX","clientY","onPointerMove","e","onPointerUp","onSvDown","y","rect","onHueDown","_y","onAlphaDown","SV_STEP","onSvKey","ns","nv","onHueKey","nh","onAlphaKey","na","colorDraft","setColorDraft","onColorInput","raw","p","handleClear","workingColor","solidHex","cpRgb","jsxs","styles","jsx","clsx","Icon","sw","swHex","selected"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";const _=require("react/jsx-runtime"),g=require("react"),Z=require("clsx"),P=require("./Icon-CXTl_QAP.cjs"),ee=require("./ConfigProvider-DFy6pL-C.cjs"),d=n=>Math.min(1,Math.max(0,n)),A=n=>Math.min(255,Math.max(0,Math.round(n)));function te(n){let s=n.trim().replace(/^#/,"");return/^[0-9a-fA-F]{3}$/.test(s)&&(s=s.split("").map(a=>a+a).join("")),/^[0-9a-fA-F]{6}$/.test(s)?`#${s.toLowerCase()}`:null}function H(n){const s=(te(n)??"#000000").slice(1);return{r:parseInt(s.slice(0,2),16),g:parseInt(s.slice(2,4),16),b:parseInt(s.slice(4,6),16)}}function N({r:n,g:s,b:a}){const e=c=>Math.round(d(c/255)*255).toString(16).padStart(2,"0");return`#${e(n)}${e(s)}${e(a)}`}function T({r:n,g:s,b:a}){const e=n/255,c=s/255,i=a/255,u=Math.max(e,c,i),l=Math.min(e,c,i),h=u-l;let p=0;h!==0&&(u===e?p=(c-i)/h%6:u===c?p=(i-e)/h+2:p=(e-c)/h+4,p*=60,p<0&&(p+=360));const v=u===0?0:h/u;return{h:p,s:v,v:u}}function y({h:n,s,v:a}){const e=a*s,c=e*(1-Math.abs(n/60%2-1)),i=a-e;let u=0,l=0,h=0;return n<60?[u,l,h]=[e,c,0]:n<120?[u,l,h]=[c,e,0]:n<180?[u,l,h]=[0,e,c]:n<240?[u,l,h]=[0,c,e]:n<300?[u,l,h]=[c,0,e]:[u,l,h]=[e,0,c],{r:(u+i)*255,g:(l+i)*255,b:(h+i)*255}}const re=n=>T(H(n));function se(n){const{r:s,g:a,b:e}=H(n);return(s*299+a*587+e*114)/1e3>=150?"#04202b":"#ffffff"}const ne=/^rgba?\(\s*([\d.]+)\s*[, ]\s*([\d.]+)\s*[, ]\s*([\d.]+)\s*(?:[,/]\s*([\d.]+%?)\s*)?\)$/i;function M(n){const s=n.trim();if(!s)return null;let a=s.replace(/^#/,"");if(/^[0-9a-fA-F]{3,4}$/.test(a)&&(a=a.split("").map(c=>c+c).join("")),/^[0-9a-fA-F]{6}$/.test(a))return{r:parseInt(a.slice(0,2),16),g:parseInt(a.slice(2,4),16),b:parseInt(a.slice(4,6),16),a:1};if(/^[0-9a-fA-F]{8}$/.test(a))return{r:parseInt(a.slice(0,2),16),g:parseInt(a.slice(2,4),16),b:parseInt(a.slice(4,6),16),a:d(parseInt(a.slice(6,8),16)/255)};const e=s.match(ne);if(e){let c=1;return e[4]!=null&&(c=e[4].endsWith("%")?d(parseFloat(e[4])/100):d(parseFloat(e[4]))),{r:A(+e[1]),g:A(+e[2]),b:A(+e[3]),a:c}}return null}function b({r:n,g:s,b:a,a:e}){return e>=1?N({r:n,g:s,b:a}):`rgba(${A(n)}, ${A(s)}, ${A(a)}, ${Math.round(d(e)*100)/100})`}const ae="_field_5rt4i_1",oe="_fullWidth_5rt4i_6",ce="_label_5rt4i_11",le="_required_5rt4i_17",ie="_control_5rt4i_23",ue="_open_5rt4i_44",he="_error_5rt4i_49",pe="_disabled_5rt4i_57",_e="_value_5rt4i_64",fe="_placeholder_5rt4i_73",de="_preview_5rt4i_81",me="_previewEmpty_5rt4i_101",be="_helper_5rt4i_113",we="_popover_5rt4i_118",ve="_sv_5rt4i_128",xe="_svThumb_5rt4i_139",ge="_hue_5rt4i_150",ke="_hueThumb_5rt4i_168",ye="_alphaThumb_5rt4i_169",Ae="_alpha_5rt4i_169",Te="_hexRow_5rt4i_202",Ce="_currentSwatch_5rt4i_207",$e="_hexField_5rt4i_223",Ie="_hexInput_5rt4i_235",De="_swatches_5rt4i_247",Me="_swatch_5rt4i_247",je="_swatchClear_5rt4i_264",Se="_sm_5rt4i_278",Re="_md_5rt4i_282",Ee="_lg_5rt4i_286",f={field:ae,fullWidth:oe,label:ce,required:le,control:ie,open:ue,error:he,disabled:pe,value:_e,placeholder:fe,preview:de,previewEmpty:me,helper:be,popover:we,sv:ve,svThumb:xe,hue:ge,hueThumb:ke,alphaThumb:ye,alpha:Ae,hexRow:Te,currentSwatch:Ce,hexField:$e,hexInput:Ie,swatches:De,swatch:Me,swatchClear:je,sm:Se,md:Re,lg:Ee},L=["#13404e","#039aa1","#00a854","#0ea5e9","#6366f1","#7c3aed","#f04134","#f59e0b","#ffbf00","#10b981","#64748b","#0f172a","#ffffff"],F=re("#13404e");function Pe({value:n,onChange:s,swatches:a=L,clearable:e=!0}){const c=ee.useT(),i=M(n||""),u=i?b(i):null,[l,h]=g.useState(i?T(i):F),p=g.useRef(l);p.current=l;const[v,C]=g.useState((i==null?void 0:i.a)??1),x=g.useRef(v);x.current=v,g.useEffect(()=>{if(!i)return;const r=b({...y(p.current),a:x.current});u!==r&&(h(T(i)),C(i.a))},[u]);const $=r=>{h(r),s(b({...y(r),a:x.current}))},R=r=>{C(r),s(b({...y(p.current),a:r}))},j=r=>t=>{t.preventDefault();const o=t.currentTarget,m=(D,Q)=>r(D,Q,o.getBoundingClientRect());m(t.clientX,t.clientY);const w=D=>m(D.clientX,D.clientY),k=()=>{window.removeEventListener("pointermove",w),window.removeEventListener("pointerup",k)};window.addEventListener("pointermove",w),window.addEventListener("pointerup",k)},q=j((r,t,o)=>{const m=d((r-o.left)/o.width),w=d(1-(t-o.top)/o.height);$({...p.current,s:m,v:w})}),K=j((r,t,o)=>{const m=d((r-o.left)/o.width)*360;$({...p.current,h:m})}),U=j((r,t,o)=>{R(d((r-o.left)/o.width))}),I=.01,W=r=>{const{h:t,s:o,v:m}=p.current;let w=o,k=m;switch(r.key){case"ArrowLeft":w=d(o-I);break;case"ArrowRight":w=d(o+I);break;case"ArrowUp":k=d(m+I);break;case"ArrowDown":k=d(m-I);break;default:return}r.preventDefault(),$({h:t,s:w,v:k})},z=r=>{const{h:t}=p.current;let o=t;switch(r.key){case"ArrowLeft":case"ArrowDown":o=Math.max(0,t-1);break;case"ArrowRight":case"ArrowUp":o=Math.min(360,t+1);break;case"Home":o=0;break;case"End":o=360;break;default:return}r.preventDefault(),$({...p.current,h:o})},B=r=>{let t=x.current;switch(r.key){case"ArrowLeft":case"ArrowDown":t=d(x.current-.01);break;case"ArrowRight":case"ArrowUp":t=d(x.current+.01);break;case"Home":t=0;break;case"End":t=1;break;default:return}r.preventDefault(),R(t)},[V,E]=g.useState("");g.useEffect(()=>{E(u??"")},[u]);const X=r=>{E(r);const t=M(r);t&&(h(T(t)),C(t.a),s(b(t)))},Y=()=>{s(""),h(F),C(1)},G=b({...y(l),a:v}),O=N(y(l)),S=y(l),J=`${Math.round(S.r)}, ${Math.round(S.g)}, ${Math.round(S.b)}`;return _.jsxs("div",{className:f.popover,style:{"--cp-hue":l.h},children:[_.jsx("div",{className:f.sv,onPointerDown:q,onKeyDown:W,role:"slider",tabIndex:0,"aria-label":c("colorPicker.saturation"),"aria-valuetext":`${Math.round(l.s*100)}% saturation, ${Math.round(l.v*100)}% brightness`,children:_.jsx("span",{className:f.svThumb,style:{left:`${l.s*100}%`,top:`${(1-l.v)*100}%`,background:O}})}),_.jsx("div",{className:f.hue,onPointerDown:K,onKeyDown:z,role:"slider",tabIndex:0,"aria-label":c("colorPicker.hue"),"aria-valuemin":0,"aria-valuemax":360,"aria-valuenow":Math.round(l.h),children:_.jsx("span",{className:f.hueThumb,style:{left:`${l.h/360*100}%`}})}),_.jsx("div",{className:f.alpha,onPointerDown:U,onKeyDown:B,role:"slider",tabIndex:0,"aria-label":c("colorPicker.opacity"),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(v*100),style:{"--cp-rgb":J},children:_.jsx("span",{className:f.alphaThumb,style:{left:`${v*100}%`}})}),_.jsxs("div",{className:f.hexRow,children:[_.jsx("span",{className:f.currentSwatch,style:{"--cp-fill":G}}),_.jsx("span",{className:f.hexField,children:_.jsx("input",{className:f.hexInput,value:V,spellCheck:!1,maxLength:28,"aria-label":c("colorPicker.value"),onChange:r=>X(r.target.value)})})]}),_.jsxs("div",{className:f.swatches,children:[e&&_.jsx("button",{type:"button",className:Z.clsx(f.swatch,f.swatchClear),"aria-label":c("colorPicker.noColor"),"aria-pressed":!i,onClick:Y,children:!i&&_.jsx(P.Icon,{name:"TickCircle",size:"sm"})}),a.map(r=>{const t=M(r);if(!t)return null;const o=b({r:t.r,g:t.g,b:t.b,a:1}),m=u===o;return _.jsx("button",{type:"button",className:f.swatch,style:{background:o,color:se(o)},"aria-label":o,"aria-pressed":m,onClick:()=>{h(T(t)),s(b({r:t.r,g:t.g,b:t.b,a:x.current}))},children:m&&_.jsx(P.Icon,{name:"TickCircle",size:"sm"})},r)})]})]})}exports.ColorPickerPanel=Pe;exports.DEFAULT_SWATCHES=L;exports.formatColor=b;exports.parseColor=M;exports.styles=f;
2
- //# sourceMappingURL=ColorPickerPanel-CkB2pNnX.cjs.map
1
+ "use strict";const _=require("react/jsx-runtime"),g=require("react"),Z=require("clsx"),P=require("./Icon-CXTl_QAP.cjs"),ee=require("./ConfigProvider-BHNx-NHV.cjs"),d=n=>Math.min(1,Math.max(0,n)),A=n=>Math.min(255,Math.max(0,Math.round(n)));function te(n){let s=n.trim().replace(/^#/,"");return/^[0-9a-fA-F]{3}$/.test(s)&&(s=s.split("").map(a=>a+a).join("")),/^[0-9a-fA-F]{6}$/.test(s)?`#${s.toLowerCase()}`:null}function H(n){const s=(te(n)??"#000000").slice(1);return{r:parseInt(s.slice(0,2),16),g:parseInt(s.slice(2,4),16),b:parseInt(s.slice(4,6),16)}}function N({r:n,g:s,b:a}){const e=c=>Math.round(d(c/255)*255).toString(16).padStart(2,"0");return`#${e(n)}${e(s)}${e(a)}`}function T({r:n,g:s,b:a}){const e=n/255,c=s/255,i=a/255,u=Math.max(e,c,i),l=Math.min(e,c,i),h=u-l;let p=0;h!==0&&(u===e?p=(c-i)/h%6:u===c?p=(i-e)/h+2:p=(e-c)/h+4,p*=60,p<0&&(p+=360));const v=u===0?0:h/u;return{h:p,s:v,v:u}}function y({h:n,s,v:a}){const e=a*s,c=e*(1-Math.abs(n/60%2-1)),i=a-e;let u=0,l=0,h=0;return n<60?[u,l,h]=[e,c,0]:n<120?[u,l,h]=[c,e,0]:n<180?[u,l,h]=[0,e,c]:n<240?[u,l,h]=[0,c,e]:n<300?[u,l,h]=[c,0,e]:[u,l,h]=[e,0,c],{r:(u+i)*255,g:(l+i)*255,b:(h+i)*255}}const re=n=>T(H(n));function se(n){const{r:s,g:a,b:e}=H(n);return(s*299+a*587+e*114)/1e3>=150?"#04202b":"#ffffff"}const ne=/^rgba?\(\s*([\d.]+)\s*[, ]\s*([\d.]+)\s*[, ]\s*([\d.]+)\s*(?:[,/]\s*([\d.]+%?)\s*)?\)$/i;function M(n){const s=n.trim();if(!s)return null;let a=s.replace(/^#/,"");if(/^[0-9a-fA-F]{3,4}$/.test(a)&&(a=a.split("").map(c=>c+c).join("")),/^[0-9a-fA-F]{6}$/.test(a))return{r:parseInt(a.slice(0,2),16),g:parseInt(a.slice(2,4),16),b:parseInt(a.slice(4,6),16),a:1};if(/^[0-9a-fA-F]{8}$/.test(a))return{r:parseInt(a.slice(0,2),16),g:parseInt(a.slice(2,4),16),b:parseInt(a.slice(4,6),16),a:d(parseInt(a.slice(6,8),16)/255)};const e=s.match(ne);if(e){let c=1;return e[4]!=null&&(c=e[4].endsWith("%")?d(parseFloat(e[4])/100):d(parseFloat(e[4]))),{r:A(+e[1]),g:A(+e[2]),b:A(+e[3]),a:c}}return null}function b({r:n,g:s,b:a,a:e}){return e>=1?N({r:n,g:s,b:a}):`rgba(${A(n)}, ${A(s)}, ${A(a)}, ${Math.round(d(e)*100)/100})`}const ae="_field_5rt4i_1",oe="_fullWidth_5rt4i_6",ce="_label_5rt4i_11",le="_required_5rt4i_17",ie="_control_5rt4i_23",ue="_open_5rt4i_44",he="_error_5rt4i_49",pe="_disabled_5rt4i_57",_e="_value_5rt4i_64",fe="_placeholder_5rt4i_73",de="_preview_5rt4i_81",me="_previewEmpty_5rt4i_101",be="_helper_5rt4i_113",we="_popover_5rt4i_118",ve="_sv_5rt4i_128",xe="_svThumb_5rt4i_139",ge="_hue_5rt4i_150",ke="_hueThumb_5rt4i_168",ye="_alphaThumb_5rt4i_169",Ae="_alpha_5rt4i_169",Te="_hexRow_5rt4i_202",Ce="_currentSwatch_5rt4i_207",$e="_hexField_5rt4i_223",Ie="_hexInput_5rt4i_235",De="_swatches_5rt4i_247",Me="_swatch_5rt4i_247",je="_swatchClear_5rt4i_264",Se="_sm_5rt4i_278",Re="_md_5rt4i_282",Ee="_lg_5rt4i_286",f={field:ae,fullWidth:oe,label:ce,required:le,control:ie,open:ue,error:he,disabled:pe,value:_e,placeholder:fe,preview:de,previewEmpty:me,helper:be,popover:we,sv:ve,svThumb:xe,hue:ge,hueThumb:ke,alphaThumb:ye,alpha:Ae,hexRow:Te,currentSwatch:Ce,hexField:$e,hexInput:Ie,swatches:De,swatch:Me,swatchClear:je,sm:Se,md:Re,lg:Ee},L=["#13404e","#039aa1","#00a854","#0ea5e9","#6366f1","#7c3aed","#f04134","#f59e0b","#ffbf00","#10b981","#64748b","#0f172a","#ffffff"],F=re("#13404e");function Pe({value:n,onChange:s,swatches:a=L,clearable:e=!0}){const c=ee.useT(),i=M(n||""),u=i?b(i):null,[l,h]=g.useState(i?T(i):F),p=g.useRef(l);p.current=l;const[v,C]=g.useState((i==null?void 0:i.a)??1),x=g.useRef(v);x.current=v,g.useEffect(()=>{if(!i)return;const r=b({...y(p.current),a:x.current});u!==r&&(h(T(i)),C(i.a))},[u]);const $=r=>{h(r),s(b({...y(r),a:x.current}))},R=r=>{C(r),s(b({...y(p.current),a:r}))},j=r=>t=>{t.preventDefault();const o=t.currentTarget,m=(D,Q)=>r(D,Q,o.getBoundingClientRect());m(t.clientX,t.clientY);const w=D=>m(D.clientX,D.clientY),k=()=>{window.removeEventListener("pointermove",w),window.removeEventListener("pointerup",k)};window.addEventListener("pointermove",w),window.addEventListener("pointerup",k)},q=j((r,t,o)=>{const m=d((r-o.left)/o.width),w=d(1-(t-o.top)/o.height);$({...p.current,s:m,v:w})}),K=j((r,t,o)=>{const m=d((r-o.left)/o.width)*360;$({...p.current,h:m})}),U=j((r,t,o)=>{R(d((r-o.left)/o.width))}),I=.01,W=r=>{const{h:t,s:o,v:m}=p.current;let w=o,k=m;switch(r.key){case"ArrowLeft":w=d(o-I);break;case"ArrowRight":w=d(o+I);break;case"ArrowUp":k=d(m+I);break;case"ArrowDown":k=d(m-I);break;default:return}r.preventDefault(),$({h:t,s:w,v:k})},z=r=>{const{h:t}=p.current;let o=t;switch(r.key){case"ArrowLeft":case"ArrowDown":o=Math.max(0,t-1);break;case"ArrowRight":case"ArrowUp":o=Math.min(360,t+1);break;case"Home":o=0;break;case"End":o=360;break;default:return}r.preventDefault(),$({...p.current,h:o})},B=r=>{let t=x.current;switch(r.key){case"ArrowLeft":case"ArrowDown":t=d(x.current-.01);break;case"ArrowRight":case"ArrowUp":t=d(x.current+.01);break;case"Home":t=0;break;case"End":t=1;break;default:return}r.preventDefault(),R(t)},[V,E]=g.useState("");g.useEffect(()=>{E(u??"")},[u]);const X=r=>{E(r);const t=M(r);t&&(h(T(t)),C(t.a),s(b(t)))},Y=()=>{s(""),h(F),C(1)},G=b({...y(l),a:v}),O=N(y(l)),S=y(l),J=`${Math.round(S.r)}, ${Math.round(S.g)}, ${Math.round(S.b)}`;return _.jsxs("div",{className:f.popover,style:{"--cp-hue":l.h},children:[_.jsx("div",{className:f.sv,onPointerDown:q,onKeyDown:W,role:"slider",tabIndex:0,"aria-label":c("colorPicker.saturation"),"aria-valuetext":`${Math.round(l.s*100)}% saturation, ${Math.round(l.v*100)}% brightness`,children:_.jsx("span",{className:f.svThumb,style:{left:`${l.s*100}%`,top:`${(1-l.v)*100}%`,background:O}})}),_.jsx("div",{className:f.hue,onPointerDown:K,onKeyDown:z,role:"slider",tabIndex:0,"aria-label":c("colorPicker.hue"),"aria-valuemin":0,"aria-valuemax":360,"aria-valuenow":Math.round(l.h),children:_.jsx("span",{className:f.hueThumb,style:{left:`${l.h/360*100}%`}})}),_.jsx("div",{className:f.alpha,onPointerDown:U,onKeyDown:B,role:"slider",tabIndex:0,"aria-label":c("colorPicker.opacity"),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(v*100),style:{"--cp-rgb":J},children:_.jsx("span",{className:f.alphaThumb,style:{left:`${v*100}%`}})}),_.jsxs("div",{className:f.hexRow,children:[_.jsx("span",{className:f.currentSwatch,style:{"--cp-fill":G}}),_.jsx("span",{className:f.hexField,children:_.jsx("input",{className:f.hexInput,value:V,spellCheck:!1,maxLength:28,"aria-label":c("colorPicker.value"),onChange:r=>X(r.target.value)})})]}),_.jsxs("div",{className:f.swatches,children:[e&&_.jsx("button",{type:"button",className:Z.clsx(f.swatch,f.swatchClear),"aria-label":c("colorPicker.noColor"),"aria-pressed":!i,onClick:Y,children:!i&&_.jsx(P.Icon,{name:"TickCircle",size:"sm"})}),a.map(r=>{const t=M(r);if(!t)return null;const o=b({r:t.r,g:t.g,b:t.b,a:1}),m=u===o;return _.jsx("button",{type:"button",className:f.swatch,style:{background:o,color:se(o)},"aria-label":o,"aria-pressed":m,onClick:()=>{h(T(t)),s(b({r:t.r,g:t.g,b:t.b,a:x.current}))},children:m&&_.jsx(P.Icon,{name:"TickCircle",size:"sm"})},r)})]})]})}exports.ColorPickerPanel=Pe;exports.DEFAULT_SWATCHES=L;exports.formatColor=b;exports.parseColor=M;exports.styles=f;
2
+ //# sourceMappingURL=ColorPickerPanel-nXEliruE.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColorPickerPanel-CkB2pNnX.cjs","sources":["../src/components/ColorPicker/colorUtils.ts","../src/components/ColorPicker/ColorPickerPanel.tsx"],"sourcesContent":["/** Color math for the ColorPicker: hex ⇄ rgb ⇄ hsv, plus hex validation. All internal, no deps. */\n\nexport interface HSV {\n /** Hue 0–360 */\n h: number\n /** Saturation 0–1 */\n s: number\n /** Value/brightness 0–1 */\n v: number\n}\n\nexport interface RGB {\n r: number\n g: number\n b: number\n}\n\nexport interface RGBA extends RGB {\n /** Alpha 0–1 */\n a: number\n}\n\nexport const clamp01 = (n: number): number => Math.min(1, Math.max(0, n))\nconst clamp255 = (n: number): number => Math.min(255, Math.max(0, Math.round(n)))\n\n/** Normalizes any `#rgb`/`#rrggbb` (with or without `#`) to a lowercase `#rrggbb`, or `null` if invalid. */\nexport function normalizeHex(input: string): string | null {\n let h = input.trim().replace(/^#/, '')\n if (/^[0-9a-fA-F]{3}$/.test(h)) {\n h = h\n .split('')\n .map((c) => c + c)\n .join('')\n }\n return /^[0-9a-fA-F]{6}$/.test(h) ? `#${h.toLowerCase()}` : null\n}\n\n/** True for a complete `#rrggbb` (or `#rgb`) color. */\nexport const isValidHex = (input: string): boolean => normalizeHex(input) !== null\n\nexport function hexToRgb(hex: string): RGB {\n const h = (normalizeHex(hex) ?? '#000000').slice(1)\n return {\n r: parseInt(h.slice(0, 2), 16),\n g: parseInt(h.slice(2, 4), 16),\n b: parseInt(h.slice(4, 6), 16),\n }\n}\n\nexport function rgbToHex({ r, g, b }: RGB): string {\n const to = (n: number) =>\n Math.round(clamp01(n / 255) * 255)\n .toString(16)\n .padStart(2, '0')\n return `#${to(r)}${to(g)}${to(b)}`\n}\n\n/** RGB (0–255) → HSV. */\nexport function rgbToHsv({ r, g, b }: RGB): HSV {\n const rn = r / 255\n const gn = g / 255\n const bn = b / 255\n const max = Math.max(rn, gn, bn)\n const min = Math.min(rn, gn, bn)\n const d = max - min\n\n let h = 0\n if (d !== 0) {\n if (max === rn) h = ((gn - bn) / d) % 6\n else if (max === gn) h = (bn - rn) / d + 2\n else h = (rn - gn) / d + 4\n h *= 60\n if (h < 0) h += 360\n }\n const s = max === 0 ? 0 : d / max\n return { h, s, v: max }\n}\n\n/** HSV → RGB (0–255). */\nexport function hsvToRgb({ h, s, v }: HSV): RGB {\n const c = v * s\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1))\n const m = v - c\n let r = 0\n let g = 0\n let b = 0\n if (h < 60) [r, g, b] = [c, x, 0]\n else if (h < 120) [r, g, b] = [x, c, 0]\n else if (h < 180) [r, g, b] = [0, c, x]\n else if (h < 240) [r, g, b] = [0, x, c]\n else if (h < 300) [r, g, b] = [x, 0, c]\n else [r, g, b] = [c, 0, x]\n return { r: (r + m) * 255, g: (g + m) * 255, b: (b + m) * 255 }\n}\n\nexport const hexToHsv = (hex: string): HSV => rgbToHsv(hexToRgb(hex))\nexport const hsvToHex = (hsv: HSV): string => rgbToHex(hsvToRgb(hsv))\n\n/** A readable text/handle color (near-black or white) for sitting on top of a given hex fill. */\nexport function contrastOn(hex: string): string {\n const { r, g, b } = hexToRgb(hex)\n return (r * 299 + g * 587 + b * 114) / 1000 >= 150 ? '#04202b' : '#ffffff'\n}\n\nconst RGB_FUNC =\n /^rgba?\\(\\s*([\\d.]+)\\s*[, ]\\s*([\\d.]+)\\s*[, ]\\s*([\\d.]+)\\s*(?:[,/]\\s*([\\d.]+%?)\\s*)?\\)$/i\n\n/**\n * Parses any CSS color the picker understands — `#rgb` / `#rgba` / `#rrggbb` / `#rrggbbaa` hex (with\n * or without `#`), or `rgb()` / `rgba()` (alpha as `0–1` or a `%`) — to `{ r, g, b, a }` (`a` is\n * `0–1`), or `null` when it doesn't match.\n */\nexport function parseColor(input: string): RGBA | null {\n const s = input.trim()\n if (!s) return null\n\n // hex (with or without #) — 3 / 4 / 6 / 8 digits (3 & 4 expand each nibble to a byte)\n let h = s.replace(/^#/, '')\n if (/^[0-9a-fA-F]{3,4}$/.test(h)) {\n h = h\n .split('')\n .map((c) => c + c)\n .join('')\n }\n if (/^[0-9a-fA-F]{6}$/.test(h)) {\n return {\n r: parseInt(h.slice(0, 2), 16),\n g: parseInt(h.slice(2, 4), 16),\n b: parseInt(h.slice(4, 6), 16),\n a: 1,\n }\n }\n if (/^[0-9a-fA-F]{8}$/.test(h)) {\n return {\n r: parseInt(h.slice(0, 2), 16),\n g: parseInt(h.slice(2, 4), 16),\n b: parseInt(h.slice(4, 6), 16),\n a: clamp01(parseInt(h.slice(6, 8), 16) / 255),\n }\n }\n\n // rgb() / rgba()\n const m = s.match(RGB_FUNC)\n if (m) {\n let a = 1\n if (m[4] != null) {\n a = m[4].endsWith('%') ? clamp01(parseFloat(m[4]) / 100) : clamp01(parseFloat(m[4]))\n }\n return { r: clamp255(+m[1]), g: clamp255(+m[2]), b: clamp255(+m[3]), a }\n }\n return null\n}\n\n/**\n * Formats `{ r, g, b, a }` back to a CSS string: `#rrggbb` when fully opaque (`a >= 1`), else\n * `rgba(r, g, b, a)` with alpha rounded to 2 decimals.\n */\nexport function formatColor({ r, g, b, a }: RGBA): string {\n if (a >= 1) return rgbToHex({ r, g, b })\n return `rgba(${clamp255(r)}, ${clamp255(g)}, ${clamp255(b)}, ${Math.round(clamp01(a) * 100) / 100})`\n}\n","import {\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { Icon } from '../Icon'\nimport {\n clamp01,\n contrastOn,\n formatColor,\n hexToHsv,\n hsvToRgb,\n parseColor,\n rgbToHex,\n rgbToHsv,\n type HSV,\n} from './colorUtils'\nimport styles from './ColorPicker.module.css'\n\n/** A pleasant default palette shown as quick-pick swatches. */\nexport const DEFAULT_SWATCHES = [\n '#13404e',\n '#039aa1',\n '#00a854',\n '#0ea5e9',\n '#6366f1',\n '#7c3aed',\n '#f04134',\n '#f59e0b',\n '#ffbf00',\n '#10b981',\n '#64748b',\n '#0f172a',\n '#ffffff',\n]\n\nconst FALLBACK_HSV: HSV = hexToHsv('#13404e')\n\nexport interface ColorPickerPanelProps {\n /** Current color — a CSS color string (`#rrggbb`, `rgba(...)`, or `''` when unset). */\n value: string\n /** Fires with the next color: `#rrggbb` when opaque, `rgba(r, g, b, a)` when translucent, `''` when cleared. */\n onChange: (color: string) => void\n /** Quick-pick swatches. Defaults to a curated palette. */\n swatches?: string[]\n /** Show the leading \"no color\" swatch that clears the value. Defaults to `true`. */\n clearable?: boolean\n}\n\n/**\n * The color-picking surface — a saturation/value square, hue + alpha sliders, a color input and\n * quick-pick swatches. Controlled by a single color `string` (`value` / `onChange`), so it drops into\n * any popover. Working state is kept as HSV + alpha (hue survives dragging at grey/black), re-derived\n * from `value` only on external changes. Used by `ColorPicker` (the field) and the `RichTextEditor`\n * text-color control. Token-styled except the spectrum gradients + alpha checkerboard (literal colors).\n */\nexport function ColorPickerPanel({\n value,\n onChange,\n swatches = DEFAULT_SWATCHES,\n clearable = true,\n}: ColorPickerPanelProps) {\n const t = useT()\n const parsed = parseColor(value || '')\n // canonical string for the value (`#rrggbb` when opaque, `rgba(...)` when not), null when unset\n const displayValue = parsed ? formatColor(parsed) : null\n\n // working HSV + alpha (HSV keeps hue stable while dragging at grey/black; alpha is the opacity)\n const [hsv, setHsv] = useState<HSV>(parsed ? rgbToHsv(parsed) : FALLBACK_HSV)\n const hsvRef = useRef(hsv)\n hsvRef.current = hsv\n const [alpha, setAlpha] = useState<number>(parsed?.a ?? 1)\n const alphaRef = useRef(alpha)\n alphaRef.current = alpha\n\n // re-derive HSV + alpha only when the value changes from OUTSIDE our own edits (prop/preset/input)\n useEffect(() => {\n if (!parsed) return\n const cur = formatColor({ ...hsvToRgb(hsvRef.current), a: alphaRef.current })\n if (displayValue !== cur) {\n setHsv(rgbToHsv(parsed))\n setAlpha(parsed.a)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [displayValue])\n\n const applyHsv = (next: HSV) => {\n setHsv(next)\n onChange(formatColor({ ...hsvToRgb(next), a: alphaRef.current }))\n }\n\n const applyAlpha = (next: number) => {\n setAlpha(next)\n onChange(formatColor({ ...hsvToRgb(hsvRef.current), a: next }))\n }\n\n // drag (SV square + hue/alpha sliders)\n const drag =\n (onMove: (clientX: number, clientY: number, rect: DOMRect) => void) =>\n (event: ReactPointerEvent<HTMLDivElement>) => {\n event.preventDefault()\n const el = event.currentTarget\n const move = (clientX: number, clientY: number) =>\n onMove(clientX, clientY, el.getBoundingClientRect())\n move(event.clientX, event.clientY)\n const onPointerMove = (e: PointerEvent) => move(e.clientX, e.clientY)\n const onPointerUp = () => {\n window.removeEventListener('pointermove', onPointerMove)\n window.removeEventListener('pointerup', onPointerUp)\n }\n window.addEventListener('pointermove', onPointerMove)\n window.addEventListener('pointerup', onPointerUp)\n }\n\n const onSvDown = drag((x, y, rect) => {\n const s = clamp01((x - rect.left) / rect.width)\n const v = clamp01(1 - (y - rect.top) / rect.height)\n applyHsv({ ...hsvRef.current, s, v })\n })\n\n const onHueDown = drag((x, _y, rect) => {\n const h = clamp01((x - rect.left) / rect.width) * 360\n applyHsv({ ...hsvRef.current, h })\n })\n\n const onAlphaDown = drag((x, _y, rect) => {\n applyAlpha(clamp01((x - rect.left) / rect.width))\n })\n\n // keyboard control — arrows nudge, Home/End jump to the extents (mirrors Calendar/TimeColumns a11y)\n const SV_STEP = 0.01\n const onSvKey = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const { h, s, v } = hsvRef.current\n let ns = s\n let nv = v\n switch (event.key) {\n case 'ArrowLeft':\n ns = clamp01(s - SV_STEP)\n break\n case 'ArrowRight':\n ns = clamp01(s + SV_STEP)\n break\n case 'ArrowUp':\n nv = clamp01(v + SV_STEP)\n break\n case 'ArrowDown':\n nv = clamp01(v - SV_STEP)\n break\n default:\n return\n }\n event.preventDefault()\n applyHsv({ h, s: ns, v: nv })\n }\n const onHueKey = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const { h } = hsvRef.current\n let nh = h\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n nh = Math.max(0, h - 1)\n break\n case 'ArrowRight':\n case 'ArrowUp':\n nh = Math.min(360, h + 1)\n break\n case 'Home':\n nh = 0\n break\n case 'End':\n nh = 360\n break\n default:\n return\n }\n event.preventDefault()\n applyHsv({ ...hsvRef.current, h: nh })\n }\n const onAlphaKey = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n let na = alphaRef.current\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n na = clamp01(alphaRef.current - 0.01)\n break\n case 'ArrowRight':\n case 'ArrowUp':\n na = clamp01(alphaRef.current + 0.01)\n break\n case 'Home':\n na = 0\n break\n case 'End':\n na = 1\n break\n default:\n return\n }\n event.preventDefault()\n applyAlpha(na)\n }\n\n // color input (accepts hex / rgb() / rgba()) + clear\n const [colorDraft, setColorDraft] = useState('')\n useEffect(() => {\n setColorDraft(displayValue ?? '')\n }, [displayValue])\n\n const onColorInput = (raw: string) => {\n setColorDraft(raw)\n const p = parseColor(raw)\n if (p) {\n setHsv(rgbToHsv(p))\n setAlpha(p.a)\n onChange(formatColor(p))\n }\n }\n\n const handleClear = () => {\n onChange('')\n setHsv(FALLBACK_HSV)\n setAlpha(1)\n }\n\n // working color (hsv + alpha): the current swatch + the SV thumb (opaque) + the alpha track base\n const workingColor = formatColor({ ...hsvToRgb(hsv), a: alpha })\n const solidHex = rgbToHex(hsvToRgb(hsv))\n const cur = hsvToRgb(hsv)\n const cpRgb = `${Math.round(cur.r)}, ${Math.round(cur.g)}, ${Math.round(cur.b)}`\n\n return (\n <div className={styles.popover} style={{ '--cp-hue': hsv.h } as CSSProperties}>\n <div\n className={styles.sv}\n onPointerDown={onSvDown}\n onKeyDown={onSvKey}\n role=\"slider\"\n tabIndex={0}\n aria-label={t('colorPicker.saturation')}\n aria-valuetext={`${Math.round(hsv.s * 100)}% saturation, ${Math.round(hsv.v * 100)}% brightness`}\n >\n <span\n className={styles.svThumb}\n style={{ left: `${hsv.s * 100}%`, top: `${(1 - hsv.v) * 100}%`, background: solidHex }}\n />\n </div>\n\n <div\n className={styles.hue}\n onPointerDown={onHueDown}\n onKeyDown={onHueKey}\n role=\"slider\"\n tabIndex={0}\n aria-label={t('colorPicker.hue')}\n aria-valuemin={0}\n aria-valuemax={360}\n aria-valuenow={Math.round(hsv.h)}\n >\n <span className={styles.hueThumb} style={{ left: `${(hsv.h / 360) * 100}%` }} />\n </div>\n\n <div\n className={styles.alpha}\n onPointerDown={onAlphaDown}\n onKeyDown={onAlphaKey}\n role=\"slider\"\n tabIndex={0}\n aria-label={t('colorPicker.opacity')}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(alpha * 100)}\n style={{ '--cp-rgb': cpRgb } as CSSProperties}\n >\n <span className={styles.alphaThumb} style={{ left: `${alpha * 100}%` }} />\n </div>\n\n <div className={styles.hexRow}>\n <span\n className={styles.currentSwatch}\n style={{ '--cp-fill': workingColor } as CSSProperties}\n />\n <span className={styles.hexField}>\n <input\n className={styles.hexInput}\n value={colorDraft}\n spellCheck={false}\n maxLength={28}\n aria-label={t('colorPicker.value')}\n onChange={(e) => onColorInput(e.target.value)}\n />\n </span>\n </div>\n\n <div className={styles.swatches}>\n {/* \"no color\" — clears the value (the diagonal-stripe swatch); hidden when not clearable */}\n {clearable && (\n <button\n type=\"button\"\n className={clsx(styles.swatch, styles.swatchClear)}\n aria-label={t('colorPicker.noColor')}\n aria-pressed={!parsed}\n onClick={handleClear}\n >\n {!parsed && <Icon name=\"TickCircle\" size=\"sm\" />}\n </button>\n )}\n {swatches.map((sw) => {\n const p = parseColor(sw)\n if (!p) return null\n const swHex = formatColor({ r: p.r, g: p.g, b: p.b, a: 1 })\n const selected = displayValue === swHex\n return (\n <button\n key={sw}\n type=\"button\"\n className={styles.swatch}\n style={{ background: swHex, color: contrastOn(swHex) }}\n aria-label={swHex}\n aria-pressed={selected}\n onClick={() => {\n setHsv(rgbToHsv(p))\n onChange(formatColor({ r: p.r, g: p.g, b: p.b, a: alphaRef.current }))\n }}\n >\n {selected && <Icon name=\"TickCircle\" size=\"sm\" />}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n"],"names":["clamp01","clamp255","normalizeHex","input","h","c","hexToRgb","hex","rgbToHex","r","g","b","to","n","rgbToHsv","rn","gn","bn","max","min","d","s","hsvToRgb","v","x","m","hexToHsv","contrastOn","RGB_FUNC","parseColor","a","formatColor","DEFAULT_SWATCHES","FALLBACK_HSV","ColorPickerPanel","value","onChange","swatches","clearable","t","useT","parsed","displayValue","hsv","setHsv","useState","hsvRef","useRef","alpha","setAlpha","alphaRef","useEffect","cur","applyHsv","next","applyAlpha","drag","onMove","event","el","move","clientX","clientY","onPointerMove","e","onPointerUp","onSvDown","y","rect","onHueDown","_y","onAlphaDown","SV_STEP","onSvKey","ns","nv","onHueKey","nh","onAlphaKey","na","colorDraft","setColorDraft","onColorInput","raw","p","handleClear","workingColor","solidHex","cpRgb","jsxs","styles","jsx","clsx","Icon","sw","swHex","selected"],"mappings":"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"}
1
+ {"version":3,"file":"ColorPickerPanel-nXEliruE.cjs","sources":["../src/components/ColorPicker/colorUtils.ts","../src/components/ColorPicker/ColorPickerPanel.tsx"],"sourcesContent":["/** Color math for the ColorPicker: hex ⇄ rgb ⇄ hsv, plus hex validation. All internal, no deps. */\n\nexport interface HSV {\n /** Hue 0–360 */\n h: number\n /** Saturation 0–1 */\n s: number\n /** Value/brightness 0–1 */\n v: number\n}\n\nexport interface RGB {\n r: number\n g: number\n b: number\n}\n\nexport interface RGBA extends RGB {\n /** Alpha 0–1 */\n a: number\n}\n\nexport const clamp01 = (n: number): number => Math.min(1, Math.max(0, n))\nconst clamp255 = (n: number): number => Math.min(255, Math.max(0, Math.round(n)))\n\n/** Normalizes any `#rgb`/`#rrggbb` (with or without `#`) to a lowercase `#rrggbb`, or `null` if invalid. */\nexport function normalizeHex(input: string): string | null {\n let h = input.trim().replace(/^#/, '')\n if (/^[0-9a-fA-F]{3}$/.test(h)) {\n h = h\n .split('')\n .map((c) => c + c)\n .join('')\n }\n return /^[0-9a-fA-F]{6}$/.test(h) ? `#${h.toLowerCase()}` : null\n}\n\n/** True for a complete `#rrggbb` (or `#rgb`) color. */\nexport const isValidHex = (input: string): boolean => normalizeHex(input) !== null\n\nexport function hexToRgb(hex: string): RGB {\n const h = (normalizeHex(hex) ?? '#000000').slice(1)\n return {\n r: parseInt(h.slice(0, 2), 16),\n g: parseInt(h.slice(2, 4), 16),\n b: parseInt(h.slice(4, 6), 16),\n }\n}\n\nexport function rgbToHex({ r, g, b }: RGB): string {\n const to = (n: number) =>\n Math.round(clamp01(n / 255) * 255)\n .toString(16)\n .padStart(2, '0')\n return `#${to(r)}${to(g)}${to(b)}`\n}\n\n/** RGB (0–255) → HSV. */\nexport function rgbToHsv({ r, g, b }: RGB): HSV {\n const rn = r / 255\n const gn = g / 255\n const bn = b / 255\n const max = Math.max(rn, gn, bn)\n const min = Math.min(rn, gn, bn)\n const d = max - min\n\n let h = 0\n if (d !== 0) {\n if (max === rn) h = ((gn - bn) / d) % 6\n else if (max === gn) h = (bn - rn) / d + 2\n else h = (rn - gn) / d + 4\n h *= 60\n if (h < 0) h += 360\n }\n const s = max === 0 ? 0 : d / max\n return { h, s, v: max }\n}\n\n/** HSV → RGB (0–255). */\nexport function hsvToRgb({ h, s, v }: HSV): RGB {\n const c = v * s\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1))\n const m = v - c\n let r = 0\n let g = 0\n let b = 0\n if (h < 60) [r, g, b] = [c, x, 0]\n else if (h < 120) [r, g, b] = [x, c, 0]\n else if (h < 180) [r, g, b] = [0, c, x]\n else if (h < 240) [r, g, b] = [0, x, c]\n else if (h < 300) [r, g, b] = [x, 0, c]\n else [r, g, b] = [c, 0, x]\n return { r: (r + m) * 255, g: (g + m) * 255, b: (b + m) * 255 }\n}\n\nexport const hexToHsv = (hex: string): HSV => rgbToHsv(hexToRgb(hex))\nexport const hsvToHex = (hsv: HSV): string => rgbToHex(hsvToRgb(hsv))\n\n/** A readable text/handle color (near-black or white) for sitting on top of a given hex fill. */\nexport function contrastOn(hex: string): string {\n const { r, g, b } = hexToRgb(hex)\n return (r * 299 + g * 587 + b * 114) / 1000 >= 150 ? '#04202b' : '#ffffff'\n}\n\nconst RGB_FUNC =\n /^rgba?\\(\\s*([\\d.]+)\\s*[, ]\\s*([\\d.]+)\\s*[, ]\\s*([\\d.]+)\\s*(?:[,/]\\s*([\\d.]+%?)\\s*)?\\)$/i\n\n/**\n * Parses any CSS color the picker understands — `#rgb` / `#rgba` / `#rrggbb` / `#rrggbbaa` hex (with\n * or without `#`), or `rgb()` / `rgba()` (alpha as `0–1` or a `%`) — to `{ r, g, b, a }` (`a` is\n * `0–1`), or `null` when it doesn't match.\n */\nexport function parseColor(input: string): RGBA | null {\n const s = input.trim()\n if (!s) return null\n\n // hex (with or without #) — 3 / 4 / 6 / 8 digits (3 & 4 expand each nibble to a byte)\n let h = s.replace(/^#/, '')\n if (/^[0-9a-fA-F]{3,4}$/.test(h)) {\n h = h\n .split('')\n .map((c) => c + c)\n .join('')\n }\n if (/^[0-9a-fA-F]{6}$/.test(h)) {\n return {\n r: parseInt(h.slice(0, 2), 16),\n g: parseInt(h.slice(2, 4), 16),\n b: parseInt(h.slice(4, 6), 16),\n a: 1,\n }\n }\n if (/^[0-9a-fA-F]{8}$/.test(h)) {\n return {\n r: parseInt(h.slice(0, 2), 16),\n g: parseInt(h.slice(2, 4), 16),\n b: parseInt(h.slice(4, 6), 16),\n a: clamp01(parseInt(h.slice(6, 8), 16) / 255),\n }\n }\n\n // rgb() / rgba()\n const m = s.match(RGB_FUNC)\n if (m) {\n let a = 1\n if (m[4] != null) {\n a = m[4].endsWith('%') ? clamp01(parseFloat(m[4]) / 100) : clamp01(parseFloat(m[4]))\n }\n return { r: clamp255(+m[1]), g: clamp255(+m[2]), b: clamp255(+m[3]), a }\n }\n return null\n}\n\n/**\n * Formats `{ r, g, b, a }` back to a CSS string: `#rrggbb` when fully opaque (`a >= 1`), else\n * `rgba(r, g, b, a)` with alpha rounded to 2 decimals.\n */\nexport function formatColor({ r, g, b, a }: RGBA): string {\n if (a >= 1) return rgbToHex({ r, g, b })\n return `rgba(${clamp255(r)}, ${clamp255(g)}, ${clamp255(b)}, ${Math.round(clamp01(a) * 100) / 100})`\n}\n","import {\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n} from 'react'\nimport { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { Icon } from '../Icon'\nimport {\n clamp01,\n contrastOn,\n formatColor,\n hexToHsv,\n hsvToRgb,\n parseColor,\n rgbToHex,\n rgbToHsv,\n type HSV,\n} from './colorUtils'\nimport styles from './ColorPicker.module.css'\n\n/** A pleasant default palette shown as quick-pick swatches. */\nexport const DEFAULT_SWATCHES = [\n '#13404e',\n '#039aa1',\n '#00a854',\n '#0ea5e9',\n '#6366f1',\n '#7c3aed',\n '#f04134',\n '#f59e0b',\n '#ffbf00',\n '#10b981',\n '#64748b',\n '#0f172a',\n '#ffffff',\n]\n\nconst FALLBACK_HSV: HSV = hexToHsv('#13404e')\n\nexport interface ColorPickerPanelProps {\n /** Current color — a CSS color string (`#rrggbb`, `rgba(...)`, or `''` when unset). */\n value: string\n /** Fires with the next color: `#rrggbb` when opaque, `rgba(r, g, b, a)` when translucent, `''` when cleared. */\n onChange: (color: string) => void\n /** Quick-pick swatches. Defaults to a curated palette. */\n swatches?: string[]\n /** Show the leading \"no color\" swatch that clears the value. Defaults to `true`. */\n clearable?: boolean\n}\n\n/**\n * The color-picking surface — a saturation/value square, hue + alpha sliders, a color input and\n * quick-pick swatches. Controlled by a single color `string` (`value` / `onChange`), so it drops into\n * any popover. Working state is kept as HSV + alpha (hue survives dragging at grey/black), re-derived\n * from `value` only on external changes. Used by `ColorPicker` (the field) and the `RichTextEditor`\n * text-color control. Token-styled except the spectrum gradients + alpha checkerboard (literal colors).\n */\nexport function ColorPickerPanel({\n value,\n onChange,\n swatches = DEFAULT_SWATCHES,\n clearable = true,\n}: ColorPickerPanelProps) {\n const t = useT()\n const parsed = parseColor(value || '')\n // canonical string for the value (`#rrggbb` when opaque, `rgba(...)` when not), null when unset\n const displayValue = parsed ? formatColor(parsed) : null\n\n // working HSV + alpha (HSV keeps hue stable while dragging at grey/black; alpha is the opacity)\n const [hsv, setHsv] = useState<HSV>(parsed ? rgbToHsv(parsed) : FALLBACK_HSV)\n const hsvRef = useRef(hsv)\n hsvRef.current = hsv\n const [alpha, setAlpha] = useState<number>(parsed?.a ?? 1)\n const alphaRef = useRef(alpha)\n alphaRef.current = alpha\n\n // re-derive HSV + alpha only when the value changes from OUTSIDE our own edits (prop/preset/input)\n useEffect(() => {\n if (!parsed) return\n const cur = formatColor({ ...hsvToRgb(hsvRef.current), a: alphaRef.current })\n if (displayValue !== cur) {\n setHsv(rgbToHsv(parsed))\n setAlpha(parsed.a)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [displayValue])\n\n const applyHsv = (next: HSV) => {\n setHsv(next)\n onChange(formatColor({ ...hsvToRgb(next), a: alphaRef.current }))\n }\n\n const applyAlpha = (next: number) => {\n setAlpha(next)\n onChange(formatColor({ ...hsvToRgb(hsvRef.current), a: next }))\n }\n\n // drag (SV square + hue/alpha sliders)\n const drag =\n (onMove: (clientX: number, clientY: number, rect: DOMRect) => void) =>\n (event: ReactPointerEvent<HTMLDivElement>) => {\n event.preventDefault()\n const el = event.currentTarget\n const move = (clientX: number, clientY: number) =>\n onMove(clientX, clientY, el.getBoundingClientRect())\n move(event.clientX, event.clientY)\n const onPointerMove = (e: PointerEvent) => move(e.clientX, e.clientY)\n const onPointerUp = () => {\n window.removeEventListener('pointermove', onPointerMove)\n window.removeEventListener('pointerup', onPointerUp)\n }\n window.addEventListener('pointermove', onPointerMove)\n window.addEventListener('pointerup', onPointerUp)\n }\n\n const onSvDown = drag((x, y, rect) => {\n const s = clamp01((x - rect.left) / rect.width)\n const v = clamp01(1 - (y - rect.top) / rect.height)\n applyHsv({ ...hsvRef.current, s, v })\n })\n\n const onHueDown = drag((x, _y, rect) => {\n const h = clamp01((x - rect.left) / rect.width) * 360\n applyHsv({ ...hsvRef.current, h })\n })\n\n const onAlphaDown = drag((x, _y, rect) => {\n applyAlpha(clamp01((x - rect.left) / rect.width))\n })\n\n // keyboard control — arrows nudge, Home/End jump to the extents (mirrors Calendar/TimeColumns a11y)\n const SV_STEP = 0.01\n const onSvKey = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const { h, s, v } = hsvRef.current\n let ns = s\n let nv = v\n switch (event.key) {\n case 'ArrowLeft':\n ns = clamp01(s - SV_STEP)\n break\n case 'ArrowRight':\n ns = clamp01(s + SV_STEP)\n break\n case 'ArrowUp':\n nv = clamp01(v + SV_STEP)\n break\n case 'ArrowDown':\n nv = clamp01(v - SV_STEP)\n break\n default:\n return\n }\n event.preventDefault()\n applyHsv({ h, s: ns, v: nv })\n }\n const onHueKey = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const { h } = hsvRef.current\n let nh = h\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n nh = Math.max(0, h - 1)\n break\n case 'ArrowRight':\n case 'ArrowUp':\n nh = Math.min(360, h + 1)\n break\n case 'Home':\n nh = 0\n break\n case 'End':\n nh = 360\n break\n default:\n return\n }\n event.preventDefault()\n applyHsv({ ...hsvRef.current, h: nh })\n }\n const onAlphaKey = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n let na = alphaRef.current\n switch (event.key) {\n case 'ArrowLeft':\n case 'ArrowDown':\n na = clamp01(alphaRef.current - 0.01)\n break\n case 'ArrowRight':\n case 'ArrowUp':\n na = clamp01(alphaRef.current + 0.01)\n break\n case 'Home':\n na = 0\n break\n case 'End':\n na = 1\n break\n default:\n return\n }\n event.preventDefault()\n applyAlpha(na)\n }\n\n // color input (accepts hex / rgb() / rgba()) + clear\n const [colorDraft, setColorDraft] = useState('')\n useEffect(() => {\n setColorDraft(displayValue ?? '')\n }, [displayValue])\n\n const onColorInput = (raw: string) => {\n setColorDraft(raw)\n const p = parseColor(raw)\n if (p) {\n setHsv(rgbToHsv(p))\n setAlpha(p.a)\n onChange(formatColor(p))\n }\n }\n\n const handleClear = () => {\n onChange('')\n setHsv(FALLBACK_HSV)\n setAlpha(1)\n }\n\n // working color (hsv + alpha): the current swatch + the SV thumb (opaque) + the alpha track base\n const workingColor = formatColor({ ...hsvToRgb(hsv), a: alpha })\n const solidHex = rgbToHex(hsvToRgb(hsv))\n const cur = hsvToRgb(hsv)\n const cpRgb = `${Math.round(cur.r)}, ${Math.round(cur.g)}, ${Math.round(cur.b)}`\n\n return (\n <div className={styles.popover} style={{ '--cp-hue': hsv.h } as CSSProperties}>\n <div\n className={styles.sv}\n onPointerDown={onSvDown}\n onKeyDown={onSvKey}\n role=\"slider\"\n tabIndex={0}\n aria-label={t('colorPicker.saturation')}\n aria-valuetext={`${Math.round(hsv.s * 100)}% saturation, ${Math.round(hsv.v * 100)}% brightness`}\n >\n <span\n className={styles.svThumb}\n style={{ left: `${hsv.s * 100}%`, top: `${(1 - hsv.v) * 100}%`, background: solidHex }}\n />\n </div>\n\n <div\n className={styles.hue}\n onPointerDown={onHueDown}\n onKeyDown={onHueKey}\n role=\"slider\"\n tabIndex={0}\n aria-label={t('colorPicker.hue')}\n aria-valuemin={0}\n aria-valuemax={360}\n aria-valuenow={Math.round(hsv.h)}\n >\n <span className={styles.hueThumb} style={{ left: `${(hsv.h / 360) * 100}%` }} />\n </div>\n\n <div\n className={styles.alpha}\n onPointerDown={onAlphaDown}\n onKeyDown={onAlphaKey}\n role=\"slider\"\n tabIndex={0}\n aria-label={t('colorPicker.opacity')}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(alpha * 100)}\n style={{ '--cp-rgb': cpRgb } as CSSProperties}\n >\n <span className={styles.alphaThumb} style={{ left: `${alpha * 100}%` }} />\n </div>\n\n <div className={styles.hexRow}>\n <span\n className={styles.currentSwatch}\n style={{ '--cp-fill': workingColor } as CSSProperties}\n />\n <span className={styles.hexField}>\n <input\n className={styles.hexInput}\n value={colorDraft}\n spellCheck={false}\n maxLength={28}\n aria-label={t('colorPicker.value')}\n onChange={(e) => onColorInput(e.target.value)}\n />\n </span>\n </div>\n\n <div className={styles.swatches}>\n {/* \"no color\" — clears the value (the diagonal-stripe swatch); hidden when not clearable */}\n {clearable && (\n <button\n type=\"button\"\n className={clsx(styles.swatch, styles.swatchClear)}\n aria-label={t('colorPicker.noColor')}\n aria-pressed={!parsed}\n onClick={handleClear}\n >\n {!parsed && <Icon name=\"TickCircle\" size=\"sm\" />}\n </button>\n )}\n {swatches.map((sw) => {\n const p = parseColor(sw)\n if (!p) return null\n const swHex = formatColor({ r: p.r, g: p.g, b: p.b, a: 1 })\n const selected = displayValue === swHex\n return (\n <button\n key={sw}\n type=\"button\"\n className={styles.swatch}\n style={{ background: swHex, color: contrastOn(swHex) }}\n aria-label={swHex}\n aria-pressed={selected}\n onClick={() => {\n setHsv(rgbToHsv(p))\n onChange(formatColor({ r: p.r, g: p.g, b: p.b, a: alphaRef.current }))\n }}\n >\n {selected && <Icon name=\"TickCircle\" size=\"sm\" />}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n"],"names":["clamp01","clamp255","normalizeHex","input","h","c","hexToRgb","hex","rgbToHex","r","g","b","to","n","rgbToHsv","rn","gn","bn","max","min","d","s","hsvToRgb","v","x","m","hexToHsv","contrastOn","RGB_FUNC","parseColor","a","formatColor","DEFAULT_SWATCHES","FALLBACK_HSV","ColorPickerPanel","value","onChange","swatches","clearable","t","useT","parsed","displayValue","hsv","setHsv","useState","hsvRef","useRef","alpha","setAlpha","alphaRef","useEffect","cur","applyHsv","next","applyAlpha","drag","onMove","event","el","move","clientX","clientY","onPointerMove","e","onPointerUp","onSvDown","y","rect","onHueDown","_y","onAlphaDown","SV_STEP","onSvKey","ns","nv","onHueKey","nh","onAlphaKey","na","colorDraft","setColorDraft","onColorInput","raw","p","handleClear","workingColor","solidHex","cpRgb","jsxs","styles","jsx","clsx","Icon","sw","swHex","selected"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";const pe=require("react/jsx-runtime"),a=require("react"),Ee=require("./breakpoints-Dpnh6BbG.cjs"),te=require("./translations-CXEeeUDL.cjs"),A=require("./messages-BJiUtJ2E.cjs");function Se(e){let s=e.trim().replace(/^#/,"");s.length===3&&(s=s[0]+s[0]+s[1]+s[1]+s[2]+s[2]);const n=parseInt(s,16);return`${n>>16&255}, ${n>>8&255}, ${n&255}`}function Ae(e){const[s,n,u]=e.split(",").map(C=>Number(C.trim()));return(s*299+n*587+u*114)/1e3>=150?"#04202b":"#ffffff"}const he={secondary:"rgb(var(--tz-color-primary-rgb))",warning:"#ffffff"};function se(e,s=document.documentElement){for(const[n,u]of Object.entries(e)){if(!u)continue;const r=Se(u);s.style.setProperty(`--tz-color-${n}-rgb`,r),s.style.setProperty(`--tz-color-${n}-contrast`,he[n]??Ae(r))}}const o=a.createContext(null),ae="tz-theme-mode",h=e=>`tz-accent-color-${e}`,ne="tz-header-sticky",re="tz-font-family",oe="tz-locale",ue=[{code:"en-US",label:"English"}],b="Inter",be=[b],Ce=e=>`'${e}', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif`;function _e(){if(typeof document>"u"||document.getElementById("tz-font-preconnect"))return;const e=document.createElement("link");e.id="tz-font-preconnect",e.rel="preconnect",e.href="https://fonts.googleapis.com",document.head.appendChild(e);const s=document.createElement("link");s.rel="preconnect",s.href="https://fonts.gstatic.com",s.crossOrigin="anonymous",document.head.appendChild(s)}function Le(e){if(typeof document>"u"||be.includes(e))return;const s=`tz-font-${e.trim().replace(/\s+/g,"-").toLowerCase()}`;if(document.getElementById(s))return;_e();const n=document.createElement("link");n.id=s,n.rel="stylesheet",n.href=`https://fonts.googleapis.com/css2?family=${encodeURIComponent(e.trim()).replace(/%20/g,"+")}&display=swap`,document.head.appendChild(n)}const L="tab",k="nestedTab",f="step",le=[],ce={},de={},ke={primary:"#13404e",secondary:"#ffffff",background:"#f9f9f9",surface:"#ffffff",accent:"#056472",success:"#00a854",error:"#f04134",info:"#039aa1",warning:"#ffbf00"},fe={primary:"#e6e8eb",secondary:"#191919",background:"#0f0f0f",surface:"#191919",accent:"#16a6b4",success:"#00a854",error:"#f04134",info:"#039aa1",warning:"#ffbf00"};function Fe(e){const s=localStorage.getItem(ae);return s==="light"||s==="dark"?s:e}function Ie(){return{light:localStorage.getItem(h("light"))||null,dark:localStorage.getItem(h("dark"))||null}}function Ue(e){const s=localStorage.getItem(ne);return s==="1"?!0:s==="0"?!1:e}function Ke(e){return localStorage.getItem(re)||e}function Re(e,s){const n=e.map(r=>r.code),u=localStorage.getItem(oe);return u&&n.includes(u)?u:s&&n.includes(s)?s:n.find(r=>r.toLowerCase().startsWith("en"))??n[0]??"en-US"}function Ne({config:e,children:s}){var q,x,G,j,J,V,W,X,Z,ee;const[n,u]=a.useState(()=>{var t;return Fe(((t=e==null?void 0:e.theme)==null?void 0:t.mode)??"light")}),[r,C]=a.useState(Ie),[F,me]=a.useState(()=>{var t;return Ue(((t=e==null?void 0:e.header)==null?void 0:t.sticky)??!1)}),[i,ye]=a.useState(()=>{var t;return Ke(((t=e==null?void 0:e.theme)==null?void 0:t.fontFamily)??b)}),_=((q=e==null?void 0:e.i18n)==null?void 0:q.languages)??ue,I=(x=e==null?void 0:e.i18n)==null?void 0:x.messages,U=(G=e==null?void 0:e.i18n)==null?void 0:G.appMessages,[m,Te]=a.useState(()=>{var t;return Re(_,(t=e==null?void 0:e.i18n)==null?void 0:t.language)}),c=(j=e==null?void 0:e.theme)==null?void 0:j.colors,T=a.useMemo(()=>{const t={...ke,...c==null?void 0:c.light},l={...t,...fe,...c==null?void 0:c.dark};return{light:t,dark:l}},[c]),K=a.useMemo(()=>({light:T.light.accent,dark:T.dark.accent}),[T]),y=a.useCallback((t,l=r[t])=>{const d=T[t];se(l?{...d,accent:l}:d);const S=document.documentElement;S.setAttribute("data-tz-theme",t),S.style.setProperty("color-scheme",t),localStorage.setItem(ae,t)},[T,r]);a.useLayoutEffect(()=>{y(n)},[y,n]);const R=(J=e==null?void 0:e.theme)==null?void 0:J.breakpoints;a.useLayoutEffect(()=>{Ee.setBreakpoints(R)},[JSON.stringify(R??null)]);const p=a.useCallback(t=>{y(t),u(t)},[y]),N=a.useCallback(()=>p(n==="light"?"dark":"light"),[n,p]),Q=a.useCallback((t,l)=>{const d=l??n;C(S=>({...S,[d]:t})),t?localStorage.setItem(h(d),t):localStorage.removeItem(h(d)),d===n&&y(n,t)},[n,y]),D=a.useCallback(t=>{me(t),localStorage.setItem(ne,t?"1":"0")},[]),E=a.useCallback(t=>{Le(t),document.documentElement.style.setProperty("--tz-font-family",Ce(t))},[]);a.useLayoutEffect(()=>{E(i)},[E,i]);const Y=a.useCallback(t=>{const l=t.trim()||b;E(l),ye(l),localStorage.setItem(re,l)},[E]),O=a.useCallback(t=>{Te(t),localStorage.setItem(oe,t)},[]),M=a.useMemo(()=>A.createTranslator(m,I),[m,I]),g=a.useMemo(()=>A.createAppTranslator(m,U),[m,U]),P=(e==null?void 0:e.locales)??le,z=((V=e==null?void 0:e.keys)==null?void 0:V.translationsNamespace)??te.DEFAULT_TRANSLATIONS_NAMESPACE,B=((W=e==null?void 0:e.keys)==null?void 0:W.tabQueryKey)??L,v=((X=e==null?void 0:e.keys)==null?void 0:X.nestedTabQueryKey)??k,w=((Z=e==null?void 0:e.keys)==null?void 0:Z.stepQueryKey)??f,H=((ee=e==null?void 0:e.table)==null?void 0:ee.query)??ce,$=(e==null?void 0:e.header)??de,ie=a.useMemo(()=>({mode:n,setMode:p,toggleMode:N,accentColors:r,defaultAccentColors:K,setAccentColor:Q,locales:P,translationsNamespace:z,tabQueryKey:B,nestedTabQueryKey:v,stepQueryKey:w,tableQuery:H,header:$,headerSticky:F,setHeaderSticky:D,fontFamily:i,setFontFamily:Y,language:m,setLanguage:O,languages:_,t:M,appT:g}),[n,p,N,r,K,Q,P,z,B,v,w,H,$,F,D,i,Y,m,O,_,M,g]);return pe.jsx(o.Provider,{value:ie,children:s})}function Qe(){const e=a.useContext(o);if(!e)throw new Error("useTheme must be used within a <ConfigProvider>");return e}function De(){var e;return((e=a.useContext(o))==null?void 0:e.locales)??le}const Ye=A.createTranslator("en"),Oe=A.createAppTranslator("en");function Me(){var e;return((e=a.useContext(o))==null?void 0:e.t)??Ye}function ge(){var e;return((e=a.useContext(o))==null?void 0:e.appT)??Oe}function Pe(){const e=a.useContext(o);return{language:(e==null?void 0:e.language)??"en-US",setLanguage:(e==null?void 0:e.setLanguage)??(()=>{}),languages:(e==null?void 0:e.languages)??ue}}function ze(){var e;return((e=a.useContext(o))==null?void 0:e.translationsNamespace)??te.DEFAULT_TRANSLATIONS_NAMESPACE}function Be(){var e;return((e=a.useContext(o))==null?void 0:e.tabQueryKey)??L}function ve(){var e;return((e=a.useContext(o))==null?void 0:e.nestedTabQueryKey)??k}function we(){var e;return((e=a.useContext(o))==null?void 0:e.stepQueryKey)??f}function He(){var e;return((e=a.useContext(o))==null?void 0:e.tableQuery)??ce}function $e(){var e;return((e=a.useContext(o))==null?void 0:e.header)??de}exports.ConfigProvider=Ne;exports.DEFAULT_FONT_FAMILY=b;exports.DEFAULT_NESTED_TAB_QUERY_KEY=k;exports.DEFAULT_STEP_QUERY_KEY=f;exports.DEFAULT_TABS_QUERY_KEY=L;exports.applyTheme=se;exports.useHeaderConfig=$e;exports.useLanguage=Pe;exports.useLocales=De;exports.useNestedTabQueryKey=ve;exports.useStepQueryKey=we;exports.useT=Me;exports.useTableQueryConfig=He;exports.useTabsQueryKey=Be;exports.useTheme=Qe;exports.useTranslations=ge;exports.useTranslationsNamespace=ze;
2
- //# sourceMappingURL=ConfigProvider-DFy6pL-C.cjs.map
1
+ "use strict";const pe=require("react/jsx-runtime"),a=require("react"),Ee=require("./breakpoints-Dpnh6BbG.cjs"),te=require("./translations-CXEeeUDL.cjs"),A=require("./messages-Jxz2YMcA.cjs");function Se(e){let s=e.trim().replace(/^#/,"");s.length===3&&(s=s[0]+s[0]+s[1]+s[1]+s[2]+s[2]);const n=parseInt(s,16);return`${n>>16&255}, ${n>>8&255}, ${n&255}`}function Ae(e){const[s,n,u]=e.split(",").map(C=>Number(C.trim()));return(s*299+n*587+u*114)/1e3>=150?"#04202b":"#ffffff"}const he={secondary:"rgb(var(--tz-color-primary-rgb))",warning:"#ffffff"};function se(e,s=document.documentElement){for(const[n,u]of Object.entries(e)){if(!u)continue;const r=Se(u);s.style.setProperty(`--tz-color-${n}-rgb`,r),s.style.setProperty(`--tz-color-${n}-contrast`,he[n]??Ae(r))}}const o=a.createContext(null),ae="tz-theme-mode",h=e=>`tz-accent-color-${e}`,ne="tz-header-sticky",re="tz-font-family",oe="tz-locale",ue=[{code:"en-US",label:"English"}],b="Inter",be=[b],Ce=e=>`'${e}', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif`;function _e(){if(typeof document>"u"||document.getElementById("tz-font-preconnect"))return;const e=document.createElement("link");e.id="tz-font-preconnect",e.rel="preconnect",e.href="https://fonts.googleapis.com",document.head.appendChild(e);const s=document.createElement("link");s.rel="preconnect",s.href="https://fonts.gstatic.com",s.crossOrigin="anonymous",document.head.appendChild(s)}function Le(e){if(typeof document>"u"||be.includes(e))return;const s=`tz-font-${e.trim().replace(/\s+/g,"-").toLowerCase()}`;if(document.getElementById(s))return;_e();const n=document.createElement("link");n.id=s,n.rel="stylesheet",n.href=`https://fonts.googleapis.com/css2?family=${encodeURIComponent(e.trim()).replace(/%20/g,"+")}&display=swap`,document.head.appendChild(n)}const L="tab",k="nestedTab",f="step",le=[],ce={},de={},ke={primary:"#13404e",secondary:"#ffffff",background:"#f9f9f9",surface:"#ffffff",accent:"#056472",success:"#00a854",error:"#f04134",info:"#039aa1",warning:"#ffbf00"},fe={primary:"#e6e8eb",secondary:"#191919",background:"#0f0f0f",surface:"#191919",accent:"#16a6b4",success:"#00a854",error:"#f04134",info:"#039aa1",warning:"#ffbf00"};function Fe(e){const s=localStorage.getItem(ae);return s==="light"||s==="dark"?s:e}function Ie(){return{light:localStorage.getItem(h("light"))||null,dark:localStorage.getItem(h("dark"))||null}}function Ue(e){const s=localStorage.getItem(ne);return s==="1"?!0:s==="0"?!1:e}function Ke(e){return localStorage.getItem(re)||e}function Re(e,s){const n=e.map(r=>r.code),u=localStorage.getItem(oe);return u&&n.includes(u)?u:s&&n.includes(s)?s:n.find(r=>r.toLowerCase().startsWith("en"))??n[0]??"en-US"}function Ne({config:e,children:s}){var q,x,G,j,J,V,W,X,Z,ee;const[n,u]=a.useState(()=>{var t;return Fe(((t=e==null?void 0:e.theme)==null?void 0:t.mode)??"light")}),[r,C]=a.useState(Ie),[F,me]=a.useState(()=>{var t;return Ue(((t=e==null?void 0:e.header)==null?void 0:t.sticky)??!1)}),[i,ye]=a.useState(()=>{var t;return Ke(((t=e==null?void 0:e.theme)==null?void 0:t.fontFamily)??b)}),_=((q=e==null?void 0:e.i18n)==null?void 0:q.languages)??ue,I=(x=e==null?void 0:e.i18n)==null?void 0:x.messages,U=(G=e==null?void 0:e.i18n)==null?void 0:G.appMessages,[m,Te]=a.useState(()=>{var t;return Re(_,(t=e==null?void 0:e.i18n)==null?void 0:t.language)}),c=(j=e==null?void 0:e.theme)==null?void 0:j.colors,T=a.useMemo(()=>{const t={...ke,...c==null?void 0:c.light},l={...t,...fe,...c==null?void 0:c.dark};return{light:t,dark:l}},[c]),K=a.useMemo(()=>({light:T.light.accent,dark:T.dark.accent}),[T]),y=a.useCallback((t,l=r[t])=>{const d=T[t];se(l?{...d,accent:l}:d);const S=document.documentElement;S.setAttribute("data-tz-theme",t),S.style.setProperty("color-scheme",t),localStorage.setItem(ae,t)},[T,r]);a.useLayoutEffect(()=>{y(n)},[y,n]);const R=(J=e==null?void 0:e.theme)==null?void 0:J.breakpoints;a.useLayoutEffect(()=>{Ee.setBreakpoints(R)},[JSON.stringify(R??null)]);const p=a.useCallback(t=>{y(t),u(t)},[y]),N=a.useCallback(()=>p(n==="light"?"dark":"light"),[n,p]),Q=a.useCallback((t,l)=>{const d=l??n;C(S=>({...S,[d]:t})),t?localStorage.setItem(h(d),t):localStorage.removeItem(h(d)),d===n&&y(n,t)},[n,y]),D=a.useCallback(t=>{me(t),localStorage.setItem(ne,t?"1":"0")},[]),E=a.useCallback(t=>{Le(t),document.documentElement.style.setProperty("--tz-font-family",Ce(t))},[]);a.useLayoutEffect(()=>{E(i)},[E,i]);const Y=a.useCallback(t=>{const l=t.trim()||b;E(l),ye(l),localStorage.setItem(re,l)},[E]),O=a.useCallback(t=>{Te(t),localStorage.setItem(oe,t)},[]),M=a.useMemo(()=>A.createTranslator(m,I),[m,I]),g=a.useMemo(()=>A.createAppTranslator(m,U),[m,U]),P=(e==null?void 0:e.locales)??le,z=((V=e==null?void 0:e.keys)==null?void 0:V.translationsNamespace)??te.DEFAULT_TRANSLATIONS_NAMESPACE,B=((W=e==null?void 0:e.keys)==null?void 0:W.tabQueryKey)??L,v=((X=e==null?void 0:e.keys)==null?void 0:X.nestedTabQueryKey)??k,w=((Z=e==null?void 0:e.keys)==null?void 0:Z.stepQueryKey)??f,H=((ee=e==null?void 0:e.table)==null?void 0:ee.query)??ce,$=(e==null?void 0:e.header)??de,ie=a.useMemo(()=>({mode:n,setMode:p,toggleMode:N,accentColors:r,defaultAccentColors:K,setAccentColor:Q,locales:P,translationsNamespace:z,tabQueryKey:B,nestedTabQueryKey:v,stepQueryKey:w,tableQuery:H,header:$,headerSticky:F,setHeaderSticky:D,fontFamily:i,setFontFamily:Y,language:m,setLanguage:O,languages:_,t:M,appT:g}),[n,p,N,r,K,Q,P,z,B,v,w,H,$,F,D,i,Y,m,O,_,M,g]);return pe.jsx(o.Provider,{value:ie,children:s})}function Qe(){const e=a.useContext(o);if(!e)throw new Error("useTheme must be used within a <ConfigProvider>");return e}function De(){var e;return((e=a.useContext(o))==null?void 0:e.locales)??le}const Ye=A.createTranslator("en"),Oe=A.createAppTranslator("en");function Me(){var e;return((e=a.useContext(o))==null?void 0:e.t)??Ye}function ge(){var e;return((e=a.useContext(o))==null?void 0:e.appT)??Oe}function Pe(){const e=a.useContext(o);return{language:(e==null?void 0:e.language)??"en-US",setLanguage:(e==null?void 0:e.setLanguage)??(()=>{}),languages:(e==null?void 0:e.languages)??ue}}function ze(){var e;return((e=a.useContext(o))==null?void 0:e.translationsNamespace)??te.DEFAULT_TRANSLATIONS_NAMESPACE}function Be(){var e;return((e=a.useContext(o))==null?void 0:e.tabQueryKey)??L}function ve(){var e;return((e=a.useContext(o))==null?void 0:e.nestedTabQueryKey)??k}function we(){var e;return((e=a.useContext(o))==null?void 0:e.stepQueryKey)??f}function He(){var e;return((e=a.useContext(o))==null?void 0:e.tableQuery)??ce}function $e(){var e;return((e=a.useContext(o))==null?void 0:e.header)??de}exports.ConfigProvider=Ne;exports.DEFAULT_FONT_FAMILY=b;exports.DEFAULT_NESTED_TAB_QUERY_KEY=k;exports.DEFAULT_STEP_QUERY_KEY=f;exports.DEFAULT_TABS_QUERY_KEY=L;exports.applyTheme=se;exports.useHeaderConfig=$e;exports.useLanguage=Pe;exports.useLocales=De;exports.useNestedTabQueryKey=ve;exports.useStepQueryKey=we;exports.useT=Me;exports.useTableQueryConfig=He;exports.useTabsQueryKey=Be;exports.useTheme=Qe;exports.useTranslations=ge;exports.useTranslationsNamespace=ze;
2
+ //# sourceMappingURL=ConfigProvider-BHNx-NHV.cjs.map