erp-pro-ui 0.1.2 → 0.1.4

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 (198) hide show
  1. package/dist/animations.css +40 -0
  2. package/dist/calendar.cjs +1 -1
  3. package/dist/calendar.mjs +1 -1
  4. package/dist/card.cjs +1 -1
  5. package/dist/card.mjs +1 -1
  6. package/dist/carousel.cjs +1 -1
  7. package/dist/carousel.mjs +1 -1
  8. package/dist/catalog.cjs +6 -0
  9. package/dist/catalog.cjs.map +1 -1
  10. package/dist/catalog.d.ts +11 -1
  11. package/dist/catalog.d.ts.map +1 -1
  12. package/dist/catalog.mjs +6 -0
  13. package/dist/catalog.mjs.map +1 -1
  14. package/dist/charts.cjs +2 -1
  15. package/dist/charts.mjs +2 -2
  16. package/dist/checkbox.cjs +1 -1
  17. package/dist/checkbox.mjs +1 -1
  18. package/dist/chip.cjs +1 -1
  19. package/dist/chip.mjs +1 -1
  20. package/dist/chroma-grid.cjs +1 -1
  21. package/dist/chroma-grid.mjs +1 -1
  22. package/dist/chunks/{calendar-xrGmvukr.cjs → calendar-Cpp_Rc7T.cjs} +58 -17
  23. package/dist/chunks/calendar-Cpp_Rc7T.cjs.map +1 -0
  24. package/dist/chunks/{calendar-BarcG6x_.mjs → calendar-DrCgT_pj.mjs} +58 -17
  25. package/dist/chunks/calendar-DrCgT_pj.mjs.map +1 -0
  26. package/dist/chunks/{card-gt-HZh0h.cjs → card-C5_tFK6Q.cjs} +1 -1
  27. package/dist/chunks/{card-gt-HZh0h.cjs.map → card-C5_tFK6Q.cjs.map} +1 -1
  28. package/dist/chunks/{card-CcIF6z2H.mjs → card-Dh8wNv8N.mjs} +1 -1
  29. package/dist/chunks/{card-CcIF6z2H.mjs.map → card-Dh8wNv8N.mjs.map} +1 -1
  30. package/dist/chunks/{carousel-DJdqBVRK.mjs → carousel-BYwqI4cA.mjs} +1 -1
  31. package/dist/chunks/{carousel-DJdqBVRK.mjs.map → carousel-BYwqI4cA.mjs.map} +1 -1
  32. package/dist/chunks/{carousel-Cq5uwqQt.cjs → carousel-C1338X8h.cjs} +1 -1
  33. package/dist/chunks/{carousel-Cq5uwqQt.cjs.map → carousel-C1338X8h.cjs.map} +1 -1
  34. package/dist/chunks/{charts-DugYWvEf.mjs → charts-BYvM4TMG.mjs} +371 -117
  35. package/dist/chunks/charts-BYvM4TMG.mjs.map +1 -0
  36. package/dist/chunks/{charts-BpElnsoR.cjs → charts-DbxyHtlX.cjs} +375 -115
  37. package/dist/chunks/charts-DbxyHtlX.cjs.map +1 -0
  38. package/dist/chunks/{checkbox-yHuSw-hV.cjs → checkbox-CxOcjoGP.cjs} +1 -1
  39. package/dist/chunks/{checkbox-yHuSw-hV.cjs.map → checkbox-CxOcjoGP.cjs.map} +1 -1
  40. package/dist/chunks/{checkbox-DvwlGwWe.mjs → checkbox-Pr49U9F1.mjs} +1 -1
  41. package/dist/chunks/{checkbox-DvwlGwWe.mjs.map → checkbox-Pr49U9F1.mjs.map} +1 -1
  42. package/dist/chunks/{chip-DcBji__g.cjs → chip-B4ol1yPk.cjs} +1 -1
  43. package/dist/chunks/{chip-DcBji__g.cjs.map → chip-B4ol1yPk.cjs.map} +1 -1
  44. package/dist/chunks/{chip-BGSUmnlO.mjs → chip-DdnBLdpl.mjs} +1 -1
  45. package/dist/chunks/{chip-BGSUmnlO.mjs.map → chip-DdnBLdpl.mjs.map} +1 -1
  46. package/dist/chunks/{chroma-grid-Cdeql_2C.mjs → chroma-grid-BAo6V5A7.mjs} +1 -1
  47. package/dist/chunks/{chroma-grid-Cdeql_2C.mjs.map → chroma-grid-BAo6V5A7.mjs.map} +1 -1
  48. package/dist/chunks/{chroma-grid-9E9j1s9I.cjs → chroma-grid-CIk0dsNS.cjs} +1 -1
  49. package/dist/chunks/{chroma-grid-9E9j1s9I.cjs.map → chroma-grid-CIk0dsNS.cjs.map} +1 -1
  50. package/dist/chunks/{color-palette-BLvDnCOD.cjs → color-palette-2TuEMkAn.cjs} +1 -1
  51. package/dist/chunks/{color-palette-BLvDnCOD.cjs.map → color-palette-2TuEMkAn.cjs.map} +1 -1
  52. package/dist/chunks/{color-palette-CXlCDiZz.mjs → color-palette-euKQMWlV.mjs} +1 -1
  53. package/dist/chunks/{color-palette-CXlCDiZz.mjs.map → color-palette-euKQMWlV.mjs.map} +1 -1
  54. package/dist/chunks/{combobox-BXu3s0dt.cjs → combobox-CwGubKTt.cjs} +2 -2
  55. package/dist/chunks/combobox-CwGubKTt.cjs.map +1 -0
  56. package/dist/chunks/{combobox-CjK-qG4k.mjs → combobox-DrFmkI0F.mjs} +2 -2
  57. package/dist/chunks/combobox-DrFmkI0F.mjs.map +1 -0
  58. package/dist/chunks/{data-table-DyEQn9Yj.mjs → data-table-Bo80m7qV.mjs} +8 -8
  59. package/dist/chunks/{data-table-DyEQn9Yj.mjs.map → data-table-Bo80m7qV.mjs.map} +1 -1
  60. package/dist/chunks/{data-table-9HELVsYR.cjs → data-table-W1sK5tkL.cjs} +8 -8
  61. package/dist/chunks/{data-table-9HELVsYR.cjs.map → data-table-W1sK5tkL.cjs.map} +1 -1
  62. package/dist/chunks/{date-picker-D8gaaMlJ.mjs → date-picker-CNPORxhv.mjs} +87 -17
  63. package/dist/chunks/date-picker-CNPORxhv.mjs.map +1 -0
  64. package/dist/chunks/{date-picker-W9om1j7A.cjs → date-picker-CZo68Fkl.cjs} +87 -17
  65. package/dist/chunks/date-picker-CZo68Fkl.cjs.map +1 -0
  66. package/dist/chunks/input-BWM6G7jq.cjs +117 -0
  67. package/dist/chunks/input-BWM6G7jq.cjs.map +1 -0
  68. package/dist/chunks/input-Bt_r_B_c.mjs +105 -0
  69. package/dist/chunks/input-Bt_r_B_c.mjs.map +1 -0
  70. package/dist/chunks/{multi-select-combobox-ELSH_Xr4.mjs → multi-select-combobox-D46M-AN9.mjs} +2 -2
  71. package/dist/chunks/multi-select-combobox-D46M-AN9.mjs.map +1 -0
  72. package/dist/chunks/{multi-select-combobox-UW0X15W7.cjs → multi-select-combobox-dS6bJE_e.cjs} +2 -2
  73. package/dist/chunks/multi-select-combobox-dS6bJE_e.cjs.map +1 -0
  74. package/dist/chunks/{otp-input-B6zzOEqw.cjs → otp-input-DSW9Ca_D.cjs} +2 -2
  75. package/dist/chunks/otp-input-DSW9Ca_D.cjs.map +1 -0
  76. package/dist/chunks/{otp-input-Bg4nQG6x.mjs → otp-input-DeAi4nJ_.mjs} +2 -2
  77. package/dist/chunks/otp-input-DeAi4nJ_.mjs.map +1 -0
  78. package/dist/chunks/{progress-bar-C9FZDrju.mjs → progress-bar-B9sy7WBT.mjs} +1 -1
  79. package/dist/chunks/{progress-bar-C9FZDrju.mjs.map → progress-bar-B9sy7WBT.mjs.map} +1 -1
  80. package/dist/chunks/{progress-bar-C1OvQ-NI.cjs → progress-bar-BdvQtpm3.cjs} +1 -1
  81. package/dist/chunks/{progress-bar-C1OvQ-NI.cjs.map → progress-bar-BdvQtpm3.cjs.map} +1 -1
  82. package/dist/chunks/select-B8UQ6Uq5.mjs +170 -0
  83. package/dist/chunks/select-B8UQ6Uq5.mjs.map +1 -0
  84. package/dist/chunks/select-CCUSMvfS.cjs +176 -0
  85. package/dist/chunks/select-CCUSMvfS.cjs.map +1 -0
  86. package/dist/chunks/skeleton-BNea1Rcp.cjs +422 -0
  87. package/dist/chunks/skeleton-BNea1Rcp.cjs.map +1 -0
  88. package/dist/chunks/skeleton-CtLumdRw.mjs +368 -0
  89. package/dist/chunks/skeleton-CtLumdRw.mjs.map +1 -0
  90. package/dist/chunks/stepper-D6qQbZdg.cjs +642 -0
  91. package/dist/chunks/stepper-D6qQbZdg.cjs.map +1 -0
  92. package/dist/chunks/stepper-DUknuW2E.mjs +618 -0
  93. package/dist/chunks/stepper-DUknuW2E.mjs.map +1 -0
  94. package/dist/chunks/{textarea-CU5C-Zw9.mjs → textarea-Blky_fLK.mjs} +2 -2
  95. package/dist/chunks/{textarea-CU5C-Zw9.mjs.map → textarea-Blky_fLK.mjs.map} +1 -1
  96. package/dist/chunks/{textarea-CAUsyu4-.cjs → textarea-ok_NlE2p.cjs} +2 -2
  97. package/dist/chunks/textarea-ok_NlE2p.cjs.map +1 -0
  98. package/dist/color-palette.cjs +1 -1
  99. package/dist/color-palette.mjs +1 -1
  100. package/dist/colors.css +3 -0
  101. package/dist/combobox.cjs +1 -1
  102. package/dist/combobox.mjs +1 -1
  103. package/dist/components/data-display/charts/AreaChart.d.ts.map +1 -1
  104. package/dist/components/data-display/charts/BarChart.d.ts +1 -0
  105. package/dist/components/data-display/charts/BarChart.d.ts.map +1 -1
  106. package/dist/components/data-display/charts/NeonLineChart.d.ts.map +1 -1
  107. package/dist/components/data-display/charts/PieChart.d.ts +18 -2
  108. package/dist/components/data-display/charts/PieChart.d.ts.map +1 -1
  109. package/dist/components/data-display/charts/PositiveNegativeBarChart.d.ts +21 -0
  110. package/dist/components/data-display/charts/PositiveNegativeBarChart.d.ts.map +1 -0
  111. package/dist/components/data-display/charts/StackedBarChart.d.ts.map +1 -1
  112. package/dist/components/data-display/charts/ThinBreakdownBar.d.ts +3 -0
  113. package/dist/components/data-display/charts/ThinBreakdownBar.d.ts.map +1 -1
  114. package/dist/components/data-display/charts/chartStyles.d.ts +24 -0
  115. package/dist/components/data-display/charts/chartStyles.d.ts.map +1 -0
  116. package/dist/components/data-display/charts/index.d.ts +2 -0
  117. package/dist/components/data-display/charts/index.d.ts.map +1 -1
  118. package/dist/components/data-display/skeleton/Skeleton.d.ts +32 -5
  119. package/dist/components/data-display/skeleton/Skeleton.d.ts.map +1 -1
  120. package/dist/components/data-display/skeleton/index.d.ts +2 -2
  121. package/dist/components/data-display/skeleton/index.d.ts.map +1 -1
  122. package/dist/components/forms/calendar/Calendar.d.ts.map +1 -1
  123. package/dist/components/forms/date-picker/DatePicker.d.ts.map +1 -1
  124. package/dist/components/forms/input/Input.d.ts.map +1 -1
  125. package/dist/components/forms/input/types.d.ts +5 -0
  126. package/dist/components/forms/input/types.d.ts.map +1 -1
  127. package/dist/components/forms/select/Select.d.ts.map +1 -1
  128. package/dist/components/forms/select/types.d.ts +7 -1
  129. package/dist/components/forms/select/types.d.ts.map +1 -1
  130. package/dist/components/navigation/stepper/Stepper1.d.ts +4 -0
  131. package/dist/components/navigation/stepper/Stepper1.d.ts.map +1 -0
  132. package/dist/components/navigation/stepper/Stepper2.d.ts +5 -0
  133. package/dist/components/navigation/stepper/Stepper2.d.ts.map +1 -0
  134. package/dist/components/navigation/stepper/index.d.ts +4 -1
  135. package/dist/components/navigation/stepper/index.d.ts.map +1 -1
  136. package/dist/components/navigation/stepper/types.d.ts +85 -0
  137. package/dist/components/navigation/stepper/types.d.ts.map +1 -1
  138. package/dist/data-table.cjs +1 -1
  139. package/dist/data-table.mjs +1 -1
  140. package/dist/date-picker.cjs +1 -1
  141. package/dist/date-picker.mjs +1 -1
  142. package/dist/docs.cjs +12 -2
  143. package/dist/docs.cjs.map +1 -1
  144. package/dist/docs.d.ts.map +1 -1
  145. package/dist/docs.mjs +12 -2
  146. package/dist/docs.mjs.map +1 -1
  147. package/dist/foundation.css +7 -0
  148. package/dist/index.cjs +32 -19
  149. package/dist/index.d.ts +7 -4
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.mjs +20 -20
  152. package/dist/input.cjs +1 -1
  153. package/dist/input.mjs +1 -1
  154. package/dist/multi-select-combobox.cjs +1 -1
  155. package/dist/multi-select-combobox.mjs +1 -1
  156. package/dist/otp-input.cjs +1 -1
  157. package/dist/otp-input.mjs +1 -1
  158. package/dist/progress-bar.cjs +1 -1
  159. package/dist/progress-bar.mjs +1 -1
  160. package/dist/select.cjs +1 -1
  161. package/dist/select.mjs +1 -1
  162. package/dist/skeleton.cjs +9 -1
  163. package/dist/skeleton.mjs +2 -2
  164. package/dist/stepper.cjs +5 -1
  165. package/dist/stepper.mjs +2 -2
  166. package/dist/textarea.cjs +1 -1
  167. package/dist/textarea.mjs +1 -1
  168. package/dist/tokens.css +11 -2
  169. package/package.json +9 -9
  170. package/dist/chunks/calendar-BarcG6x_.mjs.map +0 -1
  171. package/dist/chunks/calendar-xrGmvukr.cjs.map +0 -1
  172. package/dist/chunks/charts-BpElnsoR.cjs.map +0 -1
  173. package/dist/chunks/charts-DugYWvEf.mjs.map +0 -1
  174. package/dist/chunks/combobox-BXu3s0dt.cjs.map +0 -1
  175. package/dist/chunks/combobox-CjK-qG4k.mjs.map +0 -1
  176. package/dist/chunks/date-picker-D8gaaMlJ.mjs.map +0 -1
  177. package/dist/chunks/date-picker-W9om1j7A.cjs.map +0 -1
  178. package/dist/chunks/input-D9qZNqXV.cjs +0 -99
  179. package/dist/chunks/input-D9qZNqXV.cjs.map +0 -1
  180. package/dist/chunks/input-wNqevfQ4.mjs +0 -87
  181. package/dist/chunks/input-wNqevfQ4.mjs.map +0 -1
  182. package/dist/chunks/multi-select-combobox-ELSH_Xr4.mjs.map +0 -1
  183. package/dist/chunks/multi-select-combobox-UW0X15W7.cjs.map +0 -1
  184. package/dist/chunks/otp-input-B6zzOEqw.cjs.map +0 -1
  185. package/dist/chunks/otp-input-Bg4nQG6x.mjs.map +0 -1
  186. package/dist/chunks/select-D71tk6-I.mjs +0 -152
  187. package/dist/chunks/select-D71tk6-I.mjs.map +0 -1
  188. package/dist/chunks/select-WC_kPqUP.cjs +0 -158
  189. package/dist/chunks/select-WC_kPqUP.cjs.map +0 -1
  190. package/dist/chunks/skeleton-BhYWOp0Q.mjs +0 -215
  191. package/dist/chunks/skeleton-BhYWOp0Q.mjs.map +0 -1
  192. package/dist/chunks/skeleton-DTXpHYYB.cjs +0 -221
  193. package/dist/chunks/skeleton-DTXpHYYB.cjs.map +0 -1
  194. package/dist/chunks/stepper-D4yQsQB0.mjs +0 -261
  195. package/dist/chunks/stepper-D4yQsQB0.mjs.map +0 -1
  196. package/dist/chunks/stepper-fY-Sx72k.cjs +0 -267
  197. package/dist/chunks/stepper-fY-Sx72k.cjs.map +0 -1
  198. package/dist/chunks/textarea-CAUsyu4-.cjs.map +0 -1
