@techzyapp/ui-library 1.0.48 → 1.0.50

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 (480) hide show
  1. package/dist/{Accordion-DOrTQJB9.js → Accordion-C6vW_OMd.js} +2 -2
  2. package/dist/{Accordion-DOrTQJB9.js.map → Accordion-C6vW_OMd.js.map} +1 -1
  3. package/dist/{Accordion-CFyeLfPT.cjs → Accordion-Icvl9S8c.cjs} +2 -2
  4. package/dist/{Accordion-CFyeLfPT.cjs.map → Accordion-Icvl9S8c.cjs.map} +1 -1
  5. package/dist/{AdminRoot-DX6glneh.js → AdminRoot-C5l8PIyi.js} +9 -9
  6. package/dist/{AdminRoot-DX6glneh.js.map → AdminRoot-C5l8PIyi.js.map} +1 -1
  7. package/dist/{AdminRoot-DAz9u2Yc.cjs → AdminRoot-MEfy9xtz.cjs} +2 -2
  8. package/dist/{AdminRoot-DAz9u2Yc.cjs.map → AdminRoot-MEfy9xtz.cjs.map} +1 -1
  9. package/dist/{Alert-QvfNBhlU.cjs → Alert--ZnlCjaL.cjs} +2 -2
  10. package/dist/{Alert-QvfNBhlU.cjs.map → Alert--ZnlCjaL.cjs.map} +1 -1
  11. package/dist/{Alert-Bo_XgY-A.js → Alert-BVs-GcZQ.js} +4 -4
  12. package/dist/{Alert-Bo_XgY-A.js.map → Alert-BVs-GcZQ.js.map} +1 -1
  13. package/dist/AuthGuard-Cm-tqCto.cjs +2 -0
  14. package/dist/AuthGuard-Cm-tqCto.cjs.map +1 -0
  15. package/dist/AuthGuard-DJ_mMwfg.js +114 -0
  16. package/dist/AuthGuard-DJ_mMwfg.js.map +1 -0
  17. package/dist/{AuthLayout-BI1wLuDl.js → AuthLayout-BDRJFSpi.js} +2 -2
  18. package/dist/{AuthLayout-BI1wLuDl.js.map → AuthLayout-BDRJFSpi.js.map} +1 -1
  19. package/dist/{AuthLayout-Bzlsvicf.cjs → AuthLayout-D7mSMdM4.cjs} +2 -2
  20. package/dist/{AuthLayout-Bzlsvicf.cjs.map → AuthLayout-D7mSMdM4.cjs.map} +1 -1
  21. package/dist/{Avatar-BBqX1732.cjs → Avatar-BwGJl-ru.cjs} +2 -2
  22. package/dist/{Avatar-BBqX1732.cjs.map → Avatar-BwGJl-ru.cjs.map} +1 -1
  23. package/dist/{Avatar-CaYyv5wk.js → Avatar-C4qgzth2.js} +2 -2
  24. package/dist/{Avatar-CaYyv5wk.js.map → Avatar-C4qgzth2.js.map} +1 -1
  25. package/dist/{AvatarGroup-DrkzAt1-.cjs → AvatarGroup-B8u8ONs5.cjs} +2 -2
  26. package/dist/{AvatarGroup-DrkzAt1-.cjs.map → AvatarGroup-B8u8ONs5.cjs.map} +1 -1
  27. package/dist/{AvatarGroup-6fhm-van.js → AvatarGroup-BqxTFzRc.js} +2 -2
  28. package/dist/{AvatarGroup-6fhm-van.js.map → AvatarGroup-BqxTFzRc.js.map} +1 -1
  29. package/dist/{Breadcrumbs-CqGS32x5.cjs → Breadcrumbs-D4wv2-T7.cjs} +2 -2
  30. package/dist/{Breadcrumbs-CqGS32x5.cjs.map → Breadcrumbs-D4wv2-T7.cjs.map} +1 -1
  31. package/dist/{Breadcrumbs-BEv57tuJ.js → Breadcrumbs-HGk4DKrc.js} +4 -4
  32. package/dist/{Breadcrumbs-BEv57tuJ.js.map → Breadcrumbs-HGk4DKrc.js.map} +1 -1
  33. package/dist/{Button-DZWYeAno.js → Button-7mgXcRdw.js} +2 -2
  34. package/dist/{Button-DZWYeAno.js.map → Button-7mgXcRdw.js.map} +1 -1
  35. package/dist/{Button-BtiFpRie.cjs → Button-DAvQCGIw.cjs} +2 -2
  36. package/dist/{Button-BtiFpRie.cjs.map → Button-DAvQCGIw.cjs.map} +1 -1
  37. package/dist/{Calendar-7W9xNVBZ.js → Calendar-B1ZJHqjB.js} +4 -4
  38. package/dist/{Calendar-7W9xNVBZ.js.map → Calendar-B1ZJHqjB.js.map} +1 -1
  39. package/dist/{Calendar-Bgh_3Vk2.cjs → Calendar-BPYjqBy9.cjs} +2 -2
  40. package/dist/{Calendar-Bgh_3Vk2.cjs.map → Calendar-BPYjqBy9.cjs.map} +1 -1
  41. package/dist/{Card-KfmWG9Uz.cjs → Card-B-Qso__1.cjs} +2 -2
  42. package/dist/{Card-KfmWG9Uz.cjs.map → Card-B-Qso__1.cjs.map} +1 -1
  43. package/dist/{Card-ckOd617g.js → Card-vFsIhkyR.js} +4 -4
  44. package/dist/{Card-ckOd617g.js.map → Card-vFsIhkyR.js.map} +1 -1
  45. package/dist/{Chip-Crzm7Eux.js → Chip-CU0J7HJa.js} +3 -3
  46. package/dist/{Chip-Crzm7Eux.js.map → Chip-CU0J7HJa.js.map} +1 -1
  47. package/dist/{Chip-BDUsue_R.cjs → Chip-CovsonP1.cjs} +2 -2
  48. package/dist/{Chip-BDUsue_R.cjs.map → Chip-CovsonP1.cjs.map} +1 -1
  49. package/dist/{ChoiceCardGroup-D37XREKV.js → ChoiceCardGroup-BBqUbFLS.js} +2 -2
  50. package/dist/{ChoiceCardGroup-D37XREKV.js.map → ChoiceCardGroup-BBqUbFLS.js.map} +1 -1
  51. package/dist/{ChoiceCardGroup-Cj_YFj6C.cjs → ChoiceCardGroup-bnKFPDYz.cjs} +2 -2
  52. package/dist/{ChoiceCardGroup-Cj_YFj6C.cjs.map → ChoiceCardGroup-bnKFPDYz.cjs.map} +1 -1
  53. package/dist/{CodeBlock-rnGAu2DQ.cjs → CodeBlock-B404V_cc.cjs} +2 -2
  54. package/dist/{CodeBlock-rnGAu2DQ.cjs.map → CodeBlock-B404V_cc.cjs.map} +1 -1
  55. package/dist/{CodeBlock-CX8_dMPD.js → CodeBlock-DvJ45qEp.js} +4 -4
  56. package/dist/{CodeBlock-CX8_dMPD.js.map → CodeBlock-DvJ45qEp.js.map} +1 -1
  57. package/dist/{ColorPicker-CwLivdAt.js → ColorPicker-C4slmEZC.js} +3 -3
  58. package/dist/{ColorPicker-CwLivdAt.js.map → ColorPicker-C4slmEZC.js.map} +1 -1
  59. package/dist/{ColorPicker-BaAdcqR9.cjs → ColorPicker-_RBW51XB.cjs} +2 -2
  60. package/dist/{ColorPicker-BaAdcqR9.cjs.map → ColorPicker-_RBW51XB.cjs.map} +1 -1
  61. package/dist/{ColorPickerPanel-IOhJJF1R.cjs → ColorPickerPanel-CNspBZre.cjs} +2 -2
  62. package/dist/{ColorPickerPanel-IOhJJF1R.cjs.map → ColorPickerPanel-CNspBZre.cjs.map} +1 -1
  63. package/dist/{ColorPickerPanel-CkrSIf35.js → ColorPickerPanel-CQNfIbgc.js} +3 -3
  64. package/dist/{ColorPickerPanel-CkrSIf35.js.map → ColorPickerPanel-CQNfIbgc.js.map} +1 -1
  65. package/dist/{ColorRamp-DbFOsspz.js → ColorRamp-DQZZiE5I.js} +2 -2
  66. package/dist/{ColorRamp-DbFOsspz.js.map → ColorRamp-DQZZiE5I.js.map} +1 -1
  67. package/dist/{ColorRamp-BCy8a7ks.cjs → ColorRamp-DuO7gkru.cjs} +2 -2
  68. package/dist/{ColorRamp-BCy8a7ks.cjs.map → ColorRamp-DuO7gkru.cjs.map} +1 -1
  69. package/dist/{ConfigProvider-CYSpuSMJ.cjs → ConfigProvider-BFhkb0BV.cjs} +2 -2
  70. package/dist/{ConfigProvider-CYSpuSMJ.cjs.map → ConfigProvider-BFhkb0BV.cjs.map} +1 -1
  71. package/dist/{ConfigProvider-DtyUlWk6.js → ConfigProvider-bXX8dnhY.js} +2 -2
  72. package/dist/{ConfigProvider-DtyUlWk6.js.map → ConfigProvider-bXX8dnhY.js.map} +1 -1
  73. package/dist/{CopyButton-DUG5s3TM.cjs → CopyButton-B2V6guZ0.cjs} +2 -2
  74. package/dist/{CopyButton-DUG5s3TM.cjs.map → CopyButton-B2V6guZ0.cjs.map} +1 -1
  75. package/dist/{CopyButton-LURMuaYw.js → CopyButton-DfYAslz-.js} +4 -4
  76. package/dist/{CopyButton-LURMuaYw.js.map → CopyButton-DfYAslz-.js.map} +1 -1
  77. package/dist/{DashedButton-BX8hfY1x.cjs → DashedButton-CZ2hjLxT.cjs} +2 -2
  78. package/dist/{DashedButton-BX8hfY1x.cjs.map → DashedButton-CZ2hjLxT.cjs.map} +1 -1
  79. package/dist/{DashedButton-wcmXTYBw.js → DashedButton-meJSIY61.js} +2 -2
  80. package/dist/{DashedButton-wcmXTYBw.js.map → DashedButton-meJSIY61.js.map} +1 -1
  81. package/dist/{DatePicker-CSIBYSZt.js → DatePicker-CNUDjOxA.js} +5 -5
  82. package/dist/{DatePicker-CSIBYSZt.js.map → DatePicker-CNUDjOxA.js.map} +1 -1
  83. package/dist/{DatePicker-Bw9gLB8o.cjs → DatePicker-DrIHa1j1.cjs} +2 -2
  84. package/dist/{DatePicker-Bw9gLB8o.cjs.map → DatePicker-DrIHa1j1.cjs.map} +1 -1
  85. package/dist/{DateTimePicker-kikKdt0F.cjs → DateTimePicker-BzwxaOPb.cjs} +2 -2
  86. package/dist/{DateTimePicker-kikKdt0F.cjs.map → DateTimePicker-BzwxaOPb.cjs.map} +1 -1
  87. package/dist/{DateTimePicker-C9F2yJMf.js → DateTimePicker-CvWNDbib.js} +8 -8
  88. package/dist/{DateTimePicker-C9F2yJMf.js.map → DateTimePicker-CvWNDbib.js.map} +1 -1
  89. package/dist/{DescriptionList-DnGkHdzT.cjs → DescriptionList-Bed1MHU8.cjs} +2 -2
  90. package/dist/{DescriptionList-DnGkHdzT.cjs.map → DescriptionList-Bed1MHU8.cjs.map} +1 -1
  91. package/dist/{DescriptionList-kfNXbf_D.js → DescriptionList-BgMNjHJQ.js} +5 -5
  92. package/dist/{DescriptionList-kfNXbf_D.js.map → DescriptionList-BgMNjHJQ.js.map} +1 -1
  93. package/dist/{Dropdown-C_y9_dVn.cjs → Dropdown-DNL7RWdL.cjs} +2 -2
  94. package/dist/{Dropdown-C_y9_dVn.cjs.map → Dropdown-DNL7RWdL.cjs.map} +1 -1
  95. package/dist/{Dropdown-D-D_Z1Jo.js → Dropdown-iWbHokT7.js} +2 -2
  96. package/dist/{Dropdown-D-D_Z1Jo.js.map → Dropdown-iWbHokT7.js.map} +1 -1
  97. package/dist/{EmptyState-BM5LrRLq.cjs → EmptyState-BzwrOICc.cjs} +2 -2
  98. package/dist/{EmptyState-BM5LrRLq.cjs.map → EmptyState-BzwrOICc.cjs.map} +1 -1
  99. package/dist/{EmptyState-DrSj2XV_.js → EmptyState-CmcjJl_K.js} +3 -3
  100. package/dist/{EmptyState-DrSj2XV_.js.map → EmptyState-CmcjJl_K.js.map} +1 -1
  101. package/dist/{ErrorBoundary-yz669VEu.cjs → ErrorBoundary-BcZgeSsu.cjs} +2 -2
  102. package/dist/{ErrorBoundary-yz669VEu.cjs.map → ErrorBoundary-BcZgeSsu.cjs.map} +1 -1
  103. package/dist/{ErrorBoundary-DsP4hO_V.js → ErrorBoundary-TfeJetWc.js} +3 -3
  104. package/dist/{ErrorBoundary-DsP4hO_V.js.map → ErrorBoundary-TfeJetWc.js.map} +1 -1
  105. package/dist/{ErrorState-BThPIYaM.cjs → ErrorState-CzWz5UcX.cjs} +2 -2
  106. package/dist/{ErrorState-BThPIYaM.cjs.map → ErrorState-CzWz5UcX.cjs.map} +1 -1
  107. package/dist/{ErrorState-DEngucdq.js → ErrorState-EjIhdq7S.js} +8 -8
  108. package/dist/{ErrorState-DEngucdq.js.map → ErrorState-EjIhdq7S.js.map} +1 -1
  109. package/dist/{FileCard-CmCESTQd.js → FileCard-CmMxVyk3.js} +5 -5
  110. package/dist/{FileCard-CmCESTQd.js.map → FileCard-CmMxVyk3.js.map} +1 -1
  111. package/dist/{FileCard-wxDT2rj9.cjs → FileCard-Cxr1_eF2.cjs} +2 -2
  112. package/dist/{FileCard-wxDT2rj9.cjs.map → FileCard-Cxr1_eF2.cjs.map} +1 -1
  113. package/dist/{FileUploader-Dp1r4Sxc.js → FileUploader-2cXBI4Nh.js} +7 -7
  114. package/dist/{FileUploader-Dp1r4Sxc.js.map → FileUploader-2cXBI4Nh.js.map} +1 -1
  115. package/dist/{FileUploader-DBNRp5eT.cjs → FileUploader-BkM1t2aE.cjs} +2 -2
  116. package/dist/{FileUploader-DBNRp5eT.cjs.map → FileUploader-BkM1t2aE.cjs.map} +1 -1
  117. package/dist/{Flag-B6OhgwZr.cjs → Flag-CWp81_zX.cjs} +2 -2
  118. package/dist/{Flag-B6OhgwZr.cjs.map → Flag-CWp81_zX.cjs.map} +1 -1
  119. package/dist/{Flag-Q3vI7cgt.js → Flag-IQolG3j6.js} +2 -2
  120. package/dist/{Flag-Q3vI7cgt.js.map → Flag-IQolG3j6.js.map} +1 -1
  121. package/dist/{FullscreenToggle-WGsbE3Op.js → FullscreenToggle-B1DH_-k3.js} +4 -4
  122. package/dist/{FullscreenToggle-WGsbE3Op.js.map → FullscreenToggle-B1DH_-k3.js.map} +1 -1
  123. package/dist/{FullscreenToggle-DVdQriWB.cjs → FullscreenToggle-DXVAeN3M.cjs} +2 -2
  124. package/dist/{FullscreenToggle-DVdQriWB.cjs.map → FullscreenToggle-DXVAeN3M.cjs.map} +1 -1
  125. package/dist/Icon-BoQmbW7j.cjs +2 -0
  126. package/dist/Icon-BoQmbW7j.cjs.map +1 -0
  127. package/dist/{Icon-B7DJn8Tw.js → Icon-DMMO32p6.js} +72 -71
  128. package/dist/Icon-DMMO32p6.js.map +1 -0
  129. package/dist/{IconButton-DSPdv-oI.cjs → IconButton-ChhZqleN.cjs} +2 -2
  130. package/dist/{IconButton-DSPdv-oI.cjs.map → IconButton-ChhZqleN.cjs.map} +1 -1
  131. package/dist/{IconButton-iWbUJAz7.js → IconButton-s5hohjxu.js} +2 -2
  132. package/dist/{IconButton-iWbUJAz7.js.map → IconButton-s5hohjxu.js.map} +1 -1
  133. package/dist/{ImageEditor-C40dp2-V.cjs → ImageEditor-C8tFTX4e.cjs} +2 -2
  134. package/dist/{ImageEditor-C40dp2-V.cjs.map → ImageEditor-C8tFTX4e.cjs.map} +1 -1
  135. package/dist/{ImageEditor-BDNys8pq.js → ImageEditor-DWbWjGQ8.js} +8 -8
  136. package/dist/{ImageEditor-BDNys8pq.js.map → ImageEditor-DWbWjGQ8.js.map} +1 -1
  137. package/dist/{List-DS91CZUt.js → List-DQlEG_S5.js} +2 -2
  138. package/dist/{List-DS91CZUt.js.map → List-DQlEG_S5.js.map} +1 -1
  139. package/dist/{List-CLUXeaXS.cjs → List-Dfa7mlSZ.cjs} +2 -2
  140. package/dist/{List-CLUXeaXS.cjs.map → List-Dfa7mlSZ.cjs.map} +1 -1
  141. package/dist/{ListItem-Ezmdk7q-.js → ListItem-CLmg9xKQ.js} +2 -2
  142. package/dist/{ListItem-Ezmdk7q-.js.map → ListItem-CLmg9xKQ.js.map} +1 -1
  143. package/dist/{ListItem-CguNjf-u.cjs → ListItem-CWM2fUS2.cjs} +2 -2
  144. package/dist/{ListItem-CguNjf-u.cjs.map → ListItem-CWM2fUS2.cjs.map} +1 -1
  145. package/dist/{Loader-RyFTP2X5.cjs → Loader-BCrMy9NU.cjs} +2 -2
  146. package/dist/{Loader-RyFTP2X5.cjs.map → Loader-BCrMy9NU.cjs.map} +1 -1
  147. package/dist/{Loader-DD1vfqmN.js → Loader-CShIWNfG.js} +2 -2
  148. package/dist/{Loader-DD1vfqmN.js.map → Loader-CShIWNfG.js.map} +1 -1
  149. package/dist/{LocationPicker-B594f0bz.cjs → LocationPicker-8Tt0zJU4.cjs} +2 -2
  150. package/dist/{LocationPicker-B594f0bz.cjs.map → LocationPicker-8Tt0zJU4.cjs.map} +1 -1
  151. package/dist/{LocationPicker-DpmYaYyd.js → LocationPicker-DsV_s2Ur.js} +8 -8
  152. package/dist/{LocationPicker-DpmYaYyd.js.map → LocationPicker-DsV_s2Ur.js.map} +1 -1
  153. package/dist/{Modal-DVGTD2Ck.js → Modal-BO7fHn0r.js} +4 -4
  154. package/dist/{Modal-DVGTD2Ck.js.map → Modal-BO7fHn0r.js.map} +1 -1
  155. package/dist/{Modal-7cCok6fV.cjs → Modal-yj92WLay.cjs} +2 -2
  156. package/dist/{Modal-7cCok6fV.cjs.map → Modal-yj92WLay.cjs.map} +1 -1
  157. package/dist/{MultiSelect-DTKNjUDH.cjs → MultiSelect-B6JZb_5N.cjs} +2 -2
  158. package/dist/{MultiSelect-DTKNjUDH.cjs.map → MultiSelect-B6JZb_5N.cjs.map} +1 -1
  159. package/dist/{MultiSelect-D-X833xt.js → MultiSelect-D-QWlfwD.js} +5 -5
  160. package/dist/{MultiSelect-D-X833xt.js.map → MultiSelect-D-QWlfwD.js.map} +1 -1
  161. package/dist/{NumberField-Xz4yQMlm.cjs → NumberField-CS5VMnk4.cjs} +2 -2
  162. package/dist/{NumberField-Xz4yQMlm.cjs.map → NumberField-CS5VMnk4.cjs.map} +1 -1
  163. package/dist/{NumberField-OPOl0Yph.js → NumberField-D_UxKjVN.js} +4 -4
  164. package/dist/{NumberField-OPOl0Yph.js.map → NumberField-D_UxKjVN.js.map} +1 -1
  165. package/dist/{OtpField-kd0YghZq.cjs → OtpField-BuS_8j9L.cjs} +2 -2
  166. package/dist/{OtpField-kd0YghZq.cjs.map → OtpField-BuS_8j9L.cjs.map} +1 -1
  167. package/dist/{OtpField-CLrDMNtS.js → OtpField-CpjDid5_.js} +2 -2
  168. package/dist/{OtpField-CLrDMNtS.js.map → OtpField-CpjDid5_.js.map} +1 -1
  169. package/dist/{PageError-v6MAH_OL.cjs → PageError-CTEOASeb.cjs} +2 -2
  170. package/dist/{PageError-v6MAH_OL.cjs.map → PageError-CTEOASeb.cjs.map} +1 -1
  171. package/dist/{PageError-BIiZDzey.js → PageError-DjyJrGmR.js} +5 -5
  172. package/dist/{PageError-BIiZDzey.js.map → PageError-DjyJrGmR.js.map} +1 -1
  173. package/dist/{PageLayout-DH3jochw.cjs → PageLayout-BYKRmCAL.cjs} +2 -2
  174. package/dist/{PageLayout-DH3jochw.cjs.map → PageLayout-BYKRmCAL.cjs.map} +1 -1
  175. package/dist/{PageLayout-BjaPfXvb.js → PageLayout-Cz1OhQZ7.js} +5 -5
  176. package/dist/{PageLayout-BjaPfXvb.js.map → PageLayout-Cz1OhQZ7.js.map} +1 -1
  177. package/dist/{PageNotFound-C1oSsMG-.js → PageNotFound-CwBtrllo.js} +5 -5
  178. package/dist/{PageNotFound-C1oSsMG-.js.map → PageNotFound-CwBtrllo.js.map} +1 -1
  179. package/dist/{PageNotFound-Cse4bROv.cjs → PageNotFound-u9Q4KG6B.cjs} +2 -2
  180. package/dist/{PageNotFound-Cse4bROv.cjs.map → PageNotFound-u9Q4KG6B.cjs.map} +1 -1
  181. package/dist/{Pagination-BNJdqcu4.js → Pagination-CLjNwqie.js} +3 -3
  182. package/dist/{Pagination-BNJdqcu4.js.map → Pagination-CLjNwqie.js.map} +1 -1
  183. package/dist/{Pagination-DkmfEmgK.cjs → Pagination-HtS5gPnd.cjs} +2 -2
  184. package/dist/{Pagination-DkmfEmgK.cjs.map → Pagination-HtS5gPnd.cjs.map} +1 -1
  185. package/dist/{PaletteField-DqZl1mK0.cjs → PaletteField-BSgx5pxh.cjs} +2 -2
  186. package/dist/{PaletteField-DqZl1mK0.cjs.map → PaletteField-BSgx5pxh.cjs.map} +1 -1
  187. package/dist/{PaletteField-Cdky6Zka.js → PaletteField-Bk7cnSla.js} +3 -3
  188. package/dist/{PaletteField-Cdky6Zka.js.map → PaletteField-Bk7cnSla.js.map} +1 -1
  189. package/dist/{PhoneField-jq-3_i_b.cjs → PhoneField-CzFv2Vci.cjs} +2 -2
  190. package/dist/{PhoneField-jq-3_i_b.cjs.map → PhoneField-CzFv2Vci.cjs.map} +1 -1
  191. package/dist/{PhoneField-DmFaJJEa.js → PhoneField-DhoumZNG.js} +5 -5
  192. package/dist/{PhoneField-DmFaJJEa.js.map → PhoneField-DhoumZNG.js.map} +1 -1
  193. package/dist/{Popconfirm-KOE9gGi6.cjs → Popconfirm-Cb9LlmZb.cjs} +2 -2
  194. package/dist/{Popconfirm-KOE9gGi6.cjs.map → Popconfirm-Cb9LlmZb.cjs.map} +1 -1
  195. package/dist/{Popconfirm-D-8ZG2WR.js → Popconfirm-D7J5JbF-.js} +4 -4
  196. package/dist/{Popconfirm-D-8ZG2WR.js.map → Popconfirm-D7J5JbF-.js.map} +1 -1
  197. package/dist/{Progress-CdX666FP.js → Progress-Bt2LDqbD.js} +2 -2
  198. package/dist/{Progress-CdX666FP.js.map → Progress-Bt2LDqbD.js.map} +1 -1
  199. package/dist/{Progress-7EyhPtnu.cjs → Progress-dAtQ2BN-.cjs} +2 -2
  200. package/dist/{Progress-7EyhPtnu.cjs.map → Progress-dAtQ2BN-.cjs.map} +1 -1
  201. package/dist/{QrCode-ClIJjjvF.cjs → QrCode-FHUAxI8u.cjs} +2 -2
  202. package/dist/{QrCode-ClIJjjvF.cjs.map → QrCode-FHUAxI8u.cjs.map} +1 -1
  203. package/dist/{QrCode-D7ocSDi7.js → QrCode-jaDZxZkv.js} +2 -2
  204. package/dist/{QrCode-D7ocSDi7.js.map → QrCode-jaDZxZkv.js.map} +1 -1
  205. package/dist/{RemoveDialog-DTzRPLaT.js → RemoveDialog-DdO5E3Wl.js} +6 -6
  206. package/dist/{RemoveDialog-DTzRPLaT.js.map → RemoveDialog-DdO5E3Wl.js.map} +1 -1
  207. package/dist/{RemoveDialog-UsSX5z8Y.cjs → RemoveDialog-eGNxdyoO.cjs} +2 -2
  208. package/dist/{RemoveDialog-UsSX5z8Y.cjs.map → RemoveDialog-eGNxdyoO.cjs.map} +1 -1
  209. package/dist/{RichTextEditor-Bh0Q3dIW.cjs → RichTextEditor-CoYuQurR.cjs} +2 -2
  210. package/dist/{RichTextEditor-Bh0Q3dIW.cjs.map → RichTextEditor-CoYuQurR.cjs.map} +1 -1
  211. package/dist/{RichTextEditor-BMctlkVC.js → RichTextEditor-DHRiJchI.js} +10 -10
  212. package/dist/{RichTextEditor-BMctlkVC.js.map → RichTextEditor-DHRiJchI.js.map} +1 -1
  213. package/dist/{RootLayout-BztZetpk.cjs → RootLayout-CEplIlVR.cjs} +2 -2
  214. package/dist/{RootLayout-BztZetpk.cjs.map → RootLayout-CEplIlVR.cjs.map} +1 -1
  215. package/dist/{RootLayout-CTkv4iQJ.js → RootLayout-pd66MZtI.js} +21 -21
  216. package/dist/{RootLayout-CTkv4iQJ.js.map → RootLayout-pd66MZtI.js.map} +1 -1
  217. package/dist/{Select-CmonDIIU.js → Select-C2iiQLMh.js} +4 -4
  218. package/dist/{Select-CmonDIIU.js.map → Select-C2iiQLMh.js.map} +1 -1
  219. package/dist/{Select-BzVyK6Ne.cjs → Select-CvW_T9R-.cjs} +2 -2
  220. package/dist/{Select-BzVyK6Ne.cjs.map → Select-CvW_T9R-.cjs.map} +1 -1
  221. package/dist/Sidebar-CqGCazeA.cjs +2 -0
  222. package/dist/Sidebar-CqGCazeA.cjs.map +1 -0
  223. package/dist/Sidebar-DuUhzQBi.js +543 -0
  224. package/dist/Sidebar-DuUhzQBi.js.map +1 -0
  225. package/dist/{Slider-Oe9VSAdy.cjs → Slider-DlPMPdHA.cjs} +2 -2
  226. package/dist/{Slider-Oe9VSAdy.cjs.map → Slider-DlPMPdHA.cjs.map} +1 -1
  227. package/dist/{Slider-C7Wb3q_F.js → Slider-UY29adRu.js} +2 -2
  228. package/dist/{Slider-C7Wb3q_F.js.map → Slider-UY29adRu.js.map} +1 -1
  229. package/dist/{SpeedDial-DpIXoYHB.cjs → SpeedDial-Cms5pJ9t.cjs} +2 -2
  230. package/dist/{SpeedDial-DpIXoYHB.cjs.map → SpeedDial-Cms5pJ9t.cjs.map} +1 -1
  231. package/dist/{SpeedDial-CCGQlwn2.js → SpeedDial-DOWefQgo.js} +3 -3
  232. package/dist/{SpeedDial-CCGQlwn2.js.map → SpeedDial-DOWefQgo.js.map} +1 -1
  233. package/dist/{Stepper-PBDU60G_.cjs → Stepper-4wCyTnwi.cjs} +2 -2
  234. package/dist/{Stepper-PBDU60G_.cjs.map → Stepper-4wCyTnwi.cjs.map} +1 -1
  235. package/dist/{Stepper-D_WKS1RG.js → Stepper-yQEJkbUJ.js} +3 -3
  236. package/dist/{Stepper-D_WKS1RG.js.map → Stepper-yQEJkbUJ.js.map} +1 -1
  237. package/dist/{SwatchPicker-DS4WY2eM.js → SwatchPicker-BI0XHphv.js} +2 -2
  238. package/dist/{SwatchPicker-DS4WY2eM.js.map → SwatchPicker-BI0XHphv.js.map} +1 -1
  239. package/dist/{SwatchPicker-DCjE0T80.cjs → SwatchPicker-QYtqEUxX.cjs} +2 -2
  240. package/dist/{SwatchPicker-DCjE0T80.cjs.map → SwatchPicker-QYtqEUxX.cjs.map} +1 -1
  241. package/dist/{Table-DZQVa_PE.js → Table-CNrt1EWm.js} +19 -19
  242. package/dist/{Table-DZQVa_PE.js.map → Table-CNrt1EWm.js.map} +1 -1
  243. package/dist/{Table-CZ4n4-TN.cjs → Table-D4pqLNtE.cjs} +2 -2
  244. package/dist/{Table-CZ4n4-TN.cjs.map → Table-D4pqLNtE.cjs.map} +1 -1
  245. package/dist/{Tabs-Byhqm-TE.cjs → Tabs-D6qrgZTM.cjs} +2 -2
  246. package/dist/{Tabs-Byhqm-TE.cjs.map → Tabs-D6qrgZTM.cjs.map} +1 -1
  247. package/dist/{Tabs-B063mP-v.js → Tabs-lezN63jW.js} +3 -3
  248. package/dist/{Tabs-B063mP-v.js.map → Tabs-lezN63jW.js.map} +1 -1
  249. package/dist/{TagsField-g_LtwYgz.cjs → TagsField-BIJEDyfz.cjs} +2 -2
  250. package/dist/{TagsField-g_LtwYgz.cjs.map → TagsField-BIJEDyfz.cjs.map} +1 -1
  251. package/dist/{TagsField-hQFYyNcM.js → TagsField-D_a2I8eU.js} +5 -5
  252. package/dist/{TagsField-hQFYyNcM.js.map → TagsField-D_a2I8eU.js.map} +1 -1
  253. package/dist/{TextField-Dfpk0jOg.js → TextField-BsC2zoHI.js} +4 -4
  254. package/dist/{TextField-Dfpk0jOg.js.map → TextField-BsC2zoHI.js.map} +1 -1
  255. package/dist/{TextField-D4s2hGSd.cjs → TextField-CXDBlP-8.cjs} +2 -2
  256. package/dist/{TextField-D4s2hGSd.cjs.map → TextField-CXDBlP-8.cjs.map} +1 -1
  257. package/dist/{ThemeToggle-BQQ3eswr.js → ThemeToggle-Dh6XxqM7.js} +4 -4
  258. package/dist/{ThemeToggle-BQQ3eswr.js.map → ThemeToggle-Dh6XxqM7.js.map} +1 -1
  259. package/dist/{ThemeToggle-BTTI7Jz0.cjs → ThemeToggle-zbKf4ph5.cjs} +2 -2
  260. package/dist/{ThemeToggle-BTTI7Jz0.cjs.map → ThemeToggle-zbKf4ph5.cjs.map} +1 -1
  261. package/dist/{TimeColumns-BpjhrNCq.js → TimeColumns-CR__2LXh.js} +2 -2
  262. package/dist/{TimeColumns-BpjhrNCq.js.map → TimeColumns-CR__2LXh.js.map} +1 -1
  263. package/dist/{TimeColumns-DZYGWWG_.cjs → TimeColumns-CjBeUPtV.cjs} +2 -2
  264. package/dist/{TimeColumns-DZYGWWG_.cjs.map → TimeColumns-CjBeUPtV.cjs.map} +1 -1
  265. package/dist/{TimePicker-mzoMIlpq.js → TimePicker-BakQ-wPd.js} +6 -6
  266. package/dist/{TimePicker-mzoMIlpq.js.map → TimePicker-BakQ-wPd.js.map} +1 -1
  267. package/dist/{TimePicker-DChtZgBs.cjs → TimePicker-DtqmD2bH.cjs} +2 -2
  268. package/dist/{TimePicker-DChtZgBs.cjs.map → TimePicker-DtqmD2bH.cjs.map} +1 -1
  269. package/dist/{Timeline-DOojNvLG.cjs → Timeline-CFKbPpAV.cjs} +2 -2
  270. package/dist/{Timeline-DOojNvLG.cjs.map → Timeline-CFKbPpAV.cjs.map} +1 -1
  271. package/dist/{Timeline-Dg03dwTN.js → Timeline-zCHcq7Ra.js} +2 -2
  272. package/dist/{Timeline-Dg03dwTN.js.map → Timeline-zCHcq7Ra.js.map} +1 -1
  273. package/dist/{Toaster-lonArt-H.cjs → Toaster-BpXPWJ_n.cjs} +2 -2
  274. package/dist/{Toaster-lonArt-H.cjs.map → Toaster-BpXPWJ_n.cjs.map} +1 -1
  275. package/dist/{Toaster-79DvOW80.js → Toaster-C5jWNL-o.js} +3 -3
  276. package/dist/{Toaster-79DvOW80.js.map → Toaster-C5jWNL-o.js.map} +1 -1
  277. package/dist/{ToggleButtonGroup-CGNRLxjg.cjs → ToggleButtonGroup-CbKtjm8O.cjs} +2 -2
  278. package/dist/{ToggleButtonGroup-CGNRLxjg.cjs.map → ToggleButtonGroup-CbKtjm8O.cjs.map} +1 -1
  279. package/dist/{ToggleButtonGroup-K6ZcrTZT.js → ToggleButtonGroup-D3Jltv0z.js} +2 -2
  280. package/dist/{ToggleButtonGroup-K6ZcrTZT.js.map → ToggleButtonGroup-D3Jltv0z.js.map} +1 -1
  281. package/dist/{TranslatedFields-CHHtXO_n.js → TranslatedFields-C8oxlGIQ.js} +5 -5
  282. package/dist/{TranslatedFields-CHHtXO_n.js.map → TranslatedFields-C8oxlGIQ.js.map} +1 -1
  283. package/dist/{TranslatedFields-BYpMrYaw.cjs → TranslatedFields-Che_ZPHk.cjs} +2 -2
  284. package/dist/{TranslatedFields-BYpMrYaw.cjs.map → TranslatedFields-Che_ZPHk.cjs.map} +1 -1
  285. package/dist/{UserCard-SlkCgZS9.cjs → UserCard-DlrdIJHW.cjs} +2 -2
  286. package/dist/{UserCard-SlkCgZS9.cjs.map → UserCard-DlrdIJHW.cjs.map} +1 -1
  287. package/dist/{UserCard-BJFNP_nl.js → UserCard-Dr1A_bdA.js} +5 -5
  288. package/dist/{UserCard-BJFNP_nl.js.map → UserCard-Dr1A_bdA.js.map} +1 -1
  289. package/dist/auth/AuthGuard.d.cts +3 -1
  290. package/dist/auth/AuthGuard.d.ts +3 -1
  291. package/dist/auth/authLayoutRoute.d.cts +4 -3
  292. package/dist/auth/authLayoutRoute.d.ts +4 -3
  293. package/dist/auth/authRedirect.d.cts +13 -5
  294. package/dist/auth/authRedirect.d.ts +13 -5
  295. package/dist/{authLayoutRoute-AiQqIH85.cjs → authLayoutRoute-CPLqQVvx.cjs} +2 -2
  296. package/dist/authLayoutRoute-CPLqQVvx.cjs.map +1 -0
  297. package/dist/{authLayoutRoute-Nf2PDNDN.js → authLayoutRoute-nSZq8JYA.js} +2 -2
  298. package/dist/authLayoutRoute-nSZq8JYA.js.map +1 -0
  299. package/dist/chunks/icons/{62-Bfupp-0A.js → 62-9nuZO-ct.js} +9 -10
  300. package/dist/chunks/icons/{62-CZZzM1ev.cjs → 62-DQQ1U3IB.cjs} +1 -1
  301. package/dist/components/Accordion/index.cjs +1 -1
  302. package/dist/components/Accordion/index.js +1 -1
  303. package/dist/components/Alert/index.cjs +1 -1
  304. package/dist/components/Alert/index.js +1 -1
  305. package/dist/components/AuthLayout/index.cjs +1 -1
  306. package/dist/components/AuthLayout/index.js +1 -1
  307. package/dist/components/Avatar/index.cjs +1 -1
  308. package/dist/components/Avatar/index.js +2 -2
  309. package/dist/components/Breadcrumbs/index.cjs +1 -1
  310. package/dist/components/Breadcrumbs/index.js +1 -1
  311. package/dist/components/Button/index.cjs +1 -1
  312. package/dist/components/Button/index.js +1 -1
  313. package/dist/components/Card/index.cjs +1 -1
  314. package/dist/components/Card/index.js +1 -1
  315. package/dist/components/Chip/index.cjs +1 -1
  316. package/dist/components/Chip/index.js +1 -1
  317. package/dist/components/ChoiceCard/index.cjs +1 -1
  318. package/dist/components/ChoiceCard/index.js +1 -1
  319. package/dist/components/CodeBlock/index.cjs +1 -1
  320. package/dist/components/CodeBlock/index.js +1 -1
  321. package/dist/components/ColorPicker/index.cjs +1 -1
  322. package/dist/components/ColorPicker/index.js +1 -1
  323. package/dist/components/ColorRamp/index.cjs +1 -1
  324. package/dist/components/ColorRamp/index.js +1 -1
  325. package/dist/components/CopyButton/index.cjs +1 -1
  326. package/dist/components/CopyButton/index.js +1 -1
  327. package/dist/components/DashedButton/index.cjs +1 -1
  328. package/dist/components/DashedButton/index.js +1 -1
  329. package/dist/components/DatePicker/index.cjs +1 -1
  330. package/dist/components/DatePicker/index.js +1 -1
  331. package/dist/components/DateTimePicker/index.cjs +1 -1
  332. package/dist/components/DateTimePicker/index.js +1 -1
  333. package/dist/components/DescriptionList/index.cjs +1 -1
  334. package/dist/components/DescriptionList/index.js +1 -1
  335. package/dist/components/Dropdown/index.cjs +1 -1
  336. package/dist/components/Dropdown/index.js +1 -1
  337. package/dist/components/EmptyState/index.cjs +1 -1
  338. package/dist/components/EmptyState/index.js +1 -1
  339. package/dist/components/ErrorState/index.cjs +1 -1
  340. package/dist/components/ErrorState/index.js +2 -2
  341. package/dist/components/FileCard/index.cjs +1 -1
  342. package/dist/components/FileCard/index.js +1 -1
  343. package/dist/components/FileUploader/index.cjs +1 -1
  344. package/dist/components/FileUploader/index.js +1 -1
  345. package/dist/components/Flag/index.cjs +1 -1
  346. package/dist/components/Flag/index.js +1 -1
  347. package/dist/components/FullscreenToggle/index.cjs +1 -1
  348. package/dist/components/FullscreenToggle/index.js +1 -1
  349. package/dist/components/Icon/index.cjs +1 -1
  350. package/dist/components/Icon/index.js +1 -1
  351. package/dist/components/IconButton/index.cjs +1 -1
  352. package/dist/components/IconButton/index.js +1 -1
  353. package/dist/components/ImageEditor/index.cjs +1 -1
  354. package/dist/components/ImageEditor/index.js +1 -1
  355. package/dist/components/List/index.cjs +1 -1
  356. package/dist/components/List/index.js +2 -2
  357. package/dist/components/Loader/index.cjs +1 -1
  358. package/dist/components/Loader/index.js +1 -1
  359. package/dist/components/LocationPicker/index.cjs +1 -1
  360. package/dist/components/LocationPicker/index.js +1 -1
  361. package/dist/components/Modal/index.cjs +1 -1
  362. package/dist/components/Modal/index.js +1 -1
  363. package/dist/components/MultiSelect/index.cjs +1 -1
  364. package/dist/components/MultiSelect/index.js +1 -1
  365. package/dist/components/NumberField/index.cjs +1 -1
  366. package/dist/components/NumberField/index.js +1 -1
  367. package/dist/components/OtpField/index.cjs +1 -1
  368. package/dist/components/OtpField/index.js +1 -1
  369. package/dist/components/PageError/index.cjs +1 -1
  370. package/dist/components/PageError/index.js +1 -1
  371. package/dist/components/PageLayout/index.cjs +1 -1
  372. package/dist/components/PageLayout/index.js +1 -1
  373. package/dist/components/PageNotFound/index.cjs +1 -1
  374. package/dist/components/PageNotFound/index.js +1 -1
  375. package/dist/components/Pagination/index.cjs +1 -1
  376. package/dist/components/Pagination/index.js +1 -1
  377. package/dist/components/PaletteField/index.cjs +1 -1
  378. package/dist/components/PaletteField/index.js +1 -1
  379. package/dist/components/PhoneField/index.cjs +1 -1
  380. package/dist/components/PhoneField/index.js +1 -1
  381. package/dist/components/Popconfirm/index.cjs +1 -1
  382. package/dist/components/Popconfirm/index.js +1 -1
  383. package/dist/components/Progress/index.cjs +1 -1
  384. package/dist/components/Progress/index.js +1 -1
  385. package/dist/components/QrCode/index.cjs +1 -1
  386. package/dist/components/QrCode/index.js +1 -1
  387. package/dist/components/RemoveDialog/index.cjs +1 -1
  388. package/dist/components/RemoveDialog/index.js +1 -1
  389. package/dist/components/RichTextEditor/index.cjs +1 -1
  390. package/dist/components/RichTextEditor/index.js +1 -1
  391. package/dist/components/RootLayout/index.cjs +1 -1
  392. package/dist/components/RootLayout/index.js +1 -1
  393. package/dist/components/Select/index.cjs +1 -1
  394. package/dist/components/Select/index.js +1 -1
  395. package/dist/components/Sidebar/Sidebar.d.cts +40 -4
  396. package/dist/components/Sidebar/Sidebar.d.ts +40 -4
  397. package/dist/components/Sidebar/index.cjs +1 -1
  398. package/dist/components/Sidebar/index.d.cts +2 -1
  399. package/dist/components/Sidebar/index.d.ts +2 -1
  400. package/dist/components/Sidebar/index.js +5 -4
  401. package/dist/components/Slider/index.cjs +1 -1
  402. package/dist/components/Slider/index.js +1 -1
  403. package/dist/components/SpeedDial/index.cjs +1 -1
  404. package/dist/components/SpeedDial/index.js +1 -1
  405. package/dist/components/Stepper/index.cjs +1 -1
  406. package/dist/components/Stepper/index.js +1 -1
  407. package/dist/components/SwatchPicker/index.cjs +1 -1
  408. package/dist/components/SwatchPicker/index.js +1 -1
  409. package/dist/components/Table/index.cjs +1 -1
  410. package/dist/components/Table/index.js +1 -1
  411. package/dist/components/Tabs/index.cjs +1 -1
  412. package/dist/components/Tabs/index.js +1 -1
  413. package/dist/components/TagsField/index.cjs +1 -1
  414. package/dist/components/TagsField/index.js +1 -1
  415. package/dist/components/TextField/index.cjs +1 -1
  416. package/dist/components/TextField/index.js +1 -1
  417. package/dist/components/ThemeToggle/index.cjs +1 -1
  418. package/dist/components/ThemeToggle/index.js +1 -1
  419. package/dist/components/TimePicker/index.cjs +1 -1
  420. package/dist/components/TimePicker/index.js +1 -1
  421. package/dist/components/Timeline/index.cjs +1 -1
  422. package/dist/components/Timeline/index.js +1 -1
  423. package/dist/components/Toast/index.cjs +1 -1
  424. package/dist/components/Toast/index.js +1 -1
  425. package/dist/components/ToggleButton/index.cjs +1 -1
  426. package/dist/components/ToggleButton/index.js +1 -1
  427. package/dist/components/TranslatedFields/index.cjs +1 -1
  428. package/dist/components/TranslatedFields/index.js +1 -1
  429. package/dist/components/UserCard/index.cjs +1 -1
  430. package/dist/components/UserCard/index.js +1 -1
  431. package/dist/entries/app.cjs +1 -1
  432. package/dist/entries/app.js +1 -1
  433. package/dist/entries/auth.cjs +1 -1
  434. package/dist/entries/auth.js +2 -2
  435. package/dist/entries/components.cjs +1 -1
  436. package/dist/entries/components.js +157 -156
  437. package/dist/entries/i18n.cjs +1 -1
  438. package/dist/entries/i18n.js +2 -2
  439. package/dist/entries/icons.cjs +1 -1
  440. package/dist/entries/icons.js +1 -1
  441. package/dist/entries/theme.cjs +1 -1
  442. package/dist/entries/theme.js +1 -1
  443. package/dist/i18n/messages.d.cts +4 -0
  444. package/dist/i18n/messages.d.ts +4 -0
  445. package/dist/index.cjs +1 -1
  446. package/dist/index.css +1 -1
  447. package/dist/index.js +173 -172
  448. package/dist/{messages-DeQuvGln.js → messages-CZbb1xNN.js} +29 -15
  449. package/dist/messages-CZbb1xNN.js.map +1 -0
  450. package/dist/messages-D4ooXnUr.cjs +36 -0
  451. package/dist/messages-D4ooXnUr.cjs.map +1 -0
  452. package/dist/useHomeTo---51HTJ0.cjs +2 -0
  453. package/dist/useHomeTo---51HTJ0.cjs.map +1 -0
  454. package/dist/useHomeTo-CJj94TdV.js +10 -0
  455. package/dist/useHomeTo-CJj94TdV.js.map +1 -0
  456. package/dist/{useOptionMenu-6ZffgbYG.cjs → useOptionMenu-DS___46k.cjs} +2 -2
  457. package/dist/{useOptionMenu-6ZffgbYG.cjs.map → useOptionMenu-DS___46k.cjs.map} +1 -1
  458. package/dist/{useOptionMenu-CxM6FHXL.js → useOptionMenu-Sp2d3Bzi.js} +6 -6
  459. package/dist/{useOptionMenu-CxM6FHXL.js.map → useOptionMenu-Sp2d3Bzi.js.map} +1 -1
  460. package/package.json +1 -1
  461. package/dist/AuthGuard-BTSRwF04.js +0 -108
  462. package/dist/AuthGuard-BTSRwF04.js.map +0 -1
  463. package/dist/AuthGuard-CLqroYbX.cjs +0 -2
  464. package/dist/AuthGuard-CLqroYbX.cjs.map +0 -1
  465. package/dist/Icon-B7DJn8Tw.js.map +0 -1
  466. package/dist/Icon-CBg21lKA.cjs +0 -2
  467. package/dist/Icon-CBg21lKA.cjs.map +0 -1
  468. package/dist/Sidebar-CLr-DyQ_.js +0 -522
  469. package/dist/Sidebar-CLr-DyQ_.js.map +0 -1
  470. package/dist/Sidebar-CM-jZfj5.cjs +0 -2
  471. package/dist/Sidebar-CM-jZfj5.cjs.map +0 -1
  472. package/dist/authLayoutRoute-AiQqIH85.cjs.map +0 -1
  473. package/dist/authLayoutRoute-Nf2PDNDN.js.map +0 -1
  474. package/dist/messages-DeQuvGln.js.map +0 -1
  475. package/dist/messages-dL9MkVze.cjs +0 -36
  476. package/dist/messages-dL9MkVze.cjs.map +0 -1
  477. package/dist/useHomeTo-BLSvhJd5.js +0 -25
  478. package/dist/useHomeTo-BLSvhJd5.js.map +0 -1
  479. package/dist/useHomeTo-cXCg1tf0.cjs +0 -2
  480. package/dist/useHomeTo-cXCg1tf0.cjs.map +0 -1
