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
@@ -1 +1 @@
1
- {"version":3,"file":"stepper-BMKxjCdm.mjs","names":[],"sources":["../../src/components/navigation/stepper/Stepper.tsx","../../src/components/navigation/stepper/Stepper1.tsx","../../src/components/navigation/stepper/Stepper2.tsx"],"sourcesContent":["import { Fragment } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\n\nimport { CheckIcon, CloseIcon } from \"../../icons\";\nimport { mergeClassNames } from \"../../../utils\";\nimport type {\n StepperProps,\n StepIndicatorProps,\n StepStatus,\n StepperLabelPosition,\n StepperSize,\n StepperVariant,\n} from \"./types\";\n\n// Size configurations for indicators and icons\nconst sizeConfig: Record<\n StepperSize,\n {\n indicator: string;\n indicatorPx: number;\n icon: string;\n text: string;\n connectorThickness: string;\n connectorThicknessPx: number;\n }\n> = {\n sm: {\n indicator: \"w-8 h-8\",\n indicatorPx: 32,\n icon: \"w-4 h-4\",\n text: \"text-xs\",\n connectorThickness: \"2px\",\n connectorThicknessPx: 2,\n },\n md: {\n indicator: \"w-10 h-10\",\n indicatorPx: 40,\n icon: \"w-5 h-5\",\n text: \"text-sm\",\n connectorThickness: \"2px\",\n connectorThicknessPx: 2,\n },\n lg: {\n indicator: \"w-12 h-12\",\n indicatorPx: 48,\n icon: \"w-6 h-6\",\n text: \"text-base\",\n connectorThickness: \"4px\",\n connectorThicknessPx: 4,\n },\n};\n\n// Variant styles for the indicator\nconst getVariantStyles = (variant: StepperVariant, status: StepStatus) => {\n const baseStyles = {\n default: {\n completed: \"bg-ds-accent text-ds-on-accent shadow-md shadow-ds-accent/25\",\n current:\n \"bg-ds-accent text-ds-on-accent ring-4 ring-ds-focus/40 shadow-lg shadow-ds-accent/30\",\n upcoming: \"bg-ds-surface-3 text-ds-2\",\n error:\n \"bg-ds-state-error-surface text-ds-state-error-text ring-4 ring-ds-state-error-border/35\",\n },\n glass: {\n completed:\n \"bg-ds-accent/85 text-ds-on-accent backdrop-blur-xl border border-ds-border-accent/30 shadow-lg shadow-ds-accent/20\",\n current:\n \"bg-ds-accent/90 text-ds-on-accent backdrop-blur-xl border-2 border-ds-border-accent ring-4 ring-ds-focus/30 shadow-xl shadow-ds-accent/30\",\n upcoming:\n \"bg-ds-surface-1 text-ds-2 backdrop-blur-xl border border-ds-border-2\",\n error:\n \"bg-ds-state-error-surface text-ds-state-error-text backdrop-blur-xl border border-ds-state-error-border ring-4 ring-ds-state-error-border/25\",\n },\n minimal: {\n completed: \"bg-ds-accent-subtle text-ds-1\",\n current: \"bg-ds-accent text-ds-on-accent shadow-sm\",\n upcoming: \"bg-transparent text-ds-2 border-2 border-ds-border-2\",\n error: \"bg-ds-state-error-surface text-ds-state-error-text\",\n },\n outlined: {\n completed: \"bg-transparent text-ds-1 border-2 border-ds-border-accent\",\n current:\n \"bg-ds-accent text-ds-on-accent border-2 border-ds-border-accent shadow-lg\",\n upcoming: \"bg-transparent text-ds-2 border-2 border-ds-border-2\",\n error:\n \"bg-transparent text-ds-state-error-text border-2 border-ds-state-error-border\",\n },\n };\n\n return baseStyles[variant][status];\n};\n\nconst getConnectorTrackClassName = (variant: StepperVariant) =>\n variant === \"glass\"\n ? \"bg-ds-surface-2/70 backdrop-blur-sm\"\n : \"bg-ds-surface-3\";\n\nconst getResolvedLabelPosition = (\n orientation: StepperProps[\"orientation\"],\n labelPosition: StepperLabelPosition,\n) => (orientation === \"vertical\" ? \"right\" : labelPosition);\n\n// Step Indicator Component\nconst StepIndicator = ({\n step,\n index,\n status,\n size,\n variant,\n showNumbers,\n animated,\n colors,\n}: StepIndicatorProps) => {\n const config = sizeConfig[size];\n const variantStyles = getVariantStyles(variant, status);\n\n // Custom color overrides\n const customColorStyle = colors?.[status]\n ? { backgroundColor: colors[status], borderColor: colors[status] }\n : undefined;\n\n const renderContent = () => {\n if (step.icon) {\n return <span className={config.icon}>{step.icon}</span>;\n }\n\n if (status === \"completed\") {\n return <CheckIcon className={config.icon} aria-hidden=\"true\" />;\n }\n\n if (status === \"error\") {\n return <CloseIcon className={config.icon} aria-hidden=\"true\" />;\n }\n\n if (showNumbers) {\n return <span className=\"font-semibold\">{index + 1}</span>;\n }\n\n return (\n <span\n className={mergeClassNames(\n \"rounded-full bg-current\",\n size === \"sm\" ? \"w-2 h-2\" : \"w-3 h-3\",\n )}\n />\n );\n };\n\n return (\n <motion.div\n className={mergeClassNames(\n \"rounded-full flex items-center justify-center transition-all duration-300\",\n config.indicator,\n variantStyles,\n )}\n style={customColorStyle}\n initial={animated ? { scale: 0.8, opacity: 0 } : undefined}\n animate={animated ? { scale: 1, opacity: 1 } : undefined}\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n transition={{ type: \"spring\", stiffness: 400, damping: 17 }}\n >\n <AnimatePresence mode=\"wait\">\n <motion.span\n key={status}\n initial={animated ? { scale: 0, rotate: -180 } : undefined}\n animate={animated ? { scale: 1, rotate: 0 } : undefined}\n exit={animated ? { scale: 0, rotate: 180 } : undefined}\n transition={{ duration: 0.2 }}\n >\n {renderContent()}\n </motion.span>\n </AnimatePresence>\n </motion.div>\n );\n};\n\n// Main Stepper Component\nexport const Stepper = ({\n steps,\n currentStep,\n onStepClick,\n orientation = \"horizontal\",\n size = \"md\",\n variant = \"glass\",\n labelPosition = \"bottom\",\n direction = \"ltr\",\n optionalLabel = \"Optional\",\n showNumbers = true,\n clickable = true,\n showConnector = true,\n className,\n connectorClassName,\n stepClassName,\n showErrors = false,\n errorSteps = [],\n completedSteps,\n animated = true,\n colors,\n}: StepperProps) => {\n const isRtl = direction === \"rtl\";\n const isVertical = orientation === \"vertical\";\n const resolvedLabelPosition = getResolvedLabelPosition(\n orientation,\n labelPosition,\n );\n const isHorizontalInline =\n orientation === \"horizontal\" && resolvedLabelPosition === \"right\";\n const config = sizeConfig[size];\n const indicatorPaddingPx =\n variant === \"glass\" || variant === \"outlined\" || variant === \"minimal\"\n ? 4\n : 2;\n const indicatorShellSizePx = config.indicatorPx + indicatorPaddingPx * 2;\n const connectorInsetPx = indicatorShellSizePx / 2;\n const connectorCenterOffsetPx =\n connectorInsetPx - config.connectorThicknessPx / 2;\n\n const getStepStatus = (index: number): StepStatus => {\n if (showErrors && errorSteps.includes(index)) return \"error\";\n if (completedSteps) {\n if (completedSteps.includes(index)) return \"completed\";\n if (index === currentStep) return \"current\";\n return \"upcoming\";\n }\n if (index < currentStep) return \"completed\";\n if (index === currentStep) return \"current\";\n return \"upcoming\";\n };\n\n const handleStepClick = (index: number) => {\n if (!clickable || !onStepClick) return;\n const step = steps[index];\n if (step.disabled) return;\n\n // Allow clicking on completed or current steps\n const status = getStepStatus(index);\n if (status === \"completed\" || status === \"current\") {\n onStepClick(index);\n }\n };\n\n return (\n <div\n className={mergeClassNames(\n \"w-full relative\",\n isVertical\n ? \"flex flex-col\"\n : isHorizontalInline\n ? mergeClassNames(\n \"flex items-center\",\n isRtl && \"flex-row-reverse\",\n )\n : mergeClassNames(\n \"flex items-start justify-between\",\n isRtl && \"flex-row-reverse\",\n ),\n className,\n )}\n dir={direction}\n >\n {/* Global Background Continuous Connector */}\n {showConnector &&\n isVertical &&\n (() => {\n return (\n <div\n className={mergeClassNames(\n \"absolute rounded-full\",\n getConnectorTrackClassName(variant),\n connectorClassName,\n )}\n style={{\n ...(isVertical\n ? {\n top: `${connectorInsetPx}px`,\n bottom: `${connectorInsetPx}px`,\n left: `${connectorCenterOffsetPx}px`,\n width: config.connectorThickness,\n }\n : {\n left: `${connectorInsetPx}px`,\n right: `${connectorInsetPx}px`,\n top: `${connectorCenterOffsetPx}px`,\n height: config.connectorThickness,\n }),\n }}\n >\n {/* Animated fill connector */}\n {animated ? (\n <motion.div\n className=\"absolute top-0 left-0 bg-ds-accent rounded-full\"\n initial={{ [isVertical ? \"height\" : \"width\"]: 0 }}\n animate={{\n [isVertical ? \"height\" : \"width\"]:\n `${steps.length > 1 ? (Math.min(currentStep, steps.length - 1) / (steps.length - 1)) * 100 : 0}%`,\n }}\n transition={{ duration: 0.4, ease: \"easeOut\" }}\n style={{\n ...(isVertical ? { width: \"100%\" } : { height: \"100%\" }),\n backgroundColor: colors?.connector || colors?.completed,\n }}\n />\n ) : (\n <div\n className=\"absolute top-0 left-0 bg-ds-accent rounded-full\"\n style={{\n ...(isVertical\n ? {\n width: \"100%\",\n height: `${steps.length > 1 ? (Math.min(currentStep, steps.length - 1) / (steps.length - 1)) * 100 : 0}%`,\n }\n : {\n height: \"100%\",\n width: `${steps.length > 1 ? (Math.min(currentStep, steps.length - 1) / (steps.length - 1)) * 100 : 0}%`,\n }),\n backgroundColor: colors?.connector || colors?.completed,\n }}\n />\n )}\n </div>\n );\n })()}\n\n {steps.map((step, index) => {\n const status = getStepStatus(index);\n const isLast = index === steps.length - 1;\n const isClickable = clickable && !step.disabled;\n const isConnectorCompleted = getStepStatus(index) === \"completed\";\n const textBlock = (\n <motion.div\n className={mergeClassNames(\n resolvedLabelPosition === \"right\"\n ? mergeClassNames(\n \"min-w-0\",\n isRtl ? \"text-right\" : \"text-left\",\n )\n : \"w-full px-2 text-center\",\n isVertical && \"flex-1 pb-6\",\n isVertical && isLast && \"pb-0\",\n )}\n style={isVertical ? { marginTop: \"-4px\" } : undefined}\n initial={animated ? { opacity: 0, y: 10 } : undefined}\n animate={animated ? { opacity: 1, y: 0 } : undefined}\n transition={{ delay: index * 0.1 }}\n >\n <p\n className={mergeClassNames(\n \"font-medium transition-colors duration-200\",\n config.text,\n status === \"current\"\n ? \"text-ds-1\"\n : status === \"completed\"\n ? \"text-ds-1\"\n : status === \"error\"\n ? \"text-ds-state-error-text\"\n : \"text-ds-2\",\n )}\n >\n {step.title}\n {step.optional && (\n <span\n className={mergeClassNames(\n \"font-normal text-ds-3\",\n isRtl ? \"mr-1\" : \"ml-1\",\n )}\n >\n ({optionalLabel})\n </span>\n )}\n </p>\n {step.description && (\n <p\n className={mergeClassNames(\n \"mt-0.5 text-xs text-ds-2\",\n resolvedLabelPosition === \"right\" &&\n (isRtl ? \"text-right\" : \"text-left\"),\n )}\n >\n {step.description}\n </p>\n )}\n </motion.div>\n );\n\n return (\n <Fragment key={step.id}>\n <div\n className={mergeClassNames(\n \"relative z-10 min-w-0\",\n isVertical\n ? \"flex gap-4 pb-8\"\n : isHorizontalInline\n ? \"flex items-center gap-3\"\n : \"flex flex-1 flex-col items-center text-center\",\n !isLast && isVertical && \"mb-2\",\n isVertical && isLast && \"pb-0\",\n stepClassName,\n )}\n style={\n !isVertical && !isHorizontalInline\n ? { flexBasis: 0, flexGrow: 1 }\n : undefined\n }\n >\n {!isVertical && index > 0 ? (\n <div\n className={mergeClassNames(\n \"pointer-events-none absolute z-0 rounded-full\",\n getConnectorTrackClassName(variant),\n connectorClassName,\n )}\n style={{\n top: `${connectorCenterOffsetPx}px`,\n left: isRtl ? \"50%\" : 0,\n right: isRtl ? 0 : \"50%\",\n height: config.connectorThickness,\n }}\n aria-hidden=\"true\"\n >\n <div\n className={mergeClassNames(\n \"absolute inset-y-0 rounded-full bg-ds-accent\",\n isRtl ? \"left-0\" : \"right-0\",\n )}\n style={{\n left: 0,\n right: 0,\n backgroundColor: colors?.connector || colors?.completed,\n opacity:\n status === \"completed\" || status === \"current\" ? 1 : 0,\n }}\n />\n </div>\n ) : null}\n\n {!isVertical && !isHorizontalInline && !isLast ? (\n <div\n className={mergeClassNames(\n \"pointer-events-none absolute z-0 rounded-full\",\n getConnectorTrackClassName(variant),\n connectorClassName,\n )}\n style={{\n top: `${connectorCenterOffsetPx}px`,\n left: isRtl ? 0 : \"50%\",\n right: isRtl ? \"50%\" : 0,\n height: config.connectorThickness,\n }}\n aria-hidden=\"true\"\n >\n {animated ? (\n <motion.div\n className={mergeClassNames(\n \"absolute inset-y-0 rounded-full bg-ds-accent\",\n isRtl ? \"right-0\" : \"left-0\",\n )}\n initial={{ width: 0 }}\n animate={{\n width:\n status === \"completed\" || status === \"current\"\n ? \"100%\"\n : \"0%\",\n }}\n transition={{ duration: 0.35, ease: \"easeOut\" }}\n style={{\n backgroundColor: colors?.connector || colors?.completed,\n }}\n />\n ) : (\n <div\n className={mergeClassNames(\n \"absolute inset-y-0 rounded-full bg-ds-accent\",\n isRtl ? \"right-0\" : \"left-0\",\n )}\n style={{\n width:\n status === \"completed\" || status === \"current\"\n ? \"100%\"\n : \"0%\",\n backgroundColor: colors?.connector || colors?.completed,\n }}\n />\n )}\n </div>\n ) : null}\n\n <button\n type=\"button\"\n onClick={() => handleStepClick(index)}\n disabled={!isClickable}\n className={mergeClassNames(\n \"relative z-10 shrink-0 rounded-full bg-ds-surface-1\",\n isClickable ? \"cursor-pointer\" : \"cursor-default\",\n resolvedLabelPosition === \"right\"\n ? \"flex items-center justify-center\"\n : \"flex items-center justify-center\",\n )}\n style={{\n padding: `${indicatorPaddingPx}px`,\n }}\n aria-current={status === \"current\" ? \"step\" : undefined}\n >\n <StepIndicator\n step={step}\n index={index}\n status={status}\n size={size}\n variant={variant}\n showNumbers={showNumbers}\n animated={animated}\n colors={colors}\n />\n </button>\n\n {textBlock}\n\n {isVertical && step.content && status === \"current\" && (\n <motion.div\n initial={{ opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: \"auto\" }}\n exit={{ opacity: 0, height: 0 }}\n className=\"w-full pb-4 pl-14\"\n >\n {step.content}\n </motion.div>\n )}\n </div>\n\n {isHorizontalInline && showConnector && !isLast ? (\n <div\n className={mergeClassNames(\n \"relative mx-4 min-w-8 flex-1 shrink-0 overflow-hidden rounded-full\",\n getConnectorTrackClassName(variant),\n connectorClassName,\n )}\n style={{ height: config.connectorThickness }}\n aria-hidden=\"true\"\n >\n {animated ? (\n <motion.div\n className={mergeClassNames(\n \"absolute inset-y-0 rounded-full bg-ds-accent\",\n isRtl ? \"right-0\" : \"left-0\",\n )}\n initial={{ width: 0 }}\n animate={{\n width: isConnectorCompleted ? \"100%\" : \"0%\",\n }}\n transition={{ duration: 0.35, ease: \"easeOut\" }}\n style={{\n backgroundColor: colors?.connector || colors?.completed,\n }}\n />\n ) : (\n <div\n className={mergeClassNames(\n \"absolute inset-y-0 rounded-full bg-ds-accent\",\n isRtl ? \"right-0\" : \"left-0\",\n )}\n style={{\n width: isConnectorCompleted ? \"100%\" : \"0%\",\n backgroundColor: colors?.connector || colors?.completed,\n }}\n />\n )}\n </div>\n ) : null}\n </Fragment>\n );\n })}\n </div>\n );\n};\n\nStepper.displayName = \"Stepper\";\n\nexport default Stepper;\n","import { useSyncExternalStore } from \"react\";\n\nimport { Button } from \"../../forms/button\";\nimport { AlertTriangleIcon, CheckIcon } from \"../../icons\";\nimport { TruncatedText } from \"../../typography/truncated-text\";\nimport { mergeClassNames } from \"../../../utils\";\nimport type { StepperStepsProps, StepperStepsState } from \"./types\";\n\nconst DEFAULT_BREAKPOINT = 1080;\n\nfunction subscribeToMediaQuery(\n query: string,\n onStoreChange: () => void,\n): () => void {\n if (typeof window === \"undefined\") {\n return () => undefined;\n }\n\n const mediaQuery = window.matchMedia(query);\n mediaQuery.addEventListener(\"change\", onStoreChange);\n\n return () => mediaQuery.removeEventListener(\"change\", onStoreChange);\n}\n\nfunction getMediaQuerySnapshot(query: string): boolean {\n if (typeof window === \"undefined\") {\n return false;\n }\n\n return window.matchMedia(query).matches;\n}\n\nfunction getStepColors(\n state: StepperStepsState,\n isActive: boolean,\n): {\n buttonClassName: string;\n connectorClassName: string;\n badgeClassName: string;\n} {\n if (isActive) {\n return {\n buttonClassName:\n \"border-ds-border-accent bg-ds-accent/12 text-ds-1 shadow-sm shadow-ds-accent/10\",\n connectorClassName: \"bg-ds-accent\",\n badgeClassName: \"border-ds-border-accent bg-ds-accent text-ds-on-accent\",\n };\n }\n\n if (state === \"valid\") {\n return {\n buttonClassName:\n \"border-ds-state-success-border bg-ds-state-success-surface text-ds-state-success-text shadow-sm\",\n connectorClassName: \"bg-ds-state-success\",\n badgeClassName:\n \"border-ds-state-success-border bg-ds-state-success text-ds-on-accent\",\n };\n }\n\n if (state === \"invalid\") {\n return {\n buttonClassName:\n \"border-ds-state-error-border bg-ds-state-error-surface text-ds-state-error-text\",\n connectorClassName: \"bg-ds-state-danger\",\n badgeClassName:\n \"border-ds-state-error-border bg-ds-state-danger text-ds-on-accent\",\n };\n }\n\n return {\n buttonClassName:\n \"border-ds-border-2 bg-ds-surface-1 text-ds-2 hover:border-ds-border-1 hover:bg-ds-canvas\",\n connectorClassName: \"bg-ds-border-3/70\",\n badgeClassName: \"border-ds-border-2 bg-ds-canvas text-ds-2\",\n };\n}\n\nfunction renderStepContent(\n label: string,\n icon: StepperStepsProps[\"steps\"][number][\"icon\"],\n state: StepperStepsState,\n stepNumber: number,\n badgeClassName: string,\n) {\n if (state === \"valid\") {\n return (\n <span className=\"flex min-w-0 items-center gap-2\">\n <CheckIcon className=\"h-5 w-5\" aria-hidden=\"true\" />\n <TruncatedText as=\"span\" showTitleOnHover className=\"flex-1\">\n {label}\n </TruncatedText>\n </span>\n );\n }\n\n if (state === \"invalid\") {\n return (\n <span className=\"flex min-w-0 items-center gap-2\">\n <AlertTriangleIcon className=\"h-5 w-5\" aria-hidden=\"true\" />\n <TruncatedText as=\"span\" showTitleOnHover className=\"flex-1\">\n {label}\n </TruncatedText>\n </span>\n );\n }\n\n if (icon) {\n return (\n <span className=\"flex min-w-0 items-center gap-2\">\n <span className=\"shrink-0\">{icon}</span>\n <TruncatedText as=\"span\" showTitleOnHover className=\"flex-1\">\n {label}\n </TruncatedText>\n </span>\n );\n }\n\n return (\n <span className=\"flex min-w-0 items-center gap-2\">\n <span\n className={mergeClassNames(\n \"flex h-6 w-6 shrink-0 items-center justify-center rounded-full border text-xs font-semibold\",\n badgeClassName,\n )}\n aria-hidden=\"true\"\n >\n {stepNumber}\n </span>\n <TruncatedText as=\"span\" showTitleOnHover className=\"flex-1\">\n {label}\n </TruncatedText>\n </span>\n );\n}\n\nexport function StepperSteps({\n steps,\n currentStep,\n onStepClick,\n stepStates = [],\n orientation = \"responsive\",\n responsiveBreakpoint = DEFAULT_BREAKPOINT,\n className,\n stepClassName,\n connectorClassName,\n}: StepperStepsProps) {\n const responsiveQuery = `(max-width: ${responsiveBreakpoint}px)`;\n const isCompact = useSyncExternalStore(\n (onStoreChange) => {\n if (orientation !== \"responsive\") {\n return () => undefined;\n }\n\n return subscribeToMediaQuery(responsiveQuery, onStoreChange);\n },\n () =>\n orientation === \"responsive\"\n ? getMediaQuerySnapshot(responsiveQuery)\n : false,\n () => false,\n );\n\n const isVertical =\n orientation === \"vertical\" || (orientation === \"responsive\" && isCompact);\n\n return (\n <div\n className={mergeClassNames(\n isVertical\n ? \"flex w-full flex-col items-start\"\n : \"flex w-full items-center\",\n className,\n )}\n >\n {steps.map((step, index) => {\n const stepNumber = index + 1;\n const state = stepStates[index] ?? \"untouched\";\n const isActive = index === currentStep;\n const isClickable = typeof onStepClick === \"function\" && !isActive;\n const colors = getStepColors(state, isActive);\n\n return (\n <div\n key={`${step.label}-${stepNumber}`}\n className={mergeClassNames(\n isVertical ? \"w-full\" : \"flex min-w-0 flex-1 items-center\",\n )}\n >\n <Button\n disabled={!isClickable}\n onClick={() => onStepClick?.(index)}\n className={mergeClassNames(\n \"relative z-10 flex min-h-11 items-center justify-center rounded-md border px-4 py-3 text-sm font-medium transition-colors duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ds-focus/70 focus-visible:ring-offset-2 focus-visible:ring-offset-ds-surface-1 disabled:cursor-default disabled:opacity-100\",\n isVertical ? \"w-full\" : \"w-full min-w-0\",\n colors.buttonClassName,\n stepClassName,\n )}\n aria-current={isActive ? \"step\" : undefined}\n aria-invalid={state === \"invalid\" ? true : undefined}\n >\n {renderStepContent(\n step.label,\n step.icon,\n state,\n stepNumber,\n colors.badgeClassName,\n )}\n </Button>\n\n {index < steps.length - 1 ? (\n isVertical ? (\n <div\n className={mergeClassNames(\n \"mx-auto my-2 h-8 w-px rounded-full\",\n colors.connectorClassName,\n connectorClassName,\n )}\n aria-hidden=\"true\"\n />\n ) : (\n <div\n className={mergeClassNames(\n \"mx-3 h-px min-w-6 flex-1 rounded-full\",\n colors.connectorClassName,\n connectorClassName,\n )}\n aria-hidden=\"true\"\n />\n )\n ) : null}\n </div>\n );\n })}\n </div>\n );\n}\n\nexport default StepperSteps;\n","import {\n Children,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\n\nimport { Button } from \"../../forms/button\";\nimport { CheckIcon } from \"../../icons\";\nimport { mergeClassNames } from \"../../../utils\";\nimport type {\n StepperWizardIndicatorRenderProps,\n StepperWizardIndicatorStatus,\n StepperWizardProps,\n StepperWizardStepProps,\n} from \"./types\";\n\nconst useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? useEffect : useLayoutEffect;\n\nfunction clampStep(step: number, totalSteps: number): number {\n return Math.min(Math.max(step, 0), totalSteps);\n}\n\nfunction getIndicatorStatus(\n stepIndex: number,\n currentStep: number,\n): StepperWizardIndicatorStatus {\n if (stepIndex === currentStep) {\n return \"active\";\n }\n\n if (stepIndex < currentStep) {\n return \"complete\";\n }\n\n return \"inactive\";\n}\n\nexport function StepperWizard({\n children,\n initialStep = 0,\n currentStep: controlledStep,\n onStepChange,\n onFinalStepCompleted,\n stepCircleContainerClassName,\n stepContainerClassName,\n contentClassName,\n footerClassName,\n backButtonProps,\n nextButtonProps,\n backButtonText = \"Back\",\n nextButtonText = \"Continue\",\n completeButtonText = \"Complete\",\n disableStepIndicators = false,\n renderStepIndicator,\n className,\n}: StepperWizardProps) {\n const stepsArray = Children.toArray(children);\n const totalSteps = stepsArray.length;\n const [internalStep, setInternalStep] = useState(() =>\n clampStep(initialStep, totalSteps),\n );\n const [direction, setDirection] = useState(0);\n\n const currentStep = clampStep(controlledStep ?? internalStep, totalSteps);\n const isCompleted = currentStep >= totalSteps;\n const isLastStep = totalSteps > 0 && currentStep === totalSteps - 1;\n\n const commitStep = useCallback(\n (nextStep: number) => {\n const clampedStep = clampStep(nextStep, totalSteps);\n\n if (controlledStep === undefined) {\n setInternalStep(clampedStep);\n }\n\n if (clampedStep >= totalSteps) {\n onFinalStepCompleted?.();\n return;\n }\n\n onStepChange?.(clampedStep);\n },\n [controlledStep, onFinalStepCompleted, onStepChange, totalSteps],\n );\n\n if (totalSteps === 0) {\n return null;\n }\n\n const handleBack = () => {\n if (currentStep > 0) {\n setDirection(-1);\n commitStep(currentStep - 1);\n }\n };\n\n const handleNext = () => {\n if (!isLastStep) {\n setDirection(1);\n commitStep(currentStep + 1);\n }\n };\n\n const handleComplete = () => {\n setDirection(1);\n commitStep(totalSteps);\n };\n\n const navigateToStep = (stepIndex: number) => {\n if (stepIndex === currentStep || disableStepIndicators) {\n return;\n }\n\n setDirection(stepIndex > currentStep ? 1 : -1);\n commitStep(stepIndex);\n };\n\n return (\n <div\n className={mergeClassNames(\n \"flex min-h-full w-full flex-1 items-center justify-center p-4\",\n className,\n )}\n >\n <div\n className={mergeClassNames(\n \"mx-auto w-full max-w-3xl rounded-3xl border border-ds-border-2 bg-ds-canvas shadow-2\",\n stepCircleContainerClassName,\n )}\n >\n <div\n className={mergeClassNames(\n \"flex w-full items-center gap-3 border-b border-ds-border-2 px-6 py-6 sm:px-8\",\n stepContainerClassName,\n )}\n >\n {stepsArray.map((_, index) => {\n const status = getIndicatorStatus(index, currentStep);\n const isClickable = !disableStepIndicators && index !== currentStep;\n const indicatorProps: StepperWizardIndicatorRenderProps = {\n stepIndex: index,\n stepNumber: index + 1,\n currentStep,\n status,\n isClickable,\n onStepClick: navigateToStep,\n };\n\n return (\n <div\n key={`wizard-step-${index + 1}`}\n className=\"flex flex-1 items-center\"\n >\n {renderStepIndicator ? (\n renderStepIndicator(indicatorProps)\n ) : (\n <WizardStepIndicator {...indicatorProps} />\n )}\n {index < totalSteps - 1 ? (\n <WizardStepConnector isComplete={currentStep > index} />\n ) : null}\n </div>\n );\n })}\n </div>\n\n <WizardStepContentWrapper\n isCompleted={isCompleted}\n currentStep={currentStep}\n direction={direction}\n className={mergeClassNames(\"px-6 py-6 sm:px-8\", contentClassName)}\n >\n {stepsArray[currentStep]}\n </WizardStepContentWrapper>\n\n {!isCompleted ? (\n <div\n className={mergeClassNames(\n \"px-6 pb-6 sm:px-8 sm:pb-8\",\n footerClassName,\n )}\n >\n <div\n className={mergeClassNames(\n \"mt-6 flex gap-3\",\n currentStep > 0 ? \"justify-between\" : \"justify-end\",\n )}\n >\n {currentStep > 0 ? (\n <Button\n onClick={handleBack}\n className=\"rounded-md border-transparent bg-transparent px-3 py-2 text-sm font-medium text-ds-2 shadow-none hover:bg-ds-surface-1 hover:text-ds-1\"\n {...backButtonProps}\n >\n {backButtonText}\n </Button>\n ) : null}\n <Button\n onClick={isLastStep ? handleComplete : handleNext}\n primary\n className=\"rounded-full px-4 py-2 text-sm font-semibold shadow-2\"\n {...nextButtonProps}\n >\n {isLastStep ? completeButtonText : nextButtonText}\n </Button>\n </div>\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\ninterface WizardStepContentWrapperProps {\n isCompleted: boolean;\n currentStep: number;\n direction: number;\n children: React.ReactNode;\n className?: string;\n}\n\nfunction WizardStepContentWrapper({\n isCompleted,\n currentStep,\n direction,\n children,\n className,\n}: WizardStepContentWrapperProps) {\n const [parentHeight, setParentHeight] = useState(0);\n const handleHeightReady = useCallback((height: number) => {\n setParentHeight(height);\n }, []);\n\n return (\n <motion.div\n style={{ position: \"relative\", overflow: \"hidden\" }}\n animate={{ height: isCompleted ? 0 : parentHeight }}\n transition={{ type: \"spring\", duration: 0.4 }}\n className={className}\n >\n <AnimatePresence initial={false} mode=\"wait\" custom={direction}>\n {!isCompleted ? (\n <WizardSlideTransition\n key={currentStep}\n direction={direction}\n onHeightReady={handleHeightReady}\n >\n {children}\n </WizardSlideTransition>\n ) : null}\n </AnimatePresence>\n </motion.div>\n );\n}\n\ninterface WizardSlideTransitionProps {\n children: React.ReactNode;\n direction: number;\n onHeightReady: (height: number) => void;\n}\n\nfunction WizardSlideTransition({\n children,\n direction,\n onHeightReady,\n}: WizardSlideTransitionProps) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n useIsomorphicLayoutEffect(() => {\n if (containerRef.current) {\n onHeightReady(containerRef.current.offsetHeight);\n }\n }, [children, onHeightReady]);\n\n return (\n <motion.div\n ref={containerRef}\n custom={direction}\n variants={wizardStepVariants}\n initial=\"enter\"\n animate=\"center\"\n exit=\"exit\"\n transition={{ duration: 0.35, ease: \"easeOut\" }}\n style={{ position: \"absolute\", inset: 0 }}\n >\n {children}\n </motion.div>\n );\n}\n\nconst wizardStepVariants = {\n enter: (direction: number) => ({\n x: direction >= 0 ? \"-100%\" : \"100%\",\n opacity: 0,\n }),\n center: {\n x: \"0%\",\n opacity: 1,\n },\n exit: (direction: number) => ({\n x: direction >= 0 ? \"40%\" : \"-40%\",\n opacity: 0,\n }),\n};\n\nexport function StepperWizardStep({\n children,\n className,\n}: StepperWizardStepProps) {\n return (\n <div className={mergeClassNames(\"space-y-4\", className)}>{children}</div>\n );\n}\n\nfunction WizardStepIndicator({\n stepIndex,\n stepNumber,\n status,\n isClickable,\n onStepClick,\n}: StepperWizardIndicatorRenderProps) {\n return (\n <motion.button\n type=\"button\"\n onClick={() => onStepClick(stepIndex)}\n className={mergeClassNames(\n \"relative z-10 flex h-10 w-10 shrink-0 items-center justify-center rounded-full border text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ds-focus/70 focus-visible:ring-offset-2 focus-visible:ring-offset-ds-surface-1\",\n isClickable ? \"cursor-pointer\" : \"cursor-default\",\n )}\n animate={status}\n initial={false}\n disabled={!isClickable}\n aria-current={status === \"active\" ? \"step\" : undefined}\n >\n <motion.span\n variants={{\n inactive: {\n scale: 1,\n backgroundColor: \"var(--ds-color-bg-surface)\",\n borderColor: \"var(--ds-color-border)\",\n color: \"var(--ds-color-fg-muted)\",\n },\n active: {\n scale: 1,\n backgroundColor: \"var(--ds-color-accent)\",\n borderColor: \"var(--ds-color-accent)\",\n color: \"var(--ds-color-fg-on-accent)\",\n },\n complete: {\n scale: 1,\n backgroundColor: \"var(--ds-color-accent)\",\n borderColor: \"var(--ds-color-accent)\",\n color: \"var(--ds-color-fg-on-accent)\",\n },\n }}\n transition={{ duration: 0.25 }}\n className=\"flex h-full w-full items-center justify-center rounded-full\"\n >\n {status === \"complete\" ? (\n <AnimatedWizardCheckIcon className=\"h-4 w-4\" />\n ) : status === \"active\" ? (\n <span className=\"h-2.5 w-2.5 rounded-full bg-current\" />\n ) : (\n <span>{stepNumber}</span>\n )}\n </motion.span>\n </motion.button>\n );\n}\n\nfunction WizardStepConnector({ isComplete }: { isComplete: boolean }) {\n return (\n <div className=\"relative mx-2 h-0.5 flex-1 overflow-hidden rounded-full bg-border\">\n <motion.div\n className=\"absolute inset-y-0 left-0 rounded-full bg-ds-accent\"\n initial={false}\n animate={isComplete ? \"complete\" : \"incomplete\"}\n variants={{\n incomplete: { width: 0 },\n complete: { width: \"100%\" },\n }}\n transition={{ duration: 0.35, ease: \"easeOut\" }}\n />\n </div>\n );\n}\n\nfunction AnimatedWizardCheckIcon({ className }: { className?: string }) {\n return (\n <span\n className={mergeClassNames(\"flex items-center justify-center\", className)}\n >\n <CheckIcon className=\"h-full w-full\" aria-hidden=\"true\" />\n </span>\n );\n}\n\nexport default StepperWizard;\n"],"mappings":";;;;;;;;AAeA,IAAM,aAUF;CACF,IAAI;EACF,WAAW;EACX,aAAa;EACb,MAAM;EACN,MAAM;EACN,oBAAoB;EACpB,sBAAsB;EACvB;CACD,IAAI;EACF,WAAW;EACX,aAAa;EACb,MAAM;EACN,MAAM;EACN,oBAAoB;EACpB,sBAAsB;EACvB;CACD,IAAI;EACF,WAAW;EACX,aAAa;EACb,MAAM;EACN,MAAM;EACN,oBAAoB;EACpB,sBAAsB;EACvB;CACF;AAGD,IAAM,oBAAoB,SAAyB,WAAuB;AAoCxE,QAnCmB;EACjB,SAAS;GACP,WAAW;GACX,SACE;GACF,UAAU;GACV,OACE;GACH;EACD,OAAO;GACL,WACE;GACF,SACE;GACF,UACE;GACF,OACE;GACH;EACD,SAAS;GACP,WAAW;GACX,SAAS;GACT,UAAU;GACV,OAAO;GACR;EACD,UAAU;GACR,WAAW;GACX,SACE;GACF,UAAU;GACV,OACE;GACH;EACF,CAEiB,SAAS;;AAG7B,IAAM,8BAA8B,YAClC,YAAY,UACR,wCACA;AAEN,IAAM,4BACJ,aACA,kBACI,gBAAgB,aAAa,UAAU;AAG7C,IAAM,iBAAiB,EACrB,MACA,OACA,QACA,MACA,SACA,aACA,UACA,aACwB;CACxB,MAAM,SAAS,WAAW;CAC1B,MAAM,gBAAgB,iBAAiB,SAAS,OAAO;CAGvD,MAAM,mBAAmB,SAAS,UAC9B;EAAE,iBAAiB,OAAO;EAAS,aAAa,OAAO;EAAS,GAChE,KAAA;CAEJ,MAAM,sBAAsB;AAC1B,MAAI,KAAK,KACP,QAAO,oBAAC,QAAD;GAAM,WAAW,OAAO;aAAO,KAAK;GAAY,CAAA;AAGzD,MAAI,WAAW,YACb,QAAO,oBAAC,WAAD;GAAW,WAAW,OAAO;GAAM,eAAY;GAAS,CAAA;AAGjE,MAAI,WAAW,QACb,QAAO,oBAAC,WAAD;GAAW,WAAW,OAAO;GAAM,eAAY;GAAS,CAAA;AAGjE,MAAI,YACF,QAAO,oBAAC,QAAD;GAAM,WAAU;aAAiB,QAAQ;GAAS,CAAA;AAG3D,SACE,oBAAC,QAAD,EACE,WAAW,gBACT,2BACA,SAAS,OAAO,YAAY,UAC7B,EACD,CAAA;;AAIN,QACE,oBAAC,OAAO,KAAR;EACE,WAAW,gBACT,6EACA,OAAO,WACP,cACD;EACD,OAAO;EACP,SAAS,WAAW;GAAE,OAAO;GAAK,SAAS;GAAG,GAAG,KAAA;EACjD,SAAS,WAAW;GAAE,OAAO;GAAG,SAAS;GAAG,GAAG,KAAA;EAC/C,YAAY,EAAE,OAAO,MAAM;EAC3B,UAAU,EAAE,OAAO,KAAM;EACzB,YAAY;GAAE,MAAM;GAAU,WAAW;GAAK,SAAS;GAAI;YAE3D,oBAAC,iBAAD;GAAiB,MAAK;aACpB,oBAAC,OAAO,MAAR;IAEE,SAAS,WAAW;KAAE,OAAO;KAAG,QAAQ;KAAM,GAAG,KAAA;IACjD,SAAS,WAAW;KAAE,OAAO;KAAG,QAAQ;KAAG,GAAG,KAAA;IAC9C,MAAM,WAAW;KAAE,OAAO;KAAG,QAAQ;KAAK,GAAG,KAAA;IAC7C,YAAY,EAAE,UAAU,IAAK;cAE5B,eAAe;IACJ,EAPP,OAOO;GACE,CAAA;EACP,CAAA;;AAKjB,IAAa,WAAW,EACtB,OACA,aACA,aACA,cAAc,cACd,OAAO,MACP,UAAU,SACV,gBAAgB,UAChB,YAAY,OACZ,gBAAgB,YAChB,cAAc,MACd,YAAY,MACZ,gBAAgB,MAChB,WACA,oBACA,eACA,aAAa,OACb,aAAa,EAAE,EACf,gBACA,WAAW,MACX,aACkB;CAClB,MAAM,QAAQ,cAAc;CAC5B,MAAM,aAAa,gBAAgB;CACnC,MAAM,wBAAwB,yBAC5B,aACA,cACD;CACD,MAAM,qBACJ,gBAAgB,gBAAgB,0BAA0B;CAC5D,MAAM,SAAS,WAAW;CAC1B,MAAM,qBACJ,YAAY,WAAW,YAAY,cAAc,YAAY,YACzD,IACA;CAEN,MAAM,oBADuB,OAAO,cAAc,qBAAqB,KACvB;CAChD,MAAM,0BACJ,mBAAmB,OAAO,uBAAuB;CAEnD,MAAM,iBAAiB,UAA8B;AACnD,MAAI,cAAc,WAAW,SAAS,MAAM,CAAE,QAAO;AACrD,MAAI,gBAAgB;AAClB,OAAI,eAAe,SAAS,MAAM,CAAE,QAAO;AAC3C,OAAI,UAAU,YAAa,QAAO;AAClC,UAAO;;AAET,MAAI,QAAQ,YAAa,QAAO;AAChC,MAAI,UAAU,YAAa,QAAO;AAClC,SAAO;;CAGT,MAAM,mBAAmB,UAAkB;AACzC,MAAI,CAAC,aAAa,CAAC,YAAa;AAEhC,MADa,MAAM,OACV,SAAU;EAGnB,MAAM,SAAS,cAAc,MAAM;AACnC,MAAI,WAAW,eAAe,WAAW,UACvC,aAAY,MAAM;;AAItB,QACE,qBAAC,OAAD;EACE,WAAW,gBACT,mBACA,aACI,kBACA,qBACE,gBACE,qBACA,SAAS,mBACV,GACD,gBACE,oCACA,SAAS,mBACV,EACP,UACD;EACD,KAAK;YAhBP,CAmBG,iBACC,cAGI,oBAAC,OAAD;GACE,WAAW,gBACT,yBACA,2BAA2B,QAAQ,EACnC,mBACD;GACD,OAAO,EACL,GAAI,aACA;IACE,KAAK,GAAG,iBAAiB;IACzB,QAAQ,GAAG,iBAAiB;IAC5B,MAAM,GAAG,wBAAwB;IACjC,OAAO,OAAO;IACf,GACD;IACE,MAAM,GAAG,iBAAiB;IAC1B,OAAO,GAAG,iBAAiB;IAC3B,KAAK,GAAG,wBAAwB;IAChC,QAAQ,OAAO;IAChB,EACN;aAGA,WACC,oBAAC,OAAO,KAAR;IACE,WAAU;IACV,SAAS,GAAG,aAAa,WAAW,UAAU,GAAG;IACjD,SAAS,GACN,aAAa,WAAW,UACvB,GAAG,MAAM,SAAS,IAAK,KAAK,IAAI,aAAa,MAAM,SAAS,EAAE,IAAI,MAAM,SAAS,KAAM,MAAM,EAAE,IAClG;IACD,YAAY;KAAE,UAAU;KAAK,MAAM;KAAW;IAC9C,OAAO;KACL,GAAI,aAAa,EAAE,OAAO,QAAQ,GAAG,EAAE,QAAQ,QAAQ;KACvD,iBAAiB,QAAQ,aAAa,QAAQ;KAC/C;IACD,CAAA,GAEF,oBAAC,OAAD;IACE,WAAU;IACV,OAAO;KACL,GAAI,aACA;MACE,OAAO;MACP,QAAQ,GAAG,MAAM,SAAS,IAAK,KAAK,IAAI,aAAa,MAAM,SAAS,EAAE,IAAI,MAAM,SAAS,KAAM,MAAM,EAAE;MACxG,GACD;MACE,QAAQ;MACR,OAAO,GAAG,MAAM,SAAS,IAAK,KAAK,IAAI,aAAa,MAAM,SAAS,EAAE,IAAI,MAAM,SAAS,KAAM,MAAM,EAAE;MACvG;KACL,iBAAiB,QAAQ,aAAa,QAAQ;KAC/C;IACD,CAAA;GAEA,CAAA,EAIX,MAAM,KAAK,MAAM,UAAU;GAC1B,MAAM,SAAS,cAAc,MAAM;GACnC,MAAM,SAAS,UAAU,MAAM,SAAS;GACxC,MAAM,cAAc,aAAa,CAAC,KAAK;GACvC,MAAM,uBAAuB,cAAc,MAAM,KAAK;GACtD,MAAM,YACJ,qBAAC,OAAO,KAAR;IACI,WAAW,gBACT,0BAA0B,UACtB,gBACE,WACA,QAAQ,eAAe,YACxB,GACD,2BACJ,cAAc,eACd,cAAc,UAAU,OAC3B;IACD,OAAO,aAAa,EAAE,WAAW,QAAQ,GAAG,KAAA;IAC5C,SAAS,WAAW;KAAE,SAAS;KAAG,GAAG;KAAI,GAAG,KAAA;IAC5C,SAAS,WAAW;KAAE,SAAS;KAAG,GAAG;KAAG,GAAG,KAAA;IAC3C,YAAY,EAAE,OAAO,QAAQ,IAAK;cAdpC,CAgBE,qBAAC,KAAD;KACE,WAAW,gBACT,8CACA,OAAO,MACP,WAAW,YACP,cACA,WAAW,cACT,cACA,WAAW,UACT,6BACA,YACT;eAXH,CAaG,KAAK,OACL,KAAK,YACJ,qBAAC,QAAD;MACE,WAAW,gBACT,yBACA,QAAQ,SAAS,OAClB;gBAJH;OAKC;OACG;OAAc;OACX;QAEP;QACH,KAAK,eACJ,oBAAC,KAAD;KACE,WAAW,gBACT,4BACA,0BAA0B,YACvB,QAAQ,eAAe,aAC3B;eAEA,KAAK;KACJ,CAAA,CAEK;;AAGf,UACE,qBAAC,UAAD,EAAA,UAAA,CACE,qBAAC,OAAD;IACE,WAAW,gBACT,yBACA,aACI,oBACA,qBACE,4BACA,iDACN,CAAC,UAAU,cAAc,QACzB,cAAc,UAAU,QACxB,cACD;IACD,OACE,CAAC,cAAc,CAAC,qBACZ;KAAE,WAAW;KAAG,UAAU;KAAG,GAC7B,KAAA;cAfR;KAkBG,CAAC,cAAc,QAAQ,IACtB,oBAAC,OAAD;MACE,WAAW,gBACT,iDACA,2BAA2B,QAAQ,EACnC,mBACD;MACD,OAAO;OACL,KAAK,GAAG,wBAAwB;OAChC,MAAM,QAAQ,QAAQ;OACtB,OAAO,QAAQ,IAAI;OACnB,QAAQ,OAAO;OAChB;MACD,eAAY;gBAEZ,oBAAC,OAAD;OACE,WAAW,gBACT,gDACA,QAAQ,WAAW,UACpB;OACD,OAAO;QACL,MAAM;QACN,OAAO;QACP,iBAAiB,QAAQ,aAAa,QAAQ;QAC9C,SACE,WAAW,eAAe,WAAW,YAAY,IAAI;QACxD;OACD,CAAA;MACE,CAAA,GACJ;KAEH,CAAC,cAAc,CAAC,sBAAsB,CAAC,SACtC,oBAAC,OAAD;MACE,WAAW,gBACT,iDACA,2BAA2B,QAAQ,EACnC,mBACD;MACD,OAAO;OACL,KAAK,GAAG,wBAAwB;OAChC,MAAM,QAAQ,IAAI;OAClB,OAAO,QAAQ,QAAQ;OACvB,QAAQ,OAAO;OAChB;MACD,eAAY;gBAEX,WACC,oBAAC,OAAO,KAAR;OACE,WAAW,gBACT,gDACA,QAAQ,YAAY,SACrB;OACD,SAAS,EAAE,OAAO,GAAG;OACrB,SAAS,EACP,OACE,WAAW,eAAe,WAAW,YACjC,SACA,MACP;OACD,YAAY;QAAE,UAAU;QAAM,MAAM;QAAW;OAC/C,OAAO,EACL,iBAAiB,QAAQ,aAAa,QAAQ,WAC/C;OACD,CAAA,GAEF,oBAAC,OAAD;OACE,WAAW,gBACT,gDACA,QAAQ,YAAY,SACrB;OACD,OAAO;QACL,OACE,WAAW,eAAe,WAAW,YACjC,SACA;QACN,iBAAiB,QAAQ,aAAa,QAAQ;QAC/C;OACD,CAAA;MAEA,CAAA,GACJ;KAEJ,oBAAC,UAAD;MACE,MAAK;MACL,eAAe,gBAAgB,MAAM;MACrC,UAAU,CAAC;MACX,WAAW,gBACT,uDACA,cAAc,mBAAmB,kBACjC,0BAA0B,UACtB,qCACA,mCACL;MACD,OAAO,EACL,SAAS,GAAG,mBAAmB,KAChC;MACD,gBAAc,WAAW,YAAY,SAAS,KAAA;gBAE9C,oBAAC,eAAD;OACQ;OACC;OACC;OACF;OACG;OACI;OACH;OACF;OACR,CAAA;MACK,CAAA;KAER;KAEA,cAAc,KAAK,WAAW,WAAW,aACxC,oBAAC,OAAO,KAAR;MACE,SAAS;OAAE,SAAS;OAAG,QAAQ;OAAG;MAClC,SAAS;OAAE,SAAS;OAAG,QAAQ;OAAQ;MACvC,MAAM;OAAE,SAAS;OAAG,QAAQ;OAAG;MAC/B,WAAU;gBAET,KAAK;MACK,CAAA;KAEX;OAEL,sBAAsB,iBAAiB,CAAC,SACvC,oBAAC,OAAD;IACE,WAAW,gBACT,sEACA,2BAA2B,QAAQ,EACnC,mBACD;IACD,OAAO,EAAE,QAAQ,OAAO,oBAAoB;IAC5C,eAAY;cAEX,WACC,oBAAC,OAAO,KAAR;KACE,WAAW,gBACT,gDACA,QAAQ,YAAY,SACrB;KACD,SAAS,EAAE,OAAO,GAAG;KACrB,SAAS,EACP,OAAO,uBAAuB,SAAS,MACxC;KACD,YAAY;MAAE,UAAU;MAAM,MAAM;MAAW;KAC/C,OAAO,EACL,iBAAiB,QAAQ,aAAa,QAAQ,WAC/C;KACD,CAAA,GAEF,oBAAC,OAAD;KACE,WAAW,gBACT,gDACA,QAAQ,YAAY,SACrB;KACD,OAAO;MACL,OAAO,uBAAuB,SAAS;MACvC,iBAAiB,QAAQ,aAAa,QAAQ;MAC/C;KACD,CAAA;IAEA,CAAA,GACJ,KACK,EAAA,EAtLI,KAAK,GAsLT;IAEb,CACE;;;AAIV,QAAQ,cAAc;;;ACvjBtB,IAAM,qBAAqB;AAE3B,SAAS,sBACP,OACA,eACY;AACZ,KAAI,OAAO,WAAW,YACpB,cAAa,KAAA;CAGf,MAAM,aAAa,OAAO,WAAW,MAAM;AAC3C,YAAW,iBAAiB,UAAU,cAAc;AAEpD,cAAa,WAAW,oBAAoB,UAAU,cAAc;;AAGtE,SAAS,sBAAsB,OAAwB;AACrD,KAAI,OAAO,WAAW,YACpB,QAAO;AAGT,QAAO,OAAO,WAAW,MAAM,CAAC;;AAGlC,SAAS,cACP,OACA,UAKA;AACA,KAAI,SACF,QAAO;EACL,iBACE;EACF,oBAAoB;EACpB,gBAAgB;EACjB;AAGH,KAAI,UAAU,QACZ,QAAO;EACL,iBACE;EACF,oBAAoB;EACpB,gBACE;EACH;AAGH,KAAI,UAAU,UACZ,QAAO;EACL,iBACE;EACF,oBAAoB;EACpB,gBACE;EACH;AAGH,QAAO;EACL,iBACE;EACF,oBAAoB;EACpB,gBAAgB;EACjB;;AAGH,SAAS,kBACP,OACA,MACA,OACA,YACA,gBACA;AACA,KAAI,UAAU,QACZ,QACE,qBAAC,QAAD;EAAM,WAAU;YAAhB,CACE,oBAAC,WAAD;GAAW,WAAU;GAAU,eAAY;GAAS,CAAA,EACpD,oBAAC,eAAD;GAAe,IAAG;GAAO,kBAAA;GAAiB,WAAU;aACjD;GACa,CAAA,CACX;;AAIX,KAAI,UAAU,UACZ,QACE,qBAAC,QAAD;EAAM,WAAU;YAAhB,CACE,oBAAC,mBAAD;GAAmB,WAAU;GAAU,eAAY;GAAS,CAAA,EAC5D,oBAAC,eAAD;GAAe,IAAG;GAAO,kBAAA;GAAiB,WAAU;aACjD;GACa,CAAA,CACX;;AAIX,KAAI,KACF,QACE,qBAAC,QAAD;EAAM,WAAU;YAAhB,CACE,oBAAC,QAAD;GAAM,WAAU;aAAY;GAAY,CAAA,EACxC,oBAAC,eAAD;GAAe,IAAG;GAAO,kBAAA;GAAiB,WAAU;aACjD;GACa,CAAA,CACX;;AAIX,QACE,qBAAC,QAAD;EAAM,WAAU;YAAhB,CACE,oBAAC,QAAD;GACE,WAAW,gBACT,+FACA,eACD;GACD,eAAY;aAEX;GACI,CAAA,EACP,oBAAC,eAAD;GAAe,IAAG;GAAO,kBAAA;GAAiB,WAAU;aACjD;GACa,CAAA,CACX;;;AAIX,SAAgB,aAAa,EAC3B,OACA,aACA,aACA,aAAa,EAAE,EACf,cAAc,cACd,uBAAuB,oBACvB,WACA,eACA,sBACoB;CACpB,MAAM,kBAAkB,eAAe,qBAAqB;CAC5D,MAAM,YAAY,sBACf,kBAAkB;AACjB,MAAI,gBAAgB,aAClB,cAAa,KAAA;AAGf,SAAO,sBAAsB,iBAAiB,cAAc;UAG5D,gBAAgB,eACZ,sBAAsB,gBAAgB,GACtC,aACA,MACP;CAED,MAAM,aACJ,gBAAgB,cAAe,gBAAgB,gBAAgB;AAEjE,QACE,oBAAC,OAAD;EACE,WAAW,gBACT,aACI,qCACA,4BACJ,UACD;YAEA,MAAM,KAAK,MAAM,UAAU;GAC1B,MAAM,aAAa,QAAQ;GAC3B,MAAM,QAAQ,WAAW,UAAU;GACnC,MAAM,WAAW,UAAU;GAC3B,MAAM,cAAc,OAAO,gBAAgB,cAAc,CAAC;GAC1D,MAAM,SAAS,cAAc,OAAO,SAAS;AAE7C,UACE,qBAAC,OAAD;IAEE,WAAW,gBACT,aAAa,WAAW,mCACzB;cAJH,CAME,oBAAC,QAAD;KACE,UAAU,CAAC;KACX,eAAe,cAAc,MAAM;KACnC,WAAW,gBACT,yUACA,aAAa,WAAW,kBACxB,OAAO,iBACP,cACD;KACD,gBAAc,WAAW,SAAS,KAAA;KAClC,gBAAc,UAAU,YAAY,OAAO,KAAA;eAE1C,kBACC,KAAK,OACL,KAAK,MACL,OACA,YACA,OAAO,eACR;KACM,CAAA,EAER,QAAQ,MAAM,SAAS,IACtB,aACE,oBAAC,OAAD;KACE,WAAW,gBACT,sCACA,OAAO,oBACP,mBACD;KACD,eAAY;KACZ,CAAA,GAEF,oBAAC,OAAD;KACE,WAAW,gBACT,yCACA,OAAO,oBACP,mBACD;KACD,eAAY;KACZ,CAAA,GAEF,KACA;MA/CC,GAAG,KAAK,MAAM,GAAG,aA+ClB;IAER;EACE,CAAA;;;;ACrNV,IAAM,4BACJ,OAAO,WAAW,cAAc,YAAY;AAE9C,SAAS,UAAU,MAAc,YAA4B;AAC3D,QAAO,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE,EAAE,WAAW;;AAGhD,SAAS,mBACP,WACA,aAC8B;AAC9B,KAAI,cAAc,YAChB,QAAO;AAGT,KAAI,YAAY,YACd,QAAO;AAGT,QAAO;;AAGT,SAAgB,cAAc,EAC5B,UACA,cAAc,GACd,aAAa,gBACb,cACA,sBACA,8BACA,wBACA,kBACA,iBACA,iBACA,iBACA,iBAAiB,QACjB,iBAAiB,YACjB,qBAAqB,YACrB,wBAAwB,OACxB,qBACA,aACqB;CACrB,MAAM,aAAa,SAAS,QAAQ,SAAS;CAC7C,MAAM,aAAa,WAAW;CAC9B,MAAM,CAAC,cAAc,mBAAmB,eACtC,UAAU,aAAa,WAAW,CACnC;CACD,MAAM,CAAC,WAAW,gBAAgB,SAAS,EAAE;CAE7C,MAAM,cAAc,UAAU,kBAAkB,cAAc,WAAW;CACzE,MAAM,cAAc,eAAe;CACnC,MAAM,aAAa,aAAa,KAAK,gBAAgB,aAAa;CAElE,MAAM,aAAa,aAChB,aAAqB;EACpB,MAAM,cAAc,UAAU,UAAU,WAAW;AAEnD,MAAI,mBAAmB,KAAA,EACrB,iBAAgB,YAAY;AAG9B,MAAI,eAAe,YAAY;AAC7B,2BAAwB;AACxB;;AAGF,iBAAe,YAAY;IAE7B;EAAC;EAAgB;EAAsB;EAAc;EAAW,CACjE;AAED,KAAI,eAAe,EACjB,QAAO;CAGT,MAAM,mBAAmB;AACvB,MAAI,cAAc,GAAG;AACnB,gBAAa,GAAG;AAChB,cAAW,cAAc,EAAE;;;CAI/B,MAAM,mBAAmB;AACvB,MAAI,CAAC,YAAY;AACf,gBAAa,EAAE;AACf,cAAW,cAAc,EAAE;;;CAI/B,MAAM,uBAAuB;AAC3B,eAAa,EAAE;AACf,aAAW,WAAW;;CAGxB,MAAM,kBAAkB,cAAsB;AAC5C,MAAI,cAAc,eAAe,sBAC/B;AAGF,eAAa,YAAY,cAAc,IAAI,GAAG;AAC9C,aAAW,UAAU;;AAGvB,QACE,oBAAC,OAAD;EACE,WAAW,gBACT,iEACA,UACD;YAED,qBAAC,OAAD;GACE,WAAW,gBACT,wFACA,6BACD;aAJH;IAME,oBAAC,OAAD;KACE,WAAW,gBACT,gFACA,uBACD;eAEA,WAAW,KAAK,GAAG,UAAU;MAC5B,MAAM,SAAS,mBAAmB,OAAO,YAAY;MACrD,MAAM,cAAc,CAAC,yBAAyB,UAAU;MACxD,MAAM,iBAAoD;OACxD,WAAW;OACX,YAAY,QAAQ;OACpB;OACA;OACA;OACA,aAAa;OACd;AAED,aACE,qBAAC,OAAD;OAEE,WAAU;iBAFZ,CAIG,sBACC,oBAAoB,eAAe,GAEnC,oBAAC,qBAAD,EAAqB,GAAI,gBAAkB,CAAA,EAE5C,QAAQ,aAAa,IACpB,oBAAC,qBAAD,EAAqB,YAAY,cAAc,OAAS,CAAA,GACtD,KACA;SAXC,eAAe,QAAQ,IAWxB;OAER;KACE,CAAA;IAEN,oBAAC,0BAAD;KACe;KACA;KACF;KACX,WAAW,gBAAgB,qBAAqB,iBAAiB;eAEhE,WAAW;KACa,CAAA;IAE1B,CAAC,cACA,oBAAC,OAAD;KACE,WAAW,gBACT,6BACA,gBACD;eAED,qBAAC,OAAD;MACE,WAAW,gBACT,mBACA,cAAc,IAAI,oBAAoB,cACvC;gBAJH,CAMG,cAAc,IACb,oBAAC,QAAD;OACE,SAAS;OACT,WAAU;OACV,GAAI;iBAEH;OACM,CAAA,GACP,MACJ,oBAAC,QAAD;OACE,SAAS,aAAa,iBAAiB;OACvC,SAAA;OACA,WAAU;OACV,GAAI;iBAEH,aAAa,qBAAqB;OAC5B,CAAA,CACL;;KACF,CAAA,GACJ;IACA;;EACF,CAAA;;AAYV,SAAS,yBAAyB,EAChC,aACA,aACA,WACA,UACA,aACgC;CAChC,MAAM,CAAC,cAAc,mBAAmB,SAAS,EAAE;CACnD,MAAM,oBAAoB,aAAa,WAAmB;AACxD,kBAAgB,OAAO;IACtB,EAAE,CAAC;AAEN,QACE,oBAAC,OAAO,KAAR;EACE,OAAO;GAAE,UAAU;GAAY,UAAU;GAAU;EACnD,SAAS,EAAE,QAAQ,cAAc,IAAI,cAAc;EACnD,YAAY;GAAE,MAAM;GAAU,UAAU;GAAK;EAClC;YAEX,oBAAC,iBAAD;GAAiB,SAAS;GAAO,MAAK;GAAO,QAAQ;aAClD,CAAC,cACA,oBAAC,uBAAD;IAEa;IACX,eAAe;IAEd;IACqB,EALjB,YAKiB,GACtB;GACY,CAAA;EACP,CAAA;;AAUjB,SAAS,sBAAsB,EAC7B,UACA,WACA,iBAC6B;CAC7B,MAAM,eAAe,OAA8B,KAAK;AAExD,iCAAgC;AAC9B,MAAI,aAAa,QACf,eAAc,aAAa,QAAQ,aAAa;IAEjD,CAAC,UAAU,cAAc,CAAC;AAE7B,QACE,oBAAC,OAAO,KAAR;EACE,KAAK;EACL,QAAQ;EACR,UAAU;EACV,SAAQ;EACR,SAAQ;EACR,MAAK;EACL,YAAY;GAAE,UAAU;GAAM,MAAM;GAAW;EAC/C,OAAO;GAAE,UAAU;GAAY,OAAO;GAAG;EAExC;EACU,CAAA;;AAIjB,IAAM,qBAAqB;CACzB,QAAQ,eAAuB;EAC7B,GAAG,aAAa,IAAI,UAAU;EAC9B,SAAS;EACV;CACD,QAAQ;EACN,GAAG;EACH,SAAS;EACV;CACD,OAAO,eAAuB;EAC5B,GAAG,aAAa,IAAI,QAAQ;EAC5B,SAAS;EACV;CACF;AAED,SAAgB,kBAAkB,EAChC,UACA,aACyB;AACzB,QACE,oBAAC,OAAD;EAAK,WAAW,gBAAgB,aAAa,UAAU;EAAG;EAAe,CAAA;;AAI7E,SAAS,oBAAoB,EAC3B,WACA,YACA,QACA,aACA,eACoC;AACpC,QACE,oBAAC,OAAO,QAAR;EACE,MAAK;EACL,eAAe,YAAY,UAAU;EACrC,WAAW,gBACT,mRACA,cAAc,mBAAmB,iBAClC;EACD,SAAS;EACT,SAAS;EACT,UAAU,CAAC;EACX,gBAAc,WAAW,WAAW,SAAS,KAAA;YAE7C,oBAAC,OAAO,MAAR;GACE,UAAU;IACR,UAAU;KACR,OAAO;KACP,iBAAiB;KACjB,aAAa;KACb,OAAO;KACR;IACD,QAAQ;KACN,OAAO;KACP,iBAAiB;KACjB,aAAa;KACb,OAAO;KACR;IACD,UAAU;KACR,OAAO;KACP,iBAAiB;KACjB,aAAa;KACb,OAAO;KACR;IACF;GACD,YAAY,EAAE,UAAU,KAAM;GAC9B,WAAU;aAET,WAAW,aACV,oBAAC,yBAAD,EAAyB,WAAU,WAAY,CAAA,GAC7C,WAAW,WACb,oBAAC,QAAD,EAAM,WAAU,uCAAwC,CAAA,GAExD,oBAAC,QAAD,EAAA,UAAO,YAAkB,CAAA;GAEf,CAAA;EACA,CAAA;;AAIpB,SAAS,oBAAoB,EAAE,cAAuC;AACpE,QACE,oBAAC,OAAD;EAAK,WAAU;YACb,oBAAC,OAAO,KAAR;GACE,WAAU;GACV,SAAS;GACT,SAAS,aAAa,aAAa;GACnC,UAAU;IACR,YAAY,EAAE,OAAO,GAAG;IACxB,UAAU,EAAE,OAAO,QAAQ;IAC5B;GACD,YAAY;IAAE,UAAU;IAAM,MAAM;IAAW;GAC/C,CAAA;EACE,CAAA;;AAIV,SAAS,wBAAwB,EAAE,aAAqC;AACtE,QACE,oBAAC,QAAD;EACE,WAAW,gBAAgB,oCAAoC,UAAU;YAEzE,oBAAC,WAAD;GAAW,WAAU;GAAgB,eAAY;GAAS,CAAA;EACrD,CAAA"}
1
+ {"version":3,"file":"stepper-Jv5OS1nY.mjs","names":[],"sources":["../../src/components/navigation/stepper/Stepper.tsx","../../src/components/navigation/stepper/Stepper1.tsx","../../src/components/navigation/stepper/Stepper2.tsx"],"sourcesContent":["import { Fragment } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\n\nimport { CheckIcon, CloseIcon } from \"../../icons\";\nimport { mergeClassNames } from \"../../../utils\";\nimport type {\n StepperProps,\n StepIndicatorProps,\n StepStatus,\n StepperLabelPosition,\n StepperSize,\n StepperVariant,\n} from \"./types\";\n\n// Size configurations for indicators and icons\nconst sizeConfig: Record<\n StepperSize,\n {\n indicator: string;\n indicatorPx: number;\n icon: string;\n text: string;\n connectorThickness: string;\n connectorThicknessPx: number;\n }\n> = {\n sm: {\n indicator: \"w-8 h-8\",\n indicatorPx: 32,\n icon: \"w-4 h-4\",\n text: \"text-xs\",\n connectorThickness: \"2px\",\n connectorThicknessPx: 2,\n },\n md: {\n indicator: \"w-10 h-10\",\n indicatorPx: 40,\n icon: \"w-5 h-5\",\n text: \"text-sm\",\n connectorThickness: \"2px\",\n connectorThicknessPx: 2,\n },\n lg: {\n indicator: \"w-12 h-12\",\n indicatorPx: 48,\n icon: \"w-6 h-6\",\n text: \"text-base\",\n connectorThickness: \"4px\",\n connectorThicknessPx: 4,\n },\n};\n\n// Variant styles for the indicator\nconst getVariantStyles = (variant: StepperVariant, status: StepStatus) => {\n const baseStyles = {\n default: {\n completed: \"bg-ds-accent text-ds-on-accent shadow-md shadow-ds-accent/25\",\n current:\n \"bg-ds-accent text-ds-on-accent ring-4 ring-ds-focus/40 shadow-lg shadow-ds-accent/30\",\n upcoming: \"bg-ds-surface-3 text-ds-2\",\n error:\n \"bg-ds-state-error-surface text-ds-state-error-text ring-4 ring-ds-state-error-border/35\",\n },\n glass: {\n completed:\n \"bg-ds-accent/85 text-ds-on-accent backdrop-blur-xl border border-ds-border-accent/30 shadow-lg shadow-ds-accent/20\",\n current:\n \"bg-ds-accent/90 text-ds-on-accent backdrop-blur-xl border-2 border-ds-border-accent ring-4 ring-ds-focus/30 shadow-xl shadow-ds-accent/30\",\n upcoming:\n \"bg-ds-surface-1 text-ds-2 backdrop-blur-xl border border-ds-border-2\",\n error:\n \"bg-ds-state-error-surface text-ds-state-error-text backdrop-blur-xl border border-ds-state-error-border ring-4 ring-ds-state-error-border/25\",\n },\n minimal: {\n completed: \"bg-ds-accent-subtle text-ds-1\",\n current: \"bg-ds-accent text-ds-on-accent shadow-sm\",\n upcoming: \"bg-transparent text-ds-2 border-2 border-ds-border-2\",\n error: \"bg-ds-state-error-surface text-ds-state-error-text\",\n },\n outlined: {\n completed: \"bg-transparent text-ds-1 border-2 border-ds-border-accent\",\n current:\n \"bg-ds-accent text-ds-on-accent border-2 border-ds-border-accent shadow-lg\",\n upcoming: \"bg-transparent text-ds-2 border-2 border-ds-border-2\",\n error:\n \"bg-transparent text-ds-state-error-text border-2 border-ds-state-error-border\",\n },\n };\n\n return baseStyles[variant][status];\n};\n\nconst getConnectorTrackClassName = (variant: StepperVariant) =>\n variant === \"glass\"\n ? \"bg-ds-surface-2/70 backdrop-blur-sm\"\n : \"bg-ds-surface-3\";\n\nconst getResolvedLabelPosition = (\n orientation: StepperProps[\"orientation\"],\n labelPosition: StepperLabelPosition,\n) => (orientation === \"vertical\" ? \"right\" : labelPosition);\n\n// Step Indicator Component\nconst StepIndicator = ({\n step,\n index,\n status,\n size,\n variant,\n showNumbers,\n animated,\n colors,\n}: StepIndicatorProps) => {\n const config = sizeConfig[size];\n const variantStyles = getVariantStyles(variant, status);\n\n // Custom color overrides\n const customColorStyle = colors?.[status]\n ? { backgroundColor: colors[status], borderColor: colors[status] }\n : undefined;\n\n const renderContent = () => {\n if (step.icon) {\n return <span className={config.icon}>{step.icon}</span>;\n }\n\n if (status === \"completed\") {\n return <CheckIcon className={config.icon} aria-hidden=\"true\" />;\n }\n\n if (status === \"error\") {\n return <CloseIcon className={config.icon} aria-hidden=\"true\" />;\n }\n\n if (showNumbers) {\n return <span className=\"font-semibold\">{index + 1}</span>;\n }\n\n return (\n <span\n className={mergeClassNames(\n \"rounded-full bg-current\",\n size === \"sm\" ? \"w-2 h-2\" : \"w-3 h-3\",\n )}\n />\n );\n };\n\n return (\n <motion.div\n className={mergeClassNames(\n \"rounded-full flex items-center justify-center transition-all duration-300\",\n config.indicator,\n variantStyles,\n )}\n style={customColorStyle}\n initial={animated ? { scale: 0.8, opacity: 0 } : undefined}\n animate={animated ? { scale: 1, opacity: 1 } : undefined}\n whileHover={{ scale: 1.05 }}\n whileTap={{ scale: 0.95 }}\n transition={{ type: \"spring\", stiffness: 400, damping: 17 }}\n >\n <AnimatePresence mode=\"wait\">\n <motion.span\n key={status}\n initial={animated ? { scale: 0, rotate: -180 } : undefined}\n animate={animated ? { scale: 1, rotate: 0 } : undefined}\n exit={animated ? { scale: 0, rotate: 180 } : undefined}\n transition={{ duration: 0.2 }}\n >\n {renderContent()}\n </motion.span>\n </AnimatePresence>\n </motion.div>\n );\n};\n\n// Main Stepper Component\nexport const Stepper = ({\n steps,\n currentStep,\n onStepClick,\n orientation = \"horizontal\",\n size = \"md\",\n variant = \"glass\",\n labelPosition = \"bottom\",\n direction = \"ltr\",\n optionalLabel = \"Optional\",\n showNumbers = true,\n clickable = true,\n showConnector = true,\n className,\n connectorClassName,\n stepClassName,\n showErrors = false,\n errorSteps = [],\n completedSteps,\n animated = true,\n colors,\n}: StepperProps) => {\n const isRtl = direction === \"rtl\";\n const isVertical = orientation === \"vertical\";\n const resolvedLabelPosition = getResolvedLabelPosition(\n orientation,\n labelPosition,\n );\n const isHorizontalInline =\n orientation === \"horizontal\" && resolvedLabelPosition === \"right\";\n const config = sizeConfig[size];\n const indicatorPaddingPx =\n variant === \"glass\" || variant === \"outlined\" || variant === \"minimal\"\n ? 4\n : 2;\n const indicatorShellSizePx = config.indicatorPx + indicatorPaddingPx * 2;\n const connectorInsetPx = indicatorShellSizePx / 2;\n const connectorCenterOffsetPx =\n connectorInsetPx - config.connectorThicknessPx / 2;\n\n const getStepStatus = (index: number): StepStatus => {\n if (showErrors && errorSteps.includes(index)) return \"error\";\n if (completedSteps) {\n if (completedSteps.includes(index)) return \"completed\";\n if (index === currentStep) return \"current\";\n return \"upcoming\";\n }\n if (index < currentStep) return \"completed\";\n if (index === currentStep) return \"current\";\n return \"upcoming\";\n };\n\n const handleStepClick = (index: number) => {\n if (!clickable || !onStepClick) return;\n const step = steps[index];\n if (step.disabled) return;\n\n // Allow clicking on completed or current steps\n const status = getStepStatus(index);\n if (status === \"completed\" || status === \"current\") {\n onStepClick(index);\n }\n };\n\n return (\n <div\n className={mergeClassNames(\n \"w-full relative\",\n isVertical\n ? \"flex flex-col\"\n : isHorizontalInline\n ? mergeClassNames(\n \"flex items-center\",\n isRtl && \"flex-row-reverse\",\n )\n : mergeClassNames(\n \"flex items-start justify-between\",\n isRtl && \"flex-row-reverse\",\n ),\n className,\n )}\n dir={direction}\n >\n {/* Global Background Continuous Connector */}\n {showConnector &&\n isVertical &&\n (() => {\n return (\n <div\n className={mergeClassNames(\n \"absolute rounded-full\",\n getConnectorTrackClassName(variant),\n connectorClassName,\n )}\n style={{\n ...(isVertical\n ? {\n top: `${connectorInsetPx}px`,\n bottom: `${connectorInsetPx}px`,\n left: `${connectorCenterOffsetPx}px`,\n width: config.connectorThickness,\n }\n : {\n left: `${connectorInsetPx}px`,\n right: `${connectorInsetPx}px`,\n top: `${connectorCenterOffsetPx}px`,\n height: config.connectorThickness,\n }),\n }}\n >\n {/* Animated fill connector */}\n {animated ? (\n <motion.div\n className=\"absolute top-0 left-0 bg-ds-accent rounded-full\"\n initial={{ [isVertical ? \"height\" : \"width\"]: 0 }}\n animate={{\n [isVertical ? \"height\" : \"width\"]:\n `${steps.length > 1 ? (Math.min(currentStep, steps.length - 1) / (steps.length - 1)) * 100 : 0}%`,\n }}\n transition={{ duration: 0.4, ease: \"easeOut\" }}\n style={{\n ...(isVertical ? { width: \"100%\" } : { height: \"100%\" }),\n backgroundColor: colors?.connector || colors?.completed,\n }}\n />\n ) : (\n <div\n className=\"absolute top-0 left-0 bg-ds-accent rounded-full\"\n style={{\n ...(isVertical\n ? {\n width: \"100%\",\n height: `${steps.length > 1 ? (Math.min(currentStep, steps.length - 1) / (steps.length - 1)) * 100 : 0}%`,\n }\n : {\n height: \"100%\",\n width: `${steps.length > 1 ? (Math.min(currentStep, steps.length - 1) / (steps.length - 1)) * 100 : 0}%`,\n }),\n backgroundColor: colors?.connector || colors?.completed,\n }}\n />\n )}\n </div>\n );\n })()}\n\n {steps.map((step, index) => {\n const status = getStepStatus(index);\n const isLast = index === steps.length - 1;\n const isClickable = clickable && !step.disabled;\n const isConnectorCompleted = getStepStatus(index) === \"completed\";\n const textBlock = (\n <motion.div\n className={mergeClassNames(\n resolvedLabelPosition === \"right\"\n ? mergeClassNames(\n \"min-w-0\",\n isRtl ? \"text-right\" : \"text-left\",\n )\n : \"w-full px-2 text-center\",\n isVertical && \"flex-1 pb-6\",\n isVertical && isLast && \"pb-0\",\n )}\n style={isVertical ? { marginTop: \"-4px\" } : undefined}\n initial={animated ? { opacity: 0, y: 10 } : undefined}\n animate={animated ? { opacity: 1, y: 0 } : undefined}\n transition={{ delay: index * 0.1 }}\n >\n <p\n className={mergeClassNames(\n \"font-medium transition-colors duration-200\",\n config.text,\n status === \"current\"\n ? \"text-ds-1\"\n : status === \"completed\"\n ? \"text-ds-1\"\n : status === \"error\"\n ? \"text-ds-state-error-text\"\n : \"text-ds-2\",\n )}\n >\n {step.title}\n {step.optional && (\n <span\n className={mergeClassNames(\n \"font-normal text-ds-3\",\n isRtl ? \"mr-1\" : \"ml-1\",\n )}\n >\n ({optionalLabel})\n </span>\n )}\n </p>\n {step.description && (\n <p\n className={mergeClassNames(\n \"mt-0.5 text-xs text-ds-2\",\n resolvedLabelPosition === \"right\" &&\n (isRtl ? \"text-right\" : \"text-left\"),\n )}\n >\n {step.description}\n </p>\n )}\n </motion.div>\n );\n\n return (\n <Fragment key={step.id}>\n <div\n className={mergeClassNames(\n \"relative z-10 min-w-0\",\n isVertical\n ? \"flex gap-4 pb-8\"\n : isHorizontalInline\n ? \"flex items-center gap-3\"\n : \"flex flex-1 flex-col items-center text-center\",\n !isLast && isVertical && \"mb-2\",\n isVertical && isLast && \"pb-0\",\n stepClassName,\n )}\n style={\n !isVertical && !isHorizontalInline\n ? { flexBasis: 0, flexGrow: 1 }\n : undefined\n }\n >\n {!isVertical && index > 0 ? (\n <div\n className={mergeClassNames(\n \"pointer-events-none absolute z-0 rounded-full\",\n getConnectorTrackClassName(variant),\n connectorClassName,\n )}\n style={{\n top: `${connectorCenterOffsetPx}px`,\n left: isRtl ? \"50%\" : 0,\n right: isRtl ? 0 : \"50%\",\n height: config.connectorThickness,\n }}\n aria-hidden=\"true\"\n >\n <div\n className={mergeClassNames(\n \"absolute inset-y-0 rounded-full bg-ds-accent\",\n isRtl ? \"left-0\" : \"right-0\",\n )}\n style={{\n left: 0,\n right: 0,\n backgroundColor: colors?.connector || colors?.completed,\n opacity:\n status === \"completed\" || status === \"current\" ? 1 : 0,\n }}\n />\n </div>\n ) : null}\n\n {!isVertical && !isHorizontalInline && !isLast ? (\n <div\n className={mergeClassNames(\n \"pointer-events-none absolute z-0 rounded-full\",\n getConnectorTrackClassName(variant),\n connectorClassName,\n )}\n style={{\n top: `${connectorCenterOffsetPx}px`,\n left: isRtl ? 0 : \"50%\",\n right: isRtl ? \"50%\" : 0,\n height: config.connectorThickness,\n }}\n aria-hidden=\"true\"\n >\n {animated ? (\n <motion.div\n className={mergeClassNames(\n \"absolute inset-y-0 rounded-full bg-ds-accent\",\n isRtl ? \"right-0\" : \"left-0\",\n )}\n initial={{ width: 0 }}\n animate={{\n width:\n status === \"completed\" || status === \"current\"\n ? \"100%\"\n : \"0%\",\n }}\n transition={{ duration: 0.35, ease: \"easeOut\" }}\n style={{\n backgroundColor: colors?.connector || colors?.completed,\n }}\n />\n ) : (\n <div\n className={mergeClassNames(\n \"absolute inset-y-0 rounded-full bg-ds-accent\",\n isRtl ? \"right-0\" : \"left-0\",\n )}\n style={{\n width:\n status === \"completed\" || status === \"current\"\n ? \"100%\"\n : \"0%\",\n backgroundColor: colors?.connector || colors?.completed,\n }}\n />\n )}\n </div>\n ) : null}\n\n <button\n type=\"button\"\n onClick={() => handleStepClick(index)}\n disabled={!isClickable}\n className={mergeClassNames(\n \"relative z-10 shrink-0 rounded-full bg-ds-surface-1\",\n isClickable ? \"cursor-pointer\" : \"cursor-default\",\n resolvedLabelPosition === \"right\"\n ? \"flex items-center justify-center\"\n : \"flex items-center justify-center\",\n )}\n style={{\n padding: `${indicatorPaddingPx}px`,\n }}\n aria-current={status === \"current\" ? \"step\" : undefined}\n >\n <StepIndicator\n step={step}\n index={index}\n status={status}\n size={size}\n variant={variant}\n showNumbers={showNumbers}\n animated={animated}\n colors={colors}\n />\n </button>\n\n {textBlock}\n\n {isVertical && step.content && status === \"current\" && (\n <motion.div\n initial={{ opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: \"auto\" }}\n exit={{ opacity: 0, height: 0 }}\n className=\"w-full pb-4 pl-14\"\n >\n {step.content}\n </motion.div>\n )}\n </div>\n\n {isHorizontalInline && showConnector && !isLast ? (\n <div\n className={mergeClassNames(\n \"relative mx-4 min-w-8 flex-1 shrink-0 overflow-hidden rounded-full\",\n getConnectorTrackClassName(variant),\n connectorClassName,\n )}\n style={{ height: config.connectorThickness }}\n aria-hidden=\"true\"\n >\n {animated ? (\n <motion.div\n className={mergeClassNames(\n \"absolute inset-y-0 rounded-full bg-ds-accent\",\n isRtl ? \"right-0\" : \"left-0\",\n )}\n initial={{ width: 0 }}\n animate={{\n width: isConnectorCompleted ? \"100%\" : \"0%\",\n }}\n transition={{ duration: 0.35, ease: \"easeOut\" }}\n style={{\n backgroundColor: colors?.connector || colors?.completed,\n }}\n />\n ) : (\n <div\n className={mergeClassNames(\n \"absolute inset-y-0 rounded-full bg-ds-accent\",\n isRtl ? \"right-0\" : \"left-0\",\n )}\n style={{\n width: isConnectorCompleted ? \"100%\" : \"0%\",\n backgroundColor: colors?.connector || colors?.completed,\n }}\n />\n )}\n </div>\n ) : null}\n </Fragment>\n );\n })}\n </div>\n );\n};\n\nStepper.displayName = \"Stepper\";\n\nexport default Stepper;\n","import { useSyncExternalStore } from \"react\";\n\nimport { Button } from \"../../forms/button\";\nimport { AlertTriangleIcon, CheckIcon } from \"../../icons\";\nimport { TruncatedText } from \"../../typography/truncated-text\";\nimport { mergeClassNames } from \"../../../utils\";\nimport type { StepperStepsProps, StepperStepsState } from \"./types\";\n\nconst DEFAULT_BREAKPOINT = 1080;\n\nfunction subscribeToMediaQuery(\n query: string,\n onStoreChange: () => void,\n): () => void {\n if (typeof window === \"undefined\") {\n return () => undefined;\n }\n\n const mediaQuery = window.matchMedia(query);\n mediaQuery.addEventListener(\"change\", onStoreChange);\n\n return () => mediaQuery.removeEventListener(\"change\", onStoreChange);\n}\n\nfunction getMediaQuerySnapshot(query: string): boolean {\n if (typeof window === \"undefined\") {\n return false;\n }\n\n return window.matchMedia(query).matches;\n}\n\nfunction getStepColors(\n state: StepperStepsState,\n isActive: boolean,\n): {\n buttonClassName: string;\n connectorClassName: string;\n badgeClassName: string;\n} {\n if (isActive) {\n return {\n buttonClassName:\n \"border-ds-border-accent bg-ds-accent/12 text-ds-1 shadow-sm shadow-ds-accent/10\",\n connectorClassName: \"bg-ds-accent\",\n badgeClassName: \"border-ds-border-accent bg-ds-accent text-ds-on-accent\",\n };\n }\n\n if (state === \"valid\") {\n return {\n buttonClassName:\n \"border-ds-state-success-border bg-ds-state-success-surface text-ds-state-success-text shadow-sm\",\n connectorClassName: \"bg-ds-state-success\",\n badgeClassName:\n \"border-ds-state-success-border bg-ds-state-success text-ds-on-accent\",\n };\n }\n\n if (state === \"invalid\") {\n return {\n buttonClassName:\n \"border-ds-state-error-border bg-ds-state-error-surface text-ds-state-error-text\",\n connectorClassName: \"bg-ds-state-danger\",\n badgeClassName:\n \"border-ds-state-error-border bg-ds-state-danger text-ds-on-accent\",\n };\n }\n\n return {\n buttonClassName:\n \"border-ds-border-2 bg-ds-surface-1 text-ds-2 hover:border-ds-border-1 hover:bg-ds-canvas\",\n connectorClassName: \"bg-ds-border-3/70\",\n badgeClassName: \"border-ds-border-2 bg-ds-canvas text-ds-2\",\n };\n}\n\nfunction renderStepContent(\n label: string,\n icon: StepperStepsProps[\"steps\"][number][\"icon\"],\n state: StepperStepsState,\n stepNumber: number,\n badgeClassName: string,\n) {\n if (state === \"valid\") {\n return (\n <span className=\"flex min-w-0 items-center gap-2\">\n <CheckIcon className=\"h-5 w-5\" aria-hidden=\"true\" />\n <TruncatedText as=\"span\" showTitleOnHover className=\"flex-1\">\n {label}\n </TruncatedText>\n </span>\n );\n }\n\n if (state === \"invalid\") {\n return (\n <span className=\"flex min-w-0 items-center gap-2\">\n <AlertTriangleIcon className=\"h-5 w-5\" aria-hidden=\"true\" />\n <TruncatedText as=\"span\" showTitleOnHover className=\"flex-1\">\n {label}\n </TruncatedText>\n </span>\n );\n }\n\n if (icon) {\n return (\n <span className=\"flex min-w-0 items-center gap-2\">\n <span className=\"shrink-0\">{icon}</span>\n <TruncatedText as=\"span\" showTitleOnHover className=\"flex-1\">\n {label}\n </TruncatedText>\n </span>\n );\n }\n\n return (\n <span className=\"flex min-w-0 items-center gap-2\">\n <span\n className={mergeClassNames(\n \"flex h-6 w-6 shrink-0 items-center justify-center rounded-full border text-xs font-semibold\",\n badgeClassName,\n )}\n aria-hidden=\"true\"\n >\n {stepNumber}\n </span>\n <TruncatedText as=\"span\" showTitleOnHover className=\"flex-1\">\n {label}\n </TruncatedText>\n </span>\n );\n}\n\nexport function StepperSteps({\n steps,\n currentStep,\n onStepClick,\n stepStates = [],\n orientation = \"responsive\",\n responsiveBreakpoint = DEFAULT_BREAKPOINT,\n className,\n stepClassName,\n connectorClassName,\n}: StepperStepsProps) {\n const responsiveQuery = `(max-width: ${responsiveBreakpoint}px)`;\n const isCompact = useSyncExternalStore(\n (onStoreChange) => {\n if (orientation !== \"responsive\") {\n return () => undefined;\n }\n\n return subscribeToMediaQuery(responsiveQuery, onStoreChange);\n },\n () =>\n orientation === \"responsive\"\n ? getMediaQuerySnapshot(responsiveQuery)\n : false,\n () => false,\n );\n\n const isVertical =\n orientation === \"vertical\" || (orientation === \"responsive\" && isCompact);\n\n return (\n <div\n className={mergeClassNames(\n isVertical\n ? \"flex w-full flex-col items-start\"\n : \"flex w-full items-center\",\n className,\n )}\n >\n {steps.map((step, index) => {\n const stepNumber = index + 1;\n const state = stepStates[index] ?? \"untouched\";\n const isActive = index === currentStep;\n const isClickable = typeof onStepClick === \"function\" && !isActive;\n const colors = getStepColors(state, isActive);\n\n return (\n <div\n key={`${step.label}-${stepNumber}`}\n className={mergeClassNames(\n isVertical ? \"w-full\" : \"flex min-w-0 flex-1 items-center\",\n )}\n >\n <Button\n disabled={!isClickable}\n onClick={() => onStepClick?.(index)}\n className={mergeClassNames(\n \"relative z-10 flex min-h-11 items-center justify-center rounded-md border px-4 py-3 text-sm font-medium transition-colors duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ds-focus/70 focus-visible:ring-offset-2 focus-visible:ring-offset-ds-surface-1 disabled:cursor-default disabled:opacity-100\",\n isVertical ? \"w-full\" : \"w-full min-w-0\",\n colors.buttonClassName,\n stepClassName,\n )}\n aria-current={isActive ? \"step\" : undefined}\n aria-invalid={state === \"invalid\" ? true : undefined}\n >\n {renderStepContent(\n step.label,\n step.icon,\n state,\n stepNumber,\n colors.badgeClassName,\n )}\n </Button>\n\n {index < steps.length - 1 ? (\n isVertical ? (\n <div\n className={mergeClassNames(\n \"mx-auto my-2 h-8 w-px rounded-full\",\n colors.connectorClassName,\n connectorClassName,\n )}\n aria-hidden=\"true\"\n />\n ) : (\n <div\n className={mergeClassNames(\n \"mx-3 h-px min-w-6 flex-1 rounded-full\",\n colors.connectorClassName,\n connectorClassName,\n )}\n aria-hidden=\"true\"\n />\n )\n ) : null}\n </div>\n );\n })}\n </div>\n );\n}\n\nexport default StepperSteps;\n","import {\n Children,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\n\nimport { Button } from \"../../forms/button\";\nimport { CheckIcon } from \"../../icons\";\nimport { mergeClassNames } from \"../../../utils\";\nimport type {\n StepperWizardIndicatorRenderProps,\n StepperWizardIndicatorStatus,\n StepperWizardProps,\n StepperWizardStepProps,\n} from \"./types\";\n\nconst useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? useEffect : useLayoutEffect;\n\nfunction clampStep(step: number, totalSteps: number): number {\n return Math.min(Math.max(step, 0), totalSteps);\n}\n\nfunction getIndicatorStatus(\n stepIndex: number,\n currentStep: number,\n): StepperWizardIndicatorStatus {\n if (stepIndex === currentStep) {\n return \"active\";\n }\n\n if (stepIndex < currentStep) {\n return \"complete\";\n }\n\n return \"inactive\";\n}\n\nexport function StepperWizard({\n children,\n initialStep = 0,\n currentStep: controlledStep,\n onStepChange,\n onFinalStepCompleted,\n stepCircleContainerClassName,\n stepContainerClassName,\n contentClassName,\n footerClassName,\n backButtonProps,\n nextButtonProps,\n backButtonText = \"Back\",\n nextButtonText = \"Continue\",\n completeButtonText = \"Complete\",\n disableStepIndicators = false,\n renderStepIndicator,\n className,\n}: StepperWizardProps) {\n const stepsArray = Children.toArray(children);\n const totalSteps = stepsArray.length;\n const [internalStep, setInternalStep] = useState(() =>\n clampStep(initialStep, totalSteps),\n );\n const [direction, setDirection] = useState(0);\n\n const currentStep = clampStep(controlledStep ?? internalStep, totalSteps);\n const isCompleted = currentStep >= totalSteps;\n const isLastStep = totalSteps > 0 && currentStep === totalSteps - 1;\n\n const commitStep = useCallback(\n (nextStep: number) => {\n const clampedStep = clampStep(nextStep, totalSteps);\n\n if (controlledStep === undefined) {\n setInternalStep(clampedStep);\n }\n\n if (clampedStep >= totalSteps) {\n onFinalStepCompleted?.();\n return;\n }\n\n onStepChange?.(clampedStep);\n },\n [controlledStep, onFinalStepCompleted, onStepChange, totalSteps],\n );\n\n if (totalSteps === 0) {\n return null;\n }\n\n const handleBack = () => {\n if (currentStep > 0) {\n setDirection(-1);\n commitStep(currentStep - 1);\n }\n };\n\n const handleNext = () => {\n if (!isLastStep) {\n setDirection(1);\n commitStep(currentStep + 1);\n }\n };\n\n const handleComplete = () => {\n setDirection(1);\n commitStep(totalSteps);\n };\n\n const navigateToStep = (stepIndex: number) => {\n if (stepIndex === currentStep || disableStepIndicators) {\n return;\n }\n\n setDirection(stepIndex > currentStep ? 1 : -1);\n commitStep(stepIndex);\n };\n\n return (\n <div\n className={mergeClassNames(\n \"flex min-h-full w-full flex-1 items-center justify-center p-4\",\n className,\n )}\n >\n <div\n className={mergeClassNames(\n \"mx-auto w-full max-w-3xl rounded-3xl border border-ds-border-2 bg-ds-canvas shadow-2\",\n stepCircleContainerClassName,\n )}\n >\n <div\n className={mergeClassNames(\n \"flex w-full items-center gap-3 border-b border-ds-border-2 px-6 py-6 sm:px-8\",\n stepContainerClassName,\n )}\n >\n {stepsArray.map((_, index) => {\n const status = getIndicatorStatus(index, currentStep);\n const isClickable = !disableStepIndicators && index !== currentStep;\n const indicatorProps: StepperWizardIndicatorRenderProps = {\n stepIndex: index,\n stepNumber: index + 1,\n currentStep,\n status,\n isClickable,\n onStepClick: navigateToStep,\n };\n\n return (\n <div\n key={`wizard-step-${index + 1}`}\n className=\"flex flex-1 items-center\"\n >\n {renderStepIndicator ? (\n renderStepIndicator(indicatorProps)\n ) : (\n <WizardStepIndicator {...indicatorProps} />\n )}\n {index < totalSteps - 1 ? (\n <WizardStepConnector isComplete={currentStep > index} />\n ) : null}\n </div>\n );\n })}\n </div>\n\n <WizardStepContentWrapper\n isCompleted={isCompleted}\n currentStep={currentStep}\n direction={direction}\n className={mergeClassNames(\"px-6 py-6 sm:px-8\", contentClassName)}\n >\n {stepsArray[currentStep]}\n </WizardStepContentWrapper>\n\n {!isCompleted ? (\n <div\n className={mergeClassNames(\n \"px-6 pb-6 sm:px-8 sm:pb-8\",\n footerClassName,\n )}\n >\n <div\n className={mergeClassNames(\n \"mt-6 flex gap-3\",\n currentStep > 0 ? \"justify-between\" : \"justify-end\",\n )}\n >\n {currentStep > 0 ? (\n <Button\n onClick={handleBack}\n className=\"rounded-md border-transparent bg-transparent px-3 py-2 text-sm font-medium text-ds-2 shadow-none hover:bg-ds-surface-1 hover:text-ds-1\"\n {...backButtonProps}\n >\n {backButtonText}\n </Button>\n ) : null}\n <Button\n onClick={isLastStep ? handleComplete : handleNext}\n primary\n className=\"rounded-full px-4 py-2 text-sm font-semibold shadow-2\"\n {...nextButtonProps}\n >\n {isLastStep ? completeButtonText : nextButtonText}\n </Button>\n </div>\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\ninterface WizardStepContentWrapperProps {\n isCompleted: boolean;\n currentStep: number;\n direction: number;\n children: React.ReactNode;\n className?: string;\n}\n\nfunction WizardStepContentWrapper({\n isCompleted,\n currentStep,\n direction,\n children,\n className,\n}: WizardStepContentWrapperProps) {\n const [parentHeight, setParentHeight] = useState(0);\n const handleHeightReady = useCallback((height: number) => {\n setParentHeight(height);\n }, []);\n\n return (\n <motion.div\n style={{ position: \"relative\", overflow: \"hidden\" }}\n animate={{ height: isCompleted ? 0 : parentHeight }}\n transition={{ type: \"spring\", duration: 0.4 }}\n className={className}\n >\n <AnimatePresence initial={false} mode=\"wait\" custom={direction}>\n {!isCompleted ? (\n <WizardSlideTransition\n key={currentStep}\n direction={direction}\n onHeightReady={handleHeightReady}\n >\n {children}\n </WizardSlideTransition>\n ) : null}\n </AnimatePresence>\n </motion.div>\n );\n}\n\ninterface WizardSlideTransitionProps {\n children: React.ReactNode;\n direction: number;\n onHeightReady: (height: number) => void;\n}\n\nfunction WizardSlideTransition({\n children,\n direction,\n onHeightReady,\n}: WizardSlideTransitionProps) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n useIsomorphicLayoutEffect(() => {\n if (containerRef.current) {\n onHeightReady(containerRef.current.offsetHeight);\n }\n }, [children, onHeightReady]);\n\n return (\n <motion.div\n ref={containerRef}\n custom={direction}\n variants={wizardStepVariants}\n initial=\"enter\"\n animate=\"center\"\n exit=\"exit\"\n transition={{ duration: 0.35, ease: \"easeOut\" }}\n style={{ position: \"absolute\", inset: 0 }}\n >\n {children}\n </motion.div>\n );\n}\n\nconst wizardStepVariants = {\n enter: (direction: number) => ({\n x: direction >= 0 ? \"-100%\" : \"100%\",\n opacity: 0,\n }),\n center: {\n x: \"0%\",\n opacity: 1,\n },\n exit: (direction: number) => ({\n x: direction >= 0 ? \"40%\" : \"-40%\",\n opacity: 0,\n }),\n};\n\nexport function StepperWizardStep({\n children,\n className,\n}: StepperWizardStepProps) {\n return (\n <div className={mergeClassNames(\"space-y-4\", className)}>{children}</div>\n );\n}\n\nfunction WizardStepIndicator({\n stepIndex,\n stepNumber,\n status,\n isClickable,\n onStepClick,\n}: StepperWizardIndicatorRenderProps) {\n return (\n <motion.button\n type=\"button\"\n onClick={() => onStepClick(stepIndex)}\n className={mergeClassNames(\n \"relative z-10 flex h-10 w-10 shrink-0 items-center justify-center rounded-full border text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ds-focus/70 focus-visible:ring-offset-2 focus-visible:ring-offset-ds-surface-1\",\n isClickable ? \"cursor-pointer\" : \"cursor-default\",\n )}\n animate={status}\n initial={false}\n disabled={!isClickable}\n aria-current={status === \"active\" ? \"step\" : undefined}\n >\n <motion.span\n variants={{\n inactive: {\n scale: 1,\n backgroundColor: \"var(--ds-color-bg-surface)\",\n borderColor: \"var(--ds-color-border)\",\n color: \"var(--ds-color-fg-muted)\",\n },\n active: {\n scale: 1,\n backgroundColor: \"var(--ds-color-accent)\",\n borderColor: \"var(--ds-color-accent)\",\n color: \"var(--ds-color-fg-on-accent)\",\n },\n complete: {\n scale: 1,\n backgroundColor: \"var(--ds-color-accent)\",\n borderColor: \"var(--ds-color-accent)\",\n color: \"var(--ds-color-fg-on-accent)\",\n },\n }}\n transition={{ duration: 0.25 }}\n className=\"flex h-full w-full items-center justify-center rounded-full\"\n >\n {status === \"complete\" ? (\n <AnimatedWizardCheckIcon className=\"h-4 w-4\" />\n ) : status === \"active\" ? (\n <span className=\"h-2.5 w-2.5 rounded-full bg-current\" />\n ) : (\n <span>{stepNumber}</span>\n )}\n </motion.span>\n </motion.button>\n );\n}\n\nfunction WizardStepConnector({ isComplete }: { isComplete: boolean }) {\n return (\n <div className=\"relative mx-2 h-0.5 flex-1 overflow-hidden rounded-full bg-border\">\n <motion.div\n className=\"absolute inset-y-0 left-0 rounded-full bg-ds-accent\"\n initial={false}\n animate={isComplete ? \"complete\" : \"incomplete\"}\n variants={{\n incomplete: { width: 0 },\n complete: { width: \"100%\" },\n }}\n transition={{ duration: 0.35, ease: \"easeOut\" }}\n />\n </div>\n );\n}\n\nfunction AnimatedWizardCheckIcon({ className }: { className?: string }) {\n return (\n <span\n className={mergeClassNames(\"flex items-center justify-center\", className)}\n >\n <CheckIcon className=\"h-full w-full\" aria-hidden=\"true\" />\n </span>\n );\n}\n\nexport default StepperWizard;\n"],"mappings":"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"}
@@ -1,37 +1,14 @@
1
1
  import { n as useThemeContext } from "./theme-koPrLKQv.mjs";
