@karakuri-ui/react 0.2.2 → 0.2.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 (238) hide show
  1. package/README.md +9 -0
  2. package/dist/components/ui/accordion.d.mts +49 -0
  3. package/dist/components/ui/accordion.d.ts +49 -0
  4. package/dist/components/ui/accordion.js +220 -0
  5. package/dist/components/ui/accordion.js.map +1 -0
  6. package/dist/components/ui/accordion.mjs +181 -0
  7. package/dist/components/ui/accordion.mjs.map +1 -0
  8. package/dist/components/ui/alert.d.mts +47 -0
  9. package/dist/components/ui/alert.d.ts +47 -0
  10. package/dist/components/ui/alert.js +223 -0
  11. package/dist/components/ui/alert.js.map +1 -0
  12. package/dist/components/ui/alert.mjs +185 -0
  13. package/dist/components/ui/alert.mjs.map +1 -0
  14. package/dist/components/ui/avatar.d.mts +232 -0
  15. package/dist/components/ui/avatar.d.ts +232 -0
  16. package/dist/components/ui/avatar.js +250 -0
  17. package/dist/components/ui/avatar.js.map +1 -0
  18. package/dist/components/ui/avatar.mjs +209 -0
  19. package/dist/components/ui/avatar.mjs.map +1 -0
  20. package/dist/components/ui/badge.d.mts +31 -0
  21. package/dist/components/ui/badge.d.ts +31 -0
  22. package/dist/components/ui/badge.js +205 -0
  23. package/dist/components/ui/badge.js.map +1 -0
  24. package/dist/components/ui/badge.mjs +170 -0
  25. package/dist/components/ui/badge.mjs.map +1 -0
  26. package/dist/components/ui/breadcrumb.d.mts +57 -0
  27. package/dist/components/ui/breadcrumb.d.ts +57 -0
  28. package/dist/components/ui/breadcrumb.js +209 -0
  29. package/dist/components/ui/breadcrumb.js.map +1 -0
  30. package/dist/components/ui/breadcrumb.mjs +168 -0
  31. package/dist/components/ui/breadcrumb.mjs.map +1 -0
  32. package/dist/components/ui/button-group.d.mts +22 -0
  33. package/dist/components/ui/button-group.d.ts +22 -0
  34. package/dist/components/ui/button-group.js +107 -0
  35. package/dist/components/ui/button-group.js.map +1 -0
  36. package/dist/components/ui/button-group.mjs +72 -0
  37. package/dist/components/ui/button-group.mjs.map +1 -0
  38. package/dist/components/ui/button.d.mts +31 -0
  39. package/dist/components/ui/button.d.ts +31 -0
  40. package/dist/components/ui/button.js +176 -0
  41. package/dist/components/ui/button.js.map +1 -0
  42. package/dist/components/ui/button.mjs +141 -0
  43. package/dist/components/ui/button.mjs.map +1 -0
  44. package/dist/components/ui/card.d.mts +77 -0
  45. package/dist/components/ui/card.d.ts +77 -0
  46. package/dist/components/ui/card.js +370 -0
  47. package/dist/components/ui/card.js.map +1 -0
  48. package/dist/components/ui/card.mjs +328 -0
  49. package/dist/components/ui/card.mjs.map +1 -0
  50. package/dist/{chart.js → components/ui/chart.js} +29 -39
  51. package/dist/components/ui/chart.js.map +1 -0
  52. package/dist/{chart.mjs → components/ui/chart.mjs} +21 -31
  53. package/dist/components/ui/chart.mjs.map +1 -0
  54. package/dist/components/ui/checkbox.d.mts +24 -0
  55. package/dist/components/ui/checkbox.d.ts +24 -0
  56. package/dist/components/ui/checkbox.js +173 -0
  57. package/dist/components/ui/checkbox.js.map +1 -0
  58. package/dist/components/ui/checkbox.mjs +138 -0
  59. package/dist/components/ui/checkbox.mjs.map +1 -0
  60. package/dist/components/ui/divider.d.mts +27 -0
  61. package/dist/components/ui/divider.d.ts +27 -0
  62. package/dist/components/ui/divider.js +147 -0
  63. package/dist/components/ui/divider.js.map +1 -0
  64. package/dist/components/ui/divider.mjs +112 -0
  65. package/dist/components/ui/divider.mjs.map +1 -0
  66. package/dist/components/ui/drawer.d.mts +51 -0
  67. package/dist/components/ui/drawer.d.ts +51 -0
  68. package/dist/components/ui/drawer.js +225 -0
  69. package/dist/components/ui/drawer.js.map +1 -0
  70. package/dist/components/ui/drawer.mjs +178 -0
  71. package/dist/components/ui/drawer.mjs.map +1 -0
  72. package/dist/components/ui/dropdown.d.mts +59 -0
  73. package/dist/components/ui/dropdown.d.ts +59 -0
  74. package/dist/components/ui/dropdown.js +310 -0
  75. package/dist/components/ui/dropdown.js.map +1 -0
  76. package/dist/components/ui/dropdown.mjs +263 -0
  77. package/dist/components/ui/dropdown.mjs.map +1 -0
  78. package/dist/components/ui/field.d.mts +33 -0
  79. package/dist/components/ui/field.d.ts +33 -0
  80. package/dist/components/ui/field.js +146 -0
  81. package/dist/components/ui/field.js.map +1 -0
  82. package/dist/components/ui/field.mjs +108 -0
  83. package/dist/components/ui/field.mjs.map +1 -0
  84. package/dist/components/ui/icon-button.d.mts +20 -0
  85. package/dist/components/ui/icon-button.d.ts +20 -0
  86. package/dist/components/ui/icon-button.js +147 -0
  87. package/dist/components/ui/icon-button.js.map +1 -0
  88. package/dist/components/ui/icon-button.mjs +112 -0
  89. package/dist/components/ui/icon-button.mjs.map +1 -0
  90. package/dist/components/ui/index.d.mts +55 -0
  91. package/dist/components/ui/index.d.ts +55 -0
  92. package/dist/components/ui/index.js +476 -0
  93. package/dist/components/ui/index.js.map +1 -0
  94. package/dist/components/ui/index.mjs +246 -0
  95. package/dist/components/ui/index.mjs.map +1 -0
  96. package/dist/components/ui/input.d.mts +20 -0
  97. package/dist/components/ui/input.d.ts +20 -0
  98. package/dist/components/ui/input.js +250 -0
  99. package/dist/components/ui/input.js.map +1 -0
  100. package/dist/components/ui/input.mjs +215 -0
  101. package/dist/components/ui/input.mjs.map +1 -0
  102. package/dist/components/ui/metric-card.d.mts +53 -0
  103. package/dist/components/ui/metric-card.d.ts +53 -0
  104. package/dist/components/ui/metric-card.js +258 -0
  105. package/dist/components/ui/metric-card.js.map +1 -0
  106. package/dist/components/ui/metric-card.mjs +217 -0
  107. package/dist/components/ui/metric-card.mjs.map +1 -0
  108. package/dist/components/ui/modal.d.mts +77 -0
  109. package/dist/components/ui/modal.d.ts +77 -0
  110. package/dist/components/ui/modal.js +396 -0
  111. package/dist/components/ui/modal.js.map +1 -0
  112. package/dist/components/ui/modal.mjs +338 -0
  113. package/dist/components/ui/modal.mjs.map +1 -0
  114. package/dist/components/ui/navigation-menu.d.mts +139 -0
  115. package/dist/components/ui/navigation-menu.d.ts +139 -0
  116. package/dist/components/ui/navigation-menu.js +531 -0
  117. package/dist/components/ui/navigation-menu.js.map +1 -0
  118. package/dist/components/ui/navigation-menu.mjs +488 -0
  119. package/dist/components/ui/navigation-menu.mjs.map +1 -0
  120. package/dist/components/ui/pagination.d.mts +130 -0
  121. package/dist/components/ui/pagination.d.ts +130 -0
  122. package/dist/components/ui/pagination.js +495 -0
  123. package/dist/components/ui/pagination.js.map +1 -0
  124. package/dist/components/ui/pagination.mjs +449 -0
  125. package/dist/components/ui/pagination.mjs.map +1 -0
  126. package/dist/components/ui/popover.d.mts +41 -0
  127. package/dist/components/ui/popover.d.ts +41 -0
  128. package/dist/components/ui/popover.js +175 -0
  129. package/dist/components/ui/popover.js.map +1 -0
  130. package/dist/components/ui/popover.mjs +133 -0
  131. package/dist/components/ui/popover.mjs.map +1 -0
  132. package/dist/components/ui/progress.d.mts +35 -0
  133. package/dist/components/ui/progress.d.ts +35 -0
  134. package/dist/components/ui/progress.js +194 -0
  135. package/dist/components/ui/progress.js.map +1 -0
  136. package/dist/components/ui/progress.mjs +159 -0
  137. package/dist/components/ui/progress.mjs.map +1 -0
  138. package/dist/components/ui/radio-group.d.mts +40 -0
  139. package/dist/components/ui/radio-group.d.ts +40 -0
  140. package/dist/components/ui/radio-group.js +177 -0
  141. package/dist/components/ui/radio-group.js.map +1 -0
  142. package/dist/components/ui/radio-group.mjs +140 -0
  143. package/dist/components/ui/radio-group.mjs.map +1 -0
  144. package/dist/components/ui/segmented.d.mts +30 -0
  145. package/dist/components/ui/segmented.d.ts +30 -0
  146. package/dist/components/ui/segmented.js +241 -0
  147. package/dist/components/ui/segmented.js.map +1 -0
  148. package/dist/components/ui/segmented.mjs +204 -0
  149. package/dist/components/ui/segmented.mjs.map +1 -0
  150. package/dist/components/ui/select.d.mts +31 -0
  151. package/dist/components/ui/select.d.ts +31 -0
  152. package/dist/components/ui/select.js +317 -0
  153. package/dist/components/ui/select.js.map +1 -0
  154. package/dist/components/ui/select.mjs +276 -0
  155. package/dist/components/ui/select.mjs.map +1 -0
  156. package/dist/components/ui/skeleton.d.mts +26 -0
  157. package/dist/components/ui/skeleton.d.ts +26 -0
  158. package/dist/components/ui/skeleton.js +144 -0
  159. package/dist/components/ui/skeleton.js.map +1 -0
  160. package/dist/components/ui/skeleton.mjs +109 -0
  161. package/dist/components/ui/skeleton.mjs.map +1 -0
  162. package/dist/components/ui/slider.d.mts +38 -0
  163. package/dist/components/ui/slider.d.ts +38 -0
  164. package/dist/components/ui/slider.js +180 -0
  165. package/dist/components/ui/slider.js.map +1 -0
  166. package/dist/components/ui/slider.mjs +145 -0
  167. package/dist/components/ui/slider.mjs.map +1 -0
  168. package/dist/components/ui/spinner.d.mts +23 -0
  169. package/dist/components/ui/spinner.d.ts +23 -0
  170. package/dist/components/ui/spinner.js +471 -0
  171. package/dist/components/ui/spinner.js.map +1 -0
  172. package/dist/components/ui/spinner.mjs +436 -0
  173. package/dist/components/ui/spinner.mjs.map +1 -0
  174. package/dist/components/ui/switch.d.mts +22 -0
  175. package/dist/components/ui/switch.d.ts +22 -0
  176. package/dist/components/ui/switch.js +173 -0
  177. package/dist/components/ui/switch.js.map +1 -0
  178. package/dist/components/ui/switch.mjs +138 -0
  179. package/dist/components/ui/switch.mjs.map +1 -0
  180. package/dist/components/ui/table.d.mts +74 -0
  181. package/dist/components/ui/table.d.ts +74 -0
  182. package/dist/components/ui/table.js +240 -0
  183. package/dist/components/ui/table.js.map +1 -0
  184. package/dist/components/ui/table.mjs +199 -0
  185. package/dist/components/ui/table.mjs.map +1 -0
  186. package/dist/components/ui/tabs.d.mts +40 -0
  187. package/dist/components/ui/tabs.d.ts +40 -0
  188. package/dist/components/ui/tabs.js +238 -0
  189. package/dist/components/ui/tabs.js.map +1 -0
  190. package/dist/components/ui/tabs.mjs +199 -0
  191. package/dist/components/ui/tabs.mjs.map +1 -0
  192. package/dist/components/ui/textarea.d.mts +19 -0
  193. package/dist/components/ui/textarea.d.ts +19 -0
  194. package/dist/components/ui/textarea.js +181 -0
  195. package/dist/components/ui/textarea.js.map +1 -0
  196. package/dist/components/ui/textarea.mjs +146 -0
  197. package/dist/components/ui/textarea.mjs.map +1 -0
  198. package/dist/components/ui/toast.d.mts +93 -0
  199. package/dist/components/ui/toast.d.ts +93 -0
  200. package/dist/components/ui/toast.js +429 -0
  201. package/dist/components/ui/toast.js.map +1 -0
  202. package/dist/components/ui/toast.mjs +393 -0
  203. package/dist/components/ui/toast.mjs.map +1 -0
  204. package/dist/components/ui/toggle-group.d.mts +47 -0
  205. package/dist/components/ui/toggle-group.d.ts +47 -0
  206. package/dist/components/ui/toggle-group.js +186 -0
  207. package/dist/components/ui/toggle-group.js.map +1 -0
  208. package/dist/components/ui/toggle-group.mjs +149 -0
  209. package/dist/components/ui/toggle-group.mjs.map +1 -0
  210. package/dist/components/ui/toggle.d.mts +19 -0
  211. package/dist/components/ui/toggle.d.ts +19 -0
  212. package/dist/components/ui/toggle.js +194 -0
  213. package/dist/components/ui/toggle.js.map +1 -0
  214. package/dist/components/ui/toggle.mjs +159 -0
  215. package/dist/components/ui/toggle.mjs.map +1 -0
  216. package/dist/components/ui/tooltip.d.mts +37 -0
  217. package/dist/components/ui/tooltip.d.ts +37 -0
  218. package/dist/components/ui/tooltip.js +137 -0
  219. package/dist/components/ui/tooltip.js.map +1 -0
  220. package/dist/components/ui/tooltip.mjs +96 -0
  221. package/dist/components/ui/tooltip.mjs.map +1 -0
  222. package/dist/lib/utils.d.mts +10 -0
  223. package/dist/lib/utils.d.ts +10 -0
  224. package/dist/lib/utils.js +33 -0
  225. package/dist/lib/utils.js.map +1 -0
  226. package/dist/lib/utils.mjs +9 -0
  227. package/dist/lib/utils.mjs.map +1 -0
  228. package/package.json +11 -11
  229. package/dist/chart.js.map +0 -1
  230. package/dist/chart.mjs.map +0 -1
  231. package/dist/index.d.mts +0 -1636
  232. package/dist/index.d.ts +0 -1636
  233. package/dist/index.js +0 -7291
  234. package/dist/index.js.map +0 -1
  235. package/dist/index.mjs +0 -7048
  236. package/dist/index.mjs.map +0 -1
  237. /package/dist/{chart.d.mts → components/ui/chart.d.mts} +0 -0
  238. /package/dist/{chart.d.ts → components/ui/chart.d.ts} +0 -0