@@ -1,2 +1,2 @@
1
- "use strict";const p=require("react/jsx-runtime"),k=require("react"),Z=require("clsx"),N=require("./Icon-CBg21lKA.cjs"),d=require("./color-CgR8ybWZ.cjs"),ee=require("./ConfigProvider-CYSpuSMJ.cjs"),A=o=>Math.min(255,Math.max(0,Math.round(o)));function D({r:o,g:h,b:a}){const t=o/255,c=h/255,f=a/255,l=Math.max(t,c,f),n=Math.min(t,c,f),u=l-n;let i=0;u!==0&&(l===t?i=(c-f)/u%6:l===c?i=(f-t)/u+2:i=(t-c)/u+4,i*=60,i<0&&(i+=360));const x=l===0?0:u/l;return{h:i,s:x,v:l}}function T({h:o,s:h,v:a}){const t=a*h,c=t*(1-Math.abs(o/60%2-1)),f=a-t;let l=0,n=0,u=0;return o<60?[l,n,u]=[t,c,0]:o<120?[l,n,u]=[c,t,0]:o<180?[l,n,u]=[0,t,c]:o<240?[l,n,u]=[0,c,t]:o<300?[l,n,u]=[c,0,t]:[l,n,u]=[t,0,c],{r:(l+f)*255,g:(n+f)*255,b:(u+f)*255}}const re=o=>D(d.hexToRgb(o));function te(o){const{r:h,g:a,b:t}=d.hexToRgb(o);return(h*299+a*587+t*114)/1e3>=150?"#04202b":"#ffffff"}const se=/^rgba?\(\s*([\d.]+)\s*[, ]\s*([\d.]+)\s*[, ]\s*([\d.]+)\s*(?:[,/]\s*([\d.]+%?)\s*)?\)$/i;function $(o){const h=o.trim();if(!h)return null;let a=h.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.clamp01(parseInt(a.slice(6,8),16)/255)};const t=h.match(se);if(t){let c=1;return t[4]!=null&&(c=t[4].endsWith("%")?d.clamp01(parseFloat(t[4])/100):d.clamp01(parseFloat(t[4]))),{r:A(+t[1]),g:A(+t[2]),b:A(+t[3]),a:c}}return null}function b({r:o,g:h,b:a,a:t}){return t>=1?d.rgbToHex({r:o,g:h,b:a}):`rgba(${A(o)}, ${A(h)}, ${A(a)}, ${Math.round(d.clamp01(t)*100)/100})`}const ae="_field_16rd0_1",ne="_fullWidth_16rd0_6",oe="_label_16rd0_11",ce="_required_16rd0_17",le="_control_16rd0_23",ie="_open_16rd0_44",ue="_error_16rd0_49",he="_disabled_16rd0_57",de="_value_16rd0_64",pe="_placeholder_16rd0_73",_e="_preview_16rd0_81",fe="_previewEmpty_16rd0_101",me="_helper_16rd0_113",be="_popover_16rd0_118",we="_sv_16rd0_128",ve="_svThumb_16rd0_139",xe="_hue_16rd0_150",ge="_hueThumb_16rd0_168",ke="_alphaThumb_16rd0_169",ye="_alpha_16rd0_169",Te="_hexRow_16rd0_202",Ae="_currentSwatch_16rd0_207",Ce="_hexField_16rd0_223",De="_hexInput_16rd0_235",je="_swatches_16rd0_247",Ie="_swatch_16rd0_247",Re="_swatchClear_16rd0_264",Me="_sm_16rd0_278",$e="_md_16rd0_282",Pe="_lg_16rd0_286",_={field:ae,fullWidth:ne,label:oe,required:ce,control:le,open:ie,error:ue,disabled:he,value:de,placeholder:pe,preview:_e,previewEmpty:fe,helper:me,popover:be,sv:we,svThumb:ve,hue:xe,hueThumb:ge,alphaThumb:ke,alpha:ye,hexRow:Te,currentSwatch:Ae,hexField:Ce,hexInput:De,swatches:je,swatch:Ie,swatchClear:Re,sm:Me,md:$e,lg:Pe},L=["#13404e","#039aa1","#00a854","#0ea5e9","#6366f1","#7c3aed","#f04134","#f59e0b","#ffbf00","#10b981","#64748b","#0f172a","#ffffff"],F=re("#13404e");function Se({value:o,onChange:h,swatches:a=L,clearable:t=!0,alpha:c=!0}){const f=r=>c?r:1,l=ee.useT(),n=$(o||""),u=n?b(n):null,[i,x]=k.useState(n?D(n):F),w=k.useRef(i);w.current=i;const[C,j]=k.useState((n==null?void 0:n.a)??1),g=k.useRef(C);g.current=C,k.useEffect(()=>{if(!n)return;const r=b({...T(w.current),a:g.current});u!==r&&(x(D(n)),j(n.a))},[u]);const I=r=>{x(r),h(b({...T(r),a:f(g.current)}))},E=r=>{j(r),h(b({...T(w.current),a:f(r)}))},P=r=>e=>{e.preventDefault();const s=e.currentTarget,m=(M,Q)=>r(M,Q,s.getBoundingClientRect());m(e.clientX,e.clientY);const v=M=>m(M.clientX,M.clientY),y=()=>{window.removeEventListener("pointermove",v),window.removeEventListener("pointerup",y)};window.addEventListener("pointermove",v),window.addEventListener("pointerup",y)},q=P((r,e,s)=>{const m=d.clamp01((r-s.left)/s.width),v=d.clamp01(1-(e-s.top)/s.height);I({...w.current,s:m,v})}),K=P((r,e,s)=>{const m=d.clamp01((r-s.left)/s.width)*360;I({...w.current,h:m})}),U=P((r,e,s)=>{E(d.clamp01((r-s.left)/s.width))}),R=.01,W=r=>{const{h:e,s,v:m}=w.current;let v=s,y=m;switch(r.key){case"ArrowLeft":v=d.clamp01(s-R);break;case"ArrowRight":v=d.clamp01(s+R);break;case"ArrowUp":y=d.clamp01(m+R);break;case"ArrowDown":y=d.clamp01(m-R);break;default:return}r.preventDefault(),I({h:e,s:v,v:y})},B=r=>{const{h:e}=w.current;let s=e;switch(r.key){case"ArrowLeft":case"ArrowDown":s=Math.max(0,e-1);break;case"ArrowRight":case"ArrowUp":s=Math.min(360,e+1);break;case"Home":s=0;break;case"End":s=360;break;default:return}r.preventDefault(),I({...w.current,h:s})},V=r=>{let e=g.current;switch(r.key){case"ArrowLeft":case"ArrowDown":e=d.clamp01(g.current-.01);break;case"ArrowRight":case"ArrowUp":e=d.clamp01(g.current+.01);break;case"Home":e=0;break;case"End":e=1;break;default:return}r.preventDefault(),E(e)},[z,H]=k.useState("");k.useEffect(()=>{H(u??"")},[u]);const X=r=>{H(r);const e=$(r);e&&(x(D(e)),j(e.a),h(b({...e,a:f(e.a)})))},Y=()=>{h(""),x(F),j(1)},G=b({...T(i),a:C}),O=d.rgbToHex(T(i)),S=T(i),J=`${Math.round(S.r)}, ${Math.round(S.g)}, ${Math.round(S.b)}`;return p.jsxs("div",{className:_.popover,style:{"--cp-hue":i.h},children:[p.jsx("div",{className:_.sv,onPointerDown:q,onKeyDown:W,role:"slider",tabIndex:0,"aria-label":l("colorPicker.saturation"),"aria-valuetext":`${Math.round(i.s*100)}% saturation, ${Math.round(i.v*100)}% brightness`,children:p.jsx("span",{className:_.svThumb,style:{left:`${i.s*100}%`,top:`${(1-i.v)*100}%`,background:O}})}),p.jsx("div",{className:_.hue,onPointerDown:K,onKeyDown:B,role:"slider",tabIndex:0,"aria-label":l("colorPicker.hue"),"aria-valuemin":0,"aria-valuemax":360,"aria-valuenow":Math.round(i.h),children:p.jsx("span",{className:_.hueThumb,style:{left:`${i.h/360*100}%`}})}),c&&p.jsx("div",{className:_.alpha,onPointerDown:U,onKeyDown:V,role:"slider",tabIndex:0,"aria-label":l("colorPicker.opacity"),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(C*100),style:{"--cp-rgb":J},children:p.jsx("span",{className:_.alphaThumb,style:{left:`${C*100}%`}})}),p.jsxs("div",{className:_.hexRow,children:[p.jsx("span",{className:_.currentSwatch,style:{"--cp-fill":G}}),p.jsx("span",{className:_.hexField,children:p.jsx("input",{className:_.hexInput,value:z,spellCheck:!1,maxLength:28,"aria-label":l("colorPicker.value"),onChange:r=>X(r.target.value)})})]}),p.jsxs("div",{className:_.swatches,children:[t&&p.jsx("button",{type:"button",className:Z.clsx(_.swatch,_.swatchClear),"aria-label":l("colorPicker.noColor"),"aria-pressed":!n,onClick:Y,children:!n&&p.jsx(N.Icon,{name:"TickCircle",size:"sm"})}),a.map(r=>{const e=$(r);if(!e)return null;const s=b({r:e.r,g:e.g,b:e.b,a:1}),m=u===s;return p.jsx("button",{type:"button",className:_.swatch,style:{background:s,color:te(s)},"aria-label":s,"aria-pressed":m,onClick:()=>{x(D(e)),h(b({r:e.r,g:e.g,b:e.b,a:f(g.current)}))},children:m&&p.jsx(N.Icon,{name:"TickCircle",size:"sm"})},r)})]})]})}exports.ColorPickerPanel=Se;exports.DEFAULT_SWATCHES=L;exports.formatColor=b;exports.parseColor=$;exports.styles=_;
2
- //# sourceMappingURL=ColorPickerPanel-IOhJJF1R.cjs.map
1
+ "use strict";const p=require("react/jsx-runtime"),k=require("react"),Z=require("clsx"),N=require("./Icon-BoQmbW7j.cjs"),d=require("./color-CgR8ybWZ.cjs"),ee=require("./ConfigProvider-BFhkb0BV.cjs"),A=o=>Math.min(255,Math.max(0,Math.round(o)));function D({r:o,g:h,b:a}){const t=o/255,c=h/255,f=a/255,l=Math.max(t,c,f),n=Math.min(t,c,f),u=l-n;let i=0;u!==0&&(l===t?i=(c-f)/u%6:l===c?i=(f-t)/u+2:i=(t-c)/u+4,i*=60,i<0&&(i+=360));const x=l===0?0:u/l;return{h:i,s:x,v:l}}function T({h:o,s:h,v:a}){const t=a*h,c=t*(1-Math.abs(o/60%2-1)),f=a-t;let l=0,n=0,u=0;return o<60?[l,n,u]=[t,c,0]:o<120?[l,n,u]=[c,t,0]:o<180?[l,n,u]=[0,t,c]:o<240?[l,n,u]=[0,c,t]:o<300?[l,n,u]=[c,0,t]:[l,n,u]=[t,0,c],{r:(l+f)*255,g:(n+f)*255,b:(u+f)*255}}const re=o=>D(d.hexToRgb(o));function te(o){const{r:h,g:a,b:t}=d.hexToRgb(o);return(h*299+a*587+t*114)/1e3>=150?"#04202b":"#ffffff"}const se=/^rgba?\(\s*([\d.]+)\s*[, ]\s*([\d.]+)\s*[, ]\s*([\d.]+)\s*(?:[,/]\s*([\d.]+%?)\s*)?\)$/i;function $(o){const h=o.trim();if(!h)return null;let a=h.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.clamp01(parseInt(a.slice(6,8),16)/255)};const t=h.match(se);if(t){let c=1;return t[4]!=null&&(c=t[4].endsWith("%")?d.clamp01(parseFloat(t[4])/100):d.clamp01(parseFloat(t[4]))),{r:A(+t[1]),g:A(+t[2]),b:A(+t[3]),a:c}}return null}function b({r:o,g:h,b:a,a:t}){return t>=1?d.rgbToHex({r:o,g:h,b:a}):`rgba(${A(o)}, ${A(h)}, ${A(a)}, ${Math.round(d.clamp01(t)*100)/100})`}const ae="_field_16rd0_1",ne="_fullWidth_16rd0_6",oe="_label_16rd0_11",ce="_required_16rd0_17",le="_control_16rd0_23",ie="_open_16rd0_44",ue="_error_16rd0_49",he="_disabled_16rd0_57",de="_value_16rd0_64",pe="_placeholder_16rd0_73",_e="_preview_16rd0_81",fe="_previewEmpty_16rd0_101",me="_helper_16rd0_113",be="_popover_16rd0_118",we="_sv_16rd0_128",ve="_svThumb_16rd0_139",xe="_hue_16rd0_150",ge="_hueThumb_16rd0_168",ke="_alphaThumb_16rd0_169",ye="_alpha_16rd0_169",Te="_hexRow_16rd0_202",Ae="_currentSwatch_16rd0_207",Ce="_hexField_16rd0_223",De="_hexInput_16rd0_235",je="_swatches_16rd0_247",Ie="_swatch_16rd0_247",Re="_swatchClear_16rd0_264",Me="_sm_16rd0_278",$e="_md_16rd0_282",Pe="_lg_16rd0_286",_={field:ae,fullWidth:ne,label:oe,required:ce,control:le,open:ie,error:ue,disabled:he,value:de,placeholder:pe,preview:_e,previewEmpty:fe,helper:me,popover:be,sv:we,svThumb:ve,hue:xe,hueThumb:ge,alphaThumb:ke,alpha:ye,hexRow:Te,currentSwatch:Ae,hexField:Ce,hexInput:De,swatches:je,swatch:Ie,swatchClear:Re,sm:Me,md:$e,lg:Pe},L=["#13404e","#039aa1","#00a854","#0ea5e9","#6366f1","#7c3aed","#f04134","#f59e0b","#ffbf00","#10b981","#64748b","#0f172a","#ffffff"],F=re("#13404e");function Se({value:o,onChange:h,swatches:a=L,clearable:t=!0,alpha:c=!0}){const f=r=>c?r:1,l=ee.useT(),n=$(o||""),u=n?b(n):null,[i,x]=k.useState(n?D(n):F),w=k.useRef(i);w.current=i;const[C,j]=k.useState((n==null?void 0:n.a)??1),g=k.useRef(C);g.current=C,k.useEffect(()=>{if(!n)return;const r=b({...T(w.current),a:g.current});u!==r&&(x(D(n)),j(n.a))},[u]);const I=r=>{x(r),h(b({...T(r),a:f(g.current)}))},E=r=>{j(r),h(b({...T(w.current),a:f(r)}))},P=r=>e=>{e.preventDefault();const s=e.currentTarget,m=(M,Q)=>r(M,Q,s.getBoundingClientRect());m(e.clientX,e.clientY);const v=M=>m(M.clientX,M.clientY),y=()=>{window.removeEventListener("pointermove",v),window.removeEventListener("pointerup",y)};window.addEventListener("pointermove",v),window.addEventListener("pointerup",y)},q=P((r,e,s)=>{const m=d.clamp01((r-s.left)/s.width),v=d.clamp01(1-(e-s.top)/s.height);I({...w.current,s:m,v})}),K=P((r,e,s)=>{const m=d.clamp01((r-s.left)/s.width)*360;I({...w.current,h:m})}),U=P((r,e,s)=>{E(d.clamp01((r-s.left)/s.width))}),R=.01,W=r=>{const{h:e,s,v:m}=w.current;let v=s,y=m;switch(r.key){case"ArrowLeft":v=d.clamp01(s-R);break;case"ArrowRight":v=d.clamp01(s+R);break;case"ArrowUp":y=d.clamp01(m+R);break;case"ArrowDown":y=d.clamp01(m-R);break;default:return}r.preventDefault(),I({h:e,s:v,v:y})},B=r=>{const{h:e}=w.current;let s=e;switch(r.key){case"ArrowLeft":case"ArrowDown":s=Math.max(0,e-1);break;case"ArrowRight":case"ArrowUp":s=Math.min(360,e+1);break;case"Home":s=0;break;case"End":s=360;break;default:return}r.preventDefault(),I({...w.current,h:s})},V=r=>{let e=g.current;switch(r.key){case"ArrowLeft":case"ArrowDown":e=d.clamp01(g.current-.01);break;case"ArrowRight":case"ArrowUp":e=d.clamp01(g.current+.01);break;case"Home":e=0;break;case"End":e=1;break;default:return}r.preventDefault(),E(e)},[z,H]=k.useState("");k.useEffect(()=>{H(u??"")},[u]);const X=r=>{H(r);const e=$(r);e&&(x(D(e)),j(e.a),h(b({...e,a:f(e.a)})))},Y=()=>{h(""),x(F),j(1)},G=b({...T(i),a:C}),O=d.rgbToHex(T(i)),S=T(i),J=`${Math.round(S.r)}, ${Math.round(S.g)}, ${Math.round(S.b)}`;return p.jsxs("div",{className:_.popover,style:{"--cp-hue":i.h},children:[p.jsx("div",{className:_.sv,onPointerDown:q,onKeyDown:W,role:"slider",tabIndex:0,"aria-label":l("colorPicker.saturation"),"aria-valuetext":`${Math.round(i.s*100)}% saturation, ${Math.round(i.v*100)}% brightness`,children:p.jsx("span",{className:_.svThumb,style:{left:`${i.s*100}%`,top:`${(1-i.v)*100}%`,background:O}})}),p.jsx("div",{className:_.hue,onPointerDown:K,onKeyDown:B,role:"slider",tabIndex:0,"aria-label":l("colorPicker.hue"),"aria-valuemin":0,"aria-valuemax":360,"aria-valuenow":Math.round(i.h),children:p.jsx("span",{className:_.hueThumb,style:{left:`${i.h/360*100}%`}})}),c&&p.jsx("div",{className:_.alpha,onPointerDown:U,onKeyDown:V,role:"slider",tabIndex:0,"aria-label":l("colorPicker.opacity"),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(C*100),style:{"--cp-rgb":J},children:p.jsx("span",{className:_.alphaThumb,style:{left:`${C*100}%`}})}),p.jsxs("div",{className:_.hexRow,children:[p.jsx("span",{className:_.currentSwatch,style:{"--cp-fill":G}}),p.jsx("span",{className:_.hexField,children:p.jsx("input",{className:_.hexInput,value:z,spellCheck:!1,maxLength:28,"aria-label":l("colorPicker.value"),onChange:r=>X(r.target.value)})})]}),p.jsxs("div",{className:_.swatches,children:[t&&p.jsx("button",{type:"button",className:Z.clsx(_.swatch,_.swatchClear),"aria-label":l("colorPicker.noColor"),"aria-pressed":!n,onClick:Y,children:!n&&p.jsx(N.Icon,{name:"TickCircle",size:"sm"})}),a.map(r=>{const e=$(r);if(!e)return null;const s=b({r:e.r,g:e.g,b:e.b,a:1}),m=u===s;return p.jsx("button",{type:"button",className:_.swatch,style:{background:s,color:te(s)},"aria-label":s,"aria-pressed":m,onClick:()=>{x(D(e)),h(b({r:e.r,g:e.g,b:e.b,a:f(g.current)}))},children:m&&p.jsx(N.Icon,{name:"TickCircle",size:"sm"})},r)})]})]})}exports.ColorPickerPanel=Se;exports.DEFAULT_SWATCHES=L;exports.formatColor=b;exports.parseColor=$;exports.styles=_;
2
+ //# sourceMappingURL=ColorPickerPanel-CNspBZre.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColorPickerPanel-IOhJJF1R.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\nimport { clamp01, hexToRgb, rgbToHex, type RGB } from '../../helpers/color'\n\n// the hex ⇄ rgb primitives are shared with the palette helpers — re-exported so nothing else changes\nexport { clamp01, normalizeHex, isValidHex, hexToRgb, rgbToHex } from '../../helpers/color'\nexport type { RGB } from '../../helpers/color'\n\nexport interface RGBA extends RGB {\n /** Alpha 0–1 */\n a: number\n}\n\nconst clamp255 = (n: number): number => Math.min(255, Math.max(0, Math.round(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 * Offer opacity. Defaults to `true`. `false` hides the alpha rail and pins alpha to `1`, so the\n * panel only ever emits `#rrggbb` — for values that must be opaque (brand colors).\n */\n alpha?: 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 alpha: alphaEnabled = true,\n}: ColorPickerPanelProps) {\n // with opacity off every emitted color is opaque, whatever the working alpha happens to be\n const emitAlpha = (a: number) => (alphaEnabled ? a : 1)\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: emitAlpha(alphaRef.current) }))\n }\n\n const applyAlpha = (next: number) => {\n setAlpha(next)\n onChange(formatColor({ ...hsvToRgb(hsvRef.current), a: emitAlpha(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, a: emitAlpha(p.a) }))\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 {alphaEnabled && (\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\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: emitAlpha(alphaRef.current) }))\n }}\n >\n {selected && <Icon name=\"TickCircle\" size=\"sm\" />}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n"],"names":["clamp255","n","rgbToHsv","r","g","b","rn","gn","bn","max","min","d","h","s","hsvToRgb","v","c","x","m","hexToHsv","hex","hexToRgb","contrastOn","RGB_FUNC","parseColor","input","clamp01","a","formatColor","rgbToHex","DEFAULT_SWATCHES","FALLBACK_HSV","ColorPickerPanel","value","onChange","swatches","clearable","alphaEnabled","emitAlpha","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-CNspBZre.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\nimport { clamp01, hexToRgb, rgbToHex, type RGB } from '../../helpers/color'\n\n// the hex ⇄ rgb primitives are shared with the palette helpers — re-exported so nothing else changes\nexport { clamp01, normalizeHex, isValidHex, hexToRgb, rgbToHex } from '../../helpers/color'\nexport type { RGB } from '../../helpers/color'\n\nexport interface RGBA extends RGB {\n /** Alpha 0–1 */\n a: number\n}\n\nconst clamp255 = (n: number): number => Math.min(255, Math.max(0, Math.round(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 * Offer opacity. Defaults to `true`. `false` hides the alpha rail and pins alpha to `1`, so the\n * panel only ever emits `#rrggbb` — for values that must be opaque (brand colors).\n */\n alpha?: 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 alpha: alphaEnabled = true,\n}: ColorPickerPanelProps) {\n // with opacity off every emitted color is opaque, whatever the working alpha happens to be\n const emitAlpha = (a: number) => (alphaEnabled ? a : 1)\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: emitAlpha(alphaRef.current) }))\n }\n\n const applyAlpha = (next: number) => {\n setAlpha(next)\n onChange(formatColor({ ...hsvToRgb(hsvRef.current), a: emitAlpha(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, a: emitAlpha(p.a) }))\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 {alphaEnabled && (\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\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: emitAlpha(alphaRef.current) }))\n }}\n >\n {selected && <Icon name=\"TickCircle\" size=\"sm\" />}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n"],"names":["clamp255","n","rgbToHsv","r","g","b","rn","gn","bn","max","min","d","h","s","hsvToRgb","v","c","x","m","hexToHsv","hex","hexToRgb","contrastOn","RGB_FUNC","parseColor","input","clamp01","a","formatColor","rgbToHex","DEFAULT_SWATCHES","FALLBACK_HSV","ColorPickerPanel","value","onChange","swatches","clearable","alphaEnabled","emitAlpha","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,9 +1,9 @@
1
1
  import { jsxs as H, jsx as m } from "react/jsx-runtime";