2
- import { n as mergeClassNames } from "./utils-ati1KkDb.mjs";
3
- import { t as Button } from "./button-DddUhuR-.mjs";
2
+ import { n as mergeClassNames } from "./utils-7S0u48mU.mjs";
3
+ import { t as Button } from "./button-A6UTvrOu.mjs";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/components/effects/sun-to-moon-button/ThemeSwitcherButtons.tsx
6
- var BRAND_OPTIONS = [
7
- {
8
- value: "purple",
9
- label: "Purple",
10
- swatch: "var(--ds-brand-purple)"
11
- },
12
- {
13
- value: "teal",
14
- label: "Teal",
15
- swatch: "var(--ds-brand-teal)"
16
- },
17
- {
18
- value: "yellow",
19
- label: "Yellow",
20
- swatch: "var(--ds-brand-yellow)"
21
- },
22
- {
23
- value: "green",
24
- label: "Green",
25
- swatch: "var(--ds-brand-green)"
26
- }
27
- ];
28
- var VARIANT_OPTIONS = [{
29
- value: "default",
30
- label: "Default"
31
- }, {
32
- value: "alt",
33
- label: "Alt"
34
- }];
6
+ var BRAND_SWATCHES = {
7
+ purple: "var(--ds-brand-purple)",
8
+ teal: "var(--ds-brand-teal)",
9
+ yellow: "var(--ds-brand-yellow)",
10
+ green: "var(--ds-brand-green)"
11
+ };
35
12
  function ToggleButton({ label, active, onClick, swatch, showBrandState = false, mode }) {
36
13
  const isLightMode = mode === "light";
37
14
  const toneStyle = (() => {
@@ -51,7 +28,7 @@ function ToggleButton({ label, active, onClick, swatch, showBrandState = false,
51
28
  variant: "secondary",
52
29
  size: "small",
53
30
  onClick,
54
- className: mergeClassNames("group rounded-full border px-3 py-1.5 text-xs font-semibold transition-all duration-200", active ? "border-ds-border-1 bg-ds-surface-2 text-ds-1 shadow-sm" : "border-ds-border-3 bg-ds-surface-1 text-ds-2 hover:border-ds-border-2 hover:text-ds-1", showBrandState && isLightMode ? "bg-ds-surface-1! hover:bg-ds-surface-1!" : null, showBrandState && active ? "text-ds-1" : null),
31
+ className: mergeClassNames("group rounded-full border px-3 py-1.5 text-xs font-semibold transition-all duration-200", active ? "border-ds-border-accent bg-ds-surface-2 text-ds-1 shadow-sm ring-1 ring-ds-border-accent/40" : "border-ds-border-2 bg-ds-surface-1 text-ds-2 hover:border-ds-border-accent/50 hover:bg-ds-surface-2 hover:text-ds-1", showBrandState && isLightMode ? "bg-ds-surface-1! hover:bg-ds-surface-1!" : null, showBrandState && active ? "text-ds-1" : null),
55
32
  style: toneStyle,
56
33
  "aria-pressed": active,
57
34
  children: [swatch ? /* @__PURE__ */ jsx("span", {
@@ -61,52 +38,94 @@ function ToggleButton({ label, active, onClick, swatch, showBrandState = false,
61
38
  }) : null, /* @__PURE__ */ jsx("span", { children: label })]
62
39
  });
63
40
  }
64
- function ThemeSwitcherButtons({ className }) {
41
+ function ThemeSwitcherButtons({ className, labels = {} }) {
65
42
  const { mode, theme, variant, setMode, setTheme, setVariant } = useThemeContext();
43
+ const l = {
44
+ mode: labels.mode ?? "Mode",
45
+ light: labels.light ?? "Light",
46
+ dark: labels.dark ?? "Dark",
47
+ brand: labels.brand ?? "Brand",
48
+ variant: labels.variant ?? "Variant",
49
+ variantDefault: labels.variantDefault ?? "Default",
50
+ variantAlt: labels.variantAlt ?? "Alt",
51
+ purple: labels.purple ?? "Purple",
52
+ teal: labels.teal ?? "Teal",
53
+ yellow: labels.yellow ?? "Yellow",
54
+ green: labels.green ?? "Green"
55
+ };
56
+ const brandOptions = [
57
+ {
58
+ value: "purple",
59
+ label: l.purple,
60
+ swatch: BRAND_SWATCHES.purple
61
+ },
62
+ {
63
+ value: "teal",
64
+ label: l.teal,
65
+ swatch: BRAND_SWATCHES.teal
66
+ },
67
+ {
68
+ value: "yellow",
69
+ label: l.yellow,
70
+ swatch: BRAND_SWATCHES.yellow
71
+ },
72
+ {
73
+ value: "green",
74
+ label: l.green,
75
+ swatch: BRAND_SWATCHES.green
76
+ }
77
+ ];
78
+ const variantOptions = [{
79
+ value: "default",
80
+ label: l.variantDefault
81
+ }, {
82
+ value: "alt",
83
+ label: l.variantAlt
84
+ }];
66
85
  return /* @__PURE__ */ jsx("div", {
67
- className: mergeClassNames("w-full rounded-2xl border border-ds-border-2 bg-ds-surface-1 p-4 shadow-sm", className),
86
+ className: mergeClassNames("w-full rounded-2xl border border-ds-border-2 bg-ds-canvas p-4 shadow-sm", className),
68
87
  children: /* @__PURE__ */ jsxs("div", {
69
88
  className: "space-y-3",
70
89
  children: [
71
90
  /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
72
91
  className: "mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3",
73
- children: "Mode"
92
+ children: l.mode
74
93
  }), /* @__PURE__ */ jsxs("div", {
75
94
  className: "flex flex-wrap gap-2",
76
95
  children: [/* @__PURE__ */ jsx(ToggleButton, {
77
- label: "Light",
96
+ label: l.light,
78
97
  active: mode === "light",
79
98
  onClick: () => setMode("light")
80
99
  }), /* @__PURE__ */ jsx(ToggleButton, {
81
- label: "Dark",
100
+ label: l.dark,
82
101
  active: mode === "dark",
83
102
  onClick: () => setMode("dark")
84
103
  })]
85
104
  })] }),
86
105
  /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
87
106
  className: "mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3",
88
- children: "Brand"
107
+ children: l.brand
89
108
  }), /* @__PURE__ */ jsx("div", {
90
109
  className: "flex flex-wrap gap-2",
91
- children: BRAND_OPTIONS.map((option) => /* @__PURE__ */ jsx(ToggleButton, {
92
- label: option.label,
93
- active: theme === option.value,
94
- onClick: () => setTheme(option.value),
95
- swatch: option.swatch,
110
+ children: brandOptions.map((opt) => /* @__PURE__ */ jsx(ToggleButton, {
111
+ label: opt.label,
112
+ active: theme === opt.value,
113
+ onClick: () => setTheme(opt.value),
114
+ swatch: opt.swatch,
96
115
  showBrandState: true,
97
116
  mode
98
- }, option.value))
117
+ }, opt.value))
99
118
  })] }),
100
119
  /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
101
120
  className: "mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3",
102
- children: "Variant"
121
+ children: l.variant
103
122
  }), /* @__PURE__ */ jsx("div", {
104
123
  className: "flex flex-wrap gap-2",
105
- children: VARIANT_OPTIONS.map((option) => /* @__PURE__ */ jsx(ToggleButton, {
106
- label: option.label,
107
- active: variant === option.value,
108
- onClick: () => setVariant(option.value)
109
- }, option.value))
124
+ children: variantOptions.map((opt) => /* @__PURE__ */ jsx(ToggleButton, {
125
+ label: opt.label,
126
+ active: variant === opt.value,
127
+ onClick: () => setVariant(opt.value)
128
+ }, opt.value))
110
129
  })] })
