erp-pro-ui 0.1.8 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/README.md +94 -0
  2. package/dist/ascii-text.cjs +1 -1
  3. package/dist/ascii-text.mjs +1 -1
  4. package/dist/background-gradient-animation.cjs +1 -1
  5. package/dist/background-gradient-animation.mjs +1 -1
  6. package/dist/button-hover-border-gradient.cjs +1 -1
  7. package/dist/button-hover-border-gradient.mjs +1 -1
  8. package/dist/button.cjs +1 -1
  9. package/dist/button.mjs +1 -1
  10. package/dist/calendar.cjs +1 -1
  11. package/dist/calendar.mjs +1 -1
  12. package/dist/carousel.cjs +1 -1
  13. package/dist/carousel.mjs +1 -1
  14. package/dist/charts.cjs +1 -1
  15. package/dist/charts.mjs +1 -1
  16. package/dist/chip.cjs +1 -1
  17. package/dist/chip.mjs +1 -1
  18. package/dist/chroma-grid.cjs +1 -1
  19. package/dist/chroma-grid.mjs +1 -1
  20. package/dist/chunks/{DropdownMenu-DOvo5pV_.cjs → DropdownMenu-BDrNYO-D.cjs} +6 -5
  21. package/dist/chunks/DropdownMenu-BDrNYO-D.cjs.map +1 -0
  22. package/dist/chunks/{DropdownMenu-C17Zqu_E.mjs → DropdownMenu-BtTOri-A.mjs} +6 -5
  23. package/dist/chunks/DropdownMenu-BtTOri-A.mjs.map +1 -0
  24. package/dist/chunks/{HoverBorderGradient-C5D6lGg0.cjs → HoverBorderGradient-9pfvBoHR.cjs} +2 -2
  25. package/dist/chunks/{HoverBorderGradient-C5D6lGg0.cjs.map → HoverBorderGradient-9pfvBoHR.cjs.map} +1 -1
  26. package/dist/chunks/{HoverBorderGradient-CduqqQgX.mjs → HoverBorderGradient-NbdXeLgC.mjs} +2 -2
  27. package/dist/chunks/{HoverBorderGradient-CduqqQgX.mjs.map → HoverBorderGradient-NbdXeLgC.mjs.map} +1 -1
  28. package/dist/chunks/SunToMoonButton-BkEfkElJ.mjs.map +1 -1
  29. package/dist/chunks/SunToMoonButton-jS4BJD9q.cjs.map +1 -1
  30. package/dist/chunks/{tooltip-PJaQa8_l.cjs → Tooltip-DD30yj3A.cjs} +1 -1
  31. package/dist/chunks/{tooltip-PJaQa8_l.cjs.map → Tooltip-DD30yj3A.cjs.map} +1 -1
  32. package/dist/chunks/{tooltip-CmB8xKOF.mjs → Tooltip-DK3B879v.mjs} +1 -1
  33. package/dist/chunks/{tooltip-CmB8xKOF.mjs.map → Tooltip-DK3B879v.mjs.map} +1 -1
  34. package/dist/chunks/animated-content-CLsFnjgr.cjs.map +1 -1
  35. package/dist/chunks/animated-content-bK6xp-vc.mjs.map +1 -1
  36. package/dist/chunks/{ascii-text-OnPOTd2I.cjs → ascii-text-BFnpVur6.cjs} +5 -3
  37. package/dist/chunks/{ascii-text-OnPOTd2I.cjs.map → ascii-text-BFnpVur6.cjs.map} +1 -1
  38. package/dist/chunks/{ascii-text-OBwVLFDC.mjs → ascii-text-Bdy4C5rU.mjs} +5 -3
  39. package/dist/chunks/{ascii-text-OBwVLFDC.mjs.map → ascii-text-Bdy4C5rU.mjs.map} +1 -1
  40. package/dist/chunks/{background-gradient-animation-DpKJ3ecq.mjs → background-gradient-animation-BR9wx6Z8.mjs} +2 -2
  41. package/dist/chunks/{background-gradient-animation-DpKJ3ecq.mjs.map → background-gradient-animation-BR9wx6Z8.mjs.map} +1 -1
  42. package/dist/chunks/{background-gradient-animation-II9hdrgB.cjs → background-gradient-animation-CiNdmA61.cjs} +2 -2
  43. package/dist/chunks/{background-gradient-animation-II9hdrgB.cjs.map → background-gradient-animation-CiNdmA61.cjs.map} +1 -1
  44. package/dist/chunks/{button-DddUhuR-.mjs → button-A6UTvrOu.mjs} +2 -2
  45. package/dist/chunks/{button-DddUhuR-.mjs.map → button-A6UTvrOu.mjs.map} +1 -1
  46. package/dist/chunks/{button-xqernofO.cjs → button-C4MXPxsC.cjs} +2 -2
  47. package/dist/chunks/{button-xqernofO.cjs.map → button-C4MXPxsC.cjs.map} +1 -1
  48. package/dist/chunks/{button-hover-border-gradient-DFppVRI4.mjs → button-hover-border-gradient-DnFvjNNw.mjs} +2 -2
  49. package/dist/chunks/{button-hover-border-gradient-DFppVRI4.mjs.map → button-hover-border-gradient-DnFvjNNw.mjs.map} +1 -1
  50. package/dist/chunks/{button-hover-border-gradient-DX2lBG5C.cjs → button-hover-border-gradient-ssmwU5-U.cjs} +2 -2
  51. package/dist/chunks/{button-hover-border-gradient-DX2lBG5C.cjs.map → button-hover-border-gradient-ssmwU5-U.cjs.map} +1 -1
  52. package/dist/chunks/{calendar-BOBm3dFA.mjs → calendar-5XzPqKbE.mjs} +4 -4
  53. package/dist/chunks/calendar-5XzPqKbE.mjs.map +1 -0
  54. package/dist/chunks/{calendar-DJkfDhQA.cjs → calendar-CQJgQ5H_.cjs} +4 -4
  55. package/dist/chunks/calendar-CQJgQ5H_.cjs.map +1 -0
  56. package/dist/chunks/{carousel-F4drTOr6.cjs → carousel-Cv0m1Pp5.cjs} +2 -2
  57. package/dist/chunks/{carousel-DUqOaYvs.mjs.map → carousel-Cv0m1Pp5.cjs.map} +1 -1
  58. package/dist/chunks/{carousel-DUqOaYvs.mjs → carousel-Dd4rp-jr.mjs} +2 -2
  59. package/dist/chunks/{carousel-F4drTOr6.cjs.map → carousel-Dd4rp-jr.mjs.map} +1 -1
  60. package/dist/chunks/{charts-CZEYcr6X.cjs → charts-BmIV-mJy.cjs} +41 -10
  61. package/dist/chunks/charts-BmIV-mJy.cjs.map +1 -0
  62. package/dist/chunks/{charts-C-Qee_JY.mjs → charts-DkVu0rFc.mjs} +41 -10
  63. package/dist/chunks/charts-DkVu0rFc.mjs.map +1 -0
  64. package/dist/chunks/{chip-CMs73sc5.cjs → chip-B0YzBwkz.cjs} +10 -7
  65. package/dist/chunks/chip-B0YzBwkz.cjs.map +1 -0
  66. package/dist/chunks/{chip-BFg3DJx6.mjs → chip-CqcdcSs2.mjs} +10 -7
  67. package/dist/chunks/chip-CqcdcSs2.mjs.map +1 -0
  68. package/dist/chunks/{chroma-grid-tJX7CzCS.cjs → chroma-grid-DcZ9f4Ui.cjs} +2 -2
  69. package/dist/chunks/{chroma-grid-tJX7CzCS.cjs.map → chroma-grid-DcZ9f4Ui.cjs.map} +1 -1
  70. package/dist/chunks/{chroma-grid-DlY9hIRI.mjs → chroma-grid-opB2DBtS.mjs} +2 -2
  71. package/dist/chunks/{chroma-grid-DlY9hIRI.mjs.map → chroma-grid-opB2DBtS.mjs.map} +1 -1
  72. package/dist/chunks/color-palette-C3lesasJ.mjs +329 -0
  73. package/dist/chunks/color-palette-C3lesasJ.mjs.map +1 -0
  74. package/dist/chunks/color-palette-pLh6En3n.cjs +384 -0
  75. package/dist/chunks/color-palette-pLh6En3n.cjs.map +1 -0
  76. package/dist/chunks/{combobox-Bcwi33Qx.mjs → combobox-B6yk5U82.mjs} +6 -6
  77. package/dist/chunks/combobox-B6yk5U82.mjs.map +1 -0
  78. package/dist/chunks/{combobox-DRiHHhXL.cjs → combobox-CtNrGmuR.cjs} +6 -6
  79. package/dist/chunks/combobox-CtNrGmuR.cjs.map +1 -0
  80. package/dist/chunks/{data-table-Biom5rvs.mjs → data-table-Dtf6lKpp.mjs} +19 -19
  81. package/dist/chunks/data-table-Dtf6lKpp.mjs.map +1 -0
  82. package/dist/chunks/{data-table-D0BD2sFz.cjs → data-table-fAEuevPn.cjs} +20 -20
  83. package/dist/chunks/data-table-fAEuevPn.cjs.map +1 -0
  84. package/dist/chunks/{date-picker-CXGwnrLr.mjs → date-picker-BmQ0rgwH.mjs} +2 -2
  85. package/dist/chunks/{date-picker-CXGwnrLr.mjs.map → date-picker-BmQ0rgwH.mjs.map} +1 -1
  86. package/dist/chunks/{date-picker-Cw_tZGuk.cjs → date-picker-qpUZMtZC.cjs} +2 -2
  87. package/dist/chunks/{date-picker-Cw_tZGuk.cjs.map → date-picker-qpUZMtZC.cjs.map} +1 -1
  88. package/dist/chunks/dialog-CanVyiAD.mjs.map +1 -1
  89. package/dist/chunks/dialog-fffx1-4D.cjs.map +1 -1
  90. package/dist/chunks/{drawer-DTRnKChF.cjs → drawer-D07dGN6R.cjs} +6 -6
  91. package/dist/chunks/drawer-D07dGN6R.cjs.map +1 -0
  92. package/dist/chunks/{drawer-BJsBK6cP.mjs → drawer-DaoAXL-w.mjs} +6 -6
  93. package/dist/chunks/drawer-DaoAXL-w.mjs.map +1 -0
  94. package/dist/chunks/{form-CvNNjA1i.mjs → form-CtZ6U-_B.mjs} +2 -2
  95. package/dist/chunks/{form-CvNNjA1i.mjs.map → form-CtZ6U-_B.mjs.map} +1 -1
  96. package/dist/chunks/{form-C_JxqsSZ.cjs → form-X6Vyaavl.cjs} +2 -2
  97. package/dist/chunks/{form-C_JxqsSZ.cjs.map → form-X6Vyaavl.cjs.map} +1 -1
  98. package/dist/chunks/{gradual-blur-BB-8oKX6.cjs → gradual-blur-C6NOnjTw.cjs} +2 -2
  99. package/dist/chunks/{gradual-blur-BB-8oKX6.cjs.map → gradual-blur-C6NOnjTw.cjs.map} +1 -1
  100. package/dist/chunks/{gradual-blur-BR06yO3Y.mjs → gradual-blur-DXfxpCdB.mjs} +2 -2
  101. package/dist/chunks/{gradual-blur-BR06yO3Y.mjs.map → gradual-blur-DXfxpCdB.mjs.map} +1 -1
  102. package/dist/chunks/{input-Dox16Ozo.mjs → input-Bqo9Q5zF.mjs} +34 -13
  103. package/dist/chunks/input-Bqo9Q5zF.mjs.map +1 -0
  104. package/dist/chunks/{input-T4OlFhBc.cjs → input-DkCPyWXi.cjs} +34 -13
  105. package/dist/chunks/input-DkCPyWXi.cjs.map +1 -0
  106. package/dist/chunks/{label-CxmbGh0l.cjs → label-BKzqfAAq.cjs} +2 -2
  107. package/dist/chunks/{label-CxmbGh0l.cjs.map → label-BKzqfAAq.cjs.map} +1 -1
  108. package/dist/chunks/{label-C1Ekt3j2.mjs → label-Drxg0cG2.mjs} +2 -2
  109. package/dist/chunks/{label-C1Ekt3j2.mjs.map → label-Drxg0cG2.mjs.map} +1 -1
  110. package/dist/chunks/loading-BiM4mKh6.cjs.map +1 -1
  111. package/dist/chunks/loading-Dtosnb4A.mjs.map +1 -1
  112. package/dist/chunks/{multi-select-combobox-BzqYLVpV.cjs → multi-select-combobox-C0DoDzxQ.cjs} +6 -6
  113. package/dist/chunks/multi-select-combobox-C0DoDzxQ.cjs.map +1 -0
  114. package/dist/chunks/{multi-select-combobox-BrFtvCrS.mjs → multi-select-combobox-Do23ZfOQ.mjs} +6 -6
  115. package/dist/chunks/multi-select-combobox-Do23ZfOQ.mjs.map +1 -0
  116. package/dist/chunks/otp-input-CkhV-sGl.cjs.map +1 -1
  117. package/dist/chunks/otp-input-JOysxKfD.mjs.map +1 -1
  118. package/dist/chunks/{password-strength-meter-BEx94cfy.mjs → password-strength-meter-BsvqQBAg.mjs} +3 -3
  119. package/dist/chunks/{password-strength-meter-BEx94cfy.mjs.map → password-strength-meter-BsvqQBAg.mjs.map} +1 -1
  120. package/dist/chunks/{password-strength-meter-BNnmSgLh.cjs → password-strength-meter-DCi_BP7e.cjs} +3 -3
  121. package/dist/chunks/{password-strength-meter-BNnmSgLh.cjs.map → password-strength-meter-DCi_BP7e.cjs.map} +1 -1
  122. package/dist/chunks/{progress-bar-DS8KZ7eO.cjs → progress-bar-CYaBO_lS.cjs} +2 -2
  123. package/dist/chunks/{progress-bar-DS8KZ7eO.cjs.map → progress-bar-CYaBO_lS.cjs.map} +1 -1
  124. package/dist/chunks/{progress-bar-C9O0tuZf.mjs → progress-bar-DQ5ZKk2Y.mjs} +2 -2
  125. package/dist/chunks/{progress-bar-C9O0tuZf.mjs.map → progress-bar-DQ5ZKk2Y.mjs.map} +1 -1
  126. package/dist/chunks/radio-CuiM_gDv.mjs +50 -0
  127. package/dist/chunks/radio-CuiM_gDv.mjs.map +1 -0
  128. package/dist/chunks/radio-zx9xEW_C.cjs +56 -0
  129. package/dist/chunks/radio-zx9xEW_C.cjs.map +1 -0
  130. package/dist/chunks/{select-D0GOBB-b.mjs → select-CUaSNR09.mjs} +6 -6
  131. package/dist/chunks/select-CUaSNR09.mjs.map +1 -0
  132. package/dist/chunks/{select-CORFYTvs.cjs → select-bZ9WqLOc.cjs} +6 -6
  133. package/dist/chunks/select-bZ9WqLOc.cjs.map +1 -0
  134. package/dist/chunks/{sidebar-BrOLz89T.mjs → sidebar-DYEDFV2u.mjs} +242 -231
  135. package/dist/chunks/sidebar-DYEDFV2u.mjs.map +1 -0
  136. package/dist/chunks/{sidebar-D9D651F6.cjs → sidebar-Kkr45nuN.cjs} +241 -230
  137. package/dist/chunks/sidebar-Kkr45nuN.cjs.map +1 -0
  138. package/dist/chunks/{skeleton-wQOE-pRg.cjs → skeleton-DCBGLNAZ.cjs} +2 -2
  139. package/dist/chunks/{skeleton-wQOE-pRg.cjs.map → skeleton-DCBGLNAZ.cjs.map} +1 -1
  140. package/dist/chunks/{skeleton-BdijDxP6.mjs → skeleton-nH1eAN96.mjs} +2 -2
  141. package/dist/chunks/{skeleton-BdijDxP6.mjs.map → skeleton-nH1eAN96.mjs.map} +1 -1
  142. package/dist/chunks/{splash-cursor-CCi5n3O-.cjs → splash-cursor-BqG7ClsJ.cjs} +2 -2
  143. package/dist/chunks/{splash-cursor-CCi5n3O-.cjs.map → splash-cursor-BqG7ClsJ.cjs.map} +1 -1
  144. package/dist/chunks/{splash-cursor-CDHTm5vA.mjs → splash-cursor-N4FdnkOa.mjs} +2 -2
  145. package/dist/chunks/{splash-cursor-CDHTm5vA.mjs.map → splash-cursor-N4FdnkOa.mjs.map} +1 -1
  146. package/dist/chunks/{spotlight-card-Bh7KG0vZ.cjs → spotlight-card-BmsqC7wm.cjs} +2 -2
  147. package/dist/chunks/{spotlight-card-Bh7KG0vZ.cjs.map → spotlight-card-BmsqC7wm.cjs.map} +1 -1
  148. package/dist/chunks/{spotlight-card-D0uTxfPZ.mjs → spotlight-card-D9Z3nTmb.mjs} +2 -2
  149. package/dist/chunks/{spotlight-card-D0uTxfPZ.mjs.map → spotlight-card-D9Z3nTmb.mjs.map} +1 -1
  150. package/dist/chunks/{stepper-Z_7ugZJN.cjs → stepper-DepvEGfr.cjs} +4 -4
  151. package/dist/chunks/{stepper-Z_7ugZJN.cjs.map → stepper-DepvEGfr.cjs.map} +1 -1
  152. package/dist/chunks/{stepper-BMKxjCdm.mjs → stepper-Jv5OS1nY.mjs} +4 -4
  153. package/dist/chunks/{stepper-BMKxjCdm.mjs.map → stepper-Jv5OS1nY.mjs.map} +1 -1
  154. package/dist/chunks/{sun-to-moon-button-DcRX0obV.mjs → sun-to-moon-button-BJtBEaa3.mjs} +70 -51
  155. package/dist/chunks/sun-to-moon-button-BJtBEaa3.mjs.map +1 -0
  156. package/dist/chunks/{sun-to-moon-button-De0_Sf01.cjs → sun-to-moon-button-PwgTPsTW.cjs} +70 -51
  157. package/dist/chunks/sun-to-moon-button-PwgTPsTW.cjs.map +1 -0
  158. package/dist/chunks/{switch-DPyzVrNh.cjs → switch-X3l8xnle.cjs} +10 -29
  159. package/dist/chunks/switch-X3l8xnle.cjs.map +1 -0
  160. package/dist/chunks/{switch-C1gKE0m0.mjs → switch-iPsN1NS2.mjs} +10 -29
  161. package/dist/chunks/switch-iPsN1NS2.mjs.map +1 -0
  162. package/dist/chunks/{textarea-BY5-J9No.mjs → textarea-Bdo-Trvi.mjs} +2 -2
  163. package/dist/chunks/{textarea-BY5-J9No.mjs.map → textarea-Bdo-Trvi.mjs.map} +1 -1
  164. package/dist/chunks/{textarea-D-oBQ3IZ.cjs → textarea-CGRl2hrM.cjs} +2 -2
  165. package/dist/chunks/{textarea-D-oBQ3IZ.cjs.map → textarea-CGRl2hrM.cjs.map} +1 -1
  166. package/dist/chunks/toast-BcBidy5n.mjs.map +1 -1
  167. package/dist/chunks/toast-DiFgv3IL.cjs.map +1 -1
  168. package/dist/chunks/{truncated-text-istgJRUq.cjs → truncated-text-BIXqNfOL.cjs} +2 -2
  169. package/dist/chunks/{truncated-text-istgJRUq.cjs.map → truncated-text-BIXqNfOL.cjs.map} +1 -1
  170. package/dist/chunks/{truncated-text-DTgks5yS.mjs → truncated-text-C9t9o9IA.mjs} +2 -2
  171. package/dist/chunks/{truncated-text-DTgks5yS.mjs.map → truncated-text-C9t9o9IA.mjs.map} +1 -1
  172. package/dist/chunks/{typography-C_IanU4b.mjs → typography-Ct-jDJP3.mjs} +2 -2
  173. package/dist/chunks/{typography-C_IanU4b.mjs.map → typography-Ct-jDJP3.mjs.map} +1 -1
  174. package/dist/chunks/{typography-DUD6Dzd5.cjs → typography-LwwY_MOy.cjs} +2 -2
  175. package/dist/chunks/{typography-DUD6Dzd5.cjs.map → typography-LwwY_MOy.cjs.map} +1 -1
  176. package/dist/chunks/{utils-ati1KkDb.mjs → utils-7S0u48mU.mjs} +1339 -1
  177. package/dist/chunks/{utils-B4SmmY4J.cjs.map → utils-7S0u48mU.mjs.map} +1 -1
  178. package/dist/chunks/{utils-B4SmmY4J.cjs → utils-LRbEQHYs.cjs} +1339 -1
  179. package/dist/chunks/{utils-ati1KkDb.mjs.map → utils-LRbEQHYs.cjs.map} +1 -1
  180. package/dist/color-palette.cjs +9 -1
  181. package/dist/color-palette.mjs +2 -2
  182. package/dist/combobox.cjs +1 -1
  183. package/dist/combobox.mjs +1 -1
  184. package/dist/components/data-display/charts/BarChart.d.ts +5 -0
  185. package/dist/components/data-display/charts/BarChart.d.ts.map +1 -1
  186. package/dist/components/data-display/chip/Chip.d.ts +1 -1
  187. package/dist/components/data-display/chip/Chip.d.ts.map +1 -1
  188. package/dist/components/data-display/color-palette/ColorPalette.d.ts +24 -16
  189. package/dist/components/data-display/color-palette/ColorPalette.d.ts.map +1 -1
  190. package/dist/components/data-display/color-palette/index.d.ts +2 -1
  191. package/dist/components/data-display/color-palette/index.d.ts.map +1 -1
  192. package/dist/components/data-display/dashboard-cards/ChartCard.d.ts +15 -0
  193. package/dist/components/data-display/dashboard-cards/ChartCard.d.ts.map +1 -0
  194. package/dist/components/data-display/dashboard-cards/StatCard.d.ts +42 -0
  195. package/dist/components/data-display/dashboard-cards/StatCard.d.ts.map +1 -0
  196. package/dist/components/data-display/dashboard-cards/TopProductsCard.d.ts +17 -0
  197. package/dist/components/data-display/dashboard-cards/TopProductsCard.d.ts.map +1 -0
  198. package/dist/components/data-display/dashboard-cards/index.d.ts +7 -0
  199. package/dist/components/data-display/dashboard-cards/index.d.ts.map +1 -0
  200. package/dist/components/effects/sun-to-moon-button/ThemeSwitcherButtons.d.ts +16 -1
  201. package/dist/components/effects/sun-to-moon-button/ThemeSwitcherButtons.d.ts.map +1 -1
  202. package/dist/components/effects/sun-to-moon-button/index.d.ts +1 -1
  203. package/dist/components/effects/sun-to-moon-button/index.d.ts.map +1 -1
  204. package/dist/components/forms/input/Input.d.ts.map +1 -1
  205. package/dist/components/forms/input/types.d.ts +2 -0
  206. package/dist/components/forms/input/types.d.ts.map +1 -1
  207. package/dist/components/forms/radio/Radio.d.ts.map +1 -1
  208. package/dist/components/forms/switch/Switch.d.ts.map +1 -1
  209. package/dist/components/navigation/sidebar/DashboardSidebarShell.d.ts +26 -6
  210. package/dist/components/navigation/sidebar/DashboardSidebarShell.d.ts.map +1 -1
  211. package/dist/components/navigation/sidebar/index.d.ts +1 -0
  212. package/dist/components/navigation/sidebar/index.d.ts.map +1 -1
  213. package/dist/components/overlays/dropdown-menu/DropdownMenu.d.ts +1 -1
  214. package/dist/components/overlays/dropdown-menu/DropdownMenu.d.ts.map +1 -1
  215. package/dist/components/overlays/dropdown-menu/types.d.ts +1 -0
  216. package/dist/components/overlays/dropdown-menu/types.d.ts.map +1 -1
  217. package/dist/data-table.cjs +1 -1
  218. package/dist/data-table.mjs +1 -1
  219. package/dist/date-picker.cjs +1 -1
  220. package/dist/date-picker.mjs +1 -1
  221. package/dist/docs.cjs.map +1 -1
  222. package/dist/docs.mjs.map +1 -1
  223. package/dist/drawer.cjs +1 -1
  224. package/dist/drawer.mjs +1 -1
  225. package/dist/form.cjs +1 -1
  226. package/dist/form.mjs +1 -1
  227. package/dist/gradual-blur.cjs +1 -1
  228. package/dist/gradual-blur.mjs +1 -1
  229. package/dist/hover-border-gradient.cjs +1 -1
  230. package/dist/hover-border-gradient.mjs +1 -1
  231. package/dist/index.cjs +325 -38
  232. package/dist/index.cjs.map +1 -1
  233. package/dist/index.d.ts +5 -3
  234. package/dist/index.d.ts.map +1 -1
  235. package/dist/index.mjs +315 -39
  236. package/dist/index.mjs.map +1 -1
  237. package/dist/input.cjs +1 -1
  238. package/dist/input.mjs +1 -1
  239. package/dist/label.cjs +1 -1
  240. package/dist/label.mjs +1 -1
  241. package/dist/multi-select-combobox.cjs +1 -1
  242. package/dist/multi-select-combobox.mjs +1 -1
  243. package/dist/password-strength-meter.cjs +1 -1
  244. package/dist/password-strength-meter.mjs +1 -1
  245. package/dist/progress-bar.cjs +1 -1
  246. package/dist/progress-bar.mjs +1 -1
  247. package/dist/radio.cjs +1 -1
  248. package/dist/radio.mjs +1 -1
  249. package/dist/select.cjs +1 -1
  250. package/dist/select.mjs +1 -1
  251. package/dist/sidebar.cjs +1 -1
  252. package/dist/sidebar.mjs +1 -1
  253. package/dist/skeleton.cjs +1 -1
  254. package/dist/skeleton.mjs +1 -1
  255. package/dist/splash-cursor.cjs +1 -1
  256. package/dist/splash-cursor.mjs +1 -1
  257. package/dist/spotlight-card.cjs +1 -1
  258. package/dist/spotlight-card.mjs +1 -1
  259. package/dist/stepper.cjs +1 -1
  260. package/dist/stepper.mjs +1 -1
  261. package/dist/sun-to-moon-button.cjs +1 -1
  262. package/dist/sun-to-moon-button.mjs +1 -1
  263. package/dist/switch.cjs +1 -1
  264. package/dist/switch.mjs +1 -1
  265. package/dist/textarea.cjs +1 -1
  266. package/dist/textarea.mjs +1 -1
  267. package/dist/tooltip.cjs +2 -2
  268. package/dist/tooltip.mjs +1 -1
  269. package/dist/truncated-text.cjs +1 -1
  270. package/dist/truncated-text.mjs +1 -1
  271. package/dist/typography.cjs +1 -1
  272. package/dist/typography.mjs +1 -1
  273. package/dist/utils.cjs +1 -1
  274. package/dist/utils.mjs +1 -1
  275. package/package.json +8 -8
  276. package/dist/chunks/DropdownMenu-C17Zqu_E.mjs.map +0 -1
  277. package/dist/chunks/DropdownMenu-DOvo5pV_.cjs.map +0 -1
  278. package/dist/chunks/calendar-BOBm3dFA.mjs.map +0 -1
  279. package/dist/chunks/calendar-DJkfDhQA.cjs.map +0 -1
  280. package/dist/chunks/charts-C-Qee_JY.mjs.map +0 -1
  281. package/dist/chunks/charts-CZEYcr6X.cjs.map +0 -1
  282. package/dist/chunks/chip-BFg3DJx6.mjs.map +0 -1
  283. package/dist/chunks/chip-CMs73sc5.cjs.map +0 -1
  284. package/dist/chunks/color-palette-BmQC14gE.cjs +0 -789
  285. package/dist/chunks/color-palette-BmQC14gE.cjs.map +0 -1
  286. package/dist/chunks/color-palette-DnX1sODj.mjs +0 -782
  287. package/dist/chunks/color-palette-DnX1sODj.mjs.map +0 -1
  288. package/dist/chunks/combobox-Bcwi33Qx.mjs.map +0 -1
  289. package/dist/chunks/combobox-DRiHHhXL.cjs.map +0 -1
  290. package/dist/chunks/data-table-Biom5rvs.mjs.map +0 -1
  291. package/dist/chunks/data-table-D0BD2sFz.cjs.map +0 -1
  292. package/dist/chunks/drawer-BJsBK6cP.mjs.map +0 -1
  293. package/dist/chunks/drawer-DTRnKChF.cjs.map +0 -1
  294. package/dist/chunks/input-Dox16Ozo.mjs.map +0 -1
  295. package/dist/chunks/input-T4OlFhBc.cjs.map +0 -1
  296. package/dist/chunks/multi-select-combobox-BrFtvCrS.mjs.map +0 -1
  297. package/dist/chunks/multi-select-combobox-BzqYLVpV.cjs.map +0 -1
  298. package/dist/chunks/radio-BiD1ofmq.cjs +0 -50
  299. package/dist/chunks/radio-BiD1ofmq.cjs.map +0 -1
  300. package/dist/chunks/radio-C7Eg3FEp.mjs +0 -44
  301. package/dist/chunks/radio-C7Eg3FEp.mjs.map +0 -1
  302. package/dist/chunks/select-CORFYTvs.cjs.map +0 -1
  303. package/dist/chunks/select-D0GOBB-b.mjs.map +0 -1
  304. package/dist/chunks/sidebar-BrOLz89T.mjs.map +0 -1
  305. package/dist/chunks/sidebar-D9D651F6.cjs.map +0 -1
  306. package/dist/chunks/sun-to-moon-button-DcRX0obV.mjs.map +0 -1
  307. package/dist/chunks/sun-to-moon-button-De0_Sf01.cjs.map +0 -1
  308. package/dist/chunks/switch-C1gKE0m0.mjs.map +0 -1
  309. package/dist/chunks/switch-DPyzVrNh.cjs.map +0 -1