@@ -0,0 +1,471 @@
1
+ "use strict";
2
+ "use client";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+ var spinner_exports = {};
31
+ __export(spinner_exports, {
32
+ Spinner: () => Spinner,
33
+ spinnerVariants: () => spinnerVariants
34
+ });
35
+ module.exports = __toCommonJS(spinner_exports);
36
+ var React = __toESM(require("react"));
37
+ var import_class_variance_authority = require("class-variance-authority");
38
+ var import_utils = require("../../lib/utils");
39
+ const RING_SIZES = {
40
+ sm: 16,
41
+ default: 24,
42
+ lg: 32
43
+ };
44
+ const RING_STROKE = {
45
+ sm: 2,
46
+ default: 2.5,
47
+ lg: 3
48
+ };
49
+ const DOT_SIZES = {
50
+ sm: 4,
51
+ default: 6,
52
+ lg: 8
53
+ };
54
+ const DOT_GAP = {
55
+ sm: 3,
56
+ default: 4,
57
+ lg: 5
58
+ };
59
+ const BAR_WIDTHS = {
60
+ sm: 2,
61
+ default: 3,
62
+ lg: 4
63
+ };
64
+ const BAR_HEIGHTS = {
65
+ sm: 12,
66
+ default: 16,
67
+ lg: 24
68
+ };
69
+ const BAR_GAP = {
70
+ sm: 2,
71
+ default: 3,
72
+ lg: 4
73
+ };
74
+ const ORBIT_SIZES = {
75
+ sm: 22,
76
+ default: 32,
77
+ lg: 44
78
+ };
79
+ const ORBIT_STROKE = {
80
+ sm: 2.5,
81
+ default: 3,
82
+ lg: 3.5
83
+ };
84
+ const DOT_COUNT = 3;
85
+ const BAR_COUNT = 4;
86
+ const RING_VIEWBOX = 24;
87
+ const RING_CENTER = 12;
88
+ const strokeColorMap = {
89
+ default: "stroke-foreground",
90
+ primary: "stroke-primary",
91
+ current: "stroke-current"
92
+ };
93
+ const bgColorMap = {
94
+ default: "bg-foreground",
95
+ primary: "bg-primary",
96
+ current: "bg-current"
97
+ };
98
+ const SPEED_MS = { slow: 1500, default: 1e3, fast: 750 };
99
+ const ORBIT_SPEED_MS = { slow: 2e3, default: 1500, fast: 1e3 };
100
+ const spinnerVariants = (0, import_class_variance_authority.cva)(
101
+ "inline-flex items-center justify-center shrink-0",
102
+ {
103
+ variants: {
104
+ size: {
105
+ sm: "",
106
+ default: "",
107
+ lg: ""
108
+ }
109
+ },
110
+ defaultVariants: {
111
+ size: "default"
112
+ }
113
+ }
114
+ );
115
+ const Spinner = React.forwardRef(
116
+ ({
117
+ className,
118
+ variant = "ring",
119
+ orbitStyle = "ring",
120
+ size,
121
+ color = "default",
122
+ speed = "default",
123
+ label,
124
+ ...props
125
+ }, ref) => {
126
+ const resolvedSize = size || "default";
127
+ const orbitMap = {
128
+ ring: OrbitSpinner,
129
+ dots: OrbitDotsSpinner,
130
+ cube: OrbitCubeSpinner,
131
+ flip: OrbitFlipSpinner,
132
+ morph: OrbitMorphSpinner
133
+ };
134
+ return /* @__PURE__ */ React.createElement(
135
+ "div",
136
+ {
137
+ ref,
138
+ role: "status",
139
+ "aria-label": label || "Loading",
140
+ className: (0, import_utils.cn)(spinnerVariants({ size }), className),
141
+ ...props
142
+ },
143
+ variant === "ring" && /* @__PURE__ */ React.createElement(RingSpinner, { size: resolvedSize, color, speed }),
144
+ variant === "dots" && /* @__PURE__ */ React.createElement(DotsSpinner, { size: resolvedSize, color, speed }),
145
+ variant === "bars" && /* @__PURE__ */ React.createElement(BarsSpinner, { size: resolvedSize, color, speed }),
146
+ variant === "orbit" && (() => {
147
+ const OrbitComponent = orbitMap[orbitStyle];
148
+ return /* @__PURE__ */ React.createElement(OrbitComponent, { size: resolvedSize, color, speed });
149
+ })()
150
+ );
151
+ }
152
+ );
153
+ Spinner.displayName = "Spinner";
154
+ function RingSpinner({ size, color, speed }) {
155
+ const diameter = RING_SIZES[size];
156
+ const stroke = RING_STROKE[size];
157
+ const r = (RING_VIEWBOX - stroke) / 2;
158
+ const circumference = 2 * Math.PI * r;
159
+ return /* @__PURE__ */ React.createElement(
160
+ "svg",
161
+ {
162
+ viewBox: `0 0 ${RING_VIEWBOX} ${RING_VIEWBOX}`,
163
+ width: diameter,
164
+ height: diameter,
165
+ fill: "none",
166
+ className: "animate-spin",
167
+ style: { animationDuration: `${SPEED_MS[speed]}ms` }
168
+ },
169
+ /* @__PURE__ */ React.createElement(
170
+ "circle",
171
+ {
172
+ cx: RING_CENTER,
173
+ cy: RING_CENTER,
174
+ r,
175
+ className: "stroke-border",
176
+ strokeWidth: stroke
177
+ }
178
+ ),
179
+ /* @__PURE__ */ React.createElement(
180
+ "circle",
181
+ {
182
+ cx: RING_CENTER,
183
+ cy: RING_CENTER,
184
+ r,
185
+ className: strokeColorMap[color],
186
+ strokeWidth: stroke,
187
+ strokeDasharray: circumference,
188
+ strokeDashoffset: circumference * 0.75,
189
+ strokeLinecap: "round"
190
+ }
191
+ )
192
+ );
193
+ }
194
+ function DotsSpinner({ size, color, speed }) {
195
+ const dotSize = DOT_SIZES[size];
196
+ const gap = DOT_GAP[size];
197
+ return /* @__PURE__ */ React.createElement("div", { className: "inline-flex items-center", style: { gap } }, Array.from({ length: DOT_COUNT }, (_, i) => /* @__PURE__ */ React.createElement(
198
+ "div",
199
+ {
200
+ key: i,
201
+ className: (0, import_utils.cn)(
202
+ "rounded-full animate-spinner-dot",
203
+ bgColorMap[color]
204
+ ),
205
+ style: {
206
+ width: dotSize,
207
+ height: dotSize,
208
+ animationDuration: `${SPEED_MS[speed]}ms`,
209
+ animationDelay: `${i * (SPEED_MS[speed] / DOT_COUNT / 1.5)}ms`
210
+ }
211
+ }
212
+ )));
213
+ }
214
+ function BarsSpinner({ size, color, speed }) {
215
+ const barWidth = BAR_WIDTHS[size];
216
+ const barHeight = BAR_HEIGHTS[size];
217
+ const gap = BAR_GAP[size];
218
+ return /* @__PURE__ */ React.createElement("div", { className: "inline-flex items-center", style: { gap, height: barHeight } }, Array.from({ length: BAR_COUNT }, (_, i) => /* @__PURE__ */ React.createElement(
219
+ "div",
220
+ {
221
+ key: i,
222
+ className: (0, import_utils.cn)(
223
+ "rounded-full animate-spinner-bar origin-center",
224
+ bgColorMap[color]
225
+ ),
226
+ style: {
227
+ width: barWidth,
228
+ height: barHeight,
229
+ animationDuration: `${SPEED_MS[speed]}ms`,
230
+ animationDelay: `${i * (SPEED_MS[speed] / BAR_COUNT / 1.5)}ms`
231
+ }
232
+ }
233
+ )));
234
+ }
235
+ const orbitTextColorMap = {
236
+ default: "text-foreground",
237
+ primary: "text-primary",
238
+ current: ""
239
+ };
240
+ function OrbitSpinner({ size, color, speed }) {
241
+ const diameter = ORBIT_SIZES[size];
242
+ const stroke = ORBIT_STROKE[size];
243
+ const r = (RING_VIEWBOX - stroke * 2) / 2;
244
+ const circumference = 2 * Math.PI * r;
245
+ return /* @__PURE__ */ React.createElement(
246
+ "div",
247
+ {
248
+ className: (0, import_utils.cn)(orbitTextColorMap[color]),
249
+ style: {
250
+ width: diameter,
251
+ height: diameter,
252
+ perspective: diameter * 3,
253
+ position: "relative"
254
+ }
255
+ },
256
+ /* @__PURE__ */ React.createElement(
257
+ "svg",
258
+ {
259
+ viewBox: `0 0 ${RING_VIEWBOX} ${RING_VIEWBOX}`,
260
+ width: diameter,
261
+ height: diameter,
262
+ fill: "none",
263
+ className: "absolute inset-0 animate-spinner-orbit",
264
+ style: { animationDuration: `${ORBIT_SPEED_MS[speed]}ms` }
265
+ },
266
+ /* @__PURE__ */ React.createElement(
267
+ "circle",
268
+ {
269
+ cx: RING_CENTER,
270
+ cy: RING_CENTER,
271
+ r,
272
+ stroke: "currentColor",
273
+ strokeWidth: stroke
274
+ }
275
+ )
276
+ ),
277
+ /* @__PURE__ */ React.createElement(
278
+ "svg",
279
+ {
280
+ viewBox: `0 0 ${RING_VIEWBOX} ${RING_VIEWBOX}`,
281
+ width: diameter,
282
+ height: diameter,
283
+ fill: "none",
284
+ className: "absolute inset-0 animate-spinner-orbit",
285
+ style: {
286
+ animationDuration: `${ORBIT_SPEED_MS[speed]}ms`,
287
+ transform: "rotateZ(90deg)",
288
+ animationDirection: "reverse",
289
+ animationDelay: "-0.4s",
290
+ opacity: 0.35
291
+ }
292
+ },
293
+ /* @__PURE__ */ React.createElement(
294
+ "circle",
295
+ {
296
+ cx: RING_CENTER,
297
+ cy: RING_CENTER,
298
+ r,
299
+ stroke: "currentColor",
300
+ strokeWidth: stroke
301
+ }
302
+ )
303
+ )
304
+ );
305
+ }
306
+ const ORBIT_DOT_SIZE = { sm: 3, default: 4, lg: 6 };
307
+ function OrbitDotsSpinner({ size, color, speed }) {
308
+ const diameter = ORBIT_SIZES[size];
309
+ const dotSize = ORBIT_DOT_SIZE[size];
310
+ const orbitRadius = (diameter - dotSize) / 2;
311
+ return /* @__PURE__ */ React.createElement(
312
+ "div",
313
+ {
314
+ className: (0, import_utils.cn)(orbitTextColorMap[color]),
315
+ style: {
316
+ width: diameter,
317
+ height: diameter,
318
+ perspective: diameter * 3,
319
+ position: "relative"
320
+ }
321
+ },
322
+ /* @__PURE__ */ React.createElement(
323
+ "div",
324
+ {
325
+ className: "animate-spinner-orbit",
326
+ style: {
327
+ animationDuration: `${ORBIT_SPEED_MS[speed]}ms`,
328
+ width: "100%",
329
+ height: "100%",
330
+ position: "relative",
331
+ transformStyle: "preserve-3d"
332
+ }
333
+ },
334
+ [0, 120, 240].map((angle) => /* @__PURE__ */ React.createElement(
335
+ "div",
336
+ {
337
+ key: angle,
338
+ className: "absolute rounded-full",
339
+ style: {
340
+ width: dotSize,
341
+ height: dotSize,
342
+ backgroundColor: "currentColor",
343
+ left: "50%",
344
+ top: "50%",
345
+ transform: `translate(-50%, -50%) rotate(${angle}deg) translateX(${orbitRadius}px)`
346
+ }
347
+ }
348
+ ))
349
+ )
350
+ );
351
+ }
352
+ const CUBE_SIZES = { sm: 12, default: 18, lg: 26 };
353
+ function OrbitCubeSpinner({ size, color, speed }) {
354
+ const cubeSize = CUBE_SIZES[size];
355
+ const half = cubeSize / 2;
356
+ const radius = Math.round(cubeSize * 0.15);
357
+ const overlap = 1;
358
+ const faceBase = {
359
+ position: "absolute",
360
+ width: cubeSize + overlap * 2,
361
+ height: cubeSize + overlap * 2,
362
+ backgroundColor: "currentColor",
363
+ borderRadius: radius,
364
+ top: -overlap,
365
+ left: -overlap
366
+ };
367
+ return /* @__PURE__ */ React.createElement(
368
+ "div",
369
+ {
370
+ className: (0, import_utils.cn)(orbitTextColorMap[color]),
371
+ style: {
372
+ width: cubeSize,
373
+ height: cubeSize,
374
+ perspective: cubeSize * 6
375
+ }
376
+ },
377
+ /* @__PURE__ */ React.createElement(
378
+ "div",
379
+ {
380
+ style: {
381
+ width: cubeSize,
382
+ height: cubeSize,
383
+ transform: "rotateX(-25deg) rotateZ(15deg)",
384
+ transformStyle: "preserve-3d"
385
+ }
386
+ },
387
+ /* @__PURE__ */ React.createElement(
388
+ "div",
389
+ {
390
+ className: "animate-spinner-orbit",
391
+ style: {
392
+ animationDuration: `${ORBIT_SPEED_MS[speed]}ms`,
393
+ width: cubeSize,
394
+ height: cubeSize,
395
+ position: "relative",
396
+ transformStyle: "preserve-3d"
397
+ }
398
+ },
399
+ /* @__PURE__ */ React.createElement("div", { style: { ...faceBase, transform: `translateZ(${half}px)`, opacity: 0.25 } }),
400
+ /* @__PURE__ */ React.createElement("div", { style: { ...faceBase, transform: `translateZ(${-half}px)`, opacity: 0.1 } }),
401
+ /* @__PURE__ */ React.createElement("div", { style: { ...faceBase, transform: `rotateY(-90deg) translateZ(${half}px)`, opacity: 0.2 } }),
402
+ /* @__PURE__ */ React.createElement("div", { style: { ...faceBase, transform: `rotateY(90deg) translateZ(${half}px)`, opacity: 0.2 } }),
403
+ /* @__PURE__ */ React.createElement("div", { style: { ...faceBase, transform: `rotateX(90deg) translateZ(${half}px)`, opacity: 0.15 } }),
404
+ /* @__PURE__ */ React.createElement("div", { style: { ...faceBase, transform: `rotateX(-90deg) translateZ(${half}px)`, opacity: 0.08 } })
405
+ )
406
+ )
407
+ );
408
+ }
409
+ const FLIP_SIZES = { sm: 14, default: 20, lg: 28 };
410
+ function OrbitFlipSpinner({ size, color, speed }) {
411
+ const sqSize = FLIP_SIZES[size];
412
+ return /* @__PURE__ */ React.createElement(
413
+ "div",
414
+ {
415
+ className: (0, import_utils.cn)(orbitTextColorMap[color]),
416
+ style: {
417
+ width: sqSize,
418
+ height: sqSize,
419
+ perspective: sqSize * 4
420
+ }
421
+ },
422
+ /* @__PURE__ */ React.createElement("div", { style: { transform: "rotateX(25deg)", transformStyle: "preserve-3d", width: "100%", height: "100%" } }, /* @__PURE__ */ React.createElement(
423
+ "div",
424
+ {
425
+ className: "animate-spinner-orbit",
426
+ style: {
427
+ animationDuration: `${ORBIT_SPEED_MS[speed]}ms`,
428
+ width: "100%",
429
+ height: "100%",
430
+ borderRadius: "25%",
431
+ backgroundColor: "currentColor",
432
+ opacity: 0.85
433
+ }
434
+ }
435
+ ))
436
+ );
437
+ }
438
+ const MORPH_SIZES = { sm: 16, default: 24, lg: 34 };
439
+ function OrbitMorphSpinner({ size, color, speed }) {
440
+ const morphSize = MORPH_SIZES[size];
441
+ return /* @__PURE__ */ React.createElement(
442
+ "div",
443
+ {
444
+ className: (0, import_utils.cn)(orbitTextColorMap[color]),
445
+ style: {
446
+ width: morphSize,
447
+ height: morphSize,
448
+ perspective: morphSize * 3
449
+ }
450
+ },
451
+ /* @__PURE__ */ React.createElement(
452
+ "div",
453
+ {
454
+ className: "animate-spinner-morph",
455
+ style: {
456
+ animationDuration: `${ORBIT_SPEED_MS[speed]}ms`,
457
+ width: "100%",
458
+ height: "100%",
459
+ backgroundColor: "currentColor",
460
+ opacity: 0.85
461
+ }
462
+ }
463
+ )
464
+ );
465
+ }
466
+ // Annotate the CommonJS export names for ESM import in node:
467
+ 0 && (module.exports = {
468
+ Spinner,
469
+ spinnerVariants
470
+ });
471
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/ui/spinner.tsx"],"sourcesContent":["'use client'\n\nimport * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../../lib/utils'\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/** Ring SVG sizes per size variant (diameter in px) */\nconst RING_SIZES = {\n sm: 16,\n default: 24,\n lg: 32,\n} as const\n\n/** Ring stroke widths per size */\nconst RING_STROKE = {\n sm: 2,\n default: 2.5,\n lg: 3,\n} as const\n\n/** Dot sizes (diameter in px) */\nconst DOT_SIZES = {\n sm: 4,\n default: 6,\n lg: 8,\n} as const\n\n/** Dot container gap per size */\nconst DOT_GAP = {\n sm: 3,\n default: 4,\n lg: 5,\n} as const\n\n/** Bar widths per size */\nconst BAR_WIDTHS = {\n sm: 2,\n default: 3,\n lg: 4,\n} as const\n\n/** Bar heights per size */\nconst BAR_HEIGHTS = {\n sm: 12,\n default: 16,\n lg: 24,\n} as const\n\n/** Bar gap per size */\nconst BAR_GAP = {\n sm: 2,\n default: 3,\n lg: 4,\n} as const\n\n/** Orbit sizes (diameter in px) */\nconst ORBIT_SIZES = {\n sm: 22,\n default: 32,\n lg: 44,\n} as const\n\n/** Orbit ring stroke widths per size */\nconst ORBIT_STROKE = {\n sm: 2.5,\n default: 3,\n lg: 3.5,\n} as const\n\n\n/** Number of dots in dots variant */\nconst DOT_COUNT = 3\n\n/** Number of bars in bars variant */\nconst BAR_COUNT = 4\n\n/** SVG viewBox for ring spinner */\nconst RING_VIEWBOX = 24\n\n/** SVG center for ring spinner */\nconst RING_CENTER = 12\n\n// ============================================================================\n// Color mapping\n// ============================================================================\n\nconst strokeColorMap = {\n default: 'stroke-foreground',\n primary: 'stroke-primary',\n current: 'stroke-current',\n} as const\n\nconst bgColorMap = {\n default: 'bg-foreground',\n primary: 'bg-primary',\n current: 'bg-current',\n} as const\n\n// ============================================================================\n// Speed mapping\n// ============================================================================\n\n/** Speed durations in ms for ring/dots/bars */\nconst SPEED_MS = { slow: 1500, default: 1000, fast: 750 } as const\n/** Speed durations in ms for orbit (slower) */\nconst ORBIT_SPEED_MS = { slow: 2000, default: 1500, fast: 1000 } as const\n\n// ============================================================================\n// Variants (CVA)\n// ============================================================================\n\nconst spinnerVariants = cva(\n 'inline-flex items-center justify-center shrink-0',\n {\n variants: {\n size: {\n sm: '',\n default: '',\n lg: '',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n)\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type OrbitStyle = 'ring' | 'dots' | 'cube' | 'flip' | 'morph'\n\nexport interface SpinnerProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof spinnerVariants> {\n /** Visual variant */\n variant?: 'ring' | 'dots' | 'bars' | 'orbit'\n /** Orbit sub-style (only when variant=\"orbit\") */\n orbitStyle?: OrbitStyle\n /** Spinner color */\n color?: 'default' | 'primary' | 'current'\n /** Animation speed */\n speed?: 'slow' | 'default' | 'fast'\n /** Accessibility label */\n label?: string\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nconst Spinner = React.forwardRef<HTMLDivElement, SpinnerProps>(\n ({\n className,\n variant = 'ring',\n orbitStyle = 'ring',\n size,\n color = 'default',\n speed = 'default',\n label,\n ...props\n }, ref) => {\n const resolvedSize = size || 'default'\n\n const orbitMap = {\n ring: OrbitSpinner,\n dots: OrbitDotsSpinner,\n cube: OrbitCubeSpinner,\n flip: OrbitFlipSpinner,\n morph: OrbitMorphSpinner,\n } as const\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label={label || 'Loading'}\n className={cn(spinnerVariants({ size }), className)}\n {...props}\n >\n {variant === 'ring' && (\n <RingSpinner size={resolvedSize} color={color} speed={speed} />\n )}\n {variant === 'dots' && (\n <DotsSpinner size={resolvedSize} color={color} speed={speed} />\n )}\n {variant === 'bars' && (\n <BarsSpinner size={resolvedSize} color={color} speed={speed} />\n )}\n {variant === 'orbit' && (() => {\n const OrbitComponent = orbitMap[orbitStyle]\n return <OrbitComponent size={resolvedSize} color={color} speed={speed} />\n })()}\n </div>\n )\n }\n)\nSpinner.displayName = 'Spinner'\n\n// ============================================================================\n// Ring Spinner (SVG circle with animate-spin)\n// ============================================================================\n\nfunction RingSpinner({ size, color, speed }: {\n size: 'sm' | 'default' | 'lg'\n color: 'default' | 'primary' | 'current'\n speed: 'slow' | 'default' | 'fast'\n}) {\n const diameter = RING_SIZES[size]\n const stroke = RING_STROKE[size]\n const r = (RING_VIEWBOX - stroke) / 2\n const circumference = 2 * Math.PI * r\n\n return (\n <svg\n viewBox={`0 0 ${RING_VIEWBOX} ${RING_VIEWBOX}`}\n width={diameter}\n height={diameter}\n fill=\"none\"\n className=\"animate-spin\"\n style={{ animationDuration: `${SPEED_MS[speed]}ms` }}\n >\n {/* Track */}\n <circle\n cx={RING_CENTER}\n cy={RING_CENTER}\n r={r}\n className=\"stroke-border\"\n strokeWidth={stroke}\n />\n {/* Indicator */}\n <circle\n cx={RING_CENTER}\n cy={RING_CENTER}\n r={r}\n className={strokeColorMap[color]}\n strokeWidth={stroke}\n strokeDasharray={circumference}\n strokeDashoffset={circumference * 0.75}\n strokeLinecap=\"round\"\n />\n </svg>\n )\n}\n\n// ============================================================================\n// Dots Spinner (3 pulsing dots)\n// ============================================================================\n\nfunction DotsSpinner({ size, color, speed }: {\n size: 'sm' | 'default' | 'lg'\n color: 'default' | 'primary' | 'current'\n speed: 'slow' | 'default' | 'fast'\n}) {\n const dotSize = DOT_SIZES[size]\n const gap = DOT_GAP[size]\n\n return (\n <div className=\"inline-flex items-center\" style={{ gap }}>\n {Array.from({ length: DOT_COUNT }, (_, i) => (\n <div\n key={i}\n className={cn(\n 'rounded-full animate-spinner-dot',\n bgColorMap[color],\n )}\n style={{\n width: dotSize,\n height: dotSize,\n animationDuration: `${SPEED_MS[speed]}ms`,\n animationDelay: `${i * (SPEED_MS[speed] / DOT_COUNT / 1.5)}ms`,\n }}\n />\n ))}\n </div>\n )\n}\n\n// ============================================================================\n// Bars Spinner (4 pulsing bars)\n// ============================================================================\n\nfunction BarsSpinner({ size, color, speed }: {\n size: 'sm' | 'default' | 'lg'\n color: 'default' | 'primary' | 'current'\n speed: 'slow' | 'default' | 'fast'\n}) {\n const barWidth = BAR_WIDTHS[size]\n const barHeight = BAR_HEIGHTS[size]\n const gap = BAR_GAP[size]\n\n return (\n <div className=\"inline-flex items-center\" style={{ gap, height: barHeight }}>\n {Array.from({ length: BAR_COUNT }, (_, i) => (\n <div\n key={i}\n className={cn(\n 'rounded-full animate-spinner-bar origin-center',\n bgColorMap[color],\n )}\n style={{\n width: barWidth,\n height: barHeight,\n animationDuration: `${SPEED_MS[speed]}ms`,\n animationDelay: `${i * (SPEED_MS[speed] / BAR_COUNT / 1.5)}ms`,\n }}\n />\n ))}\n </div>\n )\n}\n\n// ============================================================================\n// Orbit Spinner (3D rotating ring)\n// ============================================================================\n\nconst orbitTextColorMap = {\n default: 'text-foreground',\n primary: 'text-primary',\n current: '',\n} as const\n\nfunction OrbitSpinner({ size, color, speed }: {\n size: 'sm' | 'default' | 'lg'\n color: 'default' | 'primary' | 'current'\n speed: 'slow' | 'default' | 'fast'\n}) {\n const diameter = ORBIT_SIZES[size]\n const stroke = ORBIT_STROKE[size]\n const r = (RING_VIEWBOX - stroke * 2) / 2\n const circumference = 2 * Math.PI * r\n\n return (\n <div\n className={cn(orbitTextColorMap[color])}\n style={{\n width: diameter,\n height: diameter,\n perspective: diameter * 3,\n position: 'relative',\n }}\n >\n {/* Ring 1 — solid, Y-axis rotation */}\n <svg\n viewBox={`0 0 ${RING_VIEWBOX} ${RING_VIEWBOX}`}\n width={diameter}\n height={diameter}\n fill=\"none\"\n className=\"absolute inset-0 animate-spinner-orbit\"\n style={{ animationDuration: `${ORBIT_SPEED_MS[speed]}ms` }}\n >\n <circle\n cx={RING_CENTER}\n cy={RING_CENTER}\n r={r}\n stroke=\"currentColor\"\n strokeWidth={stroke}\n />\n </svg>\n {/* Ring 2 — solid, perpendicular, reverse direction */}\n <svg\n viewBox={`0 0 ${RING_VIEWBOX} ${RING_VIEWBOX}`}\n width={diameter}\n height={diameter}\n fill=\"none\"\n className=\"absolute inset-0 animate-spinner-orbit\"\n style={{\n animationDuration: `${ORBIT_SPEED_MS[speed]}ms`,\n transform: 'rotateZ(90deg)',\n animationDirection: 'reverse',\n animationDelay: '-0.4s',\n opacity: 0.35,\n }}\n >\n <circle\n cx={RING_CENTER}\n cy={RING_CENTER}\n r={r}\n stroke=\"currentColor\"\n strokeWidth={stroke}\n />\n </svg>\n </div>\n )\n}\n\n// ============================================================================\n// Orbit Dots — 3 dots orbiting in 3D path\n// ============================================================================\n\n/** Orbit dot size per spinner size */\nconst ORBIT_DOT_SIZE = { sm: 3, default: 4, lg: 6 } as const\n\nfunction OrbitDotsSpinner({ size, color, speed }: {\n size: 'sm' | 'default' | 'lg'\n color: 'default' | 'primary' | 'current'\n speed: 'slow' | 'default' | 'fast'\n}) {\n const diameter = ORBIT_SIZES[size]\n const dotSize = ORBIT_DOT_SIZE[size]\n const orbitRadius = (diameter - dotSize) / 2\n\n return (\n <div\n className={cn(orbitTextColorMap[color])}\n style={{\n width: diameter,\n height: diameter,\n perspective: diameter * 3,\n position: 'relative',\n }}\n >\n <div\n className=\"animate-spinner-orbit\"\n style={{\n animationDuration: `${ORBIT_SPEED_MS[speed]}ms`,\n width: '100%',\n height: '100%',\n position: 'relative',\n transformStyle: 'preserve-3d',\n }}\n >\n {[0, 120, 240].map((angle) => (\n <div\n key={angle}\n className=\"absolute rounded-full\"\n style={{\n width: dotSize,\n height: dotSize,\n backgroundColor: 'currentColor',\n left: '50%',\n top: '50%',\n transform: `translate(-50%, -50%) rotate(${angle}deg) translateX(${orbitRadius}px)`,\n }}\n />\n ))}\n </div>\n </div>\n )\n}\n\n// ============================================================================\n// Orbit Cube — wireframe cube rotating in 3D\n// ============================================================================\n\n/** Cube face sizes per spinner size */\nconst CUBE_SIZES = { sm: 12, default: 18, lg: 26 } as const\n\nfunction OrbitCubeSpinner({ size, color, speed }: {\n size: 'sm' | 'default' | 'lg'\n color: 'default' | 'primary' | 'current'\n speed: 'slow' | 'default' | 'fast'\n}) {\n const cubeSize = CUBE_SIZES[size]\n const half = cubeSize / 2\n const radius = Math.round(cubeSize * 0.15)\n\n const overlap = 1\n const faceBase: React.CSSProperties = {\n position: 'absolute',\n width: cubeSize + overlap * 2,\n height: cubeSize + overlap * 2,\n backgroundColor: 'currentColor',\n borderRadius: radius,\n top: -overlap,\n left: -overlap,\n }\n\n return (\n <div\n className={cn(orbitTextColorMap[color])}\n style={{\n width: cubeSize,\n height: cubeSize,\n perspective: cubeSize * 6,\n }}\n >\n {/* Diagonal tilt — shows top + corner for depth */}\n <div\n style={{\n width: cubeSize,\n height: cubeSize,\n transform: 'rotateX(-25deg) rotateZ(15deg)',\n transformStyle: 'preserve-3d',\n }}\n >\n {/* Y-axis rotation */}\n <div\n className=\"animate-spinner-orbit\"\n style={{\n animationDuration: `${ORBIT_SPEED_MS[speed]}ms`,\n width: cubeSize,\n height: cubeSize,\n position: 'relative',\n transformStyle: 'preserve-3d',\n }}\n >\n <div style={{ ...faceBase, transform: `translateZ(${half}px)`, opacity: 0.25 }} />\n <div style={{ ...faceBase, transform: `translateZ(${-half}px)`, opacity: 0.1 }} />\n <div style={{ ...faceBase, transform: `rotateY(-90deg) translateZ(${half}px)`, opacity: 0.2 }} />\n <div style={{ ...faceBase, transform: `rotateY(90deg) translateZ(${half}px)`, opacity: 0.2 }} />\n <div style={{ ...faceBase, transform: `rotateX(90deg) translateZ(${half}px)`, opacity: 0.15 }} />\n <div style={{ ...faceBase, transform: `rotateX(-90deg) translateZ(${half}px)`, opacity: 0.08 }} />\n </div>\n </div>\n </div>\n )\n}\n\n// ============================================================================\n// Orbit Flip — rounded square tumbling in 3D\n// ============================================================================\n\n/** Flip square sizes per spinner size */\nconst FLIP_SIZES = { sm: 14, default: 20, lg: 28 } as const\n\nfunction OrbitFlipSpinner({ size, color, speed }: {\n size: 'sm' | 'default' | 'lg'\n color: 'default' | 'primary' | 'current'\n speed: 'slow' | 'default' | 'fast'\n}) {\n const sqSize = FLIP_SIZES[size]\n\n return (\n <div\n className={cn(orbitTextColorMap[color])}\n style={{\n width: sqSize,\n height: sqSize,\n perspective: sqSize * 4,\n }}\n >\n <div style={{ transform: 'rotateX(25deg)', transformStyle: 'preserve-3d', width: '100%', height: '100%' }}>\n <div\n className=\"animate-spinner-orbit\"\n style={{\n animationDuration: `${ORBIT_SPEED_MS[speed]}ms`,\n width: '100%',\n height: '100%',\n borderRadius: '25%',\n backgroundColor: 'currentColor',\n opacity: 0.85,\n }}\n />\n </div>\n </div>\n )\n}\n\n// ============================================================================\n// Orbit Morph — organic shape morphing + 3D rotation\n// ============================================================================\n\n/** Morph sizes per spinner size */\nconst MORPH_SIZES = { sm: 16, default: 24, lg: 34 } as const\n\nfunction OrbitMorphSpinner({ size, color, speed }: {\n size: 'sm' | 'default' | 'lg'\n color: 'default' | 'primary' | 'current'\n speed: 'slow' | 'default' | 'fast'\n}) {\n const morphSize = MORPH_SIZES[size]\n\n return (\n <div\n className={cn(orbitTextColorMap[color])}\n style={{\n width: morphSize,\n height: morphSize,\n perspective: morphSize * 3,\n }}\n >\n <div\n className=\"animate-spinner-morph\"\n style={{\n animationDuration: `${ORBIT_SPEED_MS[speed]}ms`,\n width: '100%',\n height: '100%',\n backgroundColor: 'currentColor',\n opacity: 0.85,\n }}\n />\n </div>\n )\n}\n\nexport { Spinner, spinnerVariants }\n"],"mappings":"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","names":[]}