111
130
  ]
112
131
  })
@@ -115,4 +134,4 @@ function ThemeSwitcherButtons({ className }) {
115
134
  //#endregion
116
135
  export { ThemeSwitcherButtons as t };
117
136
 
118
- //# sourceMappingURL=sun-to-moon-button-DcRX0obV.mjs.map
137
+ //# sourceMappingURL=sun-to-moon-button-BJtBEaa3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sun-to-moon-button-BJtBEaa3.mjs","names":[],"sources":["../../src/components/effects/sun-to-moon-button/ThemeSwitcherButtons.tsx"],"sourcesContent":["import type {\n ThemeColorType,\n ThemeModeType,\n ThemeVariantType,\n} from \"../../../foundations/theme\";\nimport { useThemeContext } from \"../../../foundations/theme\";\nimport { Button } from \"../../forms/button\";\nimport { mergeClassNames } from \"../../../utils\";\nimport type { CSSProperties } from \"react\";\n\nexport interface ThemeSwitcherLabels {\n mode?: string;\n light?: string;\n dark?: string;\n brand?: string;\n variant?: string;\n variantDefault?: string;\n variantAlt?: string;\n purple?: string;\n teal?: string;\n yellow?: string;\n green?: string;\n}\n\nexport interface ThemeSwitcherButtonsProps {\n className?: string;\n /** Override any label for localisation / translation. */\n labels?: ThemeSwitcherLabels;\n}\n\nconst BRAND_SWATCHES: Record<ThemeColorType, string> = {\n purple: \"var(--ds-brand-purple)\",\n teal: \"var(--ds-brand-teal)\",\n yellow: \"var(--ds-brand-yellow)\",\n green: \"var(--ds-brand-green)\",\n};\n\nfunction ToggleButton({\n label,\n active,\n onClick,\n swatch,\n showBrandState = false,\n mode,\n}: {\n label: string;\n active: boolean;\n onClick: () => void;\n swatch?: string;\n showBrandState?: boolean;\n mode?: ThemeModeType;\n}) {\n const isLightMode = mode === \"light\";\n const toneStyle: CSSProperties | undefined = (() => {\n if (!showBrandState || !swatch) {\n return undefined;\n }\n\n if (isLightMode) {\n return {\n borderColor: active ? swatch : \"var(--ds-border-2)\",\n backgroundColor: active\n ? `color-mix(in srgb, ${swatch} 12%, #ffffff)`\n : \"#ffffff\",\n color: active\n ? `color-mix(in srgb, ${swatch} 76%, var(--ds-text-1))`\n : \"var(--ds-text-2)\",\n boxShadow: active\n ? `0 0 0 1px color-mix(in srgb, ${swatch} 24%, transparent)`\n : \"none\",\n };\n }\n\n return {\n borderColor: active\n ? swatch\n : `color-mix(in srgb, ${swatch} 42%, var(--ds-border-3))`,\n backgroundColor: active\n ? `color-mix(in srgb, ${swatch} 16%, var(--ds-surface-1))`\n : `color-mix(in srgb, ${swatch} 6%, var(--ds-surface-1))`,\n };\n })();\n\n return (\n <Button\n variant=\"secondary\"\n size=\"small\"\n onClick={onClick}\n className={mergeClassNames(\n \"group rounded-full border px-3 py-1.5 text-xs font-semibold transition-all duration-200\",\n active\n ? \"border-ds-border-accent bg-ds-surface-2 text-ds-1 shadow-sm ring-1 ring-ds-border-accent/40\"\n : \"border-ds-border-2 bg-ds-surface-1 text-ds-2 hover:border-ds-border-accent/50 hover:bg-ds-surface-2 hover:text-ds-1\",\n showBrandState && isLightMode\n ? \"bg-ds-surface-1! hover:bg-ds-surface-1!\"\n : null,\n showBrandState && active ? \"text-ds-1\" : null,\n )}\n style={toneStyle}\n aria-pressed={active}\n >\n {swatch ? (\n <span\n className={mergeClassNames(\n \"h-2.5 w-2.5 rounded-full ring-1 ring-black/10 transition-transform duration-200 group-hover:scale-110\",\n active\n ? isLightMode\n ? \"scale-110 ring-2 ring-black/15\"\n : \"scale-110 ring-2 ring-white/35\"\n : \"scale-100 opacity-90\",\n )}\n style={{ backgroundColor: swatch }}\n aria-hidden=\"true\"\n />\n ) : null}\n <span>{label}</span>\n </Button>\n );\n}\n\nexport default function ThemeSwitcherButtons({\n className,\n labels = {},\n}: ThemeSwitcherButtonsProps) {\n const { mode, theme, variant, setMode, setTheme, setVariant } =\n useThemeContext();\n\n const l: Required<ThemeSwitcherLabels> = {\n mode: labels.mode ?? \"Mode\",\n light: labels.light ?? \"Light\",\n dark: labels.dark ?? \"Dark\",\n brand: labels.brand ?? \"Brand\",\n variant: labels.variant ?? \"Variant\",\n variantDefault: labels.variantDefault ?? \"Default\",\n variantAlt: labels.variantAlt ?? \"Alt\",\n purple: labels.purple ?? \"Purple\",\n teal: labels.teal ?? \"Teal\",\n yellow: labels.yellow ?? \"Yellow\",\n green: labels.green ?? \"Green\",\n };\n\n const brandOptions: Array<{ value: ThemeColorType; label: string; swatch: string }> = [\n { value: \"purple\", label: l.purple, swatch: BRAND_SWATCHES.purple },\n { value: \"teal\", label: l.teal, swatch: BRAND_SWATCHES.teal },\n { value: \"yellow\", label: l.yellow, swatch: BRAND_SWATCHES.yellow },\n { value: \"green\", label: l.green, swatch: BRAND_SWATCHES.green },\n ];\n\n const variantOptions: Array<{ value: ThemeVariantType; label: string }> = [\n { value: \"default\", label: l.variantDefault },\n { value: \"alt\", label: l.variantAlt },\n ];\n\n return (\n <div\n className={mergeClassNames(\n \"w-full rounded-2xl border border-ds-border-2 bg-ds-canvas p-4 shadow-sm\",\n className,\n )}\n >\n <div className=\"space-y-3\">\n <div>\n <p className=\"mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3\">\n {l.mode}\n </p>\n <div className=\"flex flex-wrap gap-2\">\n <ToggleButton label={l.light} active={mode === \"light\"} onClick={() => setMode(\"light\")} />\n <ToggleButton label={l.dark} active={mode === \"dark\"} onClick={() => setMode(\"dark\")} />\n </div>\n </div>\n\n <div>\n <p className=\"mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3\">\n {l.brand}\n </p>\n <div className=\"flex flex-wrap gap-2\">\n {brandOptions.map((opt) => (\n <ToggleButton\n key={opt.value}\n label={opt.label}\n active={theme === opt.value}\n onClick={() => setTheme(opt.value)}\n swatch={opt.swatch}\n showBrandState\n mode={mode}\n />\n ))}\n </div>\n </div>\n\n <div>\n <p className=\"mb-2 text-[11px] font-semibold uppercase tracking-[0.12em] text-ds-3\">\n {l.variant}\n </p>\n <div className=\"flex flex-wrap gap-2\">\n {variantOptions.map((opt) => (\n <ToggleButton\n key={opt.value}\n label={opt.label}\n active={variant === opt.value}\n onClick={() => setVariant(opt.value)}\n />\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}