2
2
  import { useState as P, useRef as L, useEffect as K } from "react";
3
3
  import { clsx as se } from "clsx";
4
- import { b as U } from "./Icon-B7DJn8Tw.js";
4
+ import { b as U } from "./Icon-DMMO32p6.js";
5
5
  import { c as p, r as j, h as q } from "./color-EQJ2DrcQ.js";
6
- import { a as ae } from "./ConfigProvider-DtyUlWk6.js";
6
+ import { a as ae } from "./ConfigProvider-bXX8dnhY.js";
7
7
  const A = (o) => Math.min(255, Math.max(0, Math.round(o)));
8
8
  function D({ r: o, g: h, b: a }) {
9
9
  const t = o / 255, c = h / 255, _ = a / 255, l = Math.max(t, c, _), n = Math.min(t, c, _), u = l - n;
@@ -319,4 +319,4 @@ export {
319
319
  E as p,
320
320
  d as s
321
321
  };
322
- //# sourceMappingURL=ColorPickerPanel-CkrSIf35.js.map
322
+ //# sourceMappingURL=ColorPickerPanel-CQNfIbgc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColorPickerPanel-CkrSIf35.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\nimport { clamp01, hexToRgb, rgbToHex, type RGB } from '../../helpers/color'\n\n// the hex ⇄ rgb primitives are shared with the palette helpers — re-exported so nothing else changes\nexport { clamp01, normalizeHex, isValidHex, hexToRgb, rgbToHex } from '../../helpers/color'\nexport type { RGB } from '../../helpers/color'\n\nexport interface RGBA extends RGB {\n /** Alpha 0–1 */\n a: number\n}\n\nconst clamp255 = (n: number): number => Math.min(255, Math.max(0, Math.round(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 * Offer opacity. Defaults to `true`. `false` hides the alpha rail and pins alpha to `1`, so the\n * panel only ever emits `#rrggbb` — for values that must be opaque (brand colors).\n */\n alpha?: 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 alpha: alphaEnabled = true,\n}: ColorPickerPanelProps) {\n // with opacity off every emitted color is opaque, whatever the working alpha happens to be\n const emitAlpha = (a: number) => (alphaEnabled ? a : 1)\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: emitAlpha(alphaRef.current) }))\n }\n\n const applyAlpha = (next: number) => {\n setAlpha(next)\n onChange(formatColor({ ...hsvToRgb(hsvRef.current), a: emitAlpha(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, a: emitAlpha(p.a) }))\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 {alphaEnabled && (\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\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: emitAlpha(alphaRef.current) }))\n }}\n >\n {selected && <Icon name=\"TickCircle\" size=\"sm\" />}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n"],"names":["clamp255","n","rgbToHsv","r","g","b","rn","gn","bn","max","min","d","h","s","hsvToRgb","v","c","x","m","hexToHsv","hex","hexToRgb","contrastOn","RGB_FUNC","parseColor","input","clamp01","a","formatColor","rgbToHex","DEFAULT_SWATCHES","FALLBACK_HSV","ColorPickerPanel","value","onChange","swatches","clearable","alphaEnabled","emitAlpha","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-CQNfIbgc.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\nimport { clamp01, hexToRgb, rgbToHex, type RGB } from '../../helpers/color'\n\n// the hex ⇄ rgb primitives are shared with the palette helpers — re-exported so nothing else changes\nexport { clamp01, normalizeHex, isValidHex, hexToRgb, rgbToHex } from '../../helpers/color'\nexport type { RGB } from '../../helpers/color'\n\nexport interface RGBA extends RGB {\n /** Alpha 0–1 */\n a: number\n}\n\nconst clamp255 = (n: number): number => Math.min(255, Math.max(0, Math.round(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 * Offer opacity. Defaults to `true`. `false` hides the alpha rail and pins alpha to `1`, so the\n * panel only ever emits `#rrggbb` — for values that must be opaque (brand colors).\n */\n alpha?: 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 alpha: alphaEnabled = true,\n}: ColorPickerPanelProps) {\n // with opacity off every emitted color is opaque, whatever the working alpha happens to be\n const emitAlpha = (a: number) => (alphaEnabled ? a : 1)\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: emitAlpha(alphaRef.current) }))\n }\n\n const applyAlpha = (next: number) => {\n setAlpha(next)\n onChange(formatColor({ ...hsvToRgb(hsvRef.current), a: emitAlpha(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, a: emitAlpha(p.a) }))\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 {alphaEnabled && (\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\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: emitAlpha(alphaRef.current) }))\n }}\n >\n {selected && <Icon name=\"TickCircle\" size=\"sm\" />}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n"],"names":["clamp255","n","rgbToHsv","r","g","b","rn","gn","bn","max","min","d","h","s","hsvToRgb","v","c","x","m","hexToHsv","hex","hexToRgb","contrastOn","RGB_FUNC","parseColor","input","clamp01","a","formatColor","rgbToHex","DEFAULT_SWATCHES","FALLBACK_HSV","ColorPickerPanel","value","onChange","swatches","clearable","alphaEnabled","emitAlpha","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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"}
@@ -7,7 +7,7 @@ import { T as H } from "./Tooltip-BbT0uNzy.js";
7
7
  import { T as n } from "./Typography-ChSuxgkc.js";
8
8
  import { t as x } from "./toastStore-Cx_JOKwS.js";
9
9
  import { f as d } from "./TextField.module-6gYcR9TL.js";
10
- import { a as J } from "./ConfigProvider-DtyUlWk6.js";
10
+ import { a as J } from "./ConfigProvider-bXX8dnhY.js";
11
11
  const K = "_band_1d0th_5", M = "_sm_1d0th_15", O = "_md_1d0th_18", Q = "_lg_1d0th_21", U = "_num_1d0th_42", V = "_step_1d0th_47", X = "_bounds_1d0th_94", Y = "_tip_1d0th_101", Z = "_tipTitle_1d0th_107", t = {
12
12
  band: K,
13
13
  sm: M,
@@ -123,4 +123,4 @@ const K = "_band_1d0th_5", M = "_sm_1d0th_15", O = "_md_1d0th_18", Q = "_lg_1d0t
123
123
  export {
124
124
  de as C
125
125
  };
126
- //# sourceMappingURL=ColorRamp-DbFOsspz.js.map
126
+ //# sourceMappingURL=ColorRamp-DQZZiE5I.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColorRamp-DbFOsspz.js","sources":["../src/components/ColorRamp/ColorRamp.tsx"],"sourcesContent":["import { forwardRef, useId, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react'\nimport { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { useClipboard } from '../../hooks/useClipboard'\nimport {\n BASE_STEP,\n generatePalette,\n type GeneratePaletteOptions,\n type Legibility,\n type PaletteSwatch,\n} from '../../helpers/palette'\nimport { Tooltip } from '../Tooltip'\nimport { Typography } from '../Typography'\nimport { toast } from '../Toast'\n// shared field chrome (wrapper / label / helper / required / error)\nimport fieldStyles from '../TextField/TextField.module.css'\nimport styles from './ColorRamp.module.css'\n\nexport type ColorRampSize = 'sm' | 'md' | 'lg'\n\n// `onCopy` here is the swatch callback, so the DOM clipboard `onCopy` handler is omitted alongside `color`\nexport interface ColorRampProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color' | 'onCopy'> {\n /** The base (500) color — any value `generatePalette` accepts. Invalid → the empty-state caption. */\n baseColor: string\n /** Token prefix for step names (`primary` → \"primary-500\") — used in tooltips, aria-labels and the copy toast. Default `'color'`. */\n name?: string\n /** Passed to `generatePalette` (override any subset of the tint / shade fractions). */\n options?: GeneratePaletteOptions\n /** Band height. `sm` 32 · `md` 40 (default) · `lg` 48 px. */\n size?: ColorRampSize\n /** Click a step to copy its hex (default `true`). `false` renders the steps as non-interactive cells. */\n copyable?: boolean\n /** After a successful copy — in addition to the built-in toast. */\n onCopy?: (swatch: PaletteSwatch) => void\n /** Show the \"Lightest … Darkest\" caption row under the band (default `true`). */\n showBounds?: boolean\n /** Label rendered above the band (field-family chrome, like `Slider` / `SwatchPicker`). */\n label?: ReactNode\n /** Helper / validation text under the band. Adopts the error color while `error`. */\n helperText?: ReactNode\n /** Marks the field invalid — reddens the label/asterisk and shows `helperText` in the error color. */\n error?: boolean\n /** Adds a red asterisk after the label. */\n required?: boolean\n}\n\n/** `black 4.52 AA` — ratio to 2 decimals, the body-text rating appended when it exists. */\nconst contrastLine = (who: string, l: Legibility) =>\n `${who} ${l.ratio.toFixed(2)}${l.small ? ` ${l.small}` : ''}`\n\n/**\n * The generated tonal scale for one color as **a single horizontal band of ten equal steps** sharing\n * one rounded, clipped frame (reads as a continuous ramp, not ten chips). Display + copy only — it never\n * edits the color; pair it with `ColorPicker` (or use `PaletteField`, which composes both). Each step\n * is a `Tooltip`-wrapped button whose fill / ink are the swatch's own colors (inline — the color IS the\n * data), showing its number on the base step and on hover / focus; clicking copies the hex with a toast.\n * `role=\"group\"` labelled \"{name} color scale\"; an invalid `baseColor` renders only a muted caption.\n */\nexport const ColorRamp = forwardRef<HTMLDivElement, ColorRampProps>(function ColorRamp(\n {\n baseColor,\n name = 'color',\n options,\n size = 'md',\n copyable = true,\n onCopy,\n showBounds = true,\n label,\n helperText,\n error = false,\n required = false,\n className,\n ...props\n },\n ref,\n) {\n const t = useT()\n const id = useId()\n const labelId = `${id}-label`\n const helperId = `${id}-helper`\n const { copy } = useClipboard()\n const palette = generatePalette(baseColor, options)\n\n const handleCopy = async (swatch: PaletteSwatch) => {\n const step = `${name}-${swatch.step}`\n const ok = await copy(swatch.hex)\n if (ok) {\n toast.success(t('colorRamp.copied', { step, hex: swatch.hex }))\n onCopy?.(swatch)\n } else {\n toast.error(t('colorRamp.copyFailed', { step }))\n }\n }\n\n const tip = (swatch: PaletteSwatch) => (\n <span className={styles.tip}>\n <span className={styles.tipTitle}>\n {name}-{swatch.step}\n {swatch.step === BASE_STEP ? ` · ${t('colorRamp.base')}` : ''}\n </span>\n <span>{swatch.hex}</span>\n <span>\n {contrastLine(t('colorRamp.black'), swatch.onDark)} ·{' '}\n {contrastLine(t('colorRamp.white'), swatch.onWhite)}\n </span>\n {copyable && <span>{t('colorRamp.clickToCopy')}</span>}\n </span>\n )\n\n return (\n <div\n ref={ref}\n className={clsx(fieldStyles.field, error && fieldStyles.error, className)}\n {...props}\n >\n {label != null && (\n <label id={labelId} className={fieldStyles.label}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={fieldStyles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n\n {palette ? (\n <>\n <div\n role=\"group\"\n aria-label={t('colorRamp.groupLabel', { name })}\n aria-labelledby={label != null ? labelId : undefined}\n aria-describedby={helperText != null ? helperId : undefined}\n className={clsx(styles.band, styles[size])}\n >\n {palette.map((swatch) => {\n const isBase = swatch.step === BASE_STEP\n // the swatch's own colors are the data — the one legitimate inline-color exception\n const ink = { backgroundColor: swatch.hex, color: swatch.textColor } as CSSProperties\n const stepName = `${name}-${swatch.step}`\n const cell = copyable ? (\n <button\n type=\"button\"\n className={styles.step}\n style={ink}\n data-base={isBase || undefined}\n aria-label={t('colorRamp.copyAria', { name, step: swatch.step, hex: swatch.hex })}\n onClick={() => void handleCopy(swatch)}\n >\n <span className={styles.num} aria-hidden=\"true\">\n {swatch.step}\n </span>\n </button>\n ) : (\n <span\n className={clsx(styles.step, styles.static)}\n style={ink}\n data-base={isBase || undefined}\n role=\"img\"\n aria-label={`${stepName} ${swatch.hex}`}\n >\n <span className={styles.num} aria-hidden=\"true\">\n {swatch.step}\n </span>\n </span>\n )\n // the Tooltip's wrapper span is the band's real flex child (sized by `.band > *`)\n return (\n <Tooltip key={swatch.step} content={tip(swatch)}>\n {cell}\n </Tooltip>\n )\n })}\n </div>\n {showBounds && (\n <div className={styles.bounds}>\n <Typography as=\"span\" variant=\"caption\" color=\"muted\">\n {t('colorRamp.lightest')}\n </Typography>\n <Typography as=\"span\" variant=\"caption\" color=\"muted\">\n {t('colorRamp.darkest')}\n </Typography>\n </div>\n )}\n </>\n ) : (\n <Typography as=\"span\" variant=\"caption\" color=\"muted\">\n {t('colorRamp.invalid')}\n </Typography>\n )}\n\n {helperText != null && (\n <Typography\n as=\"span\"\n id={helperId}\n variant=\"bodySmall\"\n color={error ? 'error' : 'muted'}\n className={fieldStyles.helper}\n >\n {helperText}\n </Typography>\n )}\n </div>\n )\n})\n"],"names":["contrastLine","who","ColorRamp","forwardRef","baseColor","name","options","size","copyable","onCopy","showBounds","label","helperText","error","required","className","props","ref","t","useT","id","useId","labelId","helperId","copy","useClipboard","palette","generatePalette","handleCopy","swatch","step","toast","tip","styles","jsxs","BASE_STEP","jsx","clsx","fieldStyles","Typography","Fragment","isBase","ink","stepName","cell","Tooltip"],"mappings":"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"}
1
+ {"version":3,"file":"ColorRamp-DQZZiE5I.js","sources":["../src/components/ColorRamp/ColorRamp.tsx"],"sourcesContent":["import { forwardRef, useId, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react'\nimport { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { useClipboard } from '../../hooks/useClipboard'\nimport {\n BASE_STEP,\n generatePalette,\n type GeneratePaletteOptions,\n type Legibility,\n type PaletteSwatch,\n} from '../../helpers/palette'\nimport { Tooltip } from '../Tooltip'\nimport { Typography } from '../Typography'\nimport { toast } from '../Toast'\n// shared field chrome (wrapper / label / helper / required / error)\nimport fieldStyles from '../TextField/TextField.module.css'\nimport styles from './ColorRamp.module.css'\n\nexport type ColorRampSize = 'sm' | 'md' | 'lg'\n\n// `onCopy` here is the swatch callback, so the DOM clipboard `onCopy` handler is omitted alongside `color`\nexport interface ColorRampProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color' | 'onCopy'> {\n /** The base (500) color — any value `generatePalette` accepts. Invalid → the empty-state caption. */\n baseColor: string\n /** Token prefix for step names (`primary` → \"primary-500\") — used in tooltips, aria-labels and the copy toast. Default `'color'`. */\n name?: string\n /** Passed to `generatePalette` (override any subset of the tint / shade fractions). */\n options?: GeneratePaletteOptions\n /** Band height. `sm` 32 · `md` 40 (default) · `lg` 48 px. */\n size?: ColorRampSize\n /** Click a step to copy its hex (default `true`). `false` renders the steps as non-interactive cells. */\n copyable?: boolean\n /** After a successful copy — in addition to the built-in toast. */\n onCopy?: (swatch: PaletteSwatch) => void\n /** Show the \"Lightest … Darkest\" caption row under the band (default `true`). */\n showBounds?: boolean\n /** Label rendered above the band (field-family chrome, like `Slider` / `SwatchPicker`). */\n label?: ReactNode\n /** Helper / validation text under the band. Adopts the error color while `error`. */\n helperText?: ReactNode\n /** Marks the field invalid — reddens the label/asterisk and shows `helperText` in the error color. */\n error?: boolean\n /** Adds a red asterisk after the label. */\n required?: boolean\n}\n\n/** `black 4.52 AA` — ratio to 2 decimals, the body-text rating appended when it exists. */\nconst contrastLine = (who: string, l: Legibility) =>\n `${who} ${l.ratio.toFixed(2)}${l.small ? ` ${l.small}` : ''}`\n\n/**\n * The generated tonal scale for one color as **a single horizontal band of ten equal steps** sharing\n * one rounded, clipped frame (reads as a continuous ramp, not ten chips). Display + copy only — it never\n * edits the color; pair it with `ColorPicker` (or use `PaletteField`, which composes both). Each step\n * is a `Tooltip`-wrapped button whose fill / ink are the swatch's own colors (inline — the color IS the\n * data), showing its number on the base step and on hover / focus; clicking copies the hex with a toast.\n * `role=\"group\"` labelled \"{name} color scale\"; an invalid `baseColor` renders only a muted caption.\n */\nexport const ColorRamp = forwardRef<HTMLDivElement, ColorRampProps>(function ColorRamp(\n {\n baseColor,\n name = 'color',\n options,\n size = 'md',\n copyable = true,\n onCopy,\n showBounds = true,\n label,\n helperText,\n error = false,\n required = false,\n className,\n ...props\n },\n ref,\n) {\n const t = useT()\n const id = useId()\n const labelId = `${id}-label`\n const helperId = `${id}-helper`\n const { copy } = useClipboard()\n const palette = generatePalette(baseColor, options)\n\n const handleCopy = async (swatch: PaletteSwatch) => {\n const step = `${name}-${swatch.step}`\n const ok = await copy(swatch.hex)\n if (ok) {\n toast.success(t('colorRamp.copied', { step, hex: swatch.hex }))\n onCopy?.(swatch)\n } else {\n toast.error(t('colorRamp.copyFailed', { step }))\n }\n }\n\n const tip = (swatch: PaletteSwatch) => (\n <span className={styles.tip}>\n <span className={styles.tipTitle}>\n {name}-{swatch.step}\n {swatch.step === BASE_STEP ? ` · ${t('colorRamp.base')}` : ''}\n </span>\n <span>{swatch.hex}</span>\n <span>\n {contrastLine(t('colorRamp.black'), swatch.onDark)} ·{' '}\n {contrastLine(t('colorRamp.white'), swatch.onWhite)}\n </span>\n {copyable && <span>{t('colorRamp.clickToCopy')}</span>}\n </span>\n )\n\n return (\n <div\n ref={ref}\n className={clsx(fieldStyles.field, error && fieldStyles.error, className)}\n {...props}\n >\n {label != null && (\n <label id={labelId} className={fieldStyles.label}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={fieldStyles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n\n {palette ? (\n <>\n <div\n role=\"group\"\n aria-label={t('colorRamp.groupLabel', { name })}\n aria-labelledby={label != null ? labelId : undefined}\n aria-describedby={helperText != null ? helperId : undefined}\n className={clsx(styles.band, styles[size])}\n >\n {palette.map((swatch) => {\n const isBase = swatch.step === BASE_STEP\n // the swatch's own colors are the data — the one legitimate inline-color exception\n const ink = { backgroundColor: swatch.hex, color: swatch.textColor } as CSSProperties\n const stepName = `${name}-${swatch.step}`\n const cell = copyable ? (\n <button\n type=\"button\"\n className={styles.step}\n style={ink}\n data-base={isBase || undefined}\n aria-label={t('colorRamp.copyAria', { name, step: swatch.step, hex: swatch.hex })}\n onClick={() => void handleCopy(swatch)}\n >\n <span className={styles.num} aria-hidden=\"true\">\n {swatch.step}\n </span>\n </button>\n ) : (\n <span\n className={clsx(styles.step, styles.static)}\n style={ink}\n data-base={isBase || undefined}\n role=\"img\"\n aria-label={`${stepName} ${swatch.hex}`}\n >\n <span className={styles.num} aria-hidden=\"true\">\n {swatch.step}\n </span>\n </span>\n )\n // the Tooltip's wrapper span is the band's real flex child (sized by `.band > *`)\n return (\n <Tooltip key={swatch.step} content={tip(swatch)}>\n {cell}\n </Tooltip>\n )\n })}\n </div>\n {showBounds && (\n <div className={styles.bounds}>\n <Typography as=\"span\" variant=\"caption\" color=\"muted\">\n {t('colorRamp.lightest')}\n </Typography>\n <Typography as=\"span\" variant=\"caption\" color=\"muted\">\n {t('colorRamp.darkest')}\n </Typography>\n </div>\n )}\n </>\n ) : (\n <Typography as=\"span\" variant=\"caption\" color=\"muted\">\n {t('colorRamp.invalid')}\n </Typography>\n )}\n\n {helperText != null && (\n <Typography\n as=\"span\"\n id={helperId}\n variant=\"bodySmall\"\n color={error ? 'error' : 'muted'}\n className={fieldStyles.helper}\n >\n {helperText}\n </Typography>\n )}\n </div>\n )\n})\n"],"names":["contrastLine","who","ColorRamp","forwardRef","baseColor","name","options","size","copyable","onCopy","showBounds","label","helperText","error","required","className","props","ref","t","useT","id","useId","labelId","helperId","copy","useClipboard","palette","generatePalette","handleCopy","swatch","step","toast","tip","styles","jsxs","BASE_STEP","jsx","clsx","fieldStyles","Typography","Fragment","isBase","ink","stepName","cell","Tooltip"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";const s=require("react/jsx-runtime"),v=require("react"),m=require("clsx"),L=require("./useClipboard-BjTIX-4g.cjs"),h=require("./palette-BycMHbED.cjs"),D=require("./Tooltip-DmMq5R1x.cjs"),i=require("./Typography-d97DdbNd.cjs"),T=require("./toastStore-B4Tk2Xk7.cjs"),n=require("./TextField.module-DsNCo8vN.cjs"),W=require("./ConfigProvider-CYSpuSMJ.cjs"),z="_band_1d0th_5",G="_sm_1d0th_15",H="_md_1d0th_18",J="_lg_1d0th_21",K="_num_1d0th_42",M="_step_1d0th_47",O="_bounds_1d0th_94",Q="_tip_1d0th_101",U="_tipTitle_1d0th_107",o={band:z,sm:G,md:H,lg:J,num:K,step:M,static:"_static_1d0th_61",bounds:O,tip:Q,tipTitle:U},$=(x,l)=>`${x} ${l.ratio.toFixed(2)}${l.small?` ${l.small}`:""}`,V=v.forwardRef(function({baseColor:l,name:a="color",options:f,size:N="md",copyable:_=!0,onCopy:c,showBounds:S=!0,label:d,helperText:p,error:b=!1,required:q=!1,className:k,...C},E){const t=W.useT(),y=v.useId(),j=`${y}-label`,g=`${y}-helper`,{copy:F}=L.useClipboard(),R=h.generatePalette(l,f),P=async e=>{const r=`${a}-${e.step}`;await F(e.hex)?(T.toast.success(t("colorRamp.copied",{step:r,hex:e.hex})),c==null||c(e)):T.toast.error(t("colorRamp.copyFailed",{step:r}))},A=e=>s.jsxs("span",{className:o.tip,children:[s.jsxs("span",{className:o.tipTitle,children:[a,"-",e.step,e.step===h.BASE_STEP?` · ${t("colorRamp.base")}`:""]}),s.jsx("span",{children:e.hex}),s.jsxs("span",{children:[$(t("colorRamp.black"),e.onDark)," ·"," ",$(t("colorRamp.white"),e.onWhite)]}),_&&s.jsx("span",{children:t("colorRamp.clickToCopy")})]});return s.jsxs("div",{ref:E,className:m.clsx(n.fieldStyles.field,b&&n.fieldStyles.error,k),...C,children:[d!=null&&s.jsxs("label",{id:j,className:n.fieldStyles.label,children:[s.jsx(i.Typography,{as:"span",variant:"bodySmall",color:"muted",children:d}),q&&s.jsx("span",{className:n.fieldStyles.required,"aria-hidden":"true",children:"*"})]}),R?s.jsxs(s.Fragment,{children:[s.jsx("div",{role:"group","aria-label":t("colorRamp.groupLabel",{name:a}),"aria-labelledby":d!=null?j:void 0,"aria-describedby":p!=null?g:void 0,className:m.clsx(o.band,o[N]),children:R.map(e=>{const r=e.step===h.BASE_STEP,u={backgroundColor:e.hex,color:e.textColor},B=`${a}-${e.step}`,I=_?s.jsx("button",{type:"button",className:o.step,style:u,"data-base":r||void 0,"aria-label":t("colorRamp.copyAria",{name:a,step:e.step,hex:e.hex}),onClick:()=>void P(e),children:s.jsx("span",{className:o.num,"aria-hidden":"true",children:e.step})}):s.jsx("span",{className:m.clsx(o.step,o.static),style:u,"data-base":r||void 0,role:"img","aria-label":`${B} ${e.hex}`,children:s.jsx("span",{className:o.num,"aria-hidden":"true",children:e.step})});return s.jsx(D.Tooltip,{content:A(e),children:I},e.step)})}),S&&s.jsxs("div",{className:o.bounds,children:[s.jsx(i.Typography,{as:"span",variant:"caption",color:"muted",children:t("colorRamp.lightest")}),s.jsx(i.Typography,{as:"span",variant:"caption",color:"muted",children:t("colorRamp.darkest")})]})]}):s.jsx(i.Typography,{as:"span",variant:"caption",color:"muted",children:t("colorRamp.invalid")}),p!=null&&s.jsx(i.Typography,{as:"span",id:g,variant:"bodySmall",color:b?"error":"muted",className:n.fieldStyles.helper,children:p})]})});exports.ColorRamp=V;
2
- //# sourceMappingURL=ColorRamp-BCy8a7ks.cjs.map
1
+ "use strict";const s=require("react/jsx-runtime"),v=require("react"),m=require("clsx"),L=require("./useClipboard-BjTIX-4g.cjs"),h=require("./palette-BycMHbED.cjs"),D=require("./Tooltip-DmMq5R1x.cjs"),i=require("./Typography-d97DdbNd.cjs"),T=require("./toastStore-B4Tk2Xk7.cjs"),n=require("./TextField.module-DsNCo8vN.cjs"),W=require("./ConfigProvider-BFhkb0BV.cjs"),z="_band_1d0th_5",G="_sm_1d0th_15",H="_md_1d0th_18",J="_lg_1d0th_21",K="_num_1d0th_42",M="_step_1d0th_47",O="_bounds_1d0th_94",Q="_tip_1d0th_101",U="_tipTitle_1d0th_107",o={band:z,sm:G,md:H,lg:J,num:K,step:M,static:"_static_1d0th_61",bounds:O,tip:Q,tipTitle:U},$=(x,l)=>`${x} ${l.ratio.toFixed(2)}${l.small?` ${l.small}`:""}`,V=v.forwardRef(function({baseColor:l,name:a="color",options:f,size:N="md",copyable:_=!0,onCopy:c,showBounds:S=!0,label:d,helperText:p,error:b=!1,required:q=!1,className:k,...C},E){const t=W.useT(),y=v.useId(),j=`${y}-label`,g=`${y}-helper`,{copy:F}=L.useClipboard(),R=h.generatePalette(l,f),P=async e=>{const r=`${a}-${e.step}`;await F(e.hex)?(T.toast.success(t("colorRamp.copied",{step:r,hex:e.hex})),c==null||c(e)):T.toast.error(t("colorRamp.copyFailed",{step:r}))},A=e=>s.jsxs("span",{className:o.tip,children:[s.jsxs("span",{className:o.tipTitle,children:[a,"-",e.step,e.step===h.BASE_STEP?` · ${t("colorRamp.base")}`:""]}),s.jsx("span",{children:e.hex}),s.jsxs("span",{children:[$(t("colorRamp.black"),e.onDark)," ·"," ",$(t("colorRamp.white"),e.onWhite)]}),_&&s.jsx("span",{children:t("colorRamp.clickToCopy")})]});return s.jsxs("div",{ref:E,className:m.clsx(n.fieldStyles.field,b&&n.fieldStyles.error,k),...C,children:[d!=null&&s.jsxs("label",{id:j,className:n.fieldStyles.label,children:[s.jsx(i.Typography,{as:"span",variant:"bodySmall",color:"muted",children:d}),q&&s.jsx("span",{className:n.fieldStyles.required,"aria-hidden":"true",children:"*"})]}),R?s.jsxs(s.Fragment,{children:[s.jsx("div",{role:"group","aria-label":t("colorRamp.groupLabel",{name:a}),"aria-labelledby":d!=null?j:void 0,"aria-describedby":p!=null?g:void 0,className:m.clsx(o.band,o[N]),children:R.map(e=>{const r=e.step===h.BASE_STEP,u={backgroundColor:e.hex,color:e.textColor},B=`${a}-${e.step}`,I=_?s.jsx("button",{type:"button",className:o.step,style:u,"data-base":r||void 0,"aria-label":t("colorRamp.copyAria",{name:a,step:e.step,hex:e.hex}),onClick:()=>void P(e),children:s.jsx("span",{className:o.num,"aria-hidden":"true",children:e.step})}):s.jsx("span",{className:m.clsx(o.step,o.static),style:u,"data-base":r||void 0,role:"img","aria-label":`${B} ${e.hex}`,children:s.jsx("span",{className:o.num,"aria-hidden":"true",children:e.step})});return s.jsx(D.Tooltip,{content:A(e),children:I},e.step)})}),S&&s.jsxs("div",{className:o.bounds,children:[s.jsx(i.Typography,{as:"span",variant:"caption",color:"muted",children:t("colorRamp.lightest")}),s.jsx(i.Typography,{as:"span",variant:"caption",color:"muted",children:t("colorRamp.darkest")})]})]}):s.jsx(i.Typography,{as:"span",variant:"caption",color:"muted",children:t("colorRamp.invalid")}),p!=null&&s.jsx(i.Typography,{as:"span",id:g,variant:"bodySmall",color:b?"error":"muted",className:n.fieldStyles.helper,children:p})]})});exports.ColorRamp=V;
2
+ //# sourceMappingURL=ColorRamp-DuO7gkru.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColorRamp-BCy8a7ks.cjs","sources":["../src/components/ColorRamp/ColorRamp.tsx"],"sourcesContent":["import { forwardRef, useId, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react'\nimport { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { useClipboard } from '../../hooks/useClipboard'\nimport {\n BASE_STEP,\n generatePalette,\n type GeneratePaletteOptions,\n type Legibility,\n type PaletteSwatch,\n} from '../../helpers/palette'\nimport { Tooltip } from '../Tooltip'\nimport { Typography } from '../Typography'\nimport { toast } from '../Toast'\n// shared field chrome (wrapper / label / helper / required / error)\nimport fieldStyles from '../TextField/TextField.module.css'\nimport styles from './ColorRamp.module.css'\n\nexport type ColorRampSize = 'sm' | 'md' | 'lg'\n\n// `onCopy` here is the swatch callback, so the DOM clipboard `onCopy` handler is omitted alongside `color`\nexport interface ColorRampProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color' | 'onCopy'> {\n /** The base (500) color — any value `generatePalette` accepts. Invalid → the empty-state caption. */\n baseColor: string\n /** Token prefix for step names (`primary` → \"primary-500\") — used in tooltips, aria-labels and the copy toast. Default `'color'`. */\n name?: string\n /** Passed to `generatePalette` (override any subset of the tint / shade fractions). */\n options?: GeneratePaletteOptions\n /** Band height. `sm` 32 · `md` 40 (default) · `lg` 48 px. */\n size?: ColorRampSize\n /** Click a step to copy its hex (default `true`). `false` renders the steps as non-interactive cells. */\n copyable?: boolean\n /** After a successful copy — in addition to the built-in toast. */\n onCopy?: (swatch: PaletteSwatch) => void\n /** Show the \"Lightest … Darkest\" caption row under the band (default `true`). */\n showBounds?: boolean\n /** Label rendered above the band (field-family chrome, like `Slider` / `SwatchPicker`). */\n label?: ReactNode\n /** Helper / validation text under the band. Adopts the error color while `error`. */\n helperText?: ReactNode\n /** Marks the field invalid — reddens the label/asterisk and shows `helperText` in the error color. */\n error?: boolean\n /** Adds a red asterisk after the label. */\n required?: boolean\n}\n\n/** `black 4.52 AA` — ratio to 2 decimals, the body-text rating appended when it exists. */\nconst contrastLine = (who: string, l: Legibility) =>\n `${who} ${l.ratio.toFixed(2)}${l.small ? ` ${l.small}` : ''}`\n\n/**\n * The generated tonal scale for one color as **a single horizontal band of ten equal steps** sharing\n * one rounded, clipped frame (reads as a continuous ramp, not ten chips). Display + copy only — it never\n * edits the color; pair it with `ColorPicker` (or use `PaletteField`, which composes both). Each step\n * is a `Tooltip`-wrapped button whose fill / ink are the swatch's own colors (inline — the color IS the\n * data), showing its number on the base step and on hover / focus; clicking copies the hex with a toast.\n * `role=\"group\"` labelled \"{name} color scale\"; an invalid `baseColor` renders only a muted caption.\n */\nexport const ColorRamp = forwardRef<HTMLDivElement, ColorRampProps>(function ColorRamp(\n {\n baseColor,\n name = 'color',\n options,\n size = 'md',\n copyable = true,\n onCopy,\n showBounds = true,\n label,\n helperText,\n error = false,\n required = false,\n className,\n ...props\n },\n ref,\n) {\n const t = useT()\n const id = useId()\n const labelId = `${id}-label`\n const helperId = `${id}-helper`\n const { copy } = useClipboard()\n const palette = generatePalette(baseColor, options)\n\n const handleCopy = async (swatch: PaletteSwatch) => {\n const step = `${name}-${swatch.step}`\n const ok = await copy(swatch.hex)\n if (ok) {\n toast.success(t('colorRamp.copied', { step, hex: swatch.hex }))\n onCopy?.(swatch)\n } else {\n toast.error(t('colorRamp.copyFailed', { step }))\n }\n }\n\n const tip = (swatch: PaletteSwatch) => (\n <span className={styles.tip}>\n <span className={styles.tipTitle}>\n {name}-{swatch.step}\n {swatch.step === BASE_STEP ? ` · ${t('colorRamp.base')}` : ''}\n </span>\n <span>{swatch.hex}</span>\n <span>\n {contrastLine(t('colorRamp.black'), swatch.onDark)} ·{' '}\n {contrastLine(t('colorRamp.white'), swatch.onWhite)}\n </span>\n {copyable && <span>{t('colorRamp.clickToCopy')}</span>}\n </span>\n )\n\n return (\n <div\n ref={ref}\n className={clsx(fieldStyles.field, error && fieldStyles.error, className)}\n {...props}\n >\n {label != null && (\n <label id={labelId} className={fieldStyles.label}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={fieldStyles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n\n {palette ? (\n <>\n <div\n role=\"group\"\n aria-label={t('colorRamp.groupLabel', { name })}\n aria-labelledby={label != null ? labelId : undefined}\n aria-describedby={helperText != null ? helperId : undefined}\n className={clsx(styles.band, styles[size])}\n >\n {palette.map((swatch) => {\n const isBase = swatch.step === BASE_STEP\n // the swatch's own colors are the data — the one legitimate inline-color exception\n const ink = { backgroundColor: swatch.hex, color: swatch.textColor } as CSSProperties\n const stepName = `${name}-${swatch.step}`\n const cell = copyable ? (\n <button\n type=\"button\"\n className={styles.step}\n style={ink}\n data-base={isBase || undefined}\n aria-label={t('colorRamp.copyAria', { name, step: swatch.step, hex: swatch.hex })}\n onClick={() => void handleCopy(swatch)}\n >\n <span className={styles.num} aria-hidden=\"true\">\n {swatch.step}\n </span>\n </button>\n ) : (\n <span\n className={clsx(styles.step, styles.static)}\n style={ink}\n data-base={isBase || undefined}\n role=\"img\"\n aria-label={`${stepName} ${swatch.hex}`}\n >\n <span className={styles.num} aria-hidden=\"true\">\n {swatch.step}\n </span>\n </span>\n )\n // the Tooltip's wrapper span is the band's real flex child (sized by `.band > *`)\n return (\n <Tooltip key={swatch.step} content={tip(swatch)}>\n {cell}\n </Tooltip>\n )\n })}\n </div>\n {showBounds && (\n <div className={styles.bounds}>\n <Typography as=\"span\" variant=\"caption\" color=\"muted\">\n {t('colorRamp.lightest')}\n </Typography>\n <Typography as=\"span\" variant=\"caption\" color=\"muted\">\n {t('colorRamp.darkest')}\n </Typography>\n </div>\n )}\n </>\n ) : (\n <Typography as=\"span\" variant=\"caption\" color=\"muted\">\n {t('colorRamp.invalid')}\n </Typography>\n )}\n\n {helperText != null && (\n <Typography\n as=\"span\"\n id={helperId}\n variant=\"bodySmall\"\n color={error ? 'error' : 'muted'}\n className={fieldStyles.helper}\n >\n {helperText}\n </Typography>\n )}\n </div>\n )\n})\n"],"names":["contrastLine","who","ColorRamp","forwardRef","baseColor","name","options","size","copyable","onCopy","showBounds","label","helperText","error","required","className","props","ref","useT","id","useId","labelId","helperId","copy","useClipboard","palette","generatePalette","handleCopy","swatch","step","toast","tip","styles","jsxs","BASE_STEP","jsx","clsx","fieldStyles","Typography","Fragment","isBase","ink","stepName","cell","Tooltip"],"mappings":"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"}
1
+ {"version":3,"file":"ColorRamp-DuO7gkru.cjs","sources":["../src/components/ColorRamp/ColorRamp.tsx"],"sourcesContent":["import { forwardRef, useId, type CSSProperties, type HTMLAttributes, type ReactNode } from 'react'\nimport { clsx } from 'clsx'\nimport { useT } from '../../theme'\nimport { useClipboard } from '../../hooks/useClipboard'\nimport {\n BASE_STEP,\n generatePalette,\n type GeneratePaletteOptions,\n type Legibility,\n type PaletteSwatch,\n} from '../../helpers/palette'\nimport { Tooltip } from '../Tooltip'\nimport { Typography } from '../Typography'\nimport { toast } from '../Toast'\n// shared field chrome (wrapper / label / helper / required / error)\nimport fieldStyles from '../TextField/TextField.module.css'\nimport styles from './ColorRamp.module.css'\n\nexport type ColorRampSize = 'sm' | 'md' | 'lg'\n\n// `onCopy` here is the swatch callback, so the DOM clipboard `onCopy` handler is omitted alongside `color`\nexport interface ColorRampProps extends Omit<HTMLAttributes<HTMLDivElement>, 'color' | 'onCopy'> {\n /** The base (500) color — any value `generatePalette` accepts. Invalid → the empty-state caption. */\n baseColor: string\n /** Token prefix for step names (`primary` → \"primary-500\") — used in tooltips, aria-labels and the copy toast. Default `'color'`. */\n name?: string\n /** Passed to `generatePalette` (override any subset of the tint / shade fractions). */\n options?: GeneratePaletteOptions\n /** Band height. `sm` 32 · `md` 40 (default) · `lg` 48 px. */\n size?: ColorRampSize\n /** Click a step to copy its hex (default `true`). `false` renders the steps as non-interactive cells. */\n copyable?: boolean\n /** After a successful copy — in addition to the built-in toast. */\n onCopy?: (swatch: PaletteSwatch) => void\n /** Show the \"Lightest … Darkest\" caption row under the band (default `true`). */\n showBounds?: boolean\n /** Label rendered above the band (field-family chrome, like `Slider` / `SwatchPicker`). */\n label?: ReactNode\n /** Helper / validation text under the band. Adopts the error color while `error`. */\n helperText?: ReactNode\n /** Marks the field invalid — reddens the label/asterisk and shows `helperText` in the error color. */\n error?: boolean\n /** Adds a red asterisk after the label. */\n required?: boolean\n}\n\n/** `black 4.52 AA` — ratio to 2 decimals, the body-text rating appended when it exists. */\nconst contrastLine = (who: string, l: Legibility) =>\n `${who} ${l.ratio.toFixed(2)}${l.small ? ` ${l.small}` : ''}`\n\n/**\n * The generated tonal scale for one color as **a single horizontal band of ten equal steps** sharing\n * one rounded, clipped frame (reads as a continuous ramp, not ten chips). Display + copy only — it never\n * edits the color; pair it with `ColorPicker` (or use `PaletteField`, which composes both). Each step\n * is a `Tooltip`-wrapped button whose fill / ink are the swatch's own colors (inline — the color IS the\n * data), showing its number on the base step and on hover / focus; clicking copies the hex with a toast.\n * `role=\"group\"` labelled \"{name} color scale\"; an invalid `baseColor` renders only a muted caption.\n */\nexport const ColorRamp = forwardRef<HTMLDivElement, ColorRampProps>(function ColorRamp(\n {\n baseColor,\n name = 'color',\n options,\n size = 'md',\n copyable = true,\n onCopy,\n showBounds = true,\n label,\n helperText,\n error = false,\n required = false,\n className,\n ...props\n },\n ref,\n) {\n const t = useT()\n const id = useId()\n const labelId = `${id}-label`\n const helperId = `${id}-helper`\n const { copy } = useClipboard()\n const palette = generatePalette(baseColor, options)\n\n const handleCopy = async (swatch: PaletteSwatch) => {\n const step = `${name}-${swatch.step}`\n const ok = await copy(swatch.hex)\n if (ok) {\n toast.success(t('colorRamp.copied', { step, hex: swatch.hex }))\n onCopy?.(swatch)\n } else {\n toast.error(t('colorRamp.copyFailed', { step }))\n }\n }\n\n const tip = (swatch: PaletteSwatch) => (\n <span className={styles.tip}>\n <span className={styles.tipTitle}>\n {name}-{swatch.step}\n {swatch.step === BASE_STEP ? ` · ${t('colorRamp.base')}` : ''}\n </span>\n <span>{swatch.hex}</span>\n <span>\n {contrastLine(t('colorRamp.black'), swatch.onDark)} ·{' '}\n {contrastLine(t('colorRamp.white'), swatch.onWhite)}\n </span>\n {copyable && <span>{t('colorRamp.clickToCopy')}</span>}\n </span>\n )\n\n return (\n <div\n ref={ref}\n className={clsx(fieldStyles.field, error && fieldStyles.error, className)}\n {...props}\n >\n {label != null && (\n <label id={labelId} className={fieldStyles.label}>\n <Typography as=\"span\" variant=\"bodySmall\" color=\"muted\">\n {label}\n </Typography>\n {required && (\n <span className={fieldStyles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n )}\n\n {palette ? (\n <>\n <div\n role=\"group\"\n aria-label={t('colorRamp.groupLabel', { name })}\n aria-labelledby={label != null ? labelId : undefined}\n aria-describedby={helperText != null ? helperId : undefined}\n className={clsx(styles.band, styles[size])}\n >\n {palette.map((swatch) => {\n const isBase = swatch.step === BASE_STEP\n // the swatch's own colors are the data — the one legitimate inline-color exception\n const ink = { backgroundColor: swatch.hex, color: swatch.textColor } as CSSProperties\n const stepName = `${name}-${swatch.step}`\n const cell = copyable ? (\n <button\n type=\"button\"\n className={styles.step}\n style={ink}\n data-base={isBase || undefined}\n aria-label={t('colorRamp.copyAria', { name, step: swatch.step, hex: swatch.hex })}\n onClick={() => void handleCopy(swatch)}\n >\n <span className={styles.num} aria-hidden=\"true\">\n {swatch.step}\n </span>\n </button>\n ) : (\n <span\n className={clsx(styles.step, styles.static)}\n style={ink}\n data-base={isBase || undefined}\n role=\"img\"\n aria-label={`${stepName} ${swatch.hex}`}\n >\n <span className={styles.num} aria-hidden=\"true\">\n {swatch.step}\n </span>\n </span>\n )\n // the Tooltip's wrapper span is the band's real flex child (sized by `.band > *`)\n return (\n <Tooltip key={swatch.step} content={tip(swatch)}>\n {cell}\n </Tooltip>\n )\n })}\n </div>\n {showBounds && (\n <div className={styles.bounds}>\n <Typography as=\"span\" variant=\"caption\" color=\"muted\">\n {t('colorRamp.lightest')}\n </Typography>\n <Typography as=\"span\" variant=\"caption\" color=\"muted\">\n {t('colorRamp.darkest')}\n </Typography>\n </div>\n )}\n </>\n ) : (\n <Typography as=\"span\" variant=\"caption\" color=\"muted\">\n {t('colorRamp.invalid')}\n </Typography>\n )}\n\n {helperText != null && (\n <Typography\n as=\"span\"\n id={helperId}\n variant=\"bodySmall\"\n color={error ? 'error' : 'muted'}\n className={fieldStyles.helper}\n >\n {helperText}\n </Typography>\n )}\n </div>\n )\n})\n"],"names":["contrastLine","who","ColorRamp","forwardRef","baseColor","name","options","size","copyable","onCopy","showBounds","label","helperText","error","required","className","props","ref","useT","id","useId","labelId","helperId","copy","useClipboard","palette","generatePalette","handleCopy","swatch","step","toast","tip","styles","jsxs","BASE_STEP","jsx","clsx","fieldStyles","Typography","Fragment","isBase","ink","stepName","cell","Tooltip"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";const $e=require("react/jsx-runtime"),s=require("react"),Ve=require("./breakpoints-Dpnh6BbG.cjs"),De=require("./translations-CXEeeUDL.cjs"),R=require("./messages-dL9MkVze.cjs");function Ge(e){let a=e.trim().replace(/^#/,"");a.length===3&&(a=a[0]+a[0]+a[1]+a[1]+a[2]+a[2]);const r=parseInt(a,16);return`${r>>16&255}, ${r>>8&255}, ${r&255}`}function je(e){const[a,r,o]=e.split(",").map(b=>Number(b.trim()));return(a*299+r*587+o*114)/1e3>=150?"#04202b":"#ffffff"}const Je={secondary:"rgb(var(--tz-color-primary-rgb))",warning:"#ffffff"};function Ne(e,a=document.documentElement){for(const[r,o]of Object.entries(e)){if(!o)continue;const u=Ge(o);a.style.setProperty(`--tz-color-${r}-rgb`,u),a.style.setProperty(`--tz-color-${r}-contrast`,Je[r]??je(u))}}const n=s.createContext(null),M="tz-theme-mode",T=e=>`tz-accent-color-${e}`,D="tz-header-sticky",N="tz-sidebar-variant",P="tz-font-family",O="tz-shape",Pe="tz-locale",Oe=[{code:"en-US",label:"English"}],C="Inter",We=[C],Xe=e=>`'${e}', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif`;function Ze(){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 a=document.createElement("link");a.rel="preconnect",a.href="https://fonts.gstatic.com",a.crossOrigin="anonymous",document.head.appendChild(a)}function ge(e){if(typeof document>"u"||We.includes(e))return;const a=`tz-font-${e.trim().replace(/\s+/g,"-").toLowerCase()}`;if(document.getElementById(a))return;Ze();const r=document.createElement("link");r.id=a,r.rel="stylesheet",r.href=`https://fonts.googleapis.com/css2?family=${encodeURIComponent(e.trim()).replace(/%20/g,"+")}&display=swap`,document.head.appendChild(r)}const z="tab",B="nestedTab",v="step",f="redirect",ze=[],Be={},ve={},fe={},xe={},He={},et={primary:"#13404e",secondary:"#ffffff",background:"#f9f9f9",surface:"#ffffff",accent:"#056472",success:"#00a854",error:"#f04134",info:"#039aa1",warning:"#ffbf00"},tt={primary:"#e6e8eb",secondary:"#191919",background:"#0f0f0f",surface:"#191919",accent:"#16a6b4",success:"#00a854",error:"#f04134",info:"#039aa1",warning:"#ffbf00"};function st(e){const a=localStorage.getItem(M);return a==="light"||a==="dark"?a:e}function at(){return{light:localStorage.getItem(T("light"))||null,dark:localStorage.getItem(T("dark"))||null}}function rt(e){const a=localStorage.getItem(D);return a==="1"?!0:a==="0"?!1:e}function nt(e){const a=localStorage.getItem(N);return a==="floating"||a==="docked"?a:e}function ut(e){return localStorage.getItem(P)||e}function ot(e){const a=localStorage.getItem(O);return a==="rounded"||a==="square"?a:e}function lt(e,a){const r=e.map(u=>u.code),o=localStorage.getItem(Pe);return o&&r.includes(o)?o:a&&r.includes(a)?a:r.find(u=>u.toLowerCase().startsWith("en"))??r[0]??"en-US"}function ct({config:e,children:a}){var ie,he,Ce,be,Ae,_e,ke,Le,Ie,Re,Ke,Fe,Qe,Ue,Ye,Me;const[r,o]=s.useState(()=>{var t;return st(((t=e==null?void 0:e.theme)==null?void 0:t.mode)??"light")}),[u,b]=s.useState(at),[K,x]=s.useState(()=>{var t;return rt(((t=e==null?void 0:e.header)==null?void 0:t.sticky)??!1)}),[F,H]=s.useState(()=>{var t;return nt(((t=e==null?void 0:e.sidebar)==null?void 0:t.variant)??"floating")}),[S,q]=s.useState(()=>{var t;return ut(((t=e==null?void 0:e.theme)==null?void 0:t.fontFamily)??C)}),[i,w]=s.useState(()=>{var t;return ot(((t=e==null?void 0:e.theme)==null?void 0:t.shape)??"rounded")}),Q=((ie=e==null?void 0:e.i18n)==null?void 0:ie.languages)??Oe,$=(he=e==null?void 0:e.i18n)==null?void 0:he.messages,V=(Ce=e==null?void 0:e.i18n)==null?void 0:Ce.appMessages,[y,qe]=s.useState(()=>{var t;return lt(Q,(t=e==null?void 0:e.i18n)==null?void 0:t.language)}),d=(be=e==null?void 0:e.theme)==null?void 0:be.colors,h=s.useMemo(()=>{const t={...et,...d==null?void 0:d.light},l={...t,...tt,...d==null?void 0:d.dark};return{light:t,dark:l}},[d]),G=s.useMemo(()=>({light:h.light.accent,dark:h.dark.accent}),[h]),c=s.useCallback((t,l=u[t])=>{const m=h[t];Ne(l?{...m,accent:l}:m);const I=document.documentElement;I.setAttribute("data-tz-theme",t),I.style.setProperty("color-scheme",t)},[h,u]);s.useLayoutEffect(()=>{c(r)},[c,r]);const j=(Ae=e==null?void 0:e.theme)==null?void 0:Ae.breakpoints;s.useLayoutEffect(()=>{Ve.setBreakpoints(j)},[JSON.stringify(j??null)]);const A=s.useCallback(t=>{c(t),o(t),localStorage.setItem(M,t)},[c]),J=s.useCallback(()=>A(r==="light"?"dark":"light"),[r,A]),W=s.useCallback((t,l)=>{const m=l??r;b(I=>({...I,[m]:t})),t?localStorage.setItem(T(m),t):localStorage.removeItem(T(m)),m===r&&c(r,t)},[r,c]),X=s.useCallback(t=>{x(t),localStorage.setItem(D,t?"1":"0")},[]),Z=s.useCallback(t=>{H(t),localStorage.setItem(N,t)},[]),p=s.useCallback(t=>{ge(t),document.documentElement.style.setProperty("--tz-font-family",Xe(t))},[]);s.useLayoutEffect(()=>{p(S)},[p,S]);const g=s.useCallback(t=>{const l=t.trim()||C;p(l),q(l),localStorage.setItem(P,l)},[p]),E=s.useCallback(t=>{document.documentElement.setAttribute("data-tz-shape",t)},[]);s.useLayoutEffect(()=>{E(i)},[E,i]);const ee=s.useCallback(t=>{E(t),w(t),localStorage.setItem(O,t)},[E]),_=((_e=e==null?void 0:e.theme)==null?void 0:_e.mode)??"light",U=((ke=e==null?void 0:e.header)==null?void 0:ke.sticky)??!1,Y=((Le=e==null?void 0:e.sidebar)==null?void 0:Le.variant)??"floating",k=((Ie=e==null?void 0:e.theme)==null?void 0:Ie.fontFamily)??C,L=((Re=e==null?void 0:e.theme)==null?void 0:Re.shape)??"rounded",te=r!==_||u.light!=null||u.dark!=null||K!==U||F!==Y||S!==k||i!==L,se=s.useCallback(()=>{for(const t of[M,T("light"),T("dark"),D,N,P,O])localStorage.removeItem(t);b({light:null,dark:null}),c(_,null),o(_),x(U),H(Y),p(k),q(k),E(L),w(L)},[c,p,E,_,U,Y,k,L]),ae=s.useCallback(t=>{qe(t),localStorage.setItem(Pe,t)},[]),re=s.useMemo(()=>R.createTranslator(y,$),[y,$]),ne=s.useMemo(()=>R.createAppTranslator(y,V),[y,V]),ue=(e==null?void 0:e.locales)??ze,oe=((Ke=e==null?void 0:e.keys)==null?void 0:Ke.translationsNamespace)??De.DEFAULT_TRANSLATIONS_NAMESPACE,le=((Fe=e==null?void 0:e.keys)==null?void 0:Fe.tabQueryKey)??z,ce=((Qe=e==null?void 0:e.keys)==null?void 0:Qe.nestedTabQueryKey)??B,de=((Ue=e==null?void 0:e.keys)==null?void 0:Ue.stepQueryKey)??v,me=((Ye=e==null?void 0:e.keys)==null?void 0:Ye.redirectQueryKey)??f,ye=((Me=e==null?void 0:e.table)==null?void 0:Me.query)??Be,pe=(e==null?void 0:e.header)??ve,Ee=(e==null?void 0:e.sidebar)??fe,Te=(e==null?void 0:e.toast)??xe,Se=(e==null?void 0:e.maps)??He,we=s.useMemo(()=>({mode:r,setMode:A,toggleMode:J,accentColors:u,defaultAccentColors:G,setAccentColor:W,locales:ue,translationsNamespace:oe,tabQueryKey:le,nestedTabQueryKey:ce,stepQueryKey:de,redirectQueryKey:me,tableQuery:ye,header:pe,sidebar:Ee,toast:Te,maps:Se,headerSticky:K,setHeaderSticky:X,sidebarVariant:F,setSidebarVariant:Z,fontFamily:S,setFontFamily:g,shape:i,setShape:ee,hasCustomPreferences:te,resetPreferences:se,language:y,setLanguage:ae,languages:Q,t:re,appT:ne}),[r,A,J,u,G,W,ue,oe,le,ce,de,me,ye,pe,Ee,Te,Se,K,X,F,Z,S,g,i,ee,te,se,y,ae,Q,re,ne]);return $e.jsx(n.Provider,{value:we,children:a})}function dt(){const e=s.useContext(n);if(!e)throw new Error("useTheme must be used within a <ConfigProvider>");return e}function mt(){var e;return((e=s.useContext(n))==null?void 0:e.locales)??ze}const yt=R.createTranslator("en"),pt=R.createAppTranslator("en");function Et(){var e;return((e=s.useContext(n))==null?void 0:e.t)??yt}function Tt(){var e;return((e=s.useContext(n))==null?void 0:e.appT)??pt}function St(){const e=s.useContext(n);return{language:(e==null?void 0:e.language)??"en-US",setLanguage:(e==null?void 0:e.setLanguage)??(()=>{}),languages:(e==null?void 0:e.languages)??Oe}}function it(){var e;return((e=s.useContext(n))==null?void 0:e.translationsNamespace)??De.DEFAULT_TRANSLATIONS_NAMESPACE}function ht(){var e;return((e=s.useContext(n))==null?void 0:e.tabQueryKey)??z}function Ct(){var e;return((e=s.useContext(n))==null?void 0:e.nestedTabQueryKey)??B}function bt(){var e;return((e=s.useContext(n))==null?void 0:e.stepQueryKey)??v}function At(){var e;return((e=s.useContext(n))==null?void 0:e.redirectQueryKey)??f}function _t(){var e;return((e=s.useContext(n))==null?void 0:e.tableQuery)??Be}function kt(){var e;return((e=s.useContext(n))==null?void 0:e.header)??ve}function Lt(){var e;return((e=s.useContext(n))==null?void 0:e.sidebar)??fe}function It(){var e;return((e=s.useContext(n))==null?void 0:e.toast)??xe}function Rt(){var e;return((e=s.useContext(n))==null?void 0:e.maps)??He}function Kt(){var e;return((e=s.useContext(n))==null?void 0:e.mode)??"light"}exports.ConfigProvider=ct;exports.DEFAULT_FONT_FAMILY=C;exports.DEFAULT_NESTED_TAB_QUERY_KEY=B;exports.DEFAULT_REDIRECT_QUERY_KEY=f;exports.DEFAULT_STEP_QUERY_KEY=v;exports.DEFAULT_TABS_QUERY_KEY=z;exports.applyTheme=Ne;exports.useColorMode=Kt;exports.useHeaderConfig=kt;exports.useLanguage=St;exports.useLocales=mt;exports.useMapsConfig=Rt;exports.useNestedTabQueryKey=Ct;exports.useRedirectQueryKey=At;exports.useSidebarConfig=Lt;exports.useStepQueryKey=bt;exports.useT=Et;exports.useTableQueryConfig=_t;exports.useTabsQueryKey=ht;exports.useTheme=dt;exports.useToastConfig=It;exports.useTranslations=Tt;exports.useTranslationsNamespace=it;
2
- //# sourceMappingURL=ConfigProvider-CYSpuSMJ.cjs.map
1
+ "use strict";const $e=require("react/jsx-runtime"),s=require("react"),Ve=require("./breakpoints-Dpnh6BbG.cjs"),De=require("./translations-CXEeeUDL.cjs"),R=require("./messages-D4ooXnUr.cjs");function Ge(e){let a=e.trim().replace(/^#/,"");a.length===3&&(a=a[0]+a[0]+a[1]+a[1]+a[2]+a[2]);const r=parseInt(a,16);return`${r>>16&255}, ${r>>8&255}, ${r&255}`}function je(e){const[a,r,o]=e.split(",").map(b=>Number(b.trim()));return(a*299+r*587+o*114)/1e3>=150?"#04202b":"#ffffff"}const Je={secondary:"rgb(var(--tz-color-primary-rgb))",warning:"#ffffff"};function Ne(e,a=document.documentElement){for(const[r,o]of Object.entries(e)){if(!o)continue;const u=Ge(o);a.style.setProperty(`--tz-color-${r}-rgb`,u),a.style.setProperty(`--tz-color-${r}-contrast`,Je[r]??je(u))}}const n=s.createContext(null),M="tz-theme-mode",T=e=>`tz-accent-color-${e}`,D="tz-header-sticky",N="tz-sidebar-variant",P="tz-font-family",O="tz-shape",Pe="tz-locale",Oe=[{code:"en-US",label:"English"}],C="Inter",We=[C],Xe=e=>`'${e}', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif`;function Ze(){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 a=document.createElement("link");a.rel="preconnect",a.href="https://fonts.gstatic.com",a.crossOrigin="anonymous",document.head.appendChild(a)}function ge(e){if(typeof document>"u"||We.includes(e))return;const a=`tz-font-${e.trim().replace(/\s+/g,"-").toLowerCase()}`;if(document.getElementById(a))return;Ze();const r=document.createElement("link");r.id=a,r.rel="stylesheet",r.href=`https://fonts.googleapis.com/css2?family=${encodeURIComponent(e.trim()).replace(/%20/g,"+")}&display=swap`,document.head.appendChild(r)}const z="tab",B="nestedTab",v="step",f="redirect",ze=[],Be={},ve={},fe={},xe={},He={},et={primary:"#13404e",secondary:"#ffffff",background:"#f9f9f9",surface:"#ffffff",accent:"#056472",success:"#00a854",error:"#f04134",info:"#039aa1",warning:"#ffbf00"},tt={primary:"#e6e8eb",secondary:"#191919",background:"#0f0f0f",surface:"#191919",accent:"#16a6b4",success:"#00a854",error:"#f04134",info:"#039aa1",warning:"#ffbf00"};function st(e){const a=localStorage.getItem(M);return a==="light"||a==="dark"?a:e}function at(){return{light:localStorage.getItem(T("light"))||null,dark:localStorage.getItem(T("dark"))||null}}function rt(e){const a=localStorage.getItem(D);return a==="1"?!0:a==="0"?!1:e}function nt(e){const a=localStorage.getItem(N);return a==="floating"||a==="docked"?a:e}function ut(e){return localStorage.getItem(P)||e}function ot(e){const a=localStorage.getItem(O);return a==="rounded"||a==="square"?a:e}function lt(e,a){const r=e.map(u=>u.code),o=localStorage.getItem(Pe);return o&&r.includes(o)?o:a&&r.includes(a)?a:r.find(u=>u.toLowerCase().startsWith("en"))??r[0]??"en-US"}function ct({config:e,children:a}){var ie,he,Ce,be,Ae,_e,ke,Le,Ie,Re,Ke,Fe,Qe,Ue,Ye,Me;const[r,o]=s.useState(()=>{var t;return st(((t=e==null?void 0:e.theme)==null?void 0:t.mode)??"light")}),[u,b]=s.useState(at),[K,x]=s.useState(()=>{var t;return rt(((t=e==null?void 0:e.header)==null?void 0:t.sticky)??!1)}),[F,H]=s.useState(()=>{var t;return nt(((t=e==null?void 0:e.sidebar)==null?void 0:t.variant)??"floating")}),[S,q]=s.useState(()=>{var t;return ut(((t=e==null?void 0:e.theme)==null?void 0:t.fontFamily)??C)}),[i,w]=s.useState(()=>{var t;return ot(((t=e==null?void 0:e.theme)==null?void 0:t.shape)??"rounded")}),Q=((ie=e==null?void 0:e.i18n)==null?void 0:ie.languages)??Oe,$=(he=e==null?void 0:e.i18n)==null?void 0:he.messages,V=(Ce=e==null?void 0:e.i18n)==null?void 0:Ce.appMessages,[y,qe]=s.useState(()=>{var t;return lt(Q,(t=e==null?void 0:e.i18n)==null?void 0:t.language)}),d=(be=e==null?void 0:e.theme)==null?void 0:be.colors,h=s.useMemo(()=>{const t={...et,...d==null?void 0:d.light},l={...t,...tt,...d==null?void 0:d.dark};return{light:t,dark:l}},[d]),G=s.useMemo(()=>({light:h.light.accent,dark:h.dark.accent}),[h]),c=s.useCallback((t,l=u[t])=>{const m=h[t];Ne(l?{...m,accent:l}:m);const I=document.documentElement;I.setAttribute("data-tz-theme",t),I.style.setProperty("color-scheme",t)},[h,u]);s.useLayoutEffect(()=>{c(r)},[c,r]);const j=(Ae=e==null?void 0:e.theme)==null?void 0:Ae.breakpoints;s.useLayoutEffect(()=>{Ve.setBreakpoints(j)},[JSON.stringify(j??null)]);const A=s.useCallback(t=>{c(t),o(t),localStorage.setItem(M,t)},[c]),J=s.useCallback(()=>A(r==="light"?"dark":"light"),[r,A]),W=s.useCallback((t,l)=>{const m=l??r;b(I=>({...I,[m]:t})),t?localStorage.setItem(T(m),t):localStorage.removeItem(T(m)),m===r&&c(r,t)},[r,c]),X=s.useCallback(t=>{x(t),localStorage.setItem(D,t?"1":"0")},[]),Z=s.useCallback(t=>{H(t),localStorage.setItem(N,t)},[]),p=s.useCallback(t=>{ge(t),document.documentElement.style.setProperty("--tz-font-family",Xe(t))},[]);s.useLayoutEffect(()=>{p(S)},[p,S]);const g=s.useCallback(t=>{const l=t.trim()||C;p(l),q(l),localStorage.setItem(P,l)},[p]),E=s.useCallback(t=>{document.documentElement.setAttribute("data-tz-shape",t)},[]);s.useLayoutEffect(()=>{E(i)},[E,i]);const ee=s.useCallback(t=>{E(t),w(t),localStorage.setItem(O,t)},[E]),_=((_e=e==null?void 0:e.theme)==null?void 0:_e.mode)??"light",U=((ke=e==null?void 0:e.header)==null?void 0:ke.sticky)??!1,Y=((Le=e==null?void 0:e.sidebar)==null?void 0:Le.variant)??"floating",k=((Ie=e==null?void 0:e.theme)==null?void 0:Ie.fontFamily)??C,L=((Re=e==null?void 0:e.theme)==null?void 0:Re.shape)??"rounded",te=r!==_||u.light!=null||u.dark!=null||K!==U||F!==Y||S!==k||i!==L,se=s.useCallback(()=>{for(const t of[M,T("light"),T("dark"),D,N,P,O])localStorage.removeItem(t);b({light:null,dark:null}),c(_,null),o(_),x(U),H(Y),p(k),q(k),E(L),w(L)},[c,p,E,_,U,Y,k,L]),ae=s.useCallback(t=>{qe(t),localStorage.setItem(Pe,t)},[]),re=s.useMemo(()=>R.createTranslator(y,$),[y,$]),ne=s.useMemo(()=>R.createAppTranslator(y,V),[y,V]),ue=(e==null?void 0:e.locales)??ze,oe=((Ke=e==null?void 0:e.keys)==null?void 0:Ke.translationsNamespace)??De.DEFAULT_TRANSLATIONS_NAMESPACE,le=((Fe=e==null?void 0:e.keys)==null?void 0:Fe.tabQueryKey)??z,ce=((Qe=e==null?void 0:e.keys)==null?void 0:Qe.nestedTabQueryKey)??B,de=((Ue=e==null?void 0:e.keys)==null?void 0:Ue.stepQueryKey)??v,me=((Ye=e==null?void 0:e.keys)==null?void 0:Ye.redirectQueryKey)??f,ye=((Me=e==null?void 0:e.table)==null?void 0:Me.query)??Be,pe=(e==null?void 0:e.header)??ve,Ee=(e==null?void 0:e.sidebar)??fe,Te=(e==null?void 0:e.toast)??xe,Se=(e==null?void 0:e.maps)??He,we=s.useMemo(()=>({mode:r,setMode:A,toggleMode:J,accentColors:u,defaultAccentColors:G,setAccentColor:W,locales:ue,translationsNamespace:oe,tabQueryKey:le,nestedTabQueryKey:ce,stepQueryKey:de,redirectQueryKey:me,tableQuery:ye,header:pe,sidebar:Ee,toast:Te,maps:Se,headerSticky:K,setHeaderSticky:X,sidebarVariant:F,setSidebarVariant:Z,fontFamily:S,setFontFamily:g,shape:i,setShape:ee,hasCustomPreferences:te,resetPreferences:se,language:y,setLanguage:ae,languages:Q,t:re,appT:ne}),[r,A,J,u,G,W,ue,oe,le,ce,de,me,ye,pe,Ee,Te,Se,K,X,F,Z,S,g,i,ee,te,se,y,ae,Q,re,ne]);return $e.jsx(n.Provider,{value:we,children:a})}function dt(){const e=s.useContext(n);if(!e)throw new Error("useTheme must be used within a <ConfigProvider>");return e}function mt(){var e;return((e=s.useContext(n))==null?void 0:e.locales)??ze}const yt=R.createTranslator("en"),pt=R.createAppTranslator("en");function Et(){var e;return((e=s.useContext(n))==null?void 0:e.t)??yt}function Tt(){var e;return((e=s.useContext(n))==null?void 0:e.appT)??pt}function St(){const e=s.useContext(n);return{language:(e==null?void 0:e.language)??"en-US",setLanguage:(e==null?void 0:e.setLanguage)??(()=>{}),languages:(e==null?void 0:e.languages)??Oe}}function it(){var e;return((e=s.useContext(n))==null?void 0:e.translationsNamespace)??De.DEFAULT_TRANSLATIONS_NAMESPACE}function ht(){var e;return((e=s.useContext(n))==null?void 0:e.tabQueryKey)??z}function Ct(){var e;return((e=s.useContext(n))==null?void 0:e.nestedTabQueryKey)??B}function bt(){var e;return((e=s.useContext(n))==null?void 0:e.stepQueryKey)??v}function At(){var e;return((e=s.useContext(n))==null?void 0:e.redirectQueryKey)??f}function _t(){var e;return((e=s.useContext(n))==null?void 0:e.tableQuery)??Be}function kt(){var e;return((e=s.useContext(n))==null?void 0:e.header)??ve}function Lt(){var e;return((e=s.useContext(n))==null?void 0:e.sidebar)??fe}function It(){var e;return((e=s.useContext(n))==null?void 0:e.toast)??xe}function Rt(){var e;return((e=s.useContext(n))==null?void 0:e.maps)??He}function Kt(){var e;return((e=s.useContext(n))==null?void 0:e.mode)??"light"}exports.ConfigProvider=ct;exports.DEFAULT_FONT_FAMILY=C;exports.DEFAULT_NESTED_TAB_QUERY_KEY=B;exports.DEFAULT_REDIRECT_QUERY_KEY=f;exports.DEFAULT_STEP_QUERY_KEY=v;exports.DEFAULT_TABS_QUERY_KEY=z;exports.applyTheme=Ne;exports.useColorMode=Kt;exports.useHeaderConfig=kt;exports.useLanguage=St;exports.useLocales=mt;exports.useMapsConfig=Rt;exports.useNestedTabQueryKey=Ct;exports.useRedirectQueryKey=At;exports.useSidebarConfig=Lt;exports.useStepQueryKey=bt;exports.useT=Et;exports.useTableQueryConfig=_t;exports.useTabsQueryKey=ht;exports.useTheme=dt;exports.useToastConfig=It;exports.useTranslations=Tt;exports.useTranslationsNamespace=it;
2
+ //# sourceMappingURL=ConfigProvider-BFhkb0BV.cjs.map