@@ -29,10 +29,10 @@ var PasswordCriteria = ({ password }) => {
29
29
  ].map((item) => /* @__PURE__ */ jsxs("div", {
30
30
  className: "flex items-center text-xs",
31
31
  children: [item.met ? /* @__PURE__ */ jsx(CheckIcon, {
32
- className: "mr-2 size-4 text-success",
32
+ className: "me-2 size-4 text-success",
33
33
  title: "CheckIcon"
34
34
  }) : /* @__PURE__ */ jsx(CloseIcon, {
35
- className: "mr-2 size-4 text-ds-3",
35
+ className: "me-2 size-4 text-ds-3",
36
36
  title: "CloseIcon"
37
37
  }), /* @__PURE__ */ jsx("span", {
38
38
  className: item.met ? "text-success" : "text-ds-2",
@@ -96,4 +96,4 @@ function PasswordStrengthMeter({ password }) {
96
96
  //#endregion
97
97
  export { PasswordStrengthMeter as t };
98
98
 
99
- //# sourceMappingURL=password-strength-meter-BEx94cfy.mjs.map
99
+ //# sourceMappingURL=password-strength-meter-BsvqQBAg.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"password-strength-meter-BEx94cfy.mjs","names":[],"sources":["../../src/components/forms/password-strength-meter/PasswordCriteria.tsx","../../src/components/forms/password-strength-meter/PasswordStrengthMeter.tsx"],"sourcesContent":["import { CheckIcon, CloseIcon } from \"../../icons\";\n\ninterface PasswordCriteriaProps {\n password: string;\n}\n\nexport const PasswordCriteria = ({ password }: PasswordCriteriaProps) => {\n const criteria = [\n { label: \"At least 6 characters\", met: password.length >= 6 },\n { label: \"Contains uppercase letter\", met: /[A-Z]/.test(password) },\n { label: \"Contains lowercase letter\", met: /[a-z]/.test(password) },\n { label: \"Contains a number\", met: /\\d/.test(password) },\n { label: \"Contains special character\", met: /[^A-Za-z0-9]/.test(password) },\n ];\n\n return (\n <div className=\"mt-2 space-y-1\">\n {criteria.map((item) => (\n <div key={item.label} className=\"flex items-center text-xs\">\n {item.met ? (\n <CheckIcon className=\"mr-2 size-4 text-success\" title=\"CheckIcon\" />\n ) : (\n <CloseIcon className=\"mr-2 size-4 text-ds-3\" title=\"CloseIcon\" />\n )}\n <span className={item.met ? \"text-success\" : \"text-ds-2\"}>\n {item.label}\n </span>\n </div>\n ))}\n </div>\n );\n};\n","import { useMemo } from \"react\";\n\nimport { PasswordCriteria } from \"./PasswordCriteria\";\n\nexport interface PasswordStrengthMeterProps {\n password: string;\n}\n\nexport function PasswordStrengthMeter({\n password,\n}: PasswordStrengthMeterProps) {\n // Calculate password strength using an object mapping approach\n const getStrength = (pass: string): number => {\n const criteria = {\n minLength: pass.length >= 6,\n hasMixedCase: /[a-z]/.test(pass) && /[A-Z]/.test(pass),\n hasNumber: /\\d/.test(pass),\n hasSpecialChar: /[^a-zA-Z\\d]/.test(pass),\n };\n\n // Count the number of criteria that pass\n return Object.values(criteria).filter(Boolean).length;\n };\n\n // Memoize the strength calculation to avoid unnecessary recalculations\n const strength = useMemo(() => getStrength(password), [password]);\n\n // Determine strength color based on the calculated strength\n const getColor = (strength: number): string => {\n const colors = [\n \"bg-ds-state-danger\",\n \"bg-ds-state-danger\",\n \"bg-ds-state-warning\",\n \"bg-ds-state-warning\",\n \"bg-ds-state-success\",\n ];\n return colors[strength] || \"bg-ds-surface-3\";\n };\n\n // Get a text label corresponding to the password strength\n const getStrengthText = (strength: number): string => {\n const strengthLevels = [\"Very Weak\", \"Weak\", \"Fair\", \"Good\", \"Strong\"];\n return strengthLevels[strength] || \"Very Weak\";\n };\n\n return (\n <div className=\"mt-2\">\n {/* Strength Label */}\n <div className=\"mb-1 flex items-center justify-between\">\n <span className=\"text-xs text-ds-2\">Password strength</span>\n <span className=\"text-xs text-ds-2\">{getStrengthText(strength)}</span>\n </div>\n\n {/* Strength Meter */}\n <div className=\"flex gap-1\">\n {Array.from({ length: 4 }, (_, index) => (\n <div\n key={index}\n className={`h-1 w-1/4 rounded-full transition-colors duration-300 ${\n index < strength ? getColor(strength) : \"bg-ds-surface-3\"\n }`}\n />\n ))}\n </div>\n\n <PasswordCriteria password={password} />\n </div>\n );\n}\n"],"mappings":";;;;AAMA,IAAa,oBAAoB,EAAE,eAAsC;AASvE,QACE,oBAAC,OAAD;EAAK,WAAU;YATA;GACf;IAAE,OAAO;IAAyB,KAAK,SAAS,UAAU;IAAG;GAC7D;IAAE,OAAO;IAA6B,KAAK,QAAQ,KAAK,SAAS;IAAE;GACnE;IAAE,OAAO;IAA6B,KAAK,QAAQ,KAAK,SAAS;IAAE;GACnE;IAAE,OAAO;IAAqB,KAAK,KAAK,KAAK,SAAS;IAAE;GACxD;IAAE,OAAO;IAA8B,KAAK,eAAe,KAAK,SAAS;IAAE;GAC5E,CAIa,KAAK,SACb,qBAAC,OAAD;GAAsB,WAAU;aAAhC,CACG,KAAK,MACJ,oBAAC,WAAD;IAAW,WAAU;IAA2B,OAAM;IAAc,CAAA,GAEpE,oBAAC,WAAD;IAAW,WAAU;IAAwB,OAAM;IAAc,CAAA,EAEnE,oBAAC,QAAD;IAAM,WAAW,KAAK,MAAM,iBAAiB;cAC1C,KAAK;IACD,CAAA,CACH;KATI,KAAK,MAST,CACN;EACE,CAAA;;;;ACrBV,SAAgB,sBAAsB,EACpC,YAC6B;CAE7B,MAAM,eAAe,SAAyB;EAC5C,MAAM,WAAW;GACf,WAAW,KAAK,UAAU;GAC1B,cAAc,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK;GACtD,WAAW,KAAK,KAAK,KAAK;GAC1B,gBAAgB,cAAc,KAAK,KAAK;GACzC;AAGD,SAAO,OAAO,OAAO,SAAS,CAAC,OAAO,QAAQ,CAAC;;CAIjD,MAAM,WAAW,cAAc,YAAY,SAAS,EAAE,CAAC,SAAS,CAAC;CAGjE,MAAM,YAAY,aAA6B;AAQ7C,SAPe;GACb;GACA;GACA;GACA;GACA;GACD,CACa,aAAa;;CAI7B,MAAM,mBAAmB,aAA6B;AAEpD,SADuB;GAAC;GAAa;GAAQ;GAAQ;GAAQ;GAAS,CAChD,aAAa;;AAGrC,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GAEE,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,QAAD;KAAM,WAAU;eAAoB;KAAwB,CAAA,EAC5D,oBAAC,QAAD;KAAM,WAAU;eAAqB,gBAAgB,SAAS;KAAQ,CAAA,CAClE;;GAGN,oBAAC,OAAD;IAAK,WAAU;cACZ,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,GAAG,UAC7B,oBAAC,OAAD,EAEE,WAAW,yDACT,QAAQ,WAAW,SAAS,SAAS,GAAG,qBAE1C,EAJK,MAIL,CACF;IACE,CAAA;GAEN,oBAAC,kBAAD,EAA4B,UAAY,CAAA;GACpC"}
1
+ {"version":3,"file":"password-strength-meter-BsvqQBAg.mjs","names":[],"sources":["../../src/components/forms/password-strength-meter/PasswordCriteria.tsx","../../src/components/forms/password-strength-meter/PasswordStrengthMeter.tsx"],"sourcesContent":["import { CheckIcon, CloseIcon } from \"../../icons\";\n\ninterface PasswordCriteriaProps {\n password: string;\n}\n\nexport const PasswordCriteria = ({ password }: PasswordCriteriaProps) => {\n const criteria = [\n { label: \"At least 6 characters\", met: password.length >= 6 },\n { label: \"Contains uppercase letter\", met: /[A-Z]/.test(password) },\n { label: \"Contains lowercase letter\", met: /[a-z]/.test(password) },\n { label: \"Contains a number\", met: /\\d/.test(password) },\n { label: \"Contains special character\", met: /[^A-Za-z0-9]/.test(password) },\n ];\n\n return (\n <div className=\"mt-2 space-y-1\">\n {criteria.map((item) => (\n <div key={item.label} className=\"flex items-center text-xs\">\n {item.met ? (\n <CheckIcon className=\"me-2 size-4 text-success\" title=\"CheckIcon\" />\n ) : (\n <CloseIcon className=\"me-2 size-4 text-ds-3\" title=\"CloseIcon\" />\n )}\n <span className={item.met ? \"text-success\" : \"text-ds-2\"}>\n {item.label}\n </span>\n </div>\n ))}\n </div>\n );\n};\n","import { useMemo } from \"react\";\n\nimport { PasswordCriteria } from \"./PasswordCriteria\";\n\nexport interface PasswordStrengthMeterProps {\n password: string;\n}\n\nexport function PasswordStrengthMeter({\n password,\n}: PasswordStrengthMeterProps) {\n // Calculate password strength using an object mapping approach\n const getStrength = (pass: string): number => {\n const criteria = {\n minLength: pass.length >= 6,\n hasMixedCase: /[a-z]/.test(pass) && /[A-Z]/.test(pass),\n hasNumber: /\\d/.test(pass),\n hasSpecialChar: /[^a-zA-Z\\d]/.test(pass),\n };\n\n // Count the number of criteria that pass\n return Object.values(criteria).filter(Boolean).length;\n };\n\n // Memoize the strength calculation to avoid unnecessary recalculations\n const strength = useMemo(() => getStrength(password), [password]);\n\n // Determine strength color based on the calculated strength\n const getColor = (strength: number): string => {\n const colors = [\n \"bg-ds-state-danger\",\n \"bg-ds-state-danger\",\n \"bg-ds-state-warning\",\n \"bg-ds-state-warning\",\n \"bg-ds-state-success\",\n ];\n return colors[strength] || \"bg-ds-surface-3\";\n };\n\n // Get a text label corresponding to the password strength\n const getStrengthText = (strength: number): string => {\n const strengthLevels = [\"Very Weak\", \"Weak\", \"Fair\", \"Good\", \"Strong\"];\n return strengthLevels[strength] || \"Very Weak\";\n };\n\n return (\n <div className=\"mt-2\">\n {/* Strength Label */}\n <div className=\"mb-1 flex items-center justify-between\">\n <span className=\"text-xs text-ds-2\">Password strength</span>\n <span className=\"text-xs text-ds-2\">{getStrengthText(strength)}</span>\n </div>\n\n {/* Strength Meter */}\n <div className=\"flex gap-1\">\n {Array.from({ length: 4 }, (_, index) => (\n <div\n key={index}\n className={`h-1 w-1/4 rounded-full transition-colors duration-300 ${\n index < strength ? getColor(strength) : \"bg-ds-surface-3\"\n }`}\n />\n ))}\n </div>\n\n <PasswordCriteria password={password} />\n </div>\n );\n}\n"],"mappings":";;;;AAMA,IAAa,oBAAoB,EAAE,eAAsC;AASvE,QACE,oBAAC,OAAD;EAAK,WAAU;YACZ;GATH;IAAE,OAAO;IAAyB,KAAK,SAAS,UAAU;IAAG;GAC7D;IAAE,OAAO;IAA6B,KAAK,QAAQ,KAAK,SAAS;IAAE;GACnE;IAAE,OAAO;IAA6B,KAAK,QAAQ,KAAK,SAAS;IAAE;GACnE;IAAE,OAAO;IAAqB,KAAK,KAAK,KAAK,SAAS;IAAE;GACxD;IAAE,OAAO;IAA8B,KAAK,eAAe,KAAK,SAAS;IAAE;GAKxE,CAAS,KAAK,SACb,qBAAC,OAAD;GAAsB,WAAU;aAAhC,CACG,KAAK,MACJ,oBAAC,WAAD;IAAW,WAAU;IAA2B,OAAM;IAAc,CAAA,GAEpE,oBAAC,WAAD;IAAW,WAAU;IAAwB,OAAM;IAAc,CAAA,EAEnE,oBAAC,QAAD;IAAM,WAAW,KAAK,MAAM,iBAAiB;cAC1C,KAAK;IACD,CAAA,CACH;KATI,KAAK,MAST,CACN;EACE,CAAA;;;;ACrBV,SAAgB,sBAAsB,EACpC,YAC6B;CAE7B,MAAM,eAAe,SAAyB;EAC5C,MAAM,WAAW;GACf,WAAW,KAAK,UAAU;GAC1B,cAAc,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK;GACtD,WAAW,KAAK,KAAK,KAAK;GAC1B,gBAAgB,cAAc,KAAK,KAAK;GACzC;AAGD,SAAO,OAAO,OAAO,SAAS,CAAC,OAAO,QAAQ,CAAC;;CAIjD,MAAM,WAAW,cAAc,YAAY,SAAS,EAAE,CAAC,SAAS,CAAC;CAGjE,MAAM,YAAY,aAA6B;AAQ7C,SAAO;GANL;GACA;GACA;GACA;GACA;GAEK,CAAO,aAAa;;CAI7B,MAAM,mBAAmB,aAA6B;AAEpD,SAAO;GADiB;GAAa;GAAQ;GAAQ;GAAQ;GACtD,CAAe,aAAa;;AAGrC,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GAEE,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,QAAD;KAAM,WAAU;eAAoB;KAAwB,CAAA,EAC5D,oBAAC,QAAD;KAAM,WAAU;eAAqB,gBAAgB,SAAS;KAAQ,CAAA,CAClE;;GAGN,oBAAC,OAAD;IAAK,WAAU;cACZ,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,GAAG,UAC7B,oBAAC,OAAD,EAEE,WAAW,yDACT,QAAQ,WAAW,SAAS,SAAS,GAAG,qBAE1C,EAJK,MAIL,CACF;IACE,CAAA;GAEN,oBAAC,kBAAD,EAA4B,UAAY,CAAA;GACpC"}
@@ -30,10 +30,10 @@ var PasswordCriteria = ({ password }) => {
30
30
  ].map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
31
31
  className: "flex items-center text-xs",
32
32
  children: [item.met ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons.CheckIcon, {
33
- className: "mr-2 size-4 text-success",
33
+ className: "me-2 size-4 text-success",
34
34
  title: "CheckIcon"
35
35
  }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons.CloseIcon, {
36
- className: "mr-2 size-4 text-ds-3",
36
+ className: "me-2 size-4 text-ds-3",
37
37
  title: "CloseIcon"
38
38
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39
39
  className: item.met ? "text-success" : "text-ds-2",
@@ -102,4 +102,4 @@ Object.defineProperty(exports, "PasswordStrengthMeter", {
102
102
  }
103
103
  });
104
104
 
105
- //# sourceMappingURL=password-strength-meter-BNnmSgLh.cjs.map
105
+ //# sourceMappingURL=password-strength-meter-DCi_BP7e.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"password-strength-meter-BNnmSgLh.cjs","names":[],"sources":["../../src/components/forms/password-strength-meter/PasswordCriteria.tsx","../../src/components/forms/password-strength-meter/PasswordStrengthMeter.tsx"],"sourcesContent":["import { CheckIcon, CloseIcon } from \"../../icons\";\n\ninterface PasswordCriteriaProps {\n password: string;\n}\n\nexport const PasswordCriteria = ({ password }: PasswordCriteriaProps) => {\n const criteria = [\n { label: \"At least 6 characters\", met: password.length >= 6 },\n { label: \"Contains uppercase letter\", met: /[A-Z]/.test(password) },\n { label: \"Contains lowercase letter\", met: /[a-z]/.test(password) },\n { label: \"Contains a number\", met: /\\d/.test(password) },\n { label: \"Contains special character\", met: /[^A-Za-z0-9]/.test(password) },\n ];\n\n return (\n <div className=\"mt-2 space-y-1\">\n {criteria.map((item) => (\n <div key={item.label} className=\"flex items-center text-xs\">\n {item.met ? (\n <CheckIcon className=\"mr-2 size-4 text-success\" title=\"CheckIcon\" />\n ) : (\n <CloseIcon className=\"mr-2 size-4 text-ds-3\" title=\"CloseIcon\" />\n )}\n <span className={item.met ? \"text-success\" : \"text-ds-2\"}>\n {item.label}\n </span>\n </div>\n ))}\n </div>\n );\n};\n","import { useMemo } from \"react\";\n\nimport { PasswordCriteria } from \"./PasswordCriteria\";\n\nexport interface PasswordStrengthMeterProps {\n password: string;\n}\n\nexport function PasswordStrengthMeter({\n password,\n}: PasswordStrengthMeterProps) {\n // Calculate password strength using an object mapping approach\n const getStrength = (pass: string): number => {\n const criteria = {\n minLength: pass.length >= 6,\n hasMixedCase: /[a-z]/.test(pass) && /[A-Z]/.test(pass),\n hasNumber: /\\d/.test(pass),\n hasSpecialChar: /[^a-zA-Z\\d]/.test(pass),\n };\n\n // Count the number of criteria that pass\n return Object.values(criteria).filter(Boolean).length;\n };\n\n // Memoize the strength calculation to avoid unnecessary recalculations\n const strength = useMemo(() => getStrength(password), [password]);\n\n // Determine strength color based on the calculated strength\n const getColor = (strength: number): string => {\n const colors = [\n \"bg-ds-state-danger\",\n \"bg-ds-state-danger\",\n \"bg-ds-state-warning\",\n \"bg-ds-state-warning\",\n \"bg-ds-state-success\",\n ];\n return colors[strength] || \"bg-ds-surface-3\";\n };\n\n // Get a text label corresponding to the password strength\n const getStrengthText = (strength: number): string => {\n const strengthLevels = [\"Very Weak\", \"Weak\", \"Fair\", \"Good\", \"Strong\"];\n return strengthLevels[strength] || \"Very Weak\";\n };\n\n return (\n <div className=\"mt-2\">\n {/* Strength Label */}\n <div className=\"mb-1 flex items-center justify-between\">\n <span className=\"text-xs text-ds-2\">Password strength</span>\n <span className=\"text-xs text-ds-2\">{getStrengthText(strength)}</span>\n </div>\n\n {/* Strength Meter */}\n <div className=\"flex gap-1\">\n {Array.from({ length: 4 }, (_, index) => (\n <div\n key={index}\n className={`h-1 w-1/4 rounded-full transition-colors duration-300 ${\n index < strength ? getColor(strength) : \"bg-ds-surface-3\"\n }`}\n />\n ))}\n </div>\n\n <PasswordCriteria password={password} />\n </div>\n );\n}\n"],"mappings":";;;;;AAMA,IAAa,oBAAoB,EAAE,eAAsC;AASvE,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAU;YATA;GACf;IAAE,OAAO;IAAyB,KAAK,SAAS,UAAU;IAAG;GAC7D;IAAE,OAAO;IAA6B,KAAK,QAAQ,KAAK,SAAS;IAAE;GACnE;IAAE,OAAO;IAA6B,KAAK,QAAQ,KAAK,SAAS;IAAE;GACnE;IAAE,OAAO;IAAqB,KAAK,KAAK,KAAK,SAAS;IAAE;GACxD;IAAE,OAAO;IAA8B,KAAK,eAAe,KAAK,SAAS;IAAE;GAC5E,CAIa,KAAK,SACb,iBAAA,GAAA,kBAAA,MAAC,OAAD;GAAsB,WAAU;aAAhC,CACG,KAAK,MACJ,iBAAA,GAAA,kBAAA,KAAC,cAAA,WAAD;IAAW,WAAU;IAA2B,OAAM;IAAc,CAAA,GAEpE,iBAAA,GAAA,kBAAA,KAAC,cAAA,WAAD;IAAW,WAAU;IAAwB,OAAM;IAAc,CAAA,EAEnE,iBAAA,GAAA,kBAAA,KAAC,QAAD;IAAM,WAAW,KAAK,MAAM,iBAAiB;cAC1C,KAAK;IACD,CAAA,CACH;KATI,KAAK,MAST,CACN;EACE,CAAA;;;;ACrBV,SAAgB,sBAAsB,EACpC,YAC6B;CAE7B,MAAM,eAAe,SAAyB;EAC5C,MAAM,WAAW;GACf,WAAW,KAAK,UAAU;GAC1B,cAAc,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK;GACtD,WAAW,KAAK,KAAK,KAAK;GAC1B,gBAAgB,cAAc,KAAK,KAAK;GACzC;AAGD,SAAO,OAAO,OAAO,SAAS,CAAC,OAAO,QAAQ,CAAC;;CAIjD,MAAM,YAAA,GAAA,MAAA,eAAyB,YAAY,SAAS,EAAE,CAAC,SAAS,CAAC;CAGjE,MAAM,YAAY,aAA6B;AAQ7C,SAPe;GACb;GACA;GACA;GACA;GACA;GACD,CACa,aAAa;;CAI7B,MAAM,mBAAmB,aAA6B;AAEpD,SADuB;GAAC;GAAa;GAAQ;GAAQ;GAAQ;GAAS,CAChD,aAAa;;AAGrC,QACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAU;YAAf;GAEE,iBAAA,GAAA,kBAAA,MAAC,OAAD;IAAK,WAAU;cAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;KAAM,WAAU;eAAoB;KAAwB,CAAA,EAC5D,iBAAA,GAAA,kBAAA,KAAC,QAAD;KAAM,WAAU;eAAqB,gBAAgB,SAAS;KAAQ,CAAA,CAClE;;GAGN,iBAAA,GAAA,kBAAA,KAAC,OAAD;IAAK,WAAU;cACZ,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,GAAG,UAC7B,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAEE,WAAW,yDACT,QAAQ,WAAW,SAAS,SAAS,GAAG,qBAE1C,EAJK,MAIL,CACF;IACE,CAAA;GAEN,iBAAA,GAAA,kBAAA,KAAC,kBAAD,EAA4B,UAAY,CAAA;GACpC"}
1
+ {"version":3,"file":"password-strength-meter-DCi_BP7e.cjs","names":[],"sources":["../../src/components/forms/password-strength-meter/PasswordCriteria.tsx","../../src/components/forms/password-strength-meter/PasswordStrengthMeter.tsx"],"sourcesContent":["import { CheckIcon, CloseIcon } from \"../../icons\";\n\ninterface PasswordCriteriaProps {\n password: string;\n}\n\nexport const PasswordCriteria = ({ password }: PasswordCriteriaProps) => {\n const criteria = [\n { label: \"At least 6 characters\", met: password.length >= 6 },\n { label: \"Contains uppercase letter\", met: /[A-Z]/.test(password) },\n { label: \"Contains lowercase letter\", met: /[a-z]/.test(password) },\n { label: \"Contains a number\", met: /\\d/.test(password) },\n { label: \"Contains special character\", met: /[^A-Za-z0-9]/.test(password) },\n ];\n\n return (\n <div className=\"mt-2 space-y-1\">\n {criteria.map((item) => (\n <div key={item.label} className=\"flex items-center text-xs\">\n {item.met ? (\n <CheckIcon className=\"me-2 size-4 text-success\" title=\"CheckIcon\" />\n ) : (\n <CloseIcon className=\"me-2 size-4 text-ds-3\" title=\"CloseIcon\" />\n )}\n <span className={item.met ? \"text-success\" : \"text-ds-2\"}>\n {item.label}\n </span>\n </div>\n ))}\n </div>\n );\n};\n","import { useMemo } from \"react\";\n\nimport { PasswordCriteria } from \"./PasswordCriteria\";\n\nexport interface PasswordStrengthMeterProps {\n password: string;\n}\n\nexport function PasswordStrengthMeter({\n password,\n}: PasswordStrengthMeterProps) {\n // Calculate password strength using an object mapping approach\n const getStrength = (pass: string): number => {\n const criteria = {\n minLength: pass.length >= 6,\n hasMixedCase: /[a-z]/.test(pass) && /[A-Z]/.test(pass),\n hasNumber: /\\d/.test(pass),\n hasSpecialChar: /[^a-zA-Z\\d]/.test(pass),\n };\n\n // Count the number of criteria that pass\n return Object.values(criteria).filter(Boolean).length;\n };\n\n // Memoize the strength calculation to avoid unnecessary recalculations\n const strength = useMemo(() => getStrength(password), [password]);\n\n // Determine strength color based on the calculated strength\n const getColor = (strength: number): string => {\n const colors = [\n \"bg-ds-state-danger\",\n \"bg-ds-state-danger\",\n \"bg-ds-state-warning\",\n \"bg-ds-state-warning\",\n \"bg-ds-state-success\",\n ];\n return colors[strength] || \"bg-ds-surface-3\";\n };\n\n // Get a text label corresponding to the password strength\n const getStrengthText = (strength: number): string => {\n const strengthLevels = [\"Very Weak\", \"Weak\", \"Fair\", \"Good\", \"Strong\"];\n return strengthLevels[strength] || \"Very Weak\";\n };\n\n return (\n <div className=\"mt-2\">\n {/* Strength Label */}\n <div className=\"mb-1 flex items-center justify-between\">\n <span className=\"text-xs text-ds-2\">Password strength</span>\n <span className=\"text-xs text-ds-2\">{getStrengthText(strength)}</span>\n </div>\n\n {/* Strength Meter */}\n <div className=\"flex gap-1\">\n {Array.from({ length: 4 }, (_, index) => (\n <div\n key={index}\n className={`h-1 w-1/4 rounded-full transition-colors duration-300 ${\n index < strength ? getColor(strength) : \"bg-ds-surface-3\"\n }`}\n />\n ))}\n </div>\n\n <PasswordCriteria password={password} />\n </div>\n );\n}\n"],"mappings":";;;;;AAMA,IAAa,oBAAoB,EAAE,eAAsC;AASvE,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAU;YACZ;GATH;IAAE,OAAO;IAAyB,KAAK,SAAS,UAAU;IAAG;GAC7D;IAAE,OAAO;IAA6B,KAAK,QAAQ,KAAK,SAAS;IAAE;GACnE;IAAE,OAAO;IAA6B,KAAK,QAAQ,KAAK,SAAS;IAAE;GACnE;IAAE,OAAO;IAAqB,KAAK,KAAK,KAAK,SAAS;IAAE;GACxD;IAAE,OAAO;IAA8B,KAAK,eAAe,KAAK,SAAS;IAAE;GAKxE,CAAS,KAAK,SACb,iBAAA,GAAA,kBAAA,MAAC,OAAD;GAAsB,WAAU;aAAhC,CACG,KAAK,MACJ,iBAAA,GAAA,kBAAA,KAAC,cAAA,WAAD;IAAW,WAAU;IAA2B,OAAM;IAAc,CAAA,GAEpE,iBAAA,GAAA,kBAAA,KAAC,cAAA,WAAD;IAAW,WAAU;IAAwB,OAAM;IAAc,CAAA,EAEnE,iBAAA,GAAA,kBAAA,KAAC,QAAD;IAAM,WAAW,KAAK,MAAM,iBAAiB;cAC1C,KAAK;IACD,CAAA,CACH;KATI,KAAK,MAST,CACN;EACE,CAAA;;;;ACrBV,SAAgB,sBAAsB,EACpC,YAC6B;CAE7B,MAAM,eAAe,SAAyB;EAC5C,MAAM,WAAW;GACf,WAAW,KAAK,UAAU;GAC1B,cAAc,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK;GACtD,WAAW,KAAK,KAAK,KAAK;GAC1B,gBAAgB,cAAc,KAAK,KAAK;GACzC;AAGD,SAAO,OAAO,OAAO,SAAS,CAAC,OAAO,QAAQ,CAAC;;CAIjD,MAAM,YAAA,GAAA,MAAA,eAAyB,YAAY,SAAS,EAAE,CAAC,SAAS,CAAC;CAGjE,MAAM,YAAY,aAA6B;AAQ7C,SAAO;GANL;GACA;GACA;GACA;GACA;GAEK,CAAO,aAAa;;CAI7B,MAAM,mBAAmB,aAA6B;AAEpD,SAAO;GADiB;GAAa;GAAQ;GAAQ;GAAQ;GACtD,CAAe,aAAa;;AAGrC,QACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAU;YAAf;GAEE,iBAAA,GAAA,kBAAA,MAAC,OAAD;IAAK,WAAU;cAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;KAAM,WAAU;eAAoB;KAAwB,CAAA,EAC5D,iBAAA,GAAA,kBAAA,KAAC,QAAD;KAAM,WAAU;eAAqB,gBAAgB,SAAS;KAAQ,CAAA,CAClE;;GAGN,iBAAA,GAAA,kBAAA,KAAC,OAAD;IAAK,WAAU;cACZ,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,GAAG,UAC7B,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAEE,WAAW,yDACT,QAAQ,WAAW,SAAS,SAAS,GAAG,qBAE1C,EAJK,MAIL,CACF;IACE,CAAA;GAEN,iBAAA,GAAA,kBAAA,KAAC,kBAAD,EAA4B,UAAY,CAAA;GACpC"}
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-B_GkZjkl.cjs");
2
- const require_utils = require("./utils-B4SmmY4J.cjs");
2
+ const require_utils = require("./utils-LRbEQHYs.cjs");
3
3
  let react = require("react");
4
4
  react = require_chunk.__toESM(react, 1);
5
5
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -166,4 +166,4 @@ Object.defineProperty(exports, "ProgressBar", {
166
166
  }
167
167
  });
168
168
 
169
- //# sourceMappingURL=progress-bar-DS8KZ7eO.cjs.map
169
+ //# sourceMappingURL=progress-bar-CYaBO_lS.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"progress-bar-DS8KZ7eO.cjs","names":[],"sources":["../../src/components/data-display/progress-bar/ProgressBar.tsx","../../src/components/data-display/progress-bar/CircularProgress.tsx"],"sourcesContent":["import React from \"react\";\n\nexport type ProgressBarSize = \"sm\" | \"md\" | \"lg\";\nexport type ProgressBarTone =\n | \"default\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\nexport interface ProgressBarProps {\n value: number;\n max?: number;\n label?: React.ReactNode;\n percentageLabel?: React.ReactNode;\n showPercentage?: boolean;\n size?: ProgressBarSize;\n tone?: ProgressBarTone;\n className?: string;\n trackClassName?: string;\n fillClassName?: string;\n ariaLabel?: string;\n}\n\nconst sizeStyles: Record<\n ProgressBarSize,\n {\n track: string;\n label: string;\n percentage: string;\n }\n> = {\n sm: {\n track: \"h-1.5\",\n label: \"text-xs\",\n percentage: \"text-xs\",\n },\n md: {\n track: \"h-2.5\",\n label: \"text-sm\",\n percentage: \"text-sm\",\n },\n lg: {\n track: \"h-3.5\",\n label: \"text-base\",\n percentage: \"text-base\",\n },\n};\n\nconst toneStyles: Record<\n ProgressBarTone,\n {\n color: string;\n trackBackground: string;\n }\n> = {\n default: {\n color: \"var(--ds-chart-1)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(15, 23, 42, 0.08) 0%, rgba(30, 41, 59, 0.14) 100%)\",\n },\n success: {\n color: \"var(--ds-chart-3)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(20, 83, 45, 0.12) 0%, rgba(34, 197, 94, 0.18) 100%)\",\n },\n warning: {\n color: \"var(--ds-chart-4)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(120, 53, 15, 0.12) 0%, rgba(245, 158, 11, 0.18) 100%)\",\n },\n danger: {\n color: \"var(--ds-chart-5)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(127, 29, 29, 0.12) 0%, rgba(239, 68, 68, 0.18) 100%)\",\n },\n info: {\n color: \"var(--ds-chart-2)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(30, 64, 175, 0.12) 0%, rgba(59, 130, 246, 0.18) 100%)\",\n },\n};\n\nfunction clampValue(value: number, max: number): number {\n if (!Number.isFinite(value)) {\n return 0;\n }\n\n return Math.min(Math.max(value, 0), max);\n}\n\nexport default function ProgressBar({\n value,\n max = 100,\n label,\n percentageLabel,\n showPercentage = true,\n size = \"md\",\n tone = \"default\",\n className = \"\",\n trackClassName = \"\",\n fillClassName = \"\",\n ariaLabel = \"Progress\",\n}: ProgressBarProps) {\n const safeMax = Number.isFinite(max) && max > 0 ? max : 100;\n const clampedValue = clampValue(value, safeMax);\n const percentage = (clampedValue / safeMax) * 100;\n const roundedPercentage = Math.round(percentage);\n const toneStyle = toneStyles[tone];\n const resolvedPercentageLabel = percentageLabel ?? `${roundedPercentage}%`;\n\n return (\n <div className={`w-full space-y-3 ${className}`}>\n {(label || showPercentage) && (\n <div className=\"flex items-center justify-between gap-4\">\n <div\n className={`font-mono font-semibold tracking-[0.08em] text-ds-1 ${sizeStyles[size].label}`}\n >\n {label}\n </div>\n {showPercentage && (\n <div\n className={`font-mono font-medium tracking-[0.08em] text-ds-2 ${sizeStyles[size].percentage}`}\n >\n {resolvedPercentageLabel}\n </div>\n )}\n </div>\n )}\n\n <div\n role=\"progressbar\"\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={Math.round(clampedValue)}\n aria-valuetext={`${roundedPercentage}%`}\n className={`relative overflow-hidden rounded-full border border-ds-border-2/50 bg-ds-surface-2/80 shadow-[inset_0_1px_1px_rgba(255,255,255,0.2)] ${sizeStyles[size].track} ${trackClassName}`}\n style={{ background: toneStyle.trackBackground }}\n >\n <div\n className={`h-full rounded-full transition-[width,filter,box-shadow] duration-500 ease-out ${fillClassName}`}\n style={{\n width: `${percentage}%`,\n background: `linear-gradient(90deg, color-mix(in srgb, ${toneStyle.color} 68%, white 32%) 0%, ${toneStyle.color} 100%)`,\n boxShadow: `inset 0 1px 0 rgba(255,255,255,0.4), 0 0 14px color-mix(in srgb, ${toneStyle.color} 32%, transparent)`,\n filter: percentage > 0 ? \"saturate(1.05) brightness(1.02)\" : \"none\",\n }}\n />\n </div>\n </div>\n );\n}\n","import { mergeClassNames } from \"../../../utils\";\n\nexport type CircularProgressTone =\n | \"default\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\nexport interface CircularProgressProps {\n value: number;\n max?: number;\n size?: number;\n strokeWidth?: number;\n tone?: CircularProgressTone;\n showValue?: boolean;\n valueLabel?: string;\n className?: string;\n trackClassName?: string;\n progressClassName?: string;\n ariaLabel?: string;\n}\n\nconst toneColorMap: Record<CircularProgressTone, string> = {\n default: \"var(--ds-chart-1)\",\n success: \"var(--ds-chart-3)\",\n warning: \"var(--ds-chart-4)\",\n danger: \"var(--ds-chart-5)\",\n info: \"var(--ds-chart-2)\",\n};\n\nfunction clamp(value: number, max: number): number {\n if (!Number.isFinite(value)) return 0;\n return Math.min(Math.max(value, 0), max);\n}\n\nexport default function CircularProgress({\n value,\n max = 100,\n size = 24,\n strokeWidth = 3,\n tone = \"default\",\n showValue = false,\n valueLabel,\n className,\n trackClassName,\n progressClassName,\n ariaLabel = \"Circular progress\",\n}: CircularProgressProps) {\n const safeMax = Number.isFinite(max) && max > 0 ? max : 100;\n const safeValue = clamp(value, safeMax);\n const percentage = (safeValue / safeMax) * 100;\n\n const center = size / 2;\n const radius = center - strokeWidth / 2;\n const circumference = 2 * Math.PI * radius;\n const dashOffset = circumference - (percentage / 100) * circumference;\n const label = valueLabel ?? `${Math.round(percentage)}%`;\n\n return (\n <span\n role=\"progressbar\"\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={Math.round(safeValue)}\n aria-valuetext={label}\n className={mergeClassNames(\n \"relative inline-flex items-center justify-center\",\n className,\n )}\n style={{ width: size, height: size }}\n >\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n className=\"-rotate-90\"\n >\n <circle\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n stroke=\"var(--ds-border-2)\"\n strokeOpacity={0.5}\n strokeWidth={strokeWidth}\n className={trackClassName}\n />\n <circle\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n stroke={toneColorMap[tone]}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n className={mergeClassNames(\n \"transition-[stroke-dashoffset] duration-500 ease-out\",\n progressClassName,\n )}\n />\n </svg>\n\n {showValue ? (\n <span className=\"absolute text-[10px] font-semibold leading-none text-ds-1\">\n {Math.round(percentage)}\n </span>\n ) : null}\n </span>\n );\n}\n\nexport { CircularProgress };\n"],"mappings":"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"}
1
+ {"version":3,"file":"progress-bar-CYaBO_lS.cjs","names":[],"sources":["../../src/components/data-display/progress-bar/ProgressBar.tsx","../../src/components/data-display/progress-bar/CircularProgress.tsx"],"sourcesContent":["import React from \"react\";\n\nexport type ProgressBarSize = \"sm\" | \"md\" | \"lg\";\nexport type ProgressBarTone =\n | \"default\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\nexport interface ProgressBarProps {\n value: number;\n max?: number;\n label?: React.ReactNode;\n percentageLabel?: React.ReactNode;\n showPercentage?: boolean;\n size?: ProgressBarSize;\n tone?: ProgressBarTone;\n className?: string;\n trackClassName?: string;\n fillClassName?: string;\n ariaLabel?: string;\n}\n\nconst sizeStyles: Record<\n ProgressBarSize,\n {\n track: string;\n label: string;\n percentage: string;\n }\n> = {\n sm: {\n track: \"h-1.5\",\n label: \"text-xs\",\n percentage: \"text-xs\",\n },\n md: {\n track: \"h-2.5\",\n label: \"text-sm\",\n percentage: \"text-sm\",\n },\n lg: {\n track: \"h-3.5\",\n label: \"text-base\",\n percentage: \"text-base\",\n },\n};\n\nconst toneStyles: Record<\n ProgressBarTone,\n {\n color: string;\n trackBackground: string;\n }\n> = {\n default: {\n color: \"var(--ds-chart-1)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(15, 23, 42, 0.08) 0%, rgba(30, 41, 59, 0.14) 100%)\",\n },\n success: {\n color: \"var(--ds-chart-3)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(20, 83, 45, 0.12) 0%, rgba(34, 197, 94, 0.18) 100%)\",\n },\n warning: {\n color: \"var(--ds-chart-4)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(120, 53, 15, 0.12) 0%, rgba(245, 158, 11, 0.18) 100%)\",\n },\n danger: {\n color: \"var(--ds-chart-5)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(127, 29, 29, 0.12) 0%, rgba(239, 68, 68, 0.18) 100%)\",\n },\n info: {\n color: \"var(--ds-chart-2)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(30, 64, 175, 0.12) 0%, rgba(59, 130, 246, 0.18) 100%)\",\n },\n};\n\nfunction clampValue(value: number, max: number): number {\n if (!Number.isFinite(value)) {\n return 0;\n }\n\n return Math.min(Math.max(value, 0), max);\n}\n\nexport default function ProgressBar({\n value,\n max = 100,\n label,\n percentageLabel,\n showPercentage = true,\n size = \"md\",\n tone = \"default\",\n className = \"\",\n trackClassName = \"\",\n fillClassName = \"\",\n ariaLabel = \"Progress\",\n}: ProgressBarProps) {\n const safeMax = Number.isFinite(max) && max > 0 ? max : 100;\n const clampedValue = clampValue(value, safeMax);\n const percentage = (clampedValue / safeMax) * 100;\n const roundedPercentage = Math.round(percentage);\n const toneStyle = toneStyles[tone];\n const resolvedPercentageLabel = percentageLabel ?? `${roundedPercentage}%`;\n\n return (\n <div className={`w-full space-y-3 ${className}`}>\n {(label || showPercentage) && (\n <div className=\"flex items-center justify-between gap-4\">\n <div\n className={`font-mono font-semibold tracking-[0.08em] text-ds-1 ${sizeStyles[size].label}`}\n >\n {label}\n </div>\n {showPercentage && (\n <div\n className={`font-mono font-medium tracking-[0.08em] text-ds-2 ${sizeStyles[size].percentage}`}\n >\n {resolvedPercentageLabel}\n </div>\n )}\n </div>\n )}\n\n <div\n role=\"progressbar\"\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={Math.round(clampedValue)}\n aria-valuetext={`${roundedPercentage}%`}\n className={`relative overflow-hidden rounded-full border border-ds-border-2/50 bg-ds-surface-2/80 shadow-[inset_0_1px_1px_rgba(255,255,255,0.2)] ${sizeStyles[size].track} ${trackClassName}`}\n style={{ background: toneStyle.trackBackground }}\n >\n <div\n className={`h-full rounded-full transition-[width,filter,box-shadow] duration-500 ease-out ${fillClassName}`}\n style={{\n width: `${percentage}%`,\n background: `linear-gradient(90deg, color-mix(in srgb, ${toneStyle.color} 68%, white 32%) 0%, ${toneStyle.color} 100%)`,\n boxShadow: `inset 0 1px 0 rgba(255,255,255,0.4), 0 0 14px color-mix(in srgb, ${toneStyle.color} 32%, transparent)`,\n filter: percentage > 0 ? \"saturate(1.05) brightness(1.02)\" : \"none\",\n }}\n />\n </div>\n </div>\n );\n}\n","import { mergeClassNames } from \"../../../utils\";\n\nexport type CircularProgressTone =\n | \"default\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\nexport interface CircularProgressProps {\n value: number;\n max?: number;\n size?: number;\n strokeWidth?: number;\n tone?: CircularProgressTone;\n showValue?: boolean;\n valueLabel?: string;\n className?: string;\n trackClassName?: string;\n progressClassName?: string;\n ariaLabel?: string;\n}\n\nconst toneColorMap: Record<CircularProgressTone, string> = {\n default: \"var(--ds-chart-1)\",\n success: \"var(--ds-chart-3)\",\n warning: \"var(--ds-chart-4)\",\n danger: \"var(--ds-chart-5)\",\n info: \"var(--ds-chart-2)\",\n};\n\nfunction clamp(value: number, max: number): number {\n if (!Number.isFinite(value)) return 0;\n return Math.min(Math.max(value, 0), max);\n}\n\nexport default function CircularProgress({\n value,\n max = 100,\n size = 24,\n strokeWidth = 3,\n tone = \"default\",\n showValue = false,\n valueLabel,\n className,\n trackClassName,\n progressClassName,\n ariaLabel = \"Circular progress\",\n}: CircularProgressProps) {\n const safeMax = Number.isFinite(max) && max > 0 ? max : 100;\n const safeValue = clamp(value, safeMax);\n const percentage = (safeValue / safeMax) * 100;\n\n const center = size / 2;\n const radius = center - strokeWidth / 2;\n const circumference = 2 * Math.PI * radius;\n const dashOffset = circumference - (percentage / 100) * circumference;\n const label = valueLabel ?? `${Math.round(percentage)}%`;\n\n return (\n <span\n role=\"progressbar\"\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={Math.round(safeValue)}\n aria-valuetext={label}\n className={mergeClassNames(\n \"relative inline-flex items-center justify-center\",\n className,\n )}\n style={{ width: size, height: size }}\n >\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n className=\"-rotate-90\"\n >\n <circle\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n stroke=\"var(--ds-border-2)\"\n strokeOpacity={0.5}\n strokeWidth={strokeWidth}\n className={trackClassName}\n />\n <circle\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n stroke={toneColorMap[tone]}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n className={mergeClassNames(\n \"transition-[stroke-dashoffset] duration-500 ease-out\",\n progressClassName,\n )}\n />\n </svg>\n\n {showValue ? (\n <span className=\"absolute text-[10px] font-semibold leading-none text-ds-1\">\n {Math.round(percentage)}\n </span>\n ) : null}\n </span>\n );\n}\n\nexport { CircularProgress };\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { n as mergeClassNames } from "./utils-ati1KkDb.mjs";
1
+ import { n as mergeClassNames } from "./utils-7S0u48mU.mjs";
2
2
  import "react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  //#region src/components/data-display/progress-bar/ProgressBar.tsx
@@ -153,4 +153,4 @@ function CircularProgress({ value, max = 100, size = 24, strokeWidth = 3, tone =
153
153
  //#endregion
154
154
  export { ProgressBar as n, CircularProgress as t };
155
155
 
156
- //# sourceMappingURL=progress-bar-C9O0tuZf.mjs.map
156
+ //# sourceMappingURL=progress-bar-DQ5ZKk2Y.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"progress-bar-C9O0tuZf.mjs","names":[],"sources":["../../src/components/data-display/progress-bar/ProgressBar.tsx","../../src/components/data-display/progress-bar/CircularProgress.tsx"],"sourcesContent":["import React from \"react\";\n\nexport type ProgressBarSize = \"sm\" | \"md\" | \"lg\";\nexport type ProgressBarTone =\n | \"default\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\nexport interface ProgressBarProps {\n value: number;\n max?: number;\n label?: React.ReactNode;\n percentageLabel?: React.ReactNode;\n showPercentage?: boolean;\n size?: ProgressBarSize;\n tone?: ProgressBarTone;\n className?: string;\n trackClassName?: string;\n fillClassName?: string;\n ariaLabel?: string;\n}\n\nconst sizeStyles: Record<\n ProgressBarSize,\n {\n track: string;\n label: string;\n percentage: string;\n }\n> = {\n sm: {\n track: \"h-1.5\",\n label: \"text-xs\",\n percentage: \"text-xs\",\n },\n md: {\n track: \"h-2.5\",\n label: \"text-sm\",\n percentage: \"text-sm\",\n },\n lg: {\n track: \"h-3.5\",\n label: \"text-base\",\n percentage: \"text-base\",\n },\n};\n\nconst toneStyles: Record<\n ProgressBarTone,\n {\n color: string;\n trackBackground: string;\n }\n> = {\n default: {\n color: \"var(--ds-chart-1)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(15, 23, 42, 0.08) 0%, rgba(30, 41, 59, 0.14) 100%)\",\n },\n success: {\n color: \"var(--ds-chart-3)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(20, 83, 45, 0.12) 0%, rgba(34, 197, 94, 0.18) 100%)\",\n },\n warning: {\n color: \"var(--ds-chart-4)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(120, 53, 15, 0.12) 0%, rgba(245, 158, 11, 0.18) 100%)\",\n },\n danger: {\n color: \"var(--ds-chart-5)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(127, 29, 29, 0.12) 0%, rgba(239, 68, 68, 0.18) 100%)\",\n },\n info: {\n color: \"var(--ds-chart-2)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(30, 64, 175, 0.12) 0%, rgba(59, 130, 246, 0.18) 100%)\",\n },\n};\n\nfunction clampValue(value: number, max: number): number {\n if (!Number.isFinite(value)) {\n return 0;\n }\n\n return Math.min(Math.max(value, 0), max);\n}\n\nexport default function ProgressBar({\n value,\n max = 100,\n label,\n percentageLabel,\n showPercentage = true,\n size = \"md\",\n tone = \"default\",\n className = \"\",\n trackClassName = \"\",\n fillClassName = \"\",\n ariaLabel = \"Progress\",\n}: ProgressBarProps) {\n const safeMax = Number.isFinite(max) && max > 0 ? max : 100;\n const clampedValue = clampValue(value, safeMax);\n const percentage = (clampedValue / safeMax) * 100;\n const roundedPercentage = Math.round(percentage);\n const toneStyle = toneStyles[tone];\n const resolvedPercentageLabel = percentageLabel ?? `${roundedPercentage}%`;\n\n return (\n <div className={`w-full space-y-3 ${className}`}>\n {(label || showPercentage) && (\n <div className=\"flex items-center justify-between gap-4\">\n <div\n className={`font-mono font-semibold tracking-[0.08em] text-ds-1 ${sizeStyles[size].label}`}\n >\n {label}\n </div>\n {showPercentage && (\n <div\n className={`font-mono font-medium tracking-[0.08em] text-ds-2 ${sizeStyles[size].percentage}`}\n >\n {resolvedPercentageLabel}\n </div>\n )}\n </div>\n )}\n\n <div\n role=\"progressbar\"\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={Math.round(clampedValue)}\n aria-valuetext={`${roundedPercentage}%`}\n className={`relative overflow-hidden rounded-full border border-ds-border-2/50 bg-ds-surface-2/80 shadow-[inset_0_1px_1px_rgba(255,255,255,0.2)] ${sizeStyles[size].track} ${trackClassName}`}\n style={{ background: toneStyle.trackBackground }}\n >\n <div\n className={`h-full rounded-full transition-[width,filter,box-shadow] duration-500 ease-out ${fillClassName}`}\n style={{\n width: `${percentage}%`,\n background: `linear-gradient(90deg, color-mix(in srgb, ${toneStyle.color} 68%, white 32%) 0%, ${toneStyle.color} 100%)`,\n boxShadow: `inset 0 1px 0 rgba(255,255,255,0.4), 0 0 14px color-mix(in srgb, ${toneStyle.color} 32%, transparent)`,\n filter: percentage > 0 ? \"saturate(1.05) brightness(1.02)\" : \"none\",\n }}\n />\n </div>\n </div>\n );\n}\n","import { mergeClassNames } from \"../../../utils\";\n\nexport type CircularProgressTone =\n | \"default\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\nexport interface CircularProgressProps {\n value: number;\n max?: number;\n size?: number;\n strokeWidth?: number;\n tone?: CircularProgressTone;\n showValue?: boolean;\n valueLabel?: string;\n className?: string;\n trackClassName?: string;\n progressClassName?: string;\n ariaLabel?: string;\n}\n\nconst toneColorMap: Record<CircularProgressTone, string> = {\n default: \"var(--ds-chart-1)\",\n success: \"var(--ds-chart-3)\",\n warning: \"var(--ds-chart-4)\",\n danger: \"var(--ds-chart-5)\",\n info: \"var(--ds-chart-2)\",\n};\n\nfunction clamp(value: number, max: number): number {\n if (!Number.isFinite(value)) return 0;\n return Math.min(Math.max(value, 0), max);\n}\n\nexport default function CircularProgress({\n value,\n max = 100,\n size = 24,\n strokeWidth = 3,\n tone = \"default\",\n showValue = false,\n valueLabel,\n className,\n trackClassName,\n progressClassName,\n ariaLabel = \"Circular progress\",\n}: CircularProgressProps) {\n const safeMax = Number.isFinite(max) && max > 0 ? max : 100;\n const safeValue = clamp(value, safeMax);\n const percentage = (safeValue / safeMax) * 100;\n\n const center = size / 2;\n const radius = center - strokeWidth / 2;\n const circumference = 2 * Math.PI * radius;\n const dashOffset = circumference - (percentage / 100) * circumference;\n const label = valueLabel ?? `${Math.round(percentage)}%`;\n\n return (\n <span\n role=\"progressbar\"\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={Math.round(safeValue)}\n aria-valuetext={label}\n className={mergeClassNames(\n \"relative inline-flex items-center justify-center\",\n className,\n )}\n style={{ width: size, height: size }}\n >\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n className=\"-rotate-90\"\n >\n <circle\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n stroke=\"var(--ds-border-2)\"\n strokeOpacity={0.5}\n strokeWidth={strokeWidth}\n className={trackClassName}\n />\n <circle\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n stroke={toneColorMap[tone]}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n className={mergeClassNames(\n \"transition-[stroke-dashoffset] duration-500 ease-out\",\n progressClassName,\n )}\n />\n </svg>\n\n {showValue ? (\n <span className=\"absolute text-[10px] font-semibold leading-none text-ds-1\">\n {Math.round(percentage)}\n </span>\n ) : null}\n </span>\n );\n}\n\nexport { CircularProgress };\n"],"mappings":"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"}
1
+ {"version":3,"file":"progress-bar-DQ5ZKk2Y.mjs","names":[],"sources":["../../src/components/data-display/progress-bar/ProgressBar.tsx","../../src/components/data-display/progress-bar/CircularProgress.tsx"],"sourcesContent":["import React from \"react\";\n\nexport type ProgressBarSize = \"sm\" | \"md\" | \"lg\";\nexport type ProgressBarTone =\n | \"default\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\nexport interface ProgressBarProps {\n value: number;\n max?: number;\n label?: React.ReactNode;\n percentageLabel?: React.ReactNode;\n showPercentage?: boolean;\n size?: ProgressBarSize;\n tone?: ProgressBarTone;\n className?: string;\n trackClassName?: string;\n fillClassName?: string;\n ariaLabel?: string;\n}\n\nconst sizeStyles: Record<\n ProgressBarSize,\n {\n track: string;\n label: string;\n percentage: string;\n }\n> = {\n sm: {\n track: \"h-1.5\",\n label: \"text-xs\",\n percentage: \"text-xs\",\n },\n md: {\n track: \"h-2.5\",\n label: \"text-sm\",\n percentage: \"text-sm\",\n },\n lg: {\n track: \"h-3.5\",\n label: \"text-base\",\n percentage: \"text-base\",\n },\n};\n\nconst toneStyles: Record<\n ProgressBarTone,\n {\n color: string;\n trackBackground: string;\n }\n> = {\n default: {\n color: \"var(--ds-chart-1)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(15, 23, 42, 0.08) 0%, rgba(30, 41, 59, 0.14) 100%)\",\n },\n success: {\n color: \"var(--ds-chart-3)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(20, 83, 45, 0.12) 0%, rgba(34, 197, 94, 0.18) 100%)\",\n },\n warning: {\n color: \"var(--ds-chart-4)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(120, 53, 15, 0.12) 0%, rgba(245, 158, 11, 0.18) 100%)\",\n },\n danger: {\n color: \"var(--ds-chart-5)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(127, 29, 29, 0.12) 0%, rgba(239, 68, 68, 0.18) 100%)\",\n },\n info: {\n color: \"var(--ds-chart-2)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(30, 64, 175, 0.12) 0%, rgba(59, 130, 246, 0.18) 100%)\",\n },\n};\n\nfunction clampValue(value: number, max: number): number {\n if (!Number.isFinite(value)) {\n return 0;\n }\n\n return Math.min(Math.max(value, 0), max);\n}\n\nexport default function ProgressBar({\n value,\n max = 100,\n label,\n percentageLabel,\n showPercentage = true,\n size = \"md\",\n tone = \"default\",\n className = \"\",\n trackClassName = \"\",\n fillClassName = \"\",\n ariaLabel = \"Progress\",\n}: ProgressBarProps) {\n const safeMax = Number.isFinite(max) && max > 0 ? max : 100;\n const clampedValue = clampValue(value, safeMax);\n const percentage = (clampedValue / safeMax) * 100;\n const roundedPercentage = Math.round(percentage);\n const toneStyle = toneStyles[tone];\n const resolvedPercentageLabel = percentageLabel ?? `${roundedPercentage}%`;\n\n return (\n <div className={`w-full space-y-3 ${className}`}>\n {(label || showPercentage) && (\n <div className=\"flex items-center justify-between gap-4\">\n <div\n className={`font-mono font-semibold tracking-[0.08em] text-ds-1 ${sizeStyles[size].label}`}\n >\n {label}\n </div>\n {showPercentage && (\n <div\n className={`font-mono font-medium tracking-[0.08em] text-ds-2 ${sizeStyles[size].percentage}`}\n >\n {resolvedPercentageLabel}\n </div>\n )}\n </div>\n )}\n\n <div\n role=\"progressbar\"\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={Math.round(clampedValue)}\n aria-valuetext={`${roundedPercentage}%`}\n className={`relative overflow-hidden rounded-full border border-ds-border-2/50 bg-ds-surface-2/80 shadow-[inset_0_1px_1px_rgba(255,255,255,0.2)] ${sizeStyles[size].track} ${trackClassName}`}\n style={{ background: toneStyle.trackBackground }}\n >\n <div\n className={`h-full rounded-full transition-[width,filter,box-shadow] duration-500 ease-out ${fillClassName}`}\n style={{\n width: `${percentage}%`,\n background: `linear-gradient(90deg, color-mix(in srgb, ${toneStyle.color} 68%, white 32%) 0%, ${toneStyle.color} 100%)`,\n boxShadow: `inset 0 1px 0 rgba(255,255,255,0.4), 0 0 14px color-mix(in srgb, ${toneStyle.color} 32%, transparent)`,\n filter: percentage > 0 ? \"saturate(1.05) brightness(1.02)\" : \"none\",\n }}\n />\n </div>\n </div>\n );\n}\n","import { mergeClassNames } from \"../../../utils\";\n\nexport type CircularProgressTone =\n | \"default\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\nexport interface CircularProgressProps {\n value: number;\n max?: number;\n size?: number;\n strokeWidth?: number;\n tone?: CircularProgressTone;\n showValue?: boolean;\n valueLabel?: string;\n className?: string;\n trackClassName?: string;\n progressClassName?: string;\n ariaLabel?: string;\n}\n\nconst toneColorMap: Record<CircularProgressTone, string> = {\n default: \"var(--ds-chart-1)\",\n success: \"var(--ds-chart-3)\",\n warning: \"var(--ds-chart-4)\",\n danger: \"var(--ds-chart-5)\",\n info: \"var(--ds-chart-2)\",\n};\n\nfunction clamp(value: number, max: number): number {\n if (!Number.isFinite(value)) return 0;\n return Math.min(Math.max(value, 0), max);\n}\n\nexport default function CircularProgress({\n value,\n max = 100,\n size = 24,\n strokeWidth = 3,\n tone = \"default\",\n showValue = false,\n valueLabel,\n className,\n trackClassName,\n progressClassName,\n ariaLabel = \"Circular progress\",\n}: CircularProgressProps) {\n const safeMax = Number.isFinite(max) && max > 0 ? max : 100;\n const safeValue = clamp(value, safeMax);\n const percentage = (safeValue / safeMax) * 100;\n\n const center = size / 2;\n const radius = center - strokeWidth / 2;\n const circumference = 2 * Math.PI * radius;\n const dashOffset = circumference - (percentage / 100) * circumference;\n const label = valueLabel ?? `${Math.round(percentage)}%`;\n\n return (\n <span\n role=\"progressbar\"\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={Math.round(safeValue)}\n aria-valuetext={label}\n className={mergeClassNames(\n \"relative inline-flex items-center justify-center\",\n className,\n )}\n style={{ width: size, height: size }}\n >\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n className=\"-rotate-90\"\n >\n <circle\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n stroke=\"var(--ds-border-2)\"\n strokeOpacity={0.5}\n strokeWidth={strokeWidth}\n className={trackClassName}\n />\n <circle\n cx={center}\n cy={center}\n r={radius}\n fill=\"none\"\n stroke={toneColorMap[tone]}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n className={mergeClassNames(\n \"transition-[stroke-dashoffset] duration-500 ease-out\",\n progressClassName,\n )}\n />\n </svg>\n\n {showValue ? (\n <span className=\"absolute text-[10px] font-semibold leading-none text-ds-1\">\n {Math.round(percentage)}\n </span>\n ) : null}\n </span>\n );\n}\n\nexport { CircularProgress };\n"],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { n as mergeClassNames } from "./utils-7S0u48mU.mjs";
2
+ import { forwardRef, useId } from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/components/forms/radio/Radio.tsx
5
+ var sanitizeId = (value) => value.replace(/[^a-zA-Z0-9_-]/g, "-");
6
+ var colorMap = {
7
+ red: "var(--ds-color-danger)",
8
+ blue: "var(--ds-color-info)",
9
+ green: "var(--ds-color-success)",
10
+ yellow: "var(--ds-color-warning)",
11
+ teal: "var(--ds-brand-teal)",
12
+ primary: "var(--ds-color-accent)"
13
+ };
14
+ var Radio = forwardRef(({ className = "", label, error, id, color = "primary", bgClassName = "", ...props }, ref) => {
15
+ const generatedId = useId();
16
+ const radioId = id || `radio-${sanitizeId(generatedId)}`;
17
+ return /* @__PURE__ */ jsxs("div", {
18
+ className: "flex flex-col",
19
+ style: { "--radio-accent": colorMap[color] },
20
+ children: [/* @__PURE__ */ jsxs("div", {
21
+ className: "flex items-center gap-2",
22
+ children: [/* @__PURE__ */ jsxs("div", {
23
+ className: "relative h-5 w-5 shrink-0",
24
+ children: [
25
+ /* @__PURE__ */ jsx("input", {
26
+ ref,
27
+ type: "radio",
28
+ id: radioId,
29
+ className: mergeClassNames("peer absolute inset-0 h-full w-full cursor-pointer opacity-0 disabled:cursor-not-allowed", className),
30
+ ...props
31
+ }),
32
+ /* @__PURE__ */ jsx("span", { className: mergeClassNames("pointer-events-none absolute inset-0 rounded-full border-2 transition-colors duration-150", "border-ds-border-field bg-ds-surface-1", "peer-checked:border-(--radio-accent) peer-checked:bg-(--radio-accent)", "peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2", "peer-focus-visible:ring-[var(--radio-accent)] peer-focus-visible:ring-offset-ds-surface-1", "peer-disabled:opacity-50", bgClassName) }),
33
+ /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-1/2 top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 scale-0 rounded-full bg-white transition-transform duration-150 peer-checked:scale-100 peer-disabled:opacity-50" })
34
+ ]
35
+ }), label && /* @__PURE__ */ jsx("label", {
36
+ htmlFor: radioId,
37
+ className: "cursor-pointer text-sm font-medium leading-none text-ds-1",
38
+ children: label
39
+ })]
40
+ }), error && /* @__PURE__ */ jsx("p", {
41
+ className: "ms-7 mt-1 text-sm font-medium text-destructive",
42
+ children: error
43
+ })]
44
+ });
45
+ });
46
+ Radio.displayName = "Radio";
47
+ //#endregion
48
+ export { Radio as t };
49
+
50
+ //# sourceMappingURL=radio-CuiM_gDv.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio-CuiM_gDv.mjs","names":[],"sources":["../../src/components/forms/radio/Radio.tsx"],"sourcesContent":["import type { RadioProps, RadioColor } from \"./types\";\nimport { forwardRef, useId } from \"react\";\n\nimport { mergeClassNames } from \"../../../utils\";\n\nconst sanitizeId = (value: string) => value.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n\nconst colorMap: Record<RadioColor, string> = {\n red: \"var(--ds-color-danger)\",\n blue: \"var(--ds-color-info)\",\n green: \"var(--ds-color-success)\",\n yellow: \"var(--ds-color-warning)\",\n teal: \"var(--ds-brand-teal)\",\n primary: \"var(--ds-color-accent)\",\n};\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n (\n {\n className = \"\",\n label,\n error,\n id,\n color = \"primary\",\n bgClassName = \"\",\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const radioId = id || `radio-${sanitizeId(generatedId)}`;\n\n return (\n <div\n className=\"flex flex-col\"\n style={{ \"--radio-accent\": colorMap[color] } as React.CSSProperties}\n >\n <div className=\"flex items-center gap-2\">\n {/* Custom radio visual — keeps native input for full a11y */}\n <div className=\"relative h-5 w-5 shrink-0\">\n <input\n ref={ref}\n type=\"radio\"\n id={radioId}\n className={mergeClassNames(\n \"peer absolute inset-0 h-full w-full cursor-pointer opacity-0 disabled:cursor-not-allowed\",\n className,\n )}\n {...props}\n />\n {/* Outer ring: surface-1 bg + border when idle, accent fill when checked */}\n <span\n className={mergeClassNames(\n \"pointer-events-none absolute inset-0 rounded-full border-2 transition-colors duration-150\",\n \"border-ds-border-field bg-ds-surface-1\",\n \"peer-checked:border-(--radio-accent) peer-checked:bg-(--radio-accent)\",\n \"peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2\",\n \"peer-focus-visible:ring-[var(--radio-accent)] peer-focus-visible:ring-offset-ds-surface-1\",\n \"peer-disabled:opacity-50\",\n bgClassName,\n )}\n />\n {/* Inner dot: always white, scales in/out with checked state */}\n <span className=\"pointer-events-none absolute left-1/2 top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 scale-0 rounded-full bg-white transition-transform duration-150 peer-checked:scale-100 peer-disabled:opacity-50\" />\n </div>\n\n {label && (\n <label\n htmlFor={radioId}\n className=\"cursor-pointer text-sm font-medium leading-none text-ds-1\"\n >\n {label}\n </label>\n )}\n </div>\n\n {error && (\n <p className=\"ms-7 mt-1 text-sm font-medium text-destructive\">\n {error}\n </p>\n )}\n </div>\n );\n },\n);\n\nRadio.displayName = \"Radio\";\n"],"mappings":";;;;AAKA,IAAM,cAAc,UAAkB,MAAM,QAAQ,mBAAmB,IAAI;AAE3E,IAAM,WAAuC;CAC3C,KAAK;CACL,MAAM;CACN,OAAO;CACP,QAAQ;CACR,MAAM;CACN,SAAS;CACV;AAED,IAAa,QAAQ,YAEjB,EACE,YAAY,IACZ,OACA,OACA,IACA,QAAQ,WACR,cAAc,IACd,GAAG,SAEL,QACG;CACH,MAAM,cAAc,OAAO;CAC3B,MAAM,UAAU,MAAM,SAAS,WAAW,YAAY;AAEtD,QACE,qBAAC,OAAD;EACE,WAAU;EACV,OAAO,EAAE,kBAAkB,SAAS,QAAQ;YAF9C,CAIE,qBAAC,OAAD;GAAK,WAAU;aAAf,CAEE,qBAAC,OAAD;IAAK,WAAU;cAAf;KACE,oBAAC,SAAD;MACO;MACL,MAAK;MACL,IAAI;MACJ,WAAW,gBACT,4FACA,UACD;MACD,GAAI;MACJ,CAAA;KAEF,oBAAC,QAAD,EACE,WAAW,gBACT,6FACA,0CACA,yEACA,8DACA,6FACA,4BACA,YACD,EACD,CAAA;KAEF,oBAAC,QAAD,EAAM,WAAU,2MAA4M,CAAA;KACxN;OAEL,SACC,oBAAC,SAAD;IACE,SAAS;IACT,WAAU;cAET;IACK,CAAA,CAEN;MAEL,SACC,oBAAC,KAAD;GAAG,WAAU;aACV;GACC,CAAA,CAEF;;EAGX;AAED,MAAM,cAAc"}
@@ -0,0 +1,56 @@
1
+ require("./chunk-B_GkZjkl.cjs");
2
+ const require_utils = require("./utils-LRbEQHYs.cjs");
3
+ let react = require("react");
4
+ let react_jsx_runtime = require("react/jsx-runtime");
5
+ //#region src/components/forms/radio/Radio.tsx
6
+ var sanitizeId = (value) => value.replace(/[^a-zA-Z0-9_-]/g, "-");
7
+ var colorMap = {
8
+ red: "var(--ds-color-danger)",
9
+ blue: "var(--ds-color-info)",
10
+ green: "var(--ds-color-success)",
11
+ yellow: "var(--ds-color-warning)",
12
+ teal: "var(--ds-brand-teal)",
13
+ primary: "var(--ds-color-accent)"
14
+ };
15
+ var Radio = (0, react.forwardRef)(({ className = "", label, error, id, color = "primary", bgClassName = "", ...props }, ref) => {
16
+ const generatedId = (0, react.useId)();
17
+ const radioId = id || `radio-${sanitizeId(generatedId)}`;
18
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
19
+ className: "flex flex-col",
20
+ style: { "--radio-accent": colorMap[color] },
21
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
22
+ className: "flex items-center gap-2",
23
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
24
+ className: "relative h-5 w-5 shrink-0",
25
+ children: [
26
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
27
+ ref,
28
+ type: "radio",
29
+ id: radioId,
30
+ className: require_utils.mergeClassNames("peer absolute inset-0 h-full w-full cursor-pointer opacity-0 disabled:cursor-not-allowed", className),
31
+ ...props
32
+ }),
33
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: require_utils.mergeClassNames("pointer-events-none absolute inset-0 rounded-full border-2 transition-colors duration-150", "border-ds-border-field bg-ds-surface-1", "peer-checked:border-(--radio-accent) peer-checked:bg-(--radio-accent)", "peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2", "peer-focus-visible:ring-[var(--radio-accent)] peer-focus-visible:ring-offset-ds-surface-1", "peer-disabled:opacity-50", bgClassName) }),
34
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "pointer-events-none absolute left-1/2 top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 scale-0 rounded-full bg-white transition-transform duration-150 peer-checked:scale-100 peer-disabled:opacity-50" })
35
+ ]
36
+ }), label && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
37
+ htmlFor: radioId,
38
+ className: "cursor-pointer text-sm font-medium leading-none text-ds-1",
39
+ children: label
40
+ })]
41
+ }), error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
42
+ className: "ms-7 mt-1 text-sm font-medium text-destructive",
43
+ children: error
44
+ })]
45
+ });
46
+ });
47
+ Radio.displayName = "Radio";
48
+ //#endregion
49
+ Object.defineProperty(exports, "Radio", {
50
+ enumerable: true,
51
+ get: function() {
52
+ return Radio;
53
+ }
54
+ });
55
+
56
+ //# sourceMappingURL=radio-zx9xEW_C.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio-zx9xEW_C.cjs","names":[],"sources":["../../src/components/forms/radio/Radio.tsx"],"sourcesContent":["import type { RadioProps, RadioColor } from \"./types\";\nimport { forwardRef, useId } from \"react\";\n\nimport { mergeClassNames } from \"../../../utils\";\n\nconst sanitizeId = (value: string) => value.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n\nconst colorMap: Record<RadioColor, string> = {\n red: \"var(--ds-color-danger)\",\n blue: \"var(--ds-color-info)\",\n green: \"var(--ds-color-success)\",\n yellow: \"var(--ds-color-warning)\",\n teal: \"var(--ds-brand-teal)\",\n primary: \"var(--ds-color-accent)\",\n};\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n (\n {\n className = \"\",\n label,\n error,\n id,\n color = \"primary\",\n bgClassName = \"\",\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const radioId = id || `radio-${sanitizeId(generatedId)}`;\n\n return (\n <div\n className=\"flex flex-col\"\n style={{ \"--radio-accent\": colorMap[color] } as React.CSSProperties}\n >\n <div className=\"flex items-center gap-2\">\n {/* Custom radio visual — keeps native input for full a11y */}\n <div className=\"relative h-5 w-5 shrink-0\">\n <input\n ref={ref}\n type=\"radio\"\n id={radioId}\n className={mergeClassNames(\n \"peer absolute inset-0 h-full w-full cursor-pointer opacity-0 disabled:cursor-not-allowed\",\n className,\n )}\n {...props}\n />\n {/* Outer ring: surface-1 bg + border when idle, accent fill when checked */}\n <span\n className={mergeClassNames(\n \"pointer-events-none absolute inset-0 rounded-full border-2 transition-colors duration-150\",\n \"border-ds-border-field bg-ds-surface-1\",\n \"peer-checked:border-(--radio-accent) peer-checked:bg-(--radio-accent)\",\n \"peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2\",\n \"peer-focus-visible:ring-[var(--radio-accent)] peer-focus-visible:ring-offset-ds-surface-1\",\n \"peer-disabled:opacity-50\",\n bgClassName,\n )}\n />\n {/* Inner dot: always white, scales in/out with checked state */}\n <span className=\"pointer-events-none absolute left-1/2 top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 scale-0 rounded-full bg-white transition-transform duration-150 peer-checked:scale-100 peer-disabled:opacity-50\" />\n </div>\n\n {label && (\n <label\n htmlFor={radioId}\n className=\"cursor-pointer text-sm font-medium leading-none text-ds-1\"\n >\n {label}\n </label>\n )}\n </div>\n\n {error && (\n <p className=\"ms-7 mt-1 text-sm font-medium text-destructive\">\n {error}\n </p>\n )}\n </div>\n );\n },\n);\n\nRadio.displayName = \"Radio\";\n"],"mappings":";;;;;AAKA,IAAM,cAAc,UAAkB,MAAM,QAAQ,mBAAmB,IAAI;AAE3E,IAAM,WAAuC;CAC3C,KAAK;CACL,MAAM;CACN,OAAO;CACP,QAAQ;CACR,MAAM;CACN,SAAS;CACV;AAED,IAAa,SAAA,GAAA,MAAA,aAET,EACE,YAAY,IACZ,OACA,OACA,IACA,QAAQ,WACR,cAAc,IACd,GAAG,SAEL,QACG;CACH,MAAM,eAAA,GAAA,MAAA,QAAqB;CAC3B,MAAM,UAAU,MAAM,SAAS,WAAW,YAAY;AAEtD,QACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EACE,WAAU;EACV,OAAO,EAAE,kBAAkB,SAAS,QAAQ;YAF9C,CAIE,iBAAA,GAAA,kBAAA,MAAC,OAAD;GAAK,WAAU;aAAf,CAEE,iBAAA,GAAA,kBAAA,MAAC,OAAD;IAAK,WAAU;cAAf;KACE,iBAAA,GAAA,kBAAA,KAAC,SAAD;MACO;MACL,MAAK;MACL,IAAI;MACJ,WAAW,cAAA,gBACT,4FACA,UACD;MACD,GAAI;MACJ,CAAA;KAEF,iBAAA,GAAA,kBAAA,KAAC,QAAD,EACE,WAAW,cAAA,gBACT,6FACA,0CACA,yEACA,8DACA,6FACA,4BACA,YACD,EACD,CAAA;KAEF,iBAAA,GAAA,kBAAA,KAAC,QAAD,EAAM,WAAU,2MAA4M,CAAA;KACxN;OAEL,SACC,iBAAA,GAAA,kBAAA,KAAC,SAAD;IACE,SAAS;IACT,WAAU;cAET;IACK,CAAA,CAEN;MAEL,SACC,iBAAA,GAAA,kBAAA,KAAC,KAAD;GAAG,WAAU;aACV;GACC,CAAA,CAEF;;EAGX;AAED,MAAM,cAAc"}
@@ -1,7 +1,7 @@
1
- import { n as mergeClassNames } from "./utils-ati1KkDb.mjs";
2
- import { t as TruncatedText } from "./truncated-text-DTgks5yS.mjs";
1
+ import { n as mergeClassNames } from "./utils-7S0u48mU.mjs";
2
+ import { t as TruncatedText } from "./truncated-text-C9t9o9IA.mjs";
3
3
  import { J as CheckIcon, N as ChevronDownIcon } from "./icons-bx3nrxNv.mjs";