@@ -0,0 +1,618 @@
1
+ import { n as mergeClassNames } from "./utils-ati1KkDb.mjs";
2
+ import { J as CheckIcon, _ as AlertTriangleIcon, q as CloseIcon } from "./icons-DuumN7z-.mjs";
3
+ import { t as Button } from "./button-B0Lhj0AS.mjs";
4
+ import { Children, useCallback, useEffect, useLayoutEffect, useRef, useState, useSyncExternalStore } from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { AnimatePresence, motion } from "framer-motion";
7
+ //#region src/components/navigation/stepper/Stepper.tsx
8
+ var sizeConfig = {
9
+ sm: {
10
+ indicator: "w-8 h-8",
11
+ icon: "w-4 h-4",
12
+ text: "text-xs",
13
+ connectorThickness: "2px"
14
+ },
15
+ md: {
16
+ indicator: "w-10 h-10",
17
+ icon: "w-5 h-5",
18
+ text: "text-sm",
19
+ connectorThickness: "2px"
20
+ },
21
+ lg: {
22
+ indicator: "w-12 h-12",
23
+ icon: "w-6 h-6",
24
+ text: "text-base",
25
+ connectorThickness: "4px"
26
+ }
27
+ };
28
+ var getVariantStyles = (variant, status) => {
29
+ return {
30
+ default: {
31
+ completed: "bg-accent text-on-accent shadow-md shadow-accent/25",
32
+ current: "bg-accent text-on-accent ring-4 ring-focus/40 shadow-lg shadow-accent/30",
33
+ upcoming: "bg-neutral-200 text-neutral-500 dark:bg-neutral-700 dark:text-neutral-400",
34
+ error: "bg-red-500 text-white ring-4 ring-red-500/30"
35
+ },
36
+ glass: {
37
+ completed: "bg-accent/85 text-on-accent backdrop-blur-xl border border-accent/30 shadow-lg shadow-accent/20",
38
+ current: "bg-accent/90 text-on-accent backdrop-blur-xl border-2 border-accent ring-4 ring-focus/30 shadow-xl shadow-accent/30",
39
+ upcoming: "bg-white/60 text-neutral-500 backdrop-blur-xl border border-white/40 dark:bg-neutral-800/60 dark:text-neutral-400 dark:border-white/10",
40
+ error: "bg-red-500/80 text-white backdrop-blur-xl border border-red-400/30 ring-4 ring-red-500/20"
41
+ },
42
+ minimal: {
43
+ completed: "bg-accent-subtle text-accent",
44
+ current: "bg-accent text-on-accent shadow-sm",
45
+ upcoming: "bg-transparent text-neutral-400 border-2 border-neutral-300 dark:border-neutral-600",
46
+ error: "bg-red-100 text-red-500 dark:bg-red-900/30"
47
+ },
48
+ outlined: {
49
+ completed: "bg-transparent text-accent border-2 border-accent",
50
+ current: "bg-accent text-on-accent border-2 border-accent shadow-lg",
51
+ upcoming: "bg-transparent text-neutral-400 border-2 border-neutral-300 dark:border-neutral-600",
52
+ error: "bg-transparent text-red-500 border-2 border-red-500"
53
+ }
54
+ }[variant][status];
55
+ };
56
+ var StepIndicator = ({ step, index, status, size, variant, showNumbers, animated, colors }) => {
57
+ const config = sizeConfig[size];
58
+ const variantStyles = getVariantStyles(variant, status);
59
+ const customColorStyle = colors?.[status] ? {
60
+ backgroundColor: colors[status],
61
+ borderColor: colors[status]
62
+ } : void 0;
63
+ const renderContent = () => {
64
+ if (step.icon) return /* @__PURE__ */ jsx("span", {
65
+ className: config.icon,
66
+ children: step.icon
67
+ });
68
+ if (status === "completed") return /* @__PURE__ */ jsx(CheckIcon, {
69
+ className: config.icon,
70
+ "aria-hidden": "true"
71
+ });
72
+ if (status === "error") return /* @__PURE__ */ jsx(CloseIcon, {
73
+ className: config.icon,
74
+ "aria-hidden": "true"
75
+ });
76
+ if (showNumbers) return /* @__PURE__ */ jsx("span", {
77
+ className: "font-semibold",
78
+ children: index + 1
79
+ });
80
+ return /* @__PURE__ */ jsx("span", { className: mergeClassNames("rounded-full bg-current", size === "sm" ? "w-2 h-2" : "w-3 h-3") });
81
+ };
82
+ return /* @__PURE__ */ jsx(motion.div, {
83
+ className: mergeClassNames("rounded-full flex items-center justify-center transition-all duration-300", config.indicator, variantStyles),
84
+ style: customColorStyle,
85
+ initial: animated ? {
86
+ scale: .8,
87
+ opacity: 0
88
+ } : void 0,
89
+ animate: animated ? {
90
+ scale: 1,
91
+ opacity: 1
92
+ } : void 0,
93
+ whileHover: { scale: 1.05 },
94
+ whileTap: { scale: .95 },
95
+ transition: {
96
+ type: "spring",
97
+ stiffness: 400,
98
+ damping: 17
99
+ },
100
+ children: /* @__PURE__ */ jsx(AnimatePresence, {
101
+ mode: "wait",
102
+ children: /* @__PURE__ */ jsx(motion.span, {
103
+ initial: animated ? {
104
+ scale: 0,
105
+ rotate: -180
106
+ } : void 0,
107
+ animate: animated ? {
108
+ scale: 1,
109
+ rotate: 0
110
+ } : void 0,
111
+ exit: animated ? {
112
+ scale: 0,
113
+ rotate: 180
114
+ } : void 0,
115
+ transition: { duration: .2 },
116
+ children: renderContent()
117
+ }, status)
118
+ })
119
+ });
120
+ };
121
+ var Stepper = ({ steps, currentStep, onStepClick, orientation = "horizontal", size = "md", variant = "glass", showNumbers = true, clickable = true, showConnector = true, className, connectorClassName, stepClassName, showErrors = false, errorSteps = [], completedSteps, animated = true, colors }) => {
122
+ const isVertical = orientation === "vertical";
123
+ const config = sizeConfig[size];
124
+ const getStepStatus = (index) => {
125
+ if (showErrors && errorSteps.includes(index)) return "error";
126
+ if (completedSteps) {
127
+ if (completedSteps.includes(index)) return "completed";
128
+ if (index === currentStep) return "current";
129
+ return "upcoming";
130
+ }
131
+ if (index < currentStep) return "completed";
132
+ if (index === currentStep) return "current";
133
+ return "upcoming";
134
+ };
135
+ const handleStepClick = (index) => {
136
+ if (!clickable || !onStepClick) return;
137
+ if (steps[index].disabled) return;
138
+ const status = getStepStatus(index);
139
+ if (status === "completed" || status === "current") onStepClick(index);
140
+ };
141
+ return /* @__PURE__ */ jsxs("div", {
142
+ className: mergeClassNames("w-full relative", isVertical ? "flex flex-col" : "flex items-start justify-between", className),
143
+ children: [showConnector && (() => {
144
+ const paddingValue = variant === "glass" || variant === "outlined" || variant === "minimal" ? 4 : 2;
145
+ return /* @__PURE__ */ jsx("div", {
146
+ className: mergeClassNames("absolute rounded-full", variant === "glass" ? "bg-white/30 dark:bg-white/10 backdrop-blur-sm" : "bg-neutral-200 dark:bg-neutral-700", connectorClassName),
147
+ style: { ...isVertical ? {
148
+ top: "0",
149
+ bottom: "0",
150
+ left: `calc(${paddingValue}px + 1px + ${config.indicator.split(" ")[0].replace("w-", "")} * 0.125rem - ${config.connectorThickness} / 2)`,
151
+ width: config.connectorThickness
152
+ } : {
153
+ left: "0",
154
+ right: "0",
155
+ top: `calc(${paddingValue}px + 1px + ${config.indicator.split(" ")[1].replace("h-", "")} * 0.125rem - ${config.connectorThickness} / 2)`,
156
+ height: config.connectorThickness
157
+ } },
158
+ children: animated ? /* @__PURE__ */ jsx(motion.div, {
159
+ className: "absolute top-0 left-0 bg-accent rounded-full",
160
+ initial: { [isVertical ? "height" : "width"]: 0 },
161
+ animate: { [isVertical ? "height" : "width"]: `${steps.length > 1 ? Math.min(currentStep, steps.length - 1) / (steps.length - 1) * 100 : 0}%` },
162
+ transition: {
163
+ duration: .4,
164
+ ease: "easeOut"
165
+ },
166
+ style: {
167
+ ...isVertical ? { width: "100%" } : { height: "100%" },
168
+ backgroundColor: colors?.connector || colors?.completed
169
+ }
170
+ }) : /* @__PURE__ */ jsx("div", {
171
+ className: "absolute top-0 left-0 bg-accent rounded-full",
172
+ style: {
173
+ ...isVertical ? {
174
+ width: "100%",
175
+ height: `${steps.length > 1 ? Math.min(currentStep, steps.length - 1) / (steps.length - 1) * 100 : 0}%`
176
+ } : {
177
+ height: "100%",
178
+ width: `${steps.length > 1 ? Math.min(currentStep, steps.length - 1) / (steps.length - 1) * 100 : 0}%`
179
+ },
180
+ backgroundColor: colors?.connector || colors?.completed
181
+ }
182
+ })
183
+ });
184
+ })(), steps.map((step, index) => {
185
+ const status = getStepStatus(index);
186
+ const isLast = index === steps.length - 1;
187
+ const isClickable = clickable && !step.disabled;
188
+ const paddingValue = variant === "glass" || variant === "outlined" || variant === "minimal" ? 4 : 2;
189
+ return /* @__PURE__ */ jsxs("div", {
190
+ className: mergeClassNames("relative z-10", isVertical ? "flex gap-4 pb-8" : "flex flex-1 flex-col items-center", !isLast && isVertical && "mb-2", isVertical && isLast && "pb-0", stepClassName),
191
+ style: { ...!isVertical ? {
192
+ flexBasis: 0,
193
+ flexGrow: 1,
194
+ alignItems: index === 0 ? "flex-start" : isLast ? "flex-end" : "center"
195
+ } : {} },
196
+ children: [
197
+ /* @__PURE__ */ jsx("button", {
198
+ type: "button",
199
+ onClick: () => handleStepClick(index),
200
+ disabled: !isClickable,
201
+ className: mergeClassNames("relative z-10 shrink-0 flex items-center justify-center bg-white dark:bg-neutral-900 rounded-full", isClickable ? "cursor-pointer" : "cursor-default", !isVertical && index === 0 && "mx-0", !isVertical && isLast && "mx-0"),
202
+ style: { padding: `${paddingValue}px` },
203
+ "aria-current": status === "current" ? "step" : void 0,
204
+ children: /* @__PURE__ */ jsx(StepIndicator, {
205
+ step,
206
+ index,
207
+ status,
208
+ size,
209
+ variant,
210
+ showNumbers,
211
+ animated,
212
+ colors
213
+ })
214
+ }),
215
+ /* @__PURE__ */ jsxs(motion.div, {
216
+ className: mergeClassNames("mt-2", isVertical ? "flex-1 pb-6" : "text-center px-2", !isVertical && index === 0 && "text-left px-0", !isVertical && isLast && "text-right px-0", isVertical && isLast && "pb-0"),
217
+ style: isVertical ? { marginTop: "-4px" } : void 0,
218
+ initial: animated ? {
219
+ opacity: 0,
220
+ y: 10
221
+ } : void 0,
222
+ animate: animated ? {
223
+ opacity: 1,
224
+ y: 0
225
+ } : void 0,
226
+ transition: { delay: index * .1 },
227
+ children: [/* @__PURE__ */ jsxs("p", {
228
+ className: mergeClassNames("font-medium transition-colors duration-200", config.text, status === "current" ? "text-accent" : status === "completed" ? "text-neutral-700 dark:text-neutral-200" : status === "error" ? "text-red-500" : "text-neutral-500 dark:text-neutral-400"),
229
+ children: [step.title, step.optional && /* @__PURE__ */ jsx("span", {
230
+ className: "ml-1 text-neutral-400 dark:text-neutral-500 font-normal",
231
+ children: "(Optional)"
232
+ })]
233
+ }), step.description && /* @__PURE__ */ jsx("p", {
234
+ className: mergeClassNames("mt-0.5 text-neutral-500 dark:text-neutral-400", size === "sm" ? "text-xs" : "text-xs"),
235
+ children: step.description
236
+ })]
237
+ }),
238
+ isVertical && step.content && status === "current" && /* @__PURE__ */ jsx(motion.div, {
239
+ initial: {
240
+ opacity: 0,
241
+ height: 0
242
+ },
243
+ animate: {
244
+ opacity: 1,
245
+ height: "auto"
246
+ },
247
+ exit: {
248
+ opacity: 0,
249
+ height: 0
250
+ },
251
+ className: "pl-14 pb-4 w-full",
252
+ children: step.content
253
+ })
254
+ ]
255
+ }, step.id);
256
+ })]
257
+ });
258
+ };
259
+ Stepper.displayName = "Stepper";
260
+ //#endregion
261
+ //#region src/components/navigation/stepper/Stepper1.tsx
262
+ var DEFAULT_BREAKPOINT = 1080;
263
+ function subscribeToMediaQuery(query, onStoreChange) {
264
+ if (typeof window === "undefined") return () => void 0;
265
+ const mediaQuery = window.matchMedia(query);
266
+ mediaQuery.addEventListener("change", onStoreChange);
267
+ return () => mediaQuery.removeEventListener("change", onStoreChange);
268
+ }
269
+ function getMediaQuerySnapshot(query) {
270
+ if (typeof window === "undefined") return false;
271
+ return window.matchMedia(query).matches;
272
+ }
273
+ function getStepColors(state, isActive) {
274
+ if (isActive) return {
275
+ buttonClassName: "border-accent bg-accent/12 text-accent shadow-sm shadow-accent/10",
276
+ connectorClassName: "bg-accent",
277
+ badgeClassName: "border-accent bg-accent text-on-accent"
278
+ };
279
+ if (state === "valid") return {
280
+ buttonClassName: "border-success bg-success/10 text-success shadow-sm shadow-success/10",
281
+ connectorClassName: "bg-success",
282
+ badgeClassName: "border-success bg-success text-on-accent"
283
+ };
284
+ if (state === "invalid") return {
285
+ buttonClassName: "border-red-500 bg-red-500/10 text-red-600 dark:text-red-300",
286
+ connectorClassName: "bg-red-500",
287
+ badgeClassName: "border-red-500 bg-red-500 text-white"
288
+ };
289
+ return {
290
+ buttonClassName: "border-border bg-surface text-muted-foreground hover:border-border-strong hover:bg-canvas",
291
+ connectorClassName: "bg-border-strong/70",
292
+ badgeClassName: "border-border bg-background text-muted-foreground"
293
+ };
294
+ }
295
+ function renderStepContent(label, icon, state, stepNumber, badgeClassName) {
296
+ if (state === "valid") return /* @__PURE__ */ jsxs("span", {
297
+ className: "flex items-center gap-2",
298
+ children: [/* @__PURE__ */ jsx(CheckIcon, {
299
+ className: "h-5 w-5",
300
+ "aria-hidden": "true"
301
+ }), /* @__PURE__ */ jsx("span", {
302
+ className: "truncate",
303
+ children: label
304
+ })]
305
+ });
306
+ if (state === "invalid") return /* @__PURE__ */ jsxs("span", {
307
+ className: "flex items-center gap-2",
308
+ children: [/* @__PURE__ */ jsx(AlertTriangleIcon, {
309
+ className: "h-5 w-5",
310
+ "aria-hidden": "true"
311
+ }), /* @__PURE__ */ jsx("span", {
312
+ className: "truncate",
313
+ children: label
314
+ })]
315
+ });
316
+ if (icon) return /* @__PURE__ */ jsxs("span", {
317
+ className: "flex items-center gap-2",
318
+ children: [/* @__PURE__ */ jsx("span", {
319
+ className: "shrink-0",
320
+ children: icon
321
+ }), /* @__PURE__ */ jsx("span", {
322
+ className: "truncate",
323
+ children: label
324
+ })]
325
+ });
326
+ return /* @__PURE__ */ jsxs("span", {
327
+ className: "flex items-center gap-2",
328
+ children: [/* @__PURE__ */ jsx("span", {
329
+ className: mergeClassNames("flex h-6 w-6 shrink-0 items-center justify-center rounded-full border text-xs font-semibold", badgeClassName),
330
+ "aria-hidden": "true",
331
+ children: stepNumber
332
+ }), /* @__PURE__ */ jsx("span", {
333
+ className: "truncate",
334
+ children: label
335
+ })]
336
+ });
337
+ }
338
+ function StepperSteps({ steps, currentStep, onStepClick, stepStates = [], orientation = "responsive", responsiveBreakpoint = DEFAULT_BREAKPOINT, className, stepClassName, connectorClassName }) {
339
+ const responsiveQuery = `(max-width: ${responsiveBreakpoint}px)`;
340
+ const isCompact = useSyncExternalStore((onStoreChange) => {
341
+ if (orientation !== "responsive") return () => void 0;
342
+ return subscribeToMediaQuery(responsiveQuery, onStoreChange);
343
+ }, () => orientation === "responsive" ? getMediaQuerySnapshot(responsiveQuery) : false, () => false);
344
+ const isVertical = orientation === "vertical" || orientation === "responsive" && isCompact;
345
+ return /* @__PURE__ */ jsx("div", {
346
+ className: mergeClassNames(isVertical ? "flex w-full flex-col items-start" : "flex w-full items-center", className),
347
+ children: steps.map((step, index) => {
348
+ const stepNumber = index + 1;
349
+ const state = stepStates[index] ?? "untouched";
350
+ const isActive = index === currentStep;
351
+ const isClickable = typeof onStepClick === "function" && !isActive;
352
+ const colors = getStepColors(state, isActive);
353
+ return /* @__PURE__ */ jsxs("div", {
354
+ className: mergeClassNames(isVertical ? "w-full" : "flex min-w-0 flex-1 items-center"),
355
+ children: [/* @__PURE__ */ jsx(Button, {
356
+ disabled: !isClickable,
357
+ onClick: () => onStepClick?.(index),
358
+ className: mergeClassNames("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-focus/70 focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-default disabled:opacity-100", isVertical ? "w-full" : "w-full min-w-0", colors.buttonClassName, stepClassName),
359
+ "aria-current": isActive ? "step" : void 0,
360
+ "aria-invalid": state === "invalid" ? true : void 0,
361
+ children: renderStepContent(step.label, step.icon, state, stepNumber, colors.badgeClassName)
362
+ }), index < steps.length - 1 ? isVertical ? /* @__PURE__ */ jsx("div", {
363
+ className: mergeClassNames("mx-auto my-2 h-8 w-px rounded-full", colors.connectorClassName, connectorClassName),
364
+ "aria-hidden": "true"
365
+ }) : /* @__PURE__ */ jsx("div", {
366
+ className: mergeClassNames("mx-3 h-px min-w-6 flex-1 rounded-full", colors.connectorClassName, connectorClassName),
367
+ "aria-hidden": "true"
368
+ }) : null]
369
+ }, `${step.label}-${stepNumber}`);
370
+ })
371
+ });
372
+ }
373
+ //#endregion
374
+ //#region src/components/navigation/stepper/Stepper2.tsx
375
+ var useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
376
+ function clampStep(step, totalSteps) {
377
+ return Math.min(Math.max(step, 0), totalSteps);
378
+ }
379
+ function getIndicatorStatus(stepIndex, currentStep) {
380
+ if (stepIndex === currentStep) return "active";
381
+ if (stepIndex < currentStep) return "complete";
382
+ return "inactive";
383
+ }
384
+ function StepperWizard({ children, initialStep = 0, currentStep: controlledStep, onStepChange, onFinalStepCompleted, stepCircleContainerClassName, stepContainerClassName, contentClassName, footerClassName, backButtonProps, nextButtonProps, backButtonText = "Back", nextButtonText = "Continue", completeButtonText = "Complete", disableStepIndicators = false, renderStepIndicator, className }) {
385
+ const stepsArray = Children.toArray(children);
386
+ const totalSteps = stepsArray.length;
387
+ const [internalStep, setInternalStep] = useState(() => clampStep(initialStep, totalSteps));
388
+ const [direction, setDirection] = useState(0);
389
+ const currentStep = clampStep(controlledStep ?? internalStep, totalSteps);
390
+ const isCompleted = currentStep >= totalSteps;
391
+ const isLastStep = totalSteps > 0 && currentStep === totalSteps - 1;
392
+ const commitStep = useCallback((nextStep) => {
393
+ const clampedStep = clampStep(nextStep, totalSteps);
394
+ if (controlledStep === void 0) setInternalStep(clampedStep);
395
+ if (clampedStep >= totalSteps) {
396
+ onFinalStepCompleted?.();
397
+ return;
398
+ }
399
+ onStepChange?.(clampedStep);
400
+ }, [
401
+ controlledStep,
402
+ onFinalStepCompleted,
403
+ onStepChange,
404
+ totalSteps
405
+ ]);
406
+ if (totalSteps === 0) return null;
407
+ const handleBack = () => {
408
+ if (currentStep > 0) {
409
+ setDirection(-1);
410
+ commitStep(currentStep - 1);
411
+ }
412
+ };
413
+ const handleNext = () => {
414
+ if (!isLastStep) {
415
+ setDirection(1);
416
+ commitStep(currentStep + 1);
417
+ }
418
+ };
419
+ const handleComplete = () => {
420
+ setDirection(1);
421
+ commitStep(totalSteps);
422
+ };
423
+ const navigateToStep = (stepIndex) => {
424
+ if (stepIndex === currentStep || disableStepIndicators) return;
425
+ setDirection(stepIndex > currentStep ? 1 : -1);
426
+ commitStep(stepIndex);
427
+ };
428
+ return /* @__PURE__ */ jsx("div", {
429
+ className: mergeClassNames("flex min-h-full w-full flex-1 items-center justify-center p-4", className),
430
+ children: /* @__PURE__ */ jsxs("div", {
431
+ className: mergeClassNames("mx-auto w-full max-w-3xl rounded-3xl border border-border bg-background shadow-2", stepCircleContainerClassName),
432
+ children: [
433
+ /* @__PURE__ */ jsx("div", {
434
+ className: mergeClassNames("flex w-full items-center gap-3 border-b border-border px-6 py-6 sm:px-8", stepContainerClassName),
435
+ children: stepsArray.map((_, index) => {
436
+ const status = getIndicatorStatus(index, currentStep);
437
+ const isClickable = !disableStepIndicators && index !== currentStep;
438
+ const indicatorProps = {
439
+ stepIndex: index,
440
+ stepNumber: index + 1,
441
+ currentStep,
442
+ status,
443
+ isClickable,
444
+ onStepClick: navigateToStep
445
+ };
446
+ return /* @__PURE__ */ jsxs("div", {
447
+ className: "flex flex-1 items-center",
448
+ children: [renderStepIndicator ? renderStepIndicator(indicatorProps) : /* @__PURE__ */ jsx(WizardStepIndicator, { ...indicatorProps }), index < totalSteps - 1 ? /* @__PURE__ */ jsx(WizardStepConnector, { isComplete: currentStep > index }) : null]
449
+ }, `wizard-step-${index + 1}`);
450
+ })
451
+ }),
452
+ /* @__PURE__ */ jsx(WizardStepContentWrapper, {
453
+ isCompleted,
454
+ currentStep,
455
+ direction,
456
+ className: mergeClassNames("px-6 py-6 sm:px-8", contentClassName),
457
+ children: stepsArray[currentStep]
458
+ }),
459
+ !isCompleted ? /* @__PURE__ */ jsx("div", {
460
+ className: mergeClassNames("px-6 pb-6 sm:px-8 sm:pb-8", footerClassName),
461
+ children: /* @__PURE__ */ jsxs("div", {
462
+ className: mergeClassNames("mt-6 flex gap-3", currentStep > 0 ? "justify-between" : "justify-end"),
463
+ children: [currentStep > 0 ? /* @__PURE__ */ jsx(Button, {
464
+ onClick: handleBack,
465
+ className: "rounded-md border-transparent bg-transparent px-3 py-2 text-sm font-medium text-muted-foreground shadow-none hover:bg-surface hover:text-foreground",
466
+ ...backButtonProps,
467
+ children: backButtonText
468
+ }) : null, /* @__PURE__ */ jsx(Button, {
469
+ onClick: isLastStep ? handleComplete : handleNext,
470
+ primary: true,
471
+ className: "rounded-full px-4 py-2 text-sm font-semibold shadow-2",
472
+ ...nextButtonProps,
473
+ children: isLastStep ? completeButtonText : nextButtonText
474
+ })]
475
+ })
476
+ }) : null
477
+ ]
478
+ })
479
+ });
480
+ }
481
+ function WizardStepContentWrapper({ isCompleted, currentStep, direction, children, className }) {
482
+ const [parentHeight, setParentHeight] = useState(0);
483
+ const handleHeightReady = useCallback((height) => {
484
+ setParentHeight(height);
485
+ }, []);
486
+ return /* @__PURE__ */ jsx(motion.div, {
487
+ style: {
488
+ position: "relative",
489
+ overflow: "hidden"
490
+ },
491
+ animate: { height: isCompleted ? 0 : parentHeight },
492
+ transition: {
493
+ type: "spring",
494
+ duration: .4
495
+ },
496
+ className,
497
+ children: /* @__PURE__ */ jsx(AnimatePresence, {
498
+ initial: false,
499
+ mode: "wait",
500
+ custom: direction,
501
+ children: !isCompleted ? /* @__PURE__ */ jsx(WizardSlideTransition, {
502
+ direction,
503
+ onHeightReady: handleHeightReady,
504
+ children
505
+ }, currentStep) : null
506
+ })
507
+ });
508
+ }
509
+ function WizardSlideTransition({ children, direction, onHeightReady }) {
510
+ const containerRef = useRef(null);
511
+ useIsomorphicLayoutEffect(() => {
512
+ if (containerRef.current) onHeightReady(containerRef.current.offsetHeight);
513
+ }, [children, onHeightReady]);
514
+ return /* @__PURE__ */ jsx(motion.div, {
515
+ ref: containerRef,
516
+ custom: direction,
517
+ variants: wizardStepVariants,
518
+ initial: "enter",
519
+ animate: "center",
520
+ exit: "exit",
521
+ transition: {
522
+ duration: .35,
523
+ ease: "easeOut"
524
+ },
525
+ style: {
526
+ position: "absolute",
527
+ inset: 0
528
+ },
529
+ children
530
+ });
531
+ }
532
+ var wizardStepVariants = {
533
+ enter: (direction) => ({
534
+ x: direction >= 0 ? "-100%" : "100%",
535
+ opacity: 0
536
+ }),
537
+ center: {
538
+ x: "0%",
539
+ opacity: 1
540
+ },
541
+ exit: (direction) => ({
542
+ x: direction >= 0 ? "40%" : "-40%",
543
+ opacity: 0
544
+ })
545
+ };
546
+ function StepperWizardStep({ children, className }) {
547
+ return /* @__PURE__ */ jsx("div", {
548
+ className: mergeClassNames("space-y-4", className),
549
+ children
550
+ });
551
+ }
552
+ function WizardStepIndicator({ stepIndex, stepNumber, status, isClickable, onStepClick }) {
553
+ return /* @__PURE__ */ jsx(motion.button, {
554
+ type: "button",
555
+ onClick: () => onStepClick(stepIndex),
556
+ className: mergeClassNames("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-focus/70 focus-visible:ring-offset-2 focus-visible:ring-offset-background", isClickable ? "cursor-pointer" : "cursor-default"),
557
+ animate: status,
558
+ initial: false,
559
+ disabled: !isClickable,
560
+ "aria-current": status === "active" ? "step" : void 0,
561
+ children: /* @__PURE__ */ jsx(motion.span, {
562
+ variants: {
563
+ inactive: {
564
+ scale: 1,
565
+ backgroundColor: "var(--ds-color-bg-surface)",
566
+ borderColor: "var(--ds-color-border)",
567
+ color: "var(--ds-color-fg-muted)"
568
+ },
569
+ active: {
570
+ scale: 1,
571
+ backgroundColor: "var(--ds-color-accent)",
572
+ borderColor: "var(--ds-color-accent)",
573
+ color: "var(--ds-color-fg-on-accent)"
574
+ },
575
+ complete: {
576
+ scale: 1,
577
+ backgroundColor: "var(--ds-color-accent)",
578
+ borderColor: "var(--ds-color-accent)",
579
+ color: "var(--ds-color-fg-on-accent)"
580
+ }
581
+ },
582
+ transition: { duration: .25 },
583
+ className: "flex h-full w-full items-center justify-center rounded-full",
584
+ children: status === "complete" ? /* @__PURE__ */ jsx(AnimatedWizardCheckIcon, { className: "h-4 w-4" }) : status === "active" ? /* @__PURE__ */ jsx("span", { className: "h-2.5 w-2.5 rounded-full bg-current" }) : /* @__PURE__ */ jsx("span", { children: stepNumber })
585
+ })
586
+ });
587
+ }
588
+ function WizardStepConnector({ isComplete }) {
589
+ return /* @__PURE__ */ jsx("div", {
590
+ className: "relative mx-2 h-0.5 flex-1 overflow-hidden rounded-full bg-border",
591
+ children: /* @__PURE__ */ jsx(motion.div, {
592
+ className: "absolute inset-y-0 left-0 rounded-full bg-accent",
593
+ initial: false,
594
+ animate: isComplete ? "complete" : "incomplete",
595
+ variants: {
596
+ incomplete: { width: 0 },
597
+ complete: { width: "100%" }
598
+ },
599
+ transition: {
600
+ duration: .35,
601
+ ease: "easeOut"
602
+ }
603
+ })
604
+ });
605
+ }
606
+ function AnimatedWizardCheckIcon({ className }) {
607
+ return /* @__PURE__ */ jsx("span", {
608
+ className: mergeClassNames("flex items-center justify-center", className),
609
+ children: /* @__PURE__ */ jsx(CheckIcon, {
610
+ className: "h-full w-full",
611
+ "aria-hidden": "true"
612
+ })
613
+ });
614
+ }
615
+ //#endregion
616
+ export { Stepper as i, StepperWizardStep as n, StepperSteps as r, StepperWizard as t };
617
+
618
+ //# sourceMappingURL=stepper-DUknuW2E.mjs.map