4
- import { t as DropdownMenu } from "./DropdownMenu-C17Zqu_E.mjs";
4
+ import { t as DropdownMenu } from "./DropdownMenu-BtTOri-A.mjs";
5
5
  import { forwardRef, useEffect, useRef, useState } from "react";
6
6
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
7
7
  import { motion, useMotionTemplate, useMotionValue } from "framer-motion";
@@ -90,7 +90,7 @@ var Select = forwardRef(function SelectComponent({ className = "", containerClas
90
90
  }
91
91
  setOpen(nextOpen);
92
92
  },
93
- panelClassName: mergeClassNames(" left-0 top-[40px] z-20 mt-1 flex flex-col overflow-auto rounded-lg border border-ds-border-2 bg-ds-surface-1 shadow-3 backdrop-blur-xl transition", isCompact ? "max-h-56" : "max-h-60", dropdownClassName),
93
+ panelClassName: mergeClassNames("start-0 top-[40px] z-20 mt-1 flex w-full flex-col overflow-auto rounded-lg border border-ds-border-2 bg-ds-surface-1 shadow-3 backdrop-blur-xl transition", isCompact ? "max-h-56" : "max-h-60", dropdownClassName),
94
94
  animationClassName: "origin-top-left",
95
95
  trigger: /* @__PURE__ */ jsx(motion.div, {
96
96
  style: { backgroundImage: disabled ? "none" : useMotionTemplate`
@@ -121,7 +121,7 @@ var Select = forwardRef(function SelectComponent({ className = "", containerClas
121
121
  className: "flex-1 text-ds-2",
122
122
  children: placeholder
123
123
  }), /* @__PURE__ */ jsx("span", {
124
- className: mergeClassNames("ml-2 shrink-0 text-ds-2 transition-transform duration-300", open ? "rotate-180" : "rotate-0"),
124
+ className: mergeClassNames("ms-2 shrink-0 text-ds-2 transition-transform duration-300", open ? "rotate-180" : "rotate-0"),
125
125
  children: /* @__PURE__ */ jsx(ChevronDownIcon, {
126
126
  width: 24,
127
127
  height: 24,
@@ -168,4 +168,4 @@ Select.displayName = "Select";
168
168
  //#endregion
169
169
  export { Select as t };
170
170
 
171
- //# sourceMappingURL=select-D0GOBB-b.mjs.map
171
+ //# sourceMappingURL=select-CUaSNR09.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-CUaSNR09.mjs","names":[],"sources":["../../src/components/forms/select/Select.tsx"],"sourcesContent":["import {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type ChangeEvent,\n type ForwardedRef,\n type KeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n} from \"react\";\nimport { motion, useMotionTemplate, useMotionValue } from \"framer-motion\";\n\nimport { CheckIcon, ChevronDownIcon } from \"../../icons\";\nimport { DropdownMenu } from \"../../overlays/dropdown-menu\";\nimport { TruncatedText } from \"../../typography/truncated-text\";\nimport { mergeClassNames } from \"../../../utils\";\nimport type { SelectProps } from \"./types\";\n\nexport const Select = forwardRef(function SelectComponent(\n {\n className = \"\",\n containerClassName = \"\",\n triggerClassName = \"\",\n dropdownClassName = \"\",\n optionClassName = \"\",\n label,\n error,\n helperText,\n options,\n value,\n onChange,\n placeholder = \"Select...\",\n noOptionsText = \"No options\",\n disabled,\n bgClassName = \"bg-ds-surface-1\",\n size = \"default\",\n selectionIndicator = \"check\",\n ...props\n }: SelectProps,\n ref: ForwardedRef<HTMLSelectElement>,\n) {\n const [open, setOpen] = useState(false);\n const [visible, setVisible] = useState(false);\n const hiddenSelectRef = useRef<HTMLSelectElement>(null);\n const selectedOptionRef = useRef<HTMLDivElement>(null);\n const mouseX = useMotionValue(0);\n const mouseY = useMotionValue(0);\n const radius = 100;\n const isCompact = size === \"compact\";\n const selectedOption = options.find((option) => option.value === value);\n\n useEffect(() => {\n if (typeof ref === \"function\") {\n ref(hiddenSelectRef.current);\n return;\n }\n\n if (ref) {\n ref.current = hiddenSelectRef.current;\n }\n }, [ref]);\n\n useEffect(() => {\n if (!open || !selectedOptionRef.current) {\n return;\n }\n\n const frameId = window.requestAnimationFrame(() => {\n selectedOptionRef.current?.scrollIntoView({ block: \"nearest\" });\n });\n\n return () => {\n window.cancelAnimationFrame(frameId);\n };\n }, [open, value]);\n\n const handleMouseMove = (event: ReactMouseEvent<HTMLDivElement>) => {\n const { left, top } = event.currentTarget.getBoundingClientRect();\n mouseX.set(event.clientX - left);\n mouseY.set(event.clientY - top);\n };\n\n const handleSelect = (optionValue: string) => {\n if (onChange && hiddenSelectRef.current) {\n const syntheticEvent = {\n target: { value: optionValue, name: props.name },\n currentTarget: { value: optionValue, name: props.name },\n } as ChangeEvent<HTMLSelectElement>;\n\n onChange(syntheticEvent);\n }\n\n setOpen(false);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) {\n return;\n }\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n setOpen((current) => !current);\n }\n\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n return (\n <div\n className={mergeClassNames(\n \"w-full\",\n isCompact ? \"min-w-0\" : \"min-w-48\",\n containerClassName,\n )}\n >\n {label ? (\n <label className=\"mb-2 block text-sm leading-none font-medium text-ds-1 peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {label}\n </label>\n ) : null}\n\n <select\n ref={hiddenSelectRef}\n className=\"sr-only\"\n value={value}\n onChange={onChange}\n disabled={disabled}\n {...props}\n >\n <option value=\"\">{placeholder}</option>\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n\n <DropdownMenu\n className={mergeClassNames(\"w-full\", className)}\n open={open}\n onOpenChange={(nextOpen) => {\n if (disabled) {\n setOpen(false);\n return;\n }\n\n setOpen(nextOpen);\n }}\n panelClassName={mergeClassNames(\n \"start-0 top-[40px] z-20 mt-1 flex w-full flex-col overflow-auto rounded-lg border border-ds-border-2 bg-ds-surface-1 shadow-3 backdrop-blur-xl transition\",\n isCompact ? \"max-h-56\" : \"max-h-60\",\n dropdownClassName,\n )}\n animationClassName=\"origin-top-left\"\n trigger={\n <motion.div\n style={{\n backgroundImage: disabled\n ? \"none\"\n : useMotionTemplate`\n radial-gradient(\n ${visible ? `${radius}px` : \"0px\"} circle at ${mouseX}px ${mouseY}px,\n var(--ds-color-accent),\n transparent 90%\n )\n `,\n }}\n onMouseMove={!disabled ? handleMouseMove : undefined}\n onMouseEnter={!disabled ? () => setVisible(true) : undefined}\n onMouseLeave={!disabled ? () => setVisible(false) : undefined}\n className={mergeClassNames(\n \"group/select w-full rounded-lg p-[2px] transition duration-300 hover:border-ds-border-accent\",\n disabled\n ? \"border-none bg-ds-surface-1\"\n : error\n ? \"border-ds-state-error-border\"\n : \"border-ds-border-2\",\n )}\n >\n <div\n className={mergeClassNames(\n \"flex w-full cursor-pointer items-center justify-between rounded-md border border-ds-border-field transition duration-400 ease-in-out\",\n isCompact\n ? \"h-9 px-2.5 py-2 text-sm\"\n : \"h-10 px-3 py-2 text-sm\",\n bgClassName,\n disabled ? \"cursor-not-allowed opacity-50\" : \"text-ds-1\",\n error\n ? \"border-ds-state-error-border text-ds-state-error-text focus-visible:ring-ds-state-error-border\"\n : \"\",\n triggerClassName,\n )}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n >\n {selectedOption ? (\n <TruncatedText\n as=\"span\"\n showTitleOnHover\n className=\"flex-1 text-ds-1\"\n >\n {selectedOption.label}\n </TruncatedText>\n ) : (\n <TruncatedText as=\"span\" className=\"flex-1 text-ds-2\">\n {placeholder}\n </TruncatedText>\n )}\n\n <span\n className={mergeClassNames(\n \"ms-2 shrink-0 text-ds-2 transition-transform duration-300\",\n open ? \"rotate-180\" : \"rotate-0\",\n )}\n >\n <ChevronDownIcon\n width={24}\n height={24}\n color=\"currentColor\"\n className={isCompact ? \"h-4 w-4\" : \"h-5 w-5\"}\n />\n </span>\n </div>\n </motion.div>\n }\n >\n {!disabled ? (\n <>\n {options.length === 0 ? (\n <div className=\"px-3 py-2 text-ds-2\">{noOptionsText}</div>\n ) : null}\n\n {options.map((option) => (\n <div\n key={option.value}\n ref={option.value === value ? selectedOptionRef : null}\n className={mergeClassNames(\n \"mx-1 my-1 flex cursor-pointer items-center rounded-md text-ds-1 transition\",\n isCompact\n ? \"gap-1.5 px-2.5 py-2 text-sm\"\n : \"gap-2 px-3 py-2 text-sm\",\n option.value === value\n ? \"bg-ds-accent-subtle font-semibold text-ds-1\"\n : \"\",\n \"hover:bg-ds-accent hover:text-ds-on-accent\",\n optionClassName,\n )}\n onClick={() => handleSelect(option.value)}\n >\n {selectionIndicator === \"check\" ? (\n <span\n className={mergeClassNames(\n \"flex items-center justify-center\",\n isCompact ? \"w-4\" : \"w-5\",\n )}\n >\n {option.value === value ? (\n <CheckIcon\n className=\"text-ds-1\"\n width={isCompact ? 16 : 18}\n height={isCompact ? 16 : 18}\n />\n ) : null}\n </span>\n ) : null}\n <TruncatedText as=\"span\" showTitleOnHover className=\"flex-1\">\n {option.label}\n </TruncatedText>\n </div>\n ))}\n </>\n ) : null}\n </DropdownMenu>\n\n {error ? (\n <p className=\"mt-1 text-sm font-medium text-ds-state-error-text\">\n {error}\n </p>\n ) : null}\n {helperText && !error ? (\n <p className=\"mt-1 text-sm text-ds-2\">{helperText}</p>\n ) : null}\n </div>\n );\n});\n\nSelect.displayName = \"Select\";\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  require("./chunk-B_GkZjkl.cjs");
2
- const require_utils = require("./utils-B4SmmY4J.cjs");
3
- const require_truncated_text = require("./truncated-text-istgJRUq.cjs");
2
+ const require_utils = require("./utils-LRbEQHYs.cjs");
3
+ const require_truncated_text = require("./truncated-text-BIXqNfOL.cjs");
4
4
  const require_icons = require("./icons-CRanVZB1.cjs");
5
- const require_DropdownMenu = require("./DropdownMenu-DOvo5pV_.cjs");
5
+ const require_DropdownMenu = require("./DropdownMenu-BDrNYO-D.cjs");
6
6
  let react = require("react");
7
7
  let react_jsx_runtime = require("react/jsx-runtime");
8
8
  let framer_motion = require("framer-motion");
@@ -91,7 +91,7 @@ var Select = (0, react.forwardRef)(function SelectComponent({ className = "", co
91
91
  }
92
92
  setOpen(nextOpen);
93
93
  },
94
- panelClassName: require_utils.mergeClassNames(" left-0 top-[40px] z-20 mt-1 flex flex-col overflow-auto rounded-lg border border-ds-border-2 bg-ds-surface-1 shadow-3 backdrop-blur-xl transition", isCompact ? "max-h-56" : "max-h-60", dropdownClassName),
94
+ panelClassName: require_utils.mergeClassNames("start-0 top-[40px] z-20 mt-1 flex w-full flex-col overflow-auto rounded-lg border border-ds-border-2 bg-ds-surface-1 shadow-3 backdrop-blur-xl transition", isCompact ? "max-h-56" : "max-h-60", dropdownClassName),
95
95
  animationClassName: "origin-top-left",
96
96
  trigger: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(framer_motion.motion.div, {
97
97
  style: { backgroundImage: disabled ? "none" : framer_motion.useMotionTemplate`
@@ -122,7 +122,7 @@ var Select = (0, react.forwardRef)(function SelectComponent({ className = "", co
122
122
  className: "flex-1 text-ds-2",
123
123
  children: placeholder
124
124
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
125
- className: require_utils.mergeClassNames("ml-2 shrink-0 text-ds-2 transition-transform duration-300", open ? "rotate-180" : "rotate-0"),
125
+ className: require_utils.mergeClassNames("ms-2 shrink-0 text-ds-2 transition-transform duration-300", open ? "rotate-180" : "rotate-0"),
126
126
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons.ChevronDownIcon, {
127
127
  width: 24,
128
128
  height: 24,
@@ -174,4 +174,4 @@ Object.defineProperty(exports, "Select", {
174
174
  }
175
175
  });
176
176
 
177
- //# sourceMappingURL=select-CORFYTvs.cjs.map
177
+ //# sourceMappingURL=select-bZ9WqLOc.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-bZ9WqLOc.cjs","names":[],"sources":["../../src/components/forms/select/Select.tsx"],"sourcesContent":["import {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type ChangeEvent,\n type ForwardedRef,\n type KeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n} from \"react\";\nimport { motion, useMotionTemplate, useMotionValue } from \"framer-motion\";\n\nimport { CheckIcon, ChevronDownIcon } from \"../../icons\";\nimport { DropdownMenu } from \"../../overlays/dropdown-menu\";\nimport { TruncatedText } from \"../../typography/truncated-text\";\nimport { mergeClassNames } from \"../../../utils\";\nimport type { SelectProps } from \"./types\";\n\nexport const Select = forwardRef(function SelectComponent(\n {\n className = \"\",\n containerClassName = \"\",\n triggerClassName = \"\",\n dropdownClassName = \"\",\n optionClassName = \"\",\n label,\n error,\n helperText,\n options,\n value,\n onChange,\n placeholder = \"Select...\",\n noOptionsText = \"No options\",\n disabled,\n bgClassName = \"bg-ds-surface-1\",\n size = \"default\",\n selectionIndicator = \"check\",\n ...props\n }: SelectProps,\n ref: ForwardedRef<HTMLSelectElement>,\n) {\n const [open, setOpen] = useState(false);\n const [visible, setVisible] = useState(false);\n const hiddenSelectRef = useRef<HTMLSelectElement>(null);\n const selectedOptionRef = useRef<HTMLDivElement>(null);\n const mouseX = useMotionValue(0);\n const mouseY = useMotionValue(0);\n const radius = 100;\n const isCompact = size === \"compact\";\n const selectedOption = options.find((option) => option.value === value);\n\n useEffect(() => {\n if (typeof ref === \"function\") {\n ref(hiddenSelectRef.current);\n return;\n }\n\n if (ref) {\n ref.current = hiddenSelectRef.current;\n }\n }, [ref]);\n\n useEffect(() => {\n if (!open || !selectedOptionRef.current) {\n return;\n }\n\n const frameId = window.requestAnimationFrame(() => {\n selectedOptionRef.current?.scrollIntoView({ block: \"nearest\" });\n });\n\n return () => {\n window.cancelAnimationFrame(frameId);\n };\n }, [open, value]);\n\n const handleMouseMove = (event: ReactMouseEvent<HTMLDivElement>) => {\n const { left, top } = event.currentTarget.getBoundingClientRect();\n mouseX.set(event.clientX - left);\n mouseY.set(event.clientY - top);\n };\n\n const handleSelect = (optionValue: string) => {\n if (onChange && hiddenSelectRef.current) {\n const syntheticEvent = {\n target: { value: optionValue, name: props.name },\n currentTarget: { value: optionValue, name: props.name },\n } as ChangeEvent<HTMLSelectElement>;\n\n onChange(syntheticEvent);\n }\n\n setOpen(false);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) {\n return;\n }\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n setOpen((current) => !current);\n }\n\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n };\n\n return (\n <div\n className={mergeClassNames(\n \"w-full\",\n isCompact ? \"min-w-0\" : \"min-w-48\",\n containerClassName,\n )}\n >\n {label ? (\n <label className=\"mb-2 block text-sm leading-none font-medium text-ds-1 peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {label}\n </label>\n ) : null}\n\n <select\n ref={hiddenSelectRef}\n className=\"sr-only\"\n value={value}\n onChange={onChange}\n disabled={disabled}\n {...props}\n >\n <option value=\"\">{placeholder}</option>\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n\n <DropdownMenu\n className={mergeClassNames(\"w-full\", className)}\n open={open}\n onOpenChange={(nextOpen) => {\n if (disabled) {\n setOpen(false);\n return;\n }\n\n setOpen(nextOpen);\n }}\n panelClassName={mergeClassNames(\n \"start-0 top-[40px] z-20 mt-1 flex w-full flex-col overflow-auto rounded-lg border border-ds-border-2 bg-ds-surface-1 shadow-3 backdrop-blur-xl transition\",\n isCompact ? \"max-h-56\" : \"max-h-60\",\n dropdownClassName,\n )}\n animationClassName=\"origin-top-left\"\n trigger={\n <motion.div\n style={{\n backgroundImage: disabled\n ? \"none\"\n : useMotionTemplate`\n radial-gradient(\n ${visible ? `${radius}px` : \"0px\"} circle at ${mouseX}px ${mouseY}px,\n var(--ds-color-accent),\n transparent 90%\n )\n `,\n }}\n onMouseMove={!disabled ? handleMouseMove : undefined}\n onMouseEnter={!disabled ? () => setVisible(true) : undefined}\n onMouseLeave={!disabled ? () => setVisible(false) : undefined}\n className={mergeClassNames(\n \"group/select w-full rounded-lg p-[2px] transition duration-300 hover:border-ds-border-accent\",\n disabled\n ? \"border-none bg-ds-surface-1\"\n : error\n ? \"border-ds-state-error-border\"\n : \"border-ds-border-2\",\n )}\n >\n <div\n className={mergeClassNames(\n \"flex w-full cursor-pointer items-center justify-between rounded-md border border-ds-border-field transition duration-400 ease-in-out\",\n isCompact\n ? \"h-9 px-2.5 py-2 text-sm\"\n : \"h-10 px-3 py-2 text-sm\",\n bgClassName,\n disabled ? \"cursor-not-allowed opacity-50\" : \"text-ds-1\",\n error\n ? \"border-ds-state-error-border text-ds-state-error-text focus-visible:ring-ds-state-error-border\"\n : \"\",\n triggerClassName,\n )}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n >\n {selectedOption ? (\n <TruncatedText\n as=\"span\"\n showTitleOnHover\n className=\"flex-1 text-ds-1\"\n >\n {selectedOption.label}\n </TruncatedText>\n ) : (\n <TruncatedText as=\"span\" className=\"flex-1 text-ds-2\">\n {placeholder}\n </TruncatedText>\n )}\n\n <span\n className={mergeClassNames(\n \"ms-2 shrink-0 text-ds-2 transition-transform duration-300\",\n open ? \"rotate-180\" : \"rotate-0\",\n )}\n >\n <ChevronDownIcon\n width={24}\n height={24}\n color=\"currentColor\"\n className={isCompact ? \"h-4 w-4\" : \"h-5 w-5\"}\n />\n </span>\n </div>\n </motion.div>\n }\n >\n {!disabled ? (\n <>\n {options.length === 0 ? (\n <div className=\"px-3 py-2 text-ds-2\">{noOptionsText}</div>\n ) : null}\n\n {options.map((option) => (\n <div\n key={option.value}\n ref={option.value === value ? selectedOptionRef : null}\n className={mergeClassNames(\n \"mx-1 my-1 flex cursor-pointer items-center rounded-md text-ds-1 transition\",\n isCompact\n ? \"gap-1.5 px-2.5 py-2 text-sm\"\n : \"gap-2 px-3 py-2 text-sm\",\n option.value === value\n ? \"bg-ds-accent-subtle font-semibold text-ds-1\"\n : \"\",\n \"hover:bg-ds-accent hover:text-ds-on-accent\",\n optionClassName,\n )}\n onClick={() => handleSelect(option.value)}\n >\n {selectionIndicator === \"check\" ? (\n <span\n className={mergeClassNames(\n \"flex items-center justify-center\",\n isCompact ? \"w-4\" : \"w-5\",\n )}\n >\n {option.value === value ? (\n <CheckIcon\n className=\"text-ds-1\"\n width={isCompact ? 16 : 18}\n height={isCompact ? 16 : 18}\n />\n ) : null}\n </span>\n ) : null}\n <TruncatedText as=\"span\" showTitleOnHover className=\"flex-1\">\n {option.label}\n </TruncatedText>\n </div>\n ))}\n </>\n ) : null}\n </DropdownMenu>\n\n {error ? (\n <p className=\"mt-1 text-sm font-medium text-ds-state-error-text\">\n {error}\n </p>\n ) : null}\n {helperText && !error ? (\n <p className=\"mt-1 text-sm text-ds-2\">{helperText}</p>\n ) : null}\n </div>\n );\n});\n\nSelect.displayName = \"Select\";\n"],"mappings":"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"}