@mova-ui/react 0.1.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 (335) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +46 -0
  3. package/bin/mova.mjs +84 -0
  4. package/dist/hooks/use-mouse-position.d.ts +8 -0
  5. package/dist/hooks/use-reduced-motion.d.ts +1 -0
  6. package/dist/hooks/use-scroll-progress.d.ts +2 -0
  7. package/dist/hooks/use-stagger.d.ts +7 -0
  8. package/dist/hooks/use-web-haptics.d.ts +4 -0
  9. package/dist/index.d.ts +164 -0
  10. package/dist/index.js +4032 -0
  11. package/dist/lib/presets.d.ts +32 -0
  12. package/dist/lib/utils.d.ts +3 -0
  13. package/dist/styles.css +2 -0
  14. package/dist/ui/cursor/cursor-trail.d.ts +8 -0
  15. package/dist/ui/cursor/mouse-follow.d.ts +9 -0
  16. package/dist/ui/cursor/spotlight.d.ts +9 -0
  17. package/dist/ui/entrance/fade-down.d.ts +10 -0
  18. package/dist/ui/entrance/fade-in.d.ts +9 -0
  19. package/dist/ui/entrance/fade-up.d.ts +10 -0
  20. package/dist/ui/entrance/scale-in.d.ts +10 -0
  21. package/dist/ui/entrance/slide-left.d.ts +10 -0
  22. package/dist/ui/entrance/slide-right.d.ts +10 -0
  23. package/dist/ui/entrance/zoom-in.d.ts +11 -0
  24. package/dist/ui/hover/card-hover.d.ts +13 -0
  25. package/dist/ui/hover/glow-button.d.ts +10 -0
  26. package/dist/ui/hover/magnetic-button.d.ts +10 -0
  27. package/dist/ui/hover/tilt-card.d.ts +9 -0
  28. package/dist/ui/loading/accordion-loader.d.ts +2 -0
  29. package/dist/ui/loading/app-icon-load.d.ts +2 -0
  30. package/dist/ui/loading/apple-breathe.d.ts +2 -0
  31. package/dist/ui/loading/apple-equalizer.d.ts +2 -0
  32. package/dist/ui/loading/apple-icon-morph.d.ts +2 -0
  33. package/dist/ui/loading/apple-pulse-dots.d.ts +2 -0
  34. package/dist/ui/loading/apple-scale-pulse.d.ts +2 -0
  35. package/dist/ui/loading/apple-sound-wave.d.ts +2 -0
  36. package/dist/ui/loading/apple-text-reveal.d.ts +2 -0
  37. package/dist/ui/loading/apple-unlock.d.ts +4 -0
  38. package/dist/ui/loading/arc-tracer.d.ts +2 -0
  39. package/dist/ui/loading/bar-cascade.d.ts +2 -0
  40. package/dist/ui/loading/bar-sweep.d.ts +2 -0
  41. package/dist/ui/loading/bobbing-dots.d.ts +2 -0
  42. package/dist/ui/loading/bounce-dots.d.ts +2 -0
  43. package/dist/ui/loading/bouncing-bars.d.ts +2 -0
  44. package/dist/ui/loading/bouncing-dots.d.ts +2 -0
  45. package/dist/ui/loading/bouncing-lines.d.ts +2 -0
  46. package/dist/ui/loading/bouncing-square.d.ts +2 -0
  47. package/dist/ui/loading/breathe-ring.d.ts +2 -0
  48. package/dist/ui/loading/breathing-glow.d.ts +2 -0
  49. package/dist/ui/loading/breathing-square.d.ts +2 -0
  50. package/dist/ui/loading/circular-bars.d.ts +2 -0
  51. package/dist/ui/loading/classic-spinner.d.ts +2 -0
  52. package/dist/ui/loading/clock-spinner.d.ts +2 -0
  53. package/dist/ui/loading/comet-spinner.d.ts +2 -0
  54. package/dist/ui/loading/concentric-pulse.d.ts +2 -0
  55. package/dist/ui/loading/concentric-ring.d.ts +2 -0
  56. package/dist/ui/loading/concentric-squares.d.ts +2 -0
  57. package/dist/ui/loading/conveyor-loop.d.ts +2 -0
  58. package/dist/ui/loading/cross-spinner.d.ts +2 -0
  59. package/dist/ui/loading/cube-flip-spring.d.ts +2 -0
  60. package/dist/ui/loading/dash-ring.d.ts +2 -0
  61. package/dist/ui/loading/dashed-spiral.d.ts +2 -0
  62. package/dist/ui/loading/diamond-grid.d.ts +2 -0
  63. package/dist/ui/loading/diamond-rotate-spring.d.ts +2 -0
  64. package/dist/ui/loading/dot-spinner.d.ts +2 -0
  65. package/dist/ui/loading/dots-ring.d.ts +2 -0
  66. package/dist/ui/loading/double-ring.d.ts +2 -0
  67. package/dist/ui/loading/drop-dot.d.ts +2 -0
  68. package/dist/ui/loading/dual-arc.d.ts +2 -0
  69. package/dist/ui/loading/dynamic-island.d.ts +2 -0
  70. package/dist/ui/loading/elastic-bars.d.ts +2 -0
  71. package/dist/ui/loading/elastic-square.d.ts +2 -0
  72. package/dist/ui/loading/expanding-cross.d.ts +2 -0
  73. package/dist/ui/loading/face-id-scan.d.ts +2 -0
  74. package/dist/ui/loading/fade-arc.d.ts +2 -0
  75. package/dist/ui/loading/fade-dots.d.ts +2 -0
  76. package/dist/ui/loading/flip-square.d.ts +2 -0
  77. package/dist/ui/loading/floating-diamonds.d.ts +2 -0
  78. package/dist/ui/loading/fluid-bars.d.ts +2 -0
  79. package/dist/ui/loading/fluid-diamond.d.ts +2 -0
  80. package/dist/ui/loading/fluid-dot-orbit.d.ts +2 -0
  81. package/dist/ui/loading/fluid-skeleton.d.ts +2 -0
  82. package/dist/ui/loading/gears.d.ts +2 -0
  83. package/dist/ui/loading/glassmorphic-card.d.ts +2 -0
  84. package/dist/ui/loading/gradient-arc.d.ts +2 -0
  85. package/dist/ui/loading/grid-dots.d.ts +2 -0
  86. package/dist/ui/loading/haptic-ring.d.ts +2 -0
  87. package/dist/ui/loading/heartbeat.d.ts +2 -0
  88. package/dist/ui/loading/hexagon-spinner.d.ts +2 -0
  89. package/dist/ui/loading/hourglass.d.ts +2 -0
  90. package/dist/ui/loading/infinity-path.d.ts +2 -0
  91. package/dist/ui/loading/intersecting-rings.d.ts +2 -0
  92. package/dist/ui/loading/ios-spinner.d.ts +2 -0
  93. package/dist/ui/loading/line-spinner.d.ts +2 -0
  94. package/dist/ui/loading/liquid-dots.d.ts +2 -0
  95. package/dist/ui/loading/mac-terminal.d.ts +2 -0
  96. package/dist/ui/loading/magnetic-dots.d.ts +2 -0
  97. package/dist/ui/loading/minimal-triangle.d.ts +2 -0
  98. package/dist/ui/loading/morph-dot-ring.d.ts +2 -0
  99. package/dist/ui/loading/morph-loader.d.ts +8 -0
  100. package/dist/ui/loading/morphing-bars.d.ts +2 -0
  101. package/dist/ui/loading/morphing-infinity.d.ts +2 -0
  102. package/dist/ui/loading/morphing-ring.d.ts +2 -0
  103. package/dist/ui/loading/morphing-shape.d.ts +2 -0
  104. package/dist/ui/loading/newtons-cradle.d.ts +2 -0
  105. package/dist/ui/loading/offset-rings.d.ts +2 -0
  106. package/dist/ui/loading/orbiting-circles.d.ts +2 -0
  107. package/dist/ui/loading/orbiting-dot.d.ts +2 -0
  108. package/dist/ui/loading/origami-shape.d.ts +2 -0
  109. package/dist/ui/loading/pendulum.d.ts +2 -0
  110. package/dist/ui/loading/pulsating-dots.d.ts +2 -0
  111. package/dist/ui/loading/pulse-dot.d.ts +2 -0
  112. package/dist/ui/loading/pulse-dots.d.ts +2 -0
  113. package/dist/ui/loading/pulse-square.d.ts +2 -0
  114. package/dist/ui/loading/pulse.d.ts +8 -0
  115. package/dist/ui/loading/pumping-heart.d.ts +2 -0
  116. package/dist/ui/loading/radar-sweep.d.ts +4 -0
  117. package/dist/ui/loading/ring-sweep.d.ts +2 -0
  118. package/dist/ui/loading/ripple-effect.d.ts +2 -0
  119. package/dist/ui/loading/rotating-cross.d.ts +2 -0
  120. package/dist/ui/loading/rotating-triangle.d.ts +2 -0
  121. package/dist/ui/loading/shape-shift-grid.d.ts +2 -0
  122. package/dist/ui/loading/shimmer-line.d.ts +2 -0
  123. package/dist/ui/loading/siri-wave.d.ts +2 -0
  124. package/dist/ui/loading/skeleton-loader.d.ts +2 -0
  125. package/dist/ui/loading/skeleton.d.ts +7 -0
  126. package/dist/ui/loading/sliding-bars.d.ts +2 -0
  127. package/dist/ui/loading/smooth-dot-shift.d.ts +2 -0
  128. package/dist/ui/loading/smooth-ring.d.ts +2 -0
  129. package/dist/ui/loading/smooth-rounded-square.d.ts +2 -0
  130. package/dist/ui/loading/spinning-squares.d.ts +2 -0
  131. package/dist/ui/loading/spiral-spinner.d.ts +2 -0
  132. package/dist/ui/loading/spring-bars.d.ts +2 -0
  133. package/dist/ui/loading/spring-dot-matrix.d.ts +2 -0
  134. package/dist/ui/loading/spring-hexagon.d.ts +2 -0
  135. package/dist/ui/loading/spring-ring-expand.d.ts +2 -0
  136. package/dist/ui/loading/spring-text-pop.d.ts +2 -0
  137. package/dist/ui/loading/square-accordion.d.ts +2 -0
  138. package/dist/ui/loading/square-grid.d.ts +2 -0
  139. package/dist/ui/loading/square-snake.d.ts +2 -0
  140. package/dist/ui/loading/square-spinner.d.ts +2 -0
  141. package/dist/ui/loading/stacked-bar-pulse.d.ts +2 -0
  142. package/dist/ui/loading/swapping-dots.d.ts +2 -0
  143. package/dist/ui/loading/swirling-spinner.d.ts +2 -0
  144. package/dist/ui/loading/symmetric-wave.d.ts +2 -0
  145. package/dist/ui/loading/terminal-loader.d.ts +2 -0
  146. package/dist/ui/loading/text-blink.d.ts +2 -0
  147. package/dist/ui/loading/text-dots.d.ts +2 -0
  148. package/dist/ui/loading/text-morph.d.ts +2 -0
  149. package/dist/ui/loading/text-shimmer-wave.d.ts +2 -0
  150. package/dist/ui/loading/text-shimmer.d.ts +2 -0
  151. package/dist/ui/loading/trailing-dots.d.ts +2 -0
  152. package/dist/ui/loading/triple-dot-spinner.d.ts +2 -0
  153. package/dist/ui/loading/twin-orbit.d.ts +2 -0
  154. package/dist/ui/loading/typing-indicator.d.ts +2 -0
  155. package/dist/ui/loading/typing.d.ts +2 -0
  156. package/dist/ui/loading/wandering-cube.d.ts +2 -0
  157. package/dist/ui/loading/watch-spinner.d.ts +2 -0
  158. package/dist/ui/loading/wave-dots.d.ts +2 -0
  159. package/dist/ui/loading/wave-physics-loader.d.ts +3 -0
  160. package/dist/ui/loading/waveform-loader.d.ts +2 -0
  161. package/dist/ui/loading/zig-zag-pulse.d.ts +2 -0
  162. package/dist/ui/scroll/progress-indicator.d.ts +8 -0
  163. package/dist/ui/scroll/scroll-reveal.d.ts +11 -0
  164. package/dist/ui/scroll/sticky-reveal.d.ts +11 -0
  165. package/dist/ui/text/blur-text.d.ts +10 -0
  166. package/dist/ui/text/character-stagger.d.ts +10 -0
  167. package/dist/ui/text/text-reveal.d.ts +9 -0
  168. package/dist/ui/text/word-reveal.d.ts +9 -0
  169. package/dist/ui/toggles/classic-toggle.d.ts +2 -0
  170. package/dist/ui/transitions/page-transition.d.ts +9 -0
  171. package/package.json +27 -0
  172. package/registry/accordion-loader.json +8 -0
  173. package/registry/app-icon-load.json +8 -0
  174. package/registry/apple-breathe.json +8 -0
  175. package/registry/apple-equalizer.json +8 -0
  176. package/registry/apple-icon-morph.json +8 -0
  177. package/registry/apple-pulse-dots.json +8 -0
  178. package/registry/apple-scale-pulse.json +8 -0
  179. package/registry/apple-sound-wave.json +8 -0
  180. package/registry/apple-text-reveal.json +8 -0
  181. package/registry/apple-unlock.json +8 -0
  182. package/registry/arc-tracer.json +8 -0
  183. package/registry/bar-cascade.json +8 -0
  184. package/registry/bar-sweep.json +8 -0
  185. package/registry/blur-text.json +8 -0
  186. package/registry/bobbing-dots.json +8 -0
  187. package/registry/bounce-dots.json +8 -0
  188. package/registry/bouncing-bars.json +8 -0
  189. package/registry/bouncing-dots.json +8 -0
  190. package/registry/bouncing-lines.json +8 -0
  191. package/registry/bouncing-square.json +8 -0
  192. package/registry/breathe-ring.json +8 -0
  193. package/registry/breathing-glow.json +8 -0
  194. package/registry/breathing-square.json +8 -0
  195. package/registry/card-hover.json +8 -0
  196. package/registry/character-stagger.json +8 -0
  197. package/registry/circular-bars.json +8 -0
  198. package/registry/classic-spinner.json +8 -0
  199. package/registry/classic-toggle.json +8 -0
  200. package/registry/clock-spinner.json +8 -0
  201. package/registry/comet-spinner.json +8 -0
  202. package/registry/concentric-pulse.json +8 -0
  203. package/registry/concentric-ring.json +8 -0
  204. package/registry/concentric-squares.json +8 -0
  205. package/registry/conveyor-loop.json +8 -0
  206. package/registry/cross-spinner.json +8 -0
  207. package/registry/cube-flip-spring.json +8 -0
  208. package/registry/cursor-trail.json +8 -0
  209. package/registry/dash-ring.json +8 -0
  210. package/registry/dashed-spiral.json +8 -0
  211. package/registry/diamond-grid.json +8 -0
  212. package/registry/diamond-rotate-spring.json +8 -0
  213. package/registry/dot-spinner.json +8 -0
  214. package/registry/dots-ring.json +8 -0
  215. package/registry/double-ring.json +8 -0
  216. package/registry/drop-dot.json +8 -0
  217. package/registry/dual-arc.json +8 -0
  218. package/registry/dynamic-island.json +8 -0
  219. package/registry/elastic-bars.json +8 -0
  220. package/registry/elastic-square.json +8 -0
  221. package/registry/expanding-cross.json +8 -0
  222. package/registry/face-id-scan.json +8 -0
  223. package/registry/fade-arc.json +6 -0
  224. package/registry/fade-dots.json +8 -0
  225. package/registry/fade-down.json +8 -0
  226. package/registry/fade-in.json +8 -0
  227. package/registry/fade-up.json +8 -0
  228. package/registry/flip-square.json +8 -0
  229. package/registry/floating-diamonds.json +8 -0
  230. package/registry/fluid-bars.json +8 -0
  231. package/registry/fluid-diamond.json +8 -0
  232. package/registry/fluid-dot-orbit.json +8 -0
  233. package/registry/fluid-skeleton.json +8 -0
  234. package/registry/gears.json +8 -0
  235. package/registry/glassmorphic-card.json +8 -0
  236. package/registry/glow-button.json +8 -0
  237. package/registry/gradient-arc.json +8 -0
  238. package/registry/grid-dots.json +8 -0
  239. package/registry/haptic-ring.json +8 -0
  240. package/registry/heartbeat.json +8 -0
  241. package/registry/hexagon-spinner.json +8 -0
  242. package/registry/hourglass.json +8 -0
  243. package/registry/infinity-path.json +8 -0
  244. package/registry/intersecting-rings.json +8 -0
  245. package/registry/ios-spinner.json +8 -0
  246. package/registry/line-spinner.json +8 -0
  247. package/registry/liquid-dots.json +8 -0
  248. package/registry/mac-terminal.json +8 -0
  249. package/registry/magnetic-button.json +8 -0
  250. package/registry/magnetic-dots.json +8 -0
  251. package/registry/minimal-triangle.json +8 -0
  252. package/registry/morph-dot-ring.json +8 -0
  253. package/registry/morph-loader.json +8 -0
  254. package/registry/morphing-bars.json +8 -0
  255. package/registry/morphing-infinity.json +8 -0
  256. package/registry/morphing-ring.json +8 -0
  257. package/registry/morphing-shape.json +8 -0
  258. package/registry/mouse-follow.json +8 -0
  259. package/registry/newtons-cradle.json +8 -0
  260. package/registry/offset-rings.json +8 -0
  261. package/registry/orbiting-circles.json +8 -0
  262. package/registry/orbiting-dot.json +8 -0
  263. package/registry/origami-shape.json +8 -0
  264. package/registry/page-transition.json +8 -0
  265. package/registry/pendulum.json +8 -0
  266. package/registry/presets.json +6 -0
  267. package/registry/progress-indicator.json +8 -0
  268. package/registry/pulsating-dots.json +8 -0
  269. package/registry/pulse-dot.json +8 -0
  270. package/registry/pulse-dots.json +8 -0
  271. package/registry/pulse-square.json +8 -0
  272. package/registry/pulse.json +8 -0
  273. package/registry/pumping-heart.json +8 -0
  274. package/registry/radar-sweep.json +8 -0
  275. package/registry/ring-sweep.json +8 -0
  276. package/registry/ripple-effect.json +8 -0
  277. package/registry/rotating-cross.json +8 -0
  278. package/registry/rotating-triangle.json +8 -0
  279. package/registry/scale-in.json +8 -0
  280. package/registry/scroll-reveal.json +8 -0
  281. package/registry/shape-shift-grid.json +8 -0
  282. package/registry/shimmer-line.json +8 -0
  283. package/registry/siri-wave.json +8 -0
  284. package/registry/skeleton-loader.json +8 -0
  285. package/registry/skeleton.json +8 -0
  286. package/registry/slide-left.json +8 -0
  287. package/registry/slide-right.json +8 -0
  288. package/registry/sliding-bars.json +8 -0
  289. package/registry/smooth-dot-shift.json +8 -0
  290. package/registry/smooth-ring.json +6 -0
  291. package/registry/smooth-rounded-square.json +8 -0
  292. package/registry/spinning-squares.json +8 -0
  293. package/registry/spiral-spinner.json +8 -0
  294. package/registry/spotlight.json +8 -0
  295. package/registry/spring-bars.json +8 -0
  296. package/registry/spring-dot-matrix.json +8 -0
  297. package/registry/spring-hexagon.json +8 -0
  298. package/registry/spring-ring-expand.json +8 -0
  299. package/registry/spring-text-pop.json +8 -0
  300. package/registry/square-accordion.json +8 -0
  301. package/registry/square-grid.json +8 -0
  302. package/registry/square-snake.json +8 -0
  303. package/registry/square-spinner.json +8 -0
  304. package/registry/stacked-bar-pulse.json +8 -0
  305. package/registry/sticky-reveal.json +8 -0
  306. package/registry/swapping-dots.json +8 -0
  307. package/registry/swirling-spinner.json +8 -0
  308. package/registry/symmetric-wave.json +8 -0
  309. package/registry/terminal-loader.json +8 -0
  310. package/registry/text-blink.json +8 -0
  311. package/registry/text-dots.json +8 -0
  312. package/registry/text-morph.json +8 -0
  313. package/registry/text-reveal.json +8 -0
  314. package/registry/text-shimmer-wave.json +8 -0
  315. package/registry/text-shimmer.json +8 -0
  316. package/registry/tilt-card.json +8 -0
  317. package/registry/trailing-dots.json +8 -0
  318. package/registry/triple-dot-spinner.json +8 -0
  319. package/registry/twin-orbit.json +8 -0
  320. package/registry/typing-indicator.json +8 -0
  321. package/registry/typing.json +8 -0
  322. package/registry/use-mouse-position.json +6 -0
  323. package/registry/use-reduced-motion.json +6 -0
  324. package/registry/use-scroll-progress.json +6 -0
  325. package/registry/use-stagger.json +6 -0
  326. package/registry/use-web-haptics.json +6 -0
  327. package/registry/utils.json +9 -0
  328. package/registry/wandering-cube.json +8 -0
  329. package/registry/watch-spinner.json +8 -0
  330. package/registry/wave-dots.json +8 -0
  331. package/registry/wave-physics-loader.json +8 -0
  332. package/registry/waveform-loader.json +8 -0
  333. package/registry/word-reveal.json +8 -0
  334. package/registry/zig-zag-pulse.json +8 -0
  335. package/registry/zoom-in.json +8 -0
package/dist/index.js ADDED
@@ -0,0 +1,4032 @@
1
+ "use client";
2
+ "use client";
3
+
4
+ // .generated/hooks/use-mouse-position.ts
5
+ import { useEffect, useState } from "react";
6
+ function useMousePosition(ref) {
7
+ const [position, setPosition] = useState({
8
+ x: 0,
9
+ y: 0,
10
+ elementX: 0,
11
+ elementY: 0
12
+ });
13
+ useEffect(() => {
14
+ const handleMouseMove = (event) => {
15
+ let elementX = 0;
16
+ let elementY = 0;
17
+ if (ref && ref.current) {
18
+ const rect = ref.current.getBoundingClientRect();
19
+ elementX = event.clientX - rect.left;
20
+ elementY = event.clientY - rect.top;
21
+ }
22
+ setPosition({
23
+ x: event.clientX,
24
+ y: event.clientY,
25
+ elementX,
26
+ elementY
27
+ });
28
+ };
29
+ window.addEventListener("mousemove", handleMouseMove, { passive: true });
30
+ return () => {
31
+ window.removeEventListener("mousemove", handleMouseMove);
32
+ };
33
+ }, [ref]);
34
+ return position;
35
+ }
36
+
37
+ // .generated/hooks/use-reduced-motion.ts
38
+ import { useState as useState2, useEffect as useEffect2 } from "react";
39
+ function useReducedMotion() {
40
+ const [shouldReduceMotion, setShouldReduceMotion] = useState2(false);
41
+ useEffect2(() => {
42
+ const mediaQuery = window.matchMedia("(prefers-reduced-motion: reduce)");
43
+ setShouldReduceMotion(mediaQuery.matches);
44
+ const handleMediaChange = (event) => {
45
+ setShouldReduceMotion(event.matches);
46
+ };
47
+ mediaQuery.addEventListener("change", handleMediaChange);
48
+ return () => {
49
+ mediaQuery.removeEventListener("change", handleMediaChange);
50
+ };
51
+ }, []);
52
+ return shouldReduceMotion;
53
+ }
54
+
55
+ // .generated/hooks/use-scroll-progress.ts
56
+ import { useEffect as useEffect3, useState as useState3 } from "react";
57
+ function useScrollProgress(ref) {
58
+ const [progress, setProgress] = useState3(0);
59
+ useEffect3(() => {
60
+ const handleScroll = () => {
61
+ if (ref && ref.current) {
62
+ const element = ref.current;
63
+ const totalHeight = element.scrollHeight - element.clientHeight;
64
+ if (totalHeight === 0) {
65
+ setProgress(0);
66
+ } else {
67
+ setProgress(element.scrollTop / totalHeight);
68
+ }
69
+ } else {
70
+ const totalHeight = document.documentElement.scrollHeight - window.innerHeight;
71
+ if (totalHeight === 0) {
72
+ setProgress(0);
73
+ } else {
74
+ setProgress(window.scrollY / totalHeight);
75
+ }
76
+ }
77
+ };
78
+ const target = ref && ref.current ? ref.current : window;
79
+ target.addEventListener("scroll", handleScroll, { passive: true });
80
+ handleScroll();
81
+ return () => {
82
+ target.removeEventListener("scroll", handleScroll);
83
+ };
84
+ }, [ref]);
85
+ return progress;
86
+ }
87
+
88
+ // .generated/hooks/use-stagger.ts
89
+ import { useMemo } from "react";
90
+ function useStagger(count, options = {}) {
91
+ const { baseDelay = 0, staggerDelay = 0.05, from = "first" } = options;
92
+ const delays = useMemo(() => {
93
+ const list = Array.from({ length: count });
94
+ let centerIndex = 0;
95
+ if (from === "center") {
96
+ centerIndex = (count - 1) / 2;
97
+ } else if (from === "last") {
98
+ centerIndex = count - 1;
99
+ } else if (typeof from === "number") {
100
+ centerIndex = from;
101
+ }
102
+ return list.map((_, index) => {
103
+ let distance = 0;
104
+ if (from === "first") {
105
+ distance = index;
106
+ } else if (from === "last") {
107
+ distance = count - 1 - index;
108
+ } else {
109
+ distance = Math.abs(index - centerIndex);
110
+ }
111
+ return baseDelay + distance * staggerDelay;
112
+ });
113
+ }, [count, baseDelay, staggerDelay, from]);
114
+ return delays;
115
+ }
116
+
117
+ // .generated/hooks/use-web-haptics.ts
118
+ import { useCallback } from "react";
119
+ function useWebHaptics() {
120
+ const trigger = useCallback((type = "light") => {
121
+ if (typeof window === "undefined" || !window.navigator || !window.navigator.vibrate) {
122
+ return false;
123
+ }
124
+ try {
125
+ switch (type) {
126
+ case "light":
127
+ return window.navigator.vibrate(10);
128
+ case "medium":
129
+ return window.navigator.vibrate(25);
130
+ case "heavy":
131
+ return window.navigator.vibrate(50);
132
+ case "success":
133
+ return window.navigator.vibrate([15, 60, 15]);
134
+ case "warning":
135
+ return window.navigator.vibrate([30, 60, 30]);
136
+ case "error":
137
+ return window.navigator.vibrate([60, 60, 60, 60, 60]);
138
+ default:
139
+ return window.navigator.vibrate(type);
140
+ }
141
+ } catch (e) {
142
+ console.warn("Vibration API error:", e);
143
+ return false;
144
+ }
145
+ }, []);
146
+ return { trigger };
147
+ }
148
+
149
+ // .generated/lib/presets.ts
150
+ var presets = {
151
+ // Ultra-responsive, crisp snappy feel
152
+ snappy: {
153
+ type: "spring",
154
+ stiffness: 400,
155
+ damping: 28,
156
+ mass: 0.8
157
+ },
158
+ // Bouncy, playful bounce transition
159
+ bouncy: {
160
+ type: "spring",
161
+ stiffness: 300,
162
+ damping: 15,
163
+ mass: 1
164
+ },
165
+ // Smooth, elegant default easing transition
166
+ smooth: {
167
+ type: "spring",
168
+ stiffness: 220,
169
+ damping: 24,
170
+ mass: 1
171
+ },
172
+ // Gentle, low-speed movement
173
+ gentle: {
174
+ type: "spring",
175
+ stiffness: 120,
176
+ damping: 14,
177
+ mass: 1
178
+ },
179
+ // Stiff, high tension movement
180
+ stiff: {
181
+ type: "spring",
182
+ stiffness: 500,
183
+ damping: 40,
184
+ mass: 0.5
185
+ }
186
+ };
187
+
188
+ // .generated/lib/utils.ts
189
+ import { clsx } from "clsx";
190
+ import { twMerge } from "tailwind-merge";
191
+ function cn(...inputs) {
192
+ return twMerge(clsx(inputs));
193
+ }
194
+ function mapRange(value, inMin, inMax, outMin, outMax) {
195
+ return (value - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;
196
+ }
197
+
198
+ // .generated/ui/cursor/cursor-trail.tsx
199
+ import { useEffect as useEffect4, useState as useState4 } from "react";
200
+ import { motion, useSpring } from "framer-motion";
201
+ import { Fragment, jsx } from "react/jsx-runtime";
202
+ function CursorTrail({
203
+ color = "bg-blue-500",
204
+ size = 8,
205
+ count = 6
206
+ }) {
207
+ const [coords, setCoords] = useState4({ x: 0, y: 0 });
208
+ const [isVisible, setIsVisible] = useState4(false);
209
+ useEffect4(() => {
210
+ const handleMouseMove = (e) => {
211
+ setCoords({ x: e.clientX, y: e.clientY });
212
+ if (!isVisible) setIsVisible(true);
213
+ };
214
+ const handleMouseLeave = () => {
215
+ setIsVisible(false);
216
+ };
217
+ window.addEventListener("mousemove", handleMouseMove, { passive: true });
218
+ document.addEventListener("mouseleave", handleMouseLeave);
219
+ return () => {
220
+ window.removeEventListener("mousemove", handleMouseMove);
221
+ document.removeEventListener("mouseleave", handleMouseLeave);
222
+ };
223
+ }, [isVisible]);
224
+ return /* @__PURE__ */ jsx(Fragment, { children: isVisible && Array.from({ length: count }).map((_, index) => {
225
+ const springConfig = {
226
+ stiffness: 300 - index * 30,
227
+ damping: 25 + index * 2,
228
+ mass: 0.2 + index * 0.1
229
+ };
230
+ return /* @__PURE__ */ jsx(
231
+ TrailDot,
232
+ {
233
+ index,
234
+ coords,
235
+ springConfig,
236
+ size,
237
+ color,
238
+ count
239
+ },
240
+ index
241
+ );
242
+ }) });
243
+ }
244
+ function TrailDot({
245
+ index,
246
+ coords,
247
+ springConfig,
248
+ size,
249
+ color,
250
+ count
251
+ }) {
252
+ const x = useSpring(coords.x, springConfig);
253
+ const y = useSpring(coords.y, springConfig);
254
+ useEffect4(() => {
255
+ x.set(coords.x);
256
+ y.set(coords.y);
257
+ }, [coords, x, y]);
258
+ const dotSize = size * (1 - index / count);
259
+ const opacity = 1 - index / count;
260
+ return /* @__PURE__ */ jsx(
261
+ motion.div,
262
+ {
263
+ style: {
264
+ x,
265
+ y,
266
+ width: dotSize,
267
+ height: dotSize,
268
+ translateX: "-50%",
269
+ translateY: "-50%",
270
+ opacity
271
+ },
272
+ className: `fixed top-0 left-0 rounded-full pointer-events-none z-[9999] ${color}`
273
+ }
274
+ );
275
+ }
276
+
277
+ // .generated/ui/cursor/mouse-follow.tsx
278
+ import { useEffect as useEffect5, useState as useState5 } from "react";
279
+ import { motion as motion2, useSpring as useSpring2 } from "framer-motion";
280
+ import { jsx as jsx2 } from "react/jsx-runtime";
281
+ function MouseFollow({
282
+ children,
283
+ stiffness = 180,
284
+ damping = 20,
285
+ className = ""
286
+ }) {
287
+ const [isVisible, setIsVisible] = useState5(false);
288
+ const x = useSpring2(0, { stiffness, damping });
289
+ const y = useSpring2(0, { stiffness, damping });
290
+ useEffect5(() => {
291
+ const handleMouseMove = (e) => {
292
+ x.set(e.clientX);
293
+ y.set(e.clientY);
294
+ if (!isVisible) setIsVisible(true);
295
+ };
296
+ const handleMouseLeave = () => {
297
+ setIsVisible(false);
298
+ };
299
+ window.addEventListener("mousemove", handleMouseMove, { passive: true });
300
+ document.addEventListener("mouseleave", handleMouseLeave);
301
+ return () => {
302
+ window.removeEventListener("mousemove", handleMouseMove);
303
+ document.removeEventListener("mouseleave", handleMouseLeave);
304
+ };
305
+ }, [x, y, isVisible]);
306
+ if (!isVisible) return null;
307
+ return /* @__PURE__ */ jsx2(
308
+ motion2.div,
309
+ {
310
+ style: {
311
+ x,
312
+ y,
313
+ translateX: "-50%",
314
+ translateY: "-50%"
315
+ },
316
+ className: `fixed top-0 left-0 pointer-events-none z-[9998] ${className}`,
317
+ children: children || /* @__PURE__ */ jsx2("div", { className: "w-6 h-6 rounded-full border border-blue-500/50 bg-blue-500/10" })
318
+ }
319
+ );
320
+ }
321
+
322
+ // .generated/ui/cursor/spotlight.tsx
323
+ import { useRef, useState as useState6 } from "react";
324
+ import { motion as motion3 } from "framer-motion";
325
+ import { jsx as jsx3, jsxs } from "react/jsx-runtime";
326
+ function Spotlight({
327
+ children,
328
+ className = "",
329
+ glowColor = "rgba(255, 255, 255, 0.08)",
330
+ glowSize = 250
331
+ }) {
332
+ const containerRef = useRef(null);
333
+ const [coords, setCoords] = useState6({ x: 0, y: 0 });
334
+ const [opacity, setOpacity] = useState6(0);
335
+ const handleMouseMove = (e) => {
336
+ if (!containerRef.current) return;
337
+ const rect = containerRef.current.getBoundingClientRect();
338
+ setCoords({
339
+ x: e.clientX - rect.left,
340
+ y: e.clientY - rect.top
341
+ });
342
+ };
343
+ return /* @__PURE__ */ jsxs(
344
+ "div",
345
+ {
346
+ ref: containerRef,
347
+ onMouseMove: handleMouseMove,
348
+ onMouseEnter: () => setOpacity(1),
349
+ onMouseLeave: () => setOpacity(0),
350
+ className: `relative overflow-hidden bg-neutral-950 border border-neutral-900 rounded-2xl p-6 ${className}`,
351
+ children: [
352
+ /* @__PURE__ */ jsx3(
353
+ motion3.div,
354
+ {
355
+ className: "pointer-events-none absolute -inset-px opacity-0 transition-opacity duration-300",
356
+ style: {
357
+ opacity,
358
+ background: `radial-gradient(${glowSize}px circle at ${coords.x}px ${coords.y}px, ${glowColor}, transparent 80%)`
359
+ }
360
+ }
361
+ ),
362
+ /* @__PURE__ */ jsx3("div", { className: "relative z-10", children })
363
+ ]
364
+ }
365
+ );
366
+ }
367
+
368
+ // .generated/ui/entrance/fade-down.tsx
369
+ import { motion as motion4 } from "framer-motion";
370
+ import { jsx as jsx4 } from "react/jsx-runtime";
371
+ function FadeDown({
372
+ children,
373
+ duration = 0.6,
374
+ delay = 0,
375
+ yOffset = -20,
376
+ className = ""
377
+ }) {
378
+ return /* @__PURE__ */ jsx4(
379
+ motion4.div,
380
+ {
381
+ initial: { opacity: 0, y: yOffset },
382
+ animate: { opacity: 1, y: 0 },
383
+ transition: {
384
+ duration,
385
+ delay,
386
+ ease: [0.16, 1, 0.3, 1]
387
+ // easeOutExpo
388
+ },
389
+ className,
390
+ children
391
+ }
392
+ );
393
+ }
394
+
395
+ // .generated/ui/entrance/fade-in.tsx
396
+ import { motion as motion5 } from "framer-motion";
397
+ import { jsx as jsx5 } from "react/jsx-runtime";
398
+ function FadeIn({
399
+ children,
400
+ duration = 0.5,
401
+ delay = 0,
402
+ className = ""
403
+ }) {
404
+ return /* @__PURE__ */ jsx5(
405
+ motion5.div,
406
+ {
407
+ initial: { opacity: 0 },
408
+ animate: { opacity: 1 },
409
+ transition: {
410
+ duration,
411
+ delay,
412
+ ease: [0.215, 0.61, 0.355, 1]
413
+ // easeOutCubic
414
+ },
415
+ className,
416
+ children
417
+ }
418
+ );
419
+ }
420
+
421
+ // .generated/ui/entrance/fade-up.tsx
422
+ import { motion as motion6 } from "framer-motion";
423
+ import { jsx as jsx6 } from "react/jsx-runtime";
424
+ function FadeUp({
425
+ children,
426
+ duration = 0.6,
427
+ delay = 0,
428
+ yOffset = 20,
429
+ className = ""
430
+ }) {
431
+ return /* @__PURE__ */ jsx6(
432
+ motion6.div,
433
+ {
434
+ initial: { opacity: 0, y: yOffset },
435
+ animate: { opacity: 1, y: 0 },
436
+ transition: {
437
+ duration,
438
+ delay,
439
+ ease: [0.16, 1, 0.3, 1]
440
+ // easeOutExpo
441
+ },
442
+ className,
443
+ children
444
+ }
445
+ );
446
+ }
447
+
448
+ // .generated/ui/entrance/scale-in.tsx
449
+ import { motion as motion7 } from "framer-motion";
450
+ import { jsx as jsx7 } from "react/jsx-runtime";
451
+ function ScaleIn({
452
+ children,
453
+ duration = 0.5,
454
+ delay = 0,
455
+ initialScale = 0.92,
456
+ className = ""
457
+ }) {
458
+ return /* @__PURE__ */ jsx7(
459
+ motion7.div,
460
+ {
461
+ initial: { opacity: 0, scale: initialScale },
462
+ animate: { opacity: 1, scale: 1 },
463
+ transition: {
464
+ duration,
465
+ delay,
466
+ ease: [0.34, 1.56, 0.64, 1]
467
+ // Custom springy cubic bezier
468
+ },
469
+ className,
470
+ children
471
+ }
472
+ );
473
+ }
474
+
475
+ // .generated/ui/entrance/slide-left.tsx
476
+ import { motion as motion8 } from "framer-motion";
477
+ import { jsx as jsx8 } from "react/jsx-runtime";
478
+ function SlideLeft({
479
+ children,
480
+ duration = 0.6,
481
+ delay = 0,
482
+ xOffset = 40,
483
+ className = ""
484
+ }) {
485
+ return /* @__PURE__ */ jsx8(
486
+ motion8.div,
487
+ {
488
+ initial: { opacity: 0, x: xOffset },
489
+ animate: { opacity: 1, x: 0 },
490
+ transition: {
491
+ duration,
492
+ delay,
493
+ ease: [0.16, 1, 0.3, 1]
494
+ // easeOutExpo
495
+ },
496
+ className,
497
+ children
498
+ }
499
+ );
500
+ }
501
+
502
+ // .generated/ui/entrance/slide-right.tsx
503
+ import { motion as motion9 } from "framer-motion";
504
+ import { jsx as jsx9 } from "react/jsx-runtime";
505
+ function SlideRight({
506
+ children,
507
+ duration = 0.6,
508
+ delay = 0,
509
+ xOffset = -40,
510
+ className = ""
511
+ }) {
512
+ return /* @__PURE__ */ jsx9(
513
+ motion9.div,
514
+ {
515
+ initial: { opacity: 0, x: xOffset },
516
+ animate: { opacity: 1, x: 0 },
517
+ transition: {
518
+ duration,
519
+ delay,
520
+ ease: [0.16, 1, 0.3, 1]
521
+ // easeOutExpo
522
+ },
523
+ className,
524
+ children
525
+ }
526
+ );
527
+ }
528
+
529
+ // .generated/ui/entrance/zoom-in.tsx
530
+ import { motion as motion10 } from "framer-motion";
531
+ import { jsx as jsx10 } from "react/jsx-runtime";
532
+ function ZoomIn({
533
+ children,
534
+ duration = 0.7,
535
+ delay = 0,
536
+ initialScale = 0.85,
537
+ initialBlur = "12px",
538
+ className = ""
539
+ }) {
540
+ return /* @__PURE__ */ jsx10(
541
+ motion10.div,
542
+ {
543
+ initial: { opacity: 0, scale: initialScale, filter: `blur(${initialBlur})` },
544
+ animate: { opacity: 1, scale: 1, filter: "blur(0px)" },
545
+ transition: {
546
+ duration,
547
+ delay,
548
+ ease: [0.16, 1, 0.3, 1]
549
+ // easeOutExpo
550
+ },
551
+ className,
552
+ children
553
+ }
554
+ );
555
+ }
556
+
557
+ // .generated/ui/hover/card-hover.tsx
558
+ import { useState as useState7 } from "react";
559
+ import { motion as motion11, AnimatePresence } from "framer-motion";
560
+ import { jsx as jsx11, jsxs as jsxs2 } from "react/jsx-runtime";
561
+ function CardHover({
562
+ items,
563
+ className = "",
564
+ cardClassName = ""
565
+ }) {
566
+ const [hoveredIndex, setHoveredIndex] = useState7(null);
567
+ return /* @__PURE__ */ jsx11("div", { className: `grid grid-cols-1 md:grid-cols-3 gap-4 w-full ${className}`, children: items.map((item, idx) => /* @__PURE__ */ jsxs2(
568
+ "a",
569
+ {
570
+ href: item.link || "#",
571
+ className: "relative group block p-2 h-full w-full no-underline",
572
+ onMouseEnter: () => setHoveredIndex(idx),
573
+ onMouseLeave: () => setHoveredIndex(null),
574
+ children: [
575
+ /* @__PURE__ */ jsx11(AnimatePresence, { children: hoveredIndex === idx && /* @__PURE__ */ jsx11(
576
+ motion11.span,
577
+ {
578
+ className: "absolute inset-0 h-full w-full bg-neutral-200 dark:bg-zinc-800/[0.8] block rounded-3xl -z-10",
579
+ layoutId: "hoverBackground",
580
+ initial: { opacity: 0 },
581
+ animate: {
582
+ opacity: 1,
583
+ transition: { duration: 0.15 }
584
+ },
585
+ exit: {
586
+ opacity: 0,
587
+ transition: { duration: 0.15, delay: 0.1 }
588
+ }
589
+ }
590
+ ) }),
591
+ /* @__PURE__ */ jsx11(
592
+ "div",
593
+ {
594
+ className: `rounded-2xl h-full w-full p-5 overflow-hidden bg-white dark:bg-black border border-neutral-200 dark:border-zinc-800 group-hover:border-slate-350 dark:group-hover:border-zinc-700 relative z-20 transition-colors duration-200 ${cardClassName}`,
595
+ children: /* @__PURE__ */ jsxs2("div", { className: "relative z-50", children: [
596
+ /* @__PURE__ */ jsx11("h4", { className: "text-zinc-900 dark:text-zinc-100 font-bold tracking-wide mt-2", children: item.title }),
597
+ /* @__PURE__ */ jsx11("p", { className: "mt-2 text-zinc-500 dark:text-zinc-400 tracking-wide leading-relaxed text-sm", children: item.description })
598
+ ] })
599
+ }
600
+ )
601
+ ]
602
+ },
603
+ item.id
604
+ )) });
605
+ }
606
+
607
+ // .generated/ui/hover/glow-button.tsx
608
+ import { useRef as useRef2, useState as useState8 } from "react";
609
+ import { motion as motion12 } from "framer-motion";
610
+ import { jsx as jsx12, jsxs as jsxs3 } from "react/jsx-runtime";
611
+ function GlowButton({
612
+ children,
613
+ className = "",
614
+ glowColor = "rgba(59, 130, 246, 0.15)",
615
+ // Light blue default
616
+ onClick
617
+ }) {
618
+ const containerRef = useRef2(null);
619
+ const [coords, setCoords] = useState8({ x: 0, y: 0 });
620
+ const [opacity, setOpacity] = useState8(0);
621
+ const handleMouseMove = (e) => {
622
+ if (!containerRef.current) return;
623
+ const rect = containerRef.current.getBoundingClientRect();
624
+ setCoords({
625
+ x: e.clientX - rect.left,
626
+ y: e.clientY - rect.top
627
+ });
628
+ };
629
+ return /* @__PURE__ */ jsxs3(
630
+ "button",
631
+ {
632
+ ref: containerRef,
633
+ onMouseMove: handleMouseMove,
634
+ onMouseEnter: () => setOpacity(1),
635
+ onMouseLeave: () => setOpacity(0),
636
+ onClick,
637
+ className: `relative overflow-hidden inline-flex items-center justify-center rounded-xl bg-neutral-900 border border-neutral-800 text-white font-medium text-sm h-11 px-6 shadow-md transition-colors hover:border-neutral-700 cursor-pointer ${className}`,
638
+ children: [
639
+ /* @__PURE__ */ jsx12(
640
+ motion12.div,
641
+ {
642
+ className: "pointer-events-none absolute -inset-px rounded-xl opacity-0 transition-opacity duration-300",
643
+ style: {
644
+ opacity,
645
+ background: `radial-gradient(120px circle at ${coords.x}px ${coords.y}px, ${glowColor}, transparent 80%)`
646
+ }
647
+ }
648
+ ),
649
+ /* @__PURE__ */ jsx12("span", { className: "relative z-10", children })
650
+ ]
651
+ }
652
+ );
653
+ }
654
+
655
+ // .generated/ui/hover/magnetic-button.tsx
656
+ import { useRef as useRef3, useState as useState9 } from "react";
657
+ import { motion as motion13, useSpring as useSpring3 } from "framer-motion";
658
+ import { jsx as jsx13 } from "react/jsx-runtime";
659
+ function MagneticButton({
660
+ children,
661
+ range = 45,
662
+ strength = 0.35,
663
+ className = "",
664
+ onClick
665
+ }) {
666
+ const ref = useRef3(null);
667
+ const [position, setPosition] = useState9({ x: 0, y: 0 });
668
+ const springConfig = { stiffness: 150, damping: 15, mass: 0.6 };
669
+ const x = useSpring3(0, springConfig);
670
+ const y = useSpring3(0, springConfig);
671
+ const handleMouseMove = (e) => {
672
+ if (!ref.current) return;
673
+ const { clientX, clientY } = e;
674
+ const { left, top, width, height } = ref.current.getBoundingClientRect();
675
+ const centerX = left + width / 2;
676
+ const centerY = top + height / 2;
677
+ const dist = Math.hypot(clientX - centerX, clientY - centerY);
678
+ if (dist < range) {
679
+ const targetX = (clientX - centerX) * strength;
680
+ const targetY = (clientY - centerY) * strength;
681
+ x.set(targetX);
682
+ y.set(targetY);
683
+ } else {
684
+ x.set(0);
685
+ y.set(0);
686
+ }
687
+ };
688
+ const handleMouseLeave = () => {
689
+ x.set(0);
690
+ y.set(0);
691
+ };
692
+ return /* @__PURE__ */ jsx13(
693
+ motion13.button,
694
+ {
695
+ ref,
696
+ onMouseMove: handleMouseMove,
697
+ onMouseLeave: handleMouseLeave,
698
+ onClick,
699
+ style: { x, y },
700
+ className: `relative inline-flex items-center justify-center rounded-full bg-neutral-900 dark:bg-white text-white dark:text-black font-semibold text-sm h-11 px-6 shadow hover:scale-[1.03] transition-all cursor-pointer select-none border-0 ${className}`,
701
+ children: /* @__PURE__ */ jsx13("span", { className: "relative z-10 block pointer-events-none", children })
702
+ }
703
+ );
704
+ }
705
+
706
+ // .generated/ui/hover/tilt-card.tsx
707
+ import { useRef as useRef4, useState as useState10 } from "react";
708
+ import { motion as motion14, useMotionValue, useSpring as useSpring4, useTransform } from "framer-motion";
709
+ import { jsx as jsx14 } from "react/jsx-runtime";
710
+ function TiltCard({
711
+ children,
712
+ maxTilt = 15,
713
+ className = "",
714
+ cardClassName = ""
715
+ }) {
716
+ const cardRef = useRef4(null);
717
+ const [isHovered, setIsHovered] = useState10(false);
718
+ const x = useMotionValue(0);
719
+ const y = useMotionValue(0);
720
+ const springConfig = { damping: 20, stiffness: 200, mass: 0.5 };
721
+ const rotateX = useSpring4(useTransform(y, [-0.5, 0.5], [maxTilt, -maxTilt]), springConfig);
722
+ const rotateY = useSpring4(useTransform(x, [-0.5, 0.5], [-maxTilt, maxTilt]), springConfig);
723
+ const handleMouseMove = (event) => {
724
+ if (!cardRef.current) return;
725
+ const rect = cardRef.current.getBoundingClientRect();
726
+ const relativeX = (event.clientX - rect.left) / rect.width - 0.5;
727
+ const relativeY = (event.clientY - rect.top) / rect.height - 0.5;
728
+ x.set(relativeX);
729
+ y.set(relativeY);
730
+ };
731
+ const handleMouseLeave = () => {
732
+ setIsHovered(false);
733
+ x.set(0);
734
+ y.set(0);
735
+ };
736
+ return /* @__PURE__ */ jsx14(
737
+ "div",
738
+ {
739
+ ref: cardRef,
740
+ onMouseMove: handleMouseMove,
741
+ onMouseEnter: () => setIsHovered(true),
742
+ onMouseLeave: handleMouseLeave,
743
+ className: `relative w-full aspect-[4/3] max-w-[320px] cursor-pointer ${className}`,
744
+ style: { perspective: "800px" },
745
+ children: /* @__PURE__ */ jsx14(
746
+ motion14.div,
747
+ {
748
+ style: {
749
+ rotateX,
750
+ rotateY,
751
+ transformStyle: "preserve-3d"
752
+ },
753
+ className: `w-full h-full rounded-2xl bg-gradient-to-br from-neutral-100 to-neutral-250 dark:from-neutral-850 dark:to-neutral-900 border border-neutral-200/20 shadow-lg flex items-center justify-center p-6 select-none ${cardClassName}`,
754
+ children: /* @__PURE__ */ jsx14("div", { style: { transform: "translateZ(40px)", transformStyle: "preserve-3d" }, className: "w-full h-full flex flex-col justify-center items-center", children })
755
+ }
756
+ )
757
+ }
758
+ );
759
+ }
760
+
761
+ // .generated/ui/loading/accordion-loader.tsx
762
+ import { motion as motion15 } from "framer-motion";
763
+ import { jsx as jsx15 } from "react/jsx-runtime";
764
+ var AccordionLoader = () => {
765
+ return /* @__PURE__ */ jsx15("div", { className: "flex flex-col space-y-1.5 w-10 h-10 justify-center", children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ jsx15(
766
+ motion15.div,
767
+ {
768
+ className: "w-full h-1 bg-zinc-800 dark:bg-white rounded-full origin-left",
769
+ animate: { scaleX: [1, 0.2, 1] },
770
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut", delay: i * 0.15 }
771
+ },
772
+ i
773
+ )) });
774
+ };
775
+
776
+ // .generated/ui/loading/app-icon-load.tsx
777
+ import { motion as motion16 } from "framer-motion";
778
+ import { jsx as jsx16, jsxs as jsxs4 } from "react/jsx-runtime";
779
+ var AppIconLoad = () => /* @__PURE__ */ jsx16("div", { className: "relative w-12 h-12 bg-zinc-200 dark:bg-zinc-800 rounded-[12px] flex items-center justify-center overflow-hidden", children: /* @__PURE__ */ jsxs4("svg", { className: "w-8 h-8 absolute", viewBox: "0 0 50 50", children: [
780
+ /* @__PURE__ */ jsx16(
781
+ "circle",
782
+ {
783
+ cx: "25",
784
+ cy: "25",
785
+ r: "20",
786
+ className: "stroke-zinc-300 dark:stroke-zinc-700 fill-none",
787
+ strokeWidth: "4"
788
+ }
789
+ ),
790
+ /* @__PURE__ */ jsx16(
791
+ motion16.circle,
792
+ {
793
+ cx: "25",
794
+ cy: "25",
795
+ r: "20",
796
+ className: "stroke-zinc-800 dark:stroke-white fill-none",
797
+ strokeWidth: "4",
798
+ strokeDasharray: "125",
799
+ animate: { strokeDashoffset: [125, 0] },
800
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" },
801
+ style: { rotate: -90, transformOrigin: "center" }
802
+ }
803
+ )
804
+ ] }) });
805
+
806
+ // .generated/ui/loading/apple-breathe.tsx
807
+ import { motion as motion17 } from "framer-motion";
808
+ import { jsx as jsx17 } from "react/jsx-runtime";
809
+ var AppleBreathe = () => {
810
+ return /* @__PURE__ */ jsx17("div", { className: "relative flex items-center justify-center w-12 h-12", children: [0, 60, 120, 180, 240, 300].map((angle, idx) => {
811
+ const bgClass = idx % 2 === 0 ? "bg-teal-400/35 dark:bg-teal-400/40" : "bg-cyan-400/35 dark:bg-cyan-400/40";
812
+ return /* @__PURE__ */ jsx17(
813
+ motion17.div,
814
+ {
815
+ className: `absolute w-3.5 h-3.5 rounded-full ${bgClass}`,
816
+ style: { transformOrigin: "center" },
817
+ animate: {
818
+ scale: [1, 1.75, 1],
819
+ x: [0, Math.cos(angle * Math.PI / 180) * 11, 0],
820
+ y: [0, Math.sin(angle * Math.PI / 180) * 11, 0]
821
+ },
822
+ transition: {
823
+ duration: 3.6,
824
+ repeat: Infinity,
825
+ ease: "easeInOut"
826
+ }
827
+ },
828
+ angle
829
+ );
830
+ }) });
831
+ };
832
+
833
+ // .generated/ui/loading/apple-equalizer.tsx
834
+ import { motion as motion18 } from "framer-motion";
835
+ import { jsx as jsx18 } from "react/jsx-runtime";
836
+ var AppleEqualizer = () => /* @__PURE__ */ jsx18("div", { className: "flex space-x-1 h-8 items-end", children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ jsx18(
837
+ motion18.div,
838
+ {
839
+ className: "w-1.5 bg-zinc-800 dark:bg-white rounded-t-sm",
840
+ animate: { height: ["20%", "100%", "20%"] },
841
+ transition: { duration: 0.8, repeat: Infinity, delay: Math.random() * 0.5, ease: "circInOut" }
842
+ },
843
+ i
844
+ )) });
845
+
846
+ // .generated/ui/loading/apple-icon-morph.tsx
847
+ import { motion as motion19 } from "framer-motion";
848
+ import { jsx as jsx19 } from "react/jsx-runtime";
849
+ var AppleIconMorph = () => /* @__PURE__ */ jsx19(
850
+ motion19.div,
851
+ {
852
+ className: "w-8 h-8 bg-zinc-800 dark:bg-white",
853
+ animate: {
854
+ borderRadius: ["20%", "50%", "50%", "20%"],
855
+ rotate: [0, 90, 180, 270]
856
+ },
857
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
858
+ }
859
+ );
860
+
861
+ // .generated/ui/loading/apple-pulse-dots.tsx
862
+ import { motion as motion20 } from "framer-motion";
863
+ import { jsx as jsx20 } from "react/jsx-runtime";
864
+ var ApplePulseDots = () => /* @__PURE__ */ jsx20("div", { className: "flex space-x-2", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx20(
865
+ motion20.div,
866
+ {
867
+ className: "w-2.5 h-2.5 bg-zinc-800 dark:bg-white rounded-full",
868
+ animate: { scale: [0.5, 1, 0.5], opacity: [0.3, 1, 0.3] },
869
+ transition: { duration: 1.2, repeat: Infinity, delay: i * 0.15, ease: "easeInOut" }
870
+ },
871
+ i
872
+ )) });
873
+
874
+ // .generated/ui/loading/apple-scale-pulse.tsx
875
+ import { motion as motion21 } from "framer-motion";
876
+ import { jsx as jsx21, jsxs as jsxs5 } from "react/jsx-runtime";
877
+ var AppleScalePulse = () => /* @__PURE__ */ jsxs5("div", { className: "relative w-12 h-12 flex items-center justify-center", children: [
878
+ /* @__PURE__ */ jsx21(
879
+ motion21.div,
880
+ {
881
+ className: "absolute w-full h-full bg-zinc-200 dark:bg-zinc-800 rounded-full",
882
+ animate: { scale: [0, 1], opacity: [1, 0] },
883
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeOut" }
884
+ }
885
+ ),
886
+ /* @__PURE__ */ jsx21(
887
+ motion21.div,
888
+ {
889
+ className: "absolute w-full h-full bg-zinc-200 dark:bg-zinc-800 rounded-full",
890
+ animate: { scale: [0, 1], opacity: [1, 0] },
891
+ transition: { duration: 1.5, repeat: Infinity, delay: 0.5, ease: "easeOut" }
892
+ }
893
+ ),
894
+ /* @__PURE__ */ jsx21("div", { className: "w-3 h-3 bg-zinc-800 dark:bg-white rounded-full z-10" })
895
+ ] });
896
+
897
+ // .generated/ui/loading/apple-sound-wave.tsx
898
+ import { motion as motion22 } from "framer-motion";
899
+ import { jsx as jsx22 } from "react/jsx-runtime";
900
+ var AppleSoundWave = () => /* @__PURE__ */ jsx22("div", { className: "flex space-x-1 h-8 items-center", children: [1, 2, 3, 2, 1].map((val, i) => /* @__PURE__ */ jsx22(
901
+ motion22.div,
902
+ {
903
+ className: "w-1 bg-zinc-800 dark:bg-white rounded-full",
904
+ animate: { height: [4, val * 8, 4] },
905
+ transition: { duration: 1, repeat: Infinity, delay: i * 0.1, ease: "easeInOut" }
906
+ },
907
+ i
908
+ )) });
909
+
910
+ // .generated/ui/loading/apple-text-reveal.tsx
911
+ import { motion as motion23 } from "framer-motion";
912
+ import { jsx as jsx23 } from "react/jsx-runtime";
913
+ var AppleTextReveal = () => /* @__PURE__ */ jsx23("div", { className: "font-medium text-lg text-zinc-900 dark:text-white overflow-hidden h-6 relative", children: /* @__PURE__ */ jsx23(
914
+ motion23.div,
915
+ {
916
+ animate: { y: ["100%", "0%", "-100%"] },
917
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" },
918
+ children: "Loading"
919
+ }
920
+ ) });
921
+
922
+ // .generated/ui/loading/apple-unlock.tsx
923
+ import { motion as motion24 } from "framer-motion";
924
+ import { jsx as jsx24, jsxs as jsxs6 } from "react/jsx-runtime";
925
+ var AppleUnlock = ({ theme = "light" }) => {
926
+ const isDark = theme === "dark";
927
+ return /* @__PURE__ */ jsxs6("div", { className: "relative font-medium text-sm tracking-wide select-none", children: [
928
+ /* @__PURE__ */ jsx24("span", { className: "text-zinc-400 dark:text-zinc-600", children: "Slide to unlock" }),
929
+ /* @__PURE__ */ jsx24(
930
+ motion24.div,
931
+ {
932
+ className: "absolute inset-0 text-zinc-950 dark:text-white bg-clip-text text-transparent bg-gradient-to-r from-transparent via-current to-transparent",
933
+ style: {
934
+ backgroundSize: "200% 100%"
935
+ },
936
+ animate: { backgroundPosition: ["200% 0", "-200% 0"] },
937
+ transition: { duration: 2.2, repeat: Infinity, ease: "linear" },
938
+ children: "Slide to unlock"
939
+ }
940
+ )
941
+ ] });
942
+ };
943
+
944
+ // .generated/ui/loading/arc-tracer.tsx
945
+ import { motion as motion25 } from "framer-motion";
946
+ import { jsx as jsx25, jsxs as jsxs7 } from "react/jsx-runtime";
947
+ var ArcTracer = () => {
948
+ return /* @__PURE__ */ jsxs7("svg", { className: "w-10 h-10", viewBox: "0 0 50 50", children: [
949
+ /* @__PURE__ */ jsx25("circle", { cx: "25", cy: "25", r: "20", className: "stroke-zinc-200 dark:stroke-zinc-800 fill-none", strokeWidth: "4" }),
950
+ /* @__PURE__ */ jsx25(
951
+ motion25.circle,
952
+ {
953
+ cx: "25",
954
+ cy: "25",
955
+ r: "20",
956
+ className: "stroke-zinc-800 dark:stroke-white fill-none",
957
+ strokeWidth: "4",
958
+ strokeLinecap: "round",
959
+ strokeDasharray: "125",
960
+ animate: { strokeDashoffset: [125, 0, -125] },
961
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
962
+ }
963
+ )
964
+ ] });
965
+ };
966
+
967
+ // .generated/ui/loading/bar-cascade.tsx
968
+ import { motion as motion26 } from "framer-motion";
969
+ import { jsx as jsx26 } from "react/jsx-runtime";
970
+ var BarCascade = () => {
971
+ return /* @__PURE__ */ jsx26("div", { className: "flex space-x-1 items-center h-8", children: [0, 1, 2, 3, 4].map((i) => /* @__PURE__ */ jsx26(
972
+ motion26.div,
973
+ {
974
+ className: "w-1.5 bg-zinc-800 dark:bg-white rounded-full",
975
+ animate: { height: ["8px", "24px", "8px"] },
976
+ transition: { duration: 1, repeat: Infinity, delay: i * 0.1, ease: "easeInOut" }
977
+ },
978
+ i
979
+ )) });
980
+ };
981
+
982
+ // .generated/ui/loading/bar-sweep.tsx
983
+ import { motion as motion27 } from "framer-motion";
984
+ import { jsx as jsx27 } from "react/jsx-runtime";
985
+ var BarSweep = () => {
986
+ return /* @__PURE__ */ jsx27("div", { className: "w-12 h-6 border-2 border-zinc-800 dark:border-zinc-700 rounded-full p-1 relative flex items-center overflow-hidden", children: /* @__PURE__ */ jsx27(
987
+ motion27.div,
988
+ {
989
+ className: "w-4 h-4 bg-zinc-800 dark:bg-white rounded-full absolute",
990
+ animate: { x: [0, 24, 0] },
991
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" }
992
+ }
993
+ ) });
994
+ };
995
+
996
+ // .generated/ui/loading/bobbing-dots.tsx
997
+ import { motion as motion28 } from "framer-motion";
998
+ import { jsx as jsx28 } from "react/jsx-runtime";
999
+ var BobbingDots = () => {
1000
+ return /* @__PURE__ */ jsx28("div", { className: "flex space-x-2", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx28(
1001
+ motion28.div,
1002
+ {
1003
+ className: "w-3 h-3 bg-zinc-800 dark:bg-white rounded-full",
1004
+ animate: { y: [0, -10, 0] },
1005
+ transition: { duration: 1.2, repeat: Infinity, delay: i * 0.15, ease: "easeInOut" }
1006
+ },
1007
+ i
1008
+ )) });
1009
+ };
1010
+
1011
+ // .generated/ui/loading/bounce-dots.tsx
1012
+ import { motion as motion29 } from "framer-motion";
1013
+ import { jsx as jsx29 } from "react/jsx-runtime";
1014
+ var BounceDots = () => {
1015
+ return /* @__PURE__ */ jsx29("div", { className: "flex space-x-1.5", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx29(
1016
+ motion29.div,
1017
+ {
1018
+ className: "w-2.5 h-2.5 bg-zinc-800 dark:bg-white rounded-full",
1019
+ animate: { y: [0, -8, 0] },
1020
+ transition: {
1021
+ duration: 0.6,
1022
+ repeat: Infinity,
1023
+ delay: i * 0.1,
1024
+ ease: "easeInOut"
1025
+ }
1026
+ },
1027
+ i
1028
+ )) });
1029
+ };
1030
+
1031
+ // .generated/ui/loading/bouncing-bars.tsx
1032
+ import { motion as motion30 } from "framer-motion";
1033
+ import { jsx as jsx30 } from "react/jsx-runtime";
1034
+ var BouncingBars = () => {
1035
+ return /* @__PURE__ */ jsx30("div", { className: "flex space-x-1.5 h-8 items-center", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx30(
1036
+ motion30.div,
1037
+ {
1038
+ className: "w-1.5 h-8 bg-zinc-800 dark:bg-white rounded-full",
1039
+ animate: { scaleY: [0.3, 1, 0.3] },
1040
+ transition: { duration: 1, repeat: Infinity, delay: i * 0.2, ease: "easeInOut" }
1041
+ },
1042
+ i
1043
+ )) });
1044
+ };
1045
+
1046
+ // .generated/ui/loading/bouncing-dots.tsx
1047
+ import { motion as motion31 } from "framer-motion";
1048
+ import { jsx as jsx31 } from "react/jsx-runtime";
1049
+ var BouncingDots = () => {
1050
+ return /* @__PURE__ */ jsx31("div", { className: "flex space-x-2 h-12 items-end pb-2 border-b-2 border-zinc-200 dark:border-zinc-800 w-16 justify-center relative", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx31(
1051
+ motion31.div,
1052
+ {
1053
+ className: "w-3 h-3 bg-zinc-800 dark:bg-white rounded-full absolute bottom-2",
1054
+ style: { left: `${i * 14 + 10}px` },
1055
+ animate: { y: [0, -20, 0], scaleY: [0.8, 1.1, 0.8] },
1056
+ transition: { duration: 0.8, repeat: Infinity, delay: i * 0.1, ease: "easeInOut" }
1057
+ },
1058
+ i
1059
+ )) });
1060
+ };
1061
+
1062
+ // .generated/ui/loading/bouncing-lines.tsx
1063
+ import { motion as motion32 } from "framer-motion";
1064
+ import { jsx as jsx32 } from "react/jsx-runtime";
1065
+ var BouncingLines = () => {
1066
+ return /* @__PURE__ */ jsx32("div", { className: "flex flex-col space-y-1.5 w-8", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx32(
1067
+ motion32.div,
1068
+ {
1069
+ className: "w-full h-1.5 bg-zinc-800 dark:bg-white rounded-full origin-left",
1070
+ animate: { scaleX: [0.3, 1, 0.3] },
1071
+ transition: { duration: 1, repeat: Infinity, delay: i * 0.2, ease: "easeInOut" }
1072
+ },
1073
+ i
1074
+ )) });
1075
+ };
1076
+
1077
+ // .generated/ui/loading/bouncing-square.tsx
1078
+ import { motion as motion33 } from "framer-motion";
1079
+ import { jsx as jsx33, jsxs as jsxs8 } from "react/jsx-runtime";
1080
+ var BouncingSquare = () => {
1081
+ return /* @__PURE__ */ jsxs8("div", { className: "relative w-10 h-12 flex items-end justify-center", children: [
1082
+ /* @__PURE__ */ jsx33("div", { className: "absolute bottom-0 w-8 h-1 bg-zinc-200 dark:bg-zinc-800 rounded-full blur-sm" }),
1083
+ /* @__PURE__ */ jsx33(
1084
+ motion33.div,
1085
+ {
1086
+ className: "w-6 h-6 bg-zinc-800 dark:bg-white rounded-sm origin-bottom",
1087
+ animate: { y: [0, -24, 0], scaleY: [0.8, 1.1, 0.8], scaleX: [1.2, 0.9, 1.2] },
1088
+ transition: { duration: 0.6, repeat: Infinity, ease: "easeInOut" }
1089
+ }
1090
+ )
1091
+ ] });
1092
+ };
1093
+
1094
+ // .generated/ui/loading/breathe-ring.tsx
1095
+ import { motion as motion34 } from "framer-motion";
1096
+ import { jsx as jsx34 } from "react/jsx-runtime";
1097
+ var BreatheRing = () => /* @__PURE__ */ jsx34(
1098
+ motion34.div,
1099
+ {
1100
+ className: "w-10 h-10 rounded-full border-4 border-zinc-800 dark:border-zinc-700",
1101
+ animate: { scale: [0.8, 1.1, 0.8], borderWidth: [6, 2, 6] },
1102
+ transition: { duration: 3, repeat: Infinity, ease: "easeInOut" }
1103
+ }
1104
+ );
1105
+
1106
+ // .generated/ui/loading/breathing-glow.tsx
1107
+ import { motion as motion35 } from "framer-motion";
1108
+ import { jsx as jsx35, jsxs as jsxs9 } from "react/jsx-runtime";
1109
+ var BreathingGlow = () => {
1110
+ return /* @__PURE__ */ jsxs9("div", { className: "relative flex items-center justify-center w-12 h-12", children: [
1111
+ /* @__PURE__ */ jsx35(
1112
+ motion35.div,
1113
+ {
1114
+ className: "absolute w-8 h-8 bg-blue-500 rounded-full blur-md",
1115
+ animate: { scale: [1, 1.5, 1], opacity: [0.5, 0.8, 0.5] },
1116
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
1117
+ }
1118
+ ),
1119
+ /* @__PURE__ */ jsx35("div", { className: "relative w-6 h-6 bg-white rounded-full shadow-sm" })
1120
+ ] });
1121
+ };
1122
+
1123
+ // .generated/ui/loading/breathing-square.tsx
1124
+ import { motion as motion36 } from "framer-motion";
1125
+ import { jsx as jsx36 } from "react/jsx-runtime";
1126
+ var BreathingSquare = () => {
1127
+ return /* @__PURE__ */ jsx36(
1128
+ motion36.div,
1129
+ {
1130
+ className: "w-8 h-8 bg-zinc-800 dark:bg-white",
1131
+ animate: {
1132
+ scale: [1, 1.2, 1],
1133
+ borderRadius: ["0%", "50%", "0%"],
1134
+ rotate: [0, 90, 180]
1135
+ },
1136
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
1137
+ }
1138
+ );
1139
+ };
1140
+
1141
+ // .generated/ui/loading/circular-bars.tsx
1142
+ import { motion as motion37 } from "framer-motion";
1143
+ import { jsx as jsx37 } from "react/jsx-runtime";
1144
+ var CircularBars = () => {
1145
+ return /* @__PURE__ */ jsx37("div", { className: "relative w-10 h-10", children: Array.from({ length: 8 }).map((_, i) => /* @__PURE__ */ jsx37(
1146
+ motion37.div,
1147
+ {
1148
+ className: "absolute top-0 left-[18px] w-1 h-3 bg-zinc-800 dark:bg-white rounded-full origin-[2px_20px]",
1149
+ style: { rotate: i * 45 },
1150
+ animate: { scaleY: [0.5, 1.5, 0.5] },
1151
+ transition: { duration: 1.2, repeat: Infinity, delay: i * 0.15, ease: "easeInOut" }
1152
+ },
1153
+ i
1154
+ )) });
1155
+ };
1156
+
1157
+ // .generated/ui/loading/classic-spinner.tsx
1158
+ import { motion as motion38 } from "framer-motion";
1159
+ import { jsx as jsx38 } from "react/jsx-runtime";
1160
+ var ClassicSpinner = () => {
1161
+ return /* @__PURE__ */ jsx38("div", { className: "relative w-8 h-8", children: Array.from({ length: 12 }).map((_, i) => /* @__PURE__ */ jsx38(
1162
+ motion38.div,
1163
+ {
1164
+ className: "absolute top-0 left-[14px] w-[4px] h-[8px] bg-zinc-400 dark:bg-zinc-200 rounded-full origin-[2px_16px]",
1165
+ style: { rotate: i * 30 },
1166
+ animate: { opacity: [1, 0.2] },
1167
+ transition: {
1168
+ duration: 1,
1169
+ repeat: Infinity,
1170
+ ease: "linear",
1171
+ delay: i * (1 / 12)
1172
+ }
1173
+ },
1174
+ i
1175
+ )) });
1176
+ };
1177
+
1178
+ // .generated/ui/loading/clock-spinner.tsx
1179
+ import { motion as motion39 } from "framer-motion";
1180
+ import { jsx as jsx39, jsxs as jsxs10 } from "react/jsx-runtime";
1181
+ var ClockSpinner = () => {
1182
+ return /* @__PURE__ */ jsxs10("div", { className: "relative w-10 h-10 border-2 border-zinc-800 dark:border-zinc-700 rounded-full flex items-center justify-center", children: [
1183
+ /* @__PURE__ */ jsx39(
1184
+ motion39.div,
1185
+ {
1186
+ className: "absolute w-0.5 h-3.5 bg-zinc-800 dark:bg-white rounded-full origin-bottom",
1187
+ style: { bottom: "50%" },
1188
+ animate: { rotate: 360 },
1189
+ transition: { duration: 2, repeat: Infinity, ease: "linear" }
1190
+ }
1191
+ ),
1192
+ /* @__PURE__ */ jsx39(
1193
+ motion39.div,
1194
+ {
1195
+ className: "absolute w-0.5 h-2.5 bg-zinc-800 dark:bg-white rounded-full origin-bottom",
1196
+ style: { bottom: "50%" },
1197
+ animate: { rotate: 360 },
1198
+ transition: { duration: 12, repeat: Infinity, ease: "linear" }
1199
+ }
1200
+ )
1201
+ ] });
1202
+ };
1203
+
1204
+ // .generated/ui/loading/comet-spinner.tsx
1205
+ import { motion as motion40 } from "framer-motion";
1206
+ import { jsx as jsx40, jsxs as jsxs11 } from "react/jsx-runtime";
1207
+ var CometSpinner = () => {
1208
+ return /* @__PURE__ */ jsxs11("div", { className: "relative w-10 h-10 border border-zinc-200 dark:border-zinc-800 rounded-full flex items-center justify-center", children: [
1209
+ /* @__PURE__ */ jsx40(
1210
+ motion40.div,
1211
+ {
1212
+ className: "absolute w-full h-full rounded-full",
1213
+ style: {
1214
+ background: "conic-gradient(from 0deg, transparent 0%, rgba(39, 39, 42, 0.1) 60%, rgba(39, 39, 42, 1) 100%)"
1215
+ },
1216
+ animate: { rotate: 360 },
1217
+ transition: { duration: 1, repeat: Infinity, ease: "linear" }
1218
+ }
1219
+ ),
1220
+ /* @__PURE__ */ jsx40("div", { className: "absolute bg-white w-8 h-8 rounded-full" })
1221
+ ] });
1222
+ };
1223
+
1224
+ // .generated/ui/loading/concentric-pulse.tsx
1225
+ import { motion as motion41 } from "framer-motion";
1226
+ import { jsx as jsx41 } from "react/jsx-runtime";
1227
+ var ConcentricPulse = () => {
1228
+ return /* @__PURE__ */ jsx41("div", { className: "relative w-12 h-12 flex items-center justify-center", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsx41(
1229
+ motion41.div,
1230
+ {
1231
+ className: "absolute rounded-full border border-zinc-800 dark:border-zinc-700",
1232
+ initial: { width: 0, height: 0, opacity: 1 },
1233
+ animate: { width: 48, height: 48, opacity: 0 },
1234
+ transition: { duration: 2, repeat: Infinity, delay: i * 0.6, ease: "easeOut" }
1235
+ },
1236
+ i
1237
+ )) });
1238
+ };
1239
+
1240
+ // .generated/ui/loading/concentric-ring.tsx
1241
+ import { motion as motion42 } from "framer-motion";
1242
+ import { jsx as jsx42, jsxs as jsxs12 } from "react/jsx-runtime";
1243
+ var ConcentricRing = () => {
1244
+ return /* @__PURE__ */ jsxs12("div", { className: "relative w-12 h-12 flex items-center justify-center", children: [
1245
+ /* @__PURE__ */ jsx42(
1246
+ motion42.div,
1247
+ {
1248
+ className: "absolute w-12 h-12 border-2 border-zinc-800 dark:border-zinc-700 border-t-transparent rounded-full",
1249
+ animate: { rotate: 360 },
1250
+ transition: { duration: 2, repeat: Infinity, ease: "linear" }
1251
+ }
1252
+ ),
1253
+ /* @__PURE__ */ jsx42(
1254
+ motion42.div,
1255
+ {
1256
+ className: "absolute w-8 h-8 border-2 border-zinc-500 border-b-transparent rounded-full",
1257
+ animate: { rotate: -360 },
1258
+ transition: { duration: 1.5, repeat: Infinity, ease: "linear" }
1259
+ }
1260
+ ),
1261
+ /* @__PURE__ */ jsx42(
1262
+ motion42.div,
1263
+ {
1264
+ className: "absolute w-4 h-4 border-2 border-zinc-300 border-l-transparent rounded-full",
1265
+ animate: { rotate: 360 },
1266
+ transition: { duration: 1, repeat: Infinity, ease: "linear" }
1267
+ }
1268
+ )
1269
+ ] });
1270
+ };
1271
+
1272
+ // .generated/ui/loading/concentric-squares.tsx
1273
+ import { motion as motion43 } from "framer-motion";
1274
+ import { jsx as jsx43, jsxs as jsxs13 } from "react/jsx-runtime";
1275
+ var ConcentricSquares = () => {
1276
+ return /* @__PURE__ */ jsxs13("div", { className: "relative w-12 h-12 flex items-center justify-center", children: [
1277
+ /* @__PURE__ */ jsx43(
1278
+ motion43.div,
1279
+ {
1280
+ className: "absolute w-12 h-12 border-2 border-zinc-800 dark:border-zinc-700 rounded-sm",
1281
+ animate: { rotate: [0, 90, 90], scale: [1, 1, 0.8, 1] },
1282
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
1283
+ }
1284
+ ),
1285
+ /* @__PURE__ */ jsx43(
1286
+ motion43.div,
1287
+ {
1288
+ className: "absolute w-6 h-6 border-2 border-zinc-500 rounded-sm",
1289
+ animate: { rotate: [0, -90, -90], scale: [1, 1, 1.2, 1] },
1290
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
1291
+ }
1292
+ )
1293
+ ] });
1294
+ };
1295
+
1296
+ // .generated/ui/loading/conveyor-loop.tsx
1297
+ import { motion as motion44 } from "framer-motion";
1298
+ import { jsx as jsx44 } from "react/jsx-runtime";
1299
+ var ConveyorLoop = () => {
1300
+ return /* @__PURE__ */ jsx44("div", { className: "w-16 h-3 overflow-hidden relative rounded-full bg-zinc-200 dark:bg-zinc-800", children: /* @__PURE__ */ jsx44(
1301
+ motion44.div,
1302
+ {
1303
+ className: "flex h-full space-x-2 absolute top-0 items-center",
1304
+ animate: { x: [0, -32] },
1305
+ transition: { duration: 1, repeat: Infinity, ease: "linear" },
1306
+ children: Array.from({ length: 8 }).map((_, i) => /* @__PURE__ */ jsx44("div", { className: "w-1.5 h-1.5 bg-zinc-800 dark:bg-white rounded-full shrink-0" }, i))
1307
+ }
1308
+ ) });
1309
+ };
1310
+
1311
+ // .generated/ui/loading/cross-spinner.tsx
1312
+ import { motion as motion45 } from "framer-motion";
1313
+ import { jsx as jsx45, jsxs as jsxs14 } from "react/jsx-runtime";
1314
+ var CrossSpinner = () => {
1315
+ return /* @__PURE__ */ jsxs14(
1316
+ motion45.div,
1317
+ {
1318
+ className: "relative w-8 h-8 flex items-center justify-center",
1319
+ animate: { rotate: [0, 90, 180, 270, 360] },
1320
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" },
1321
+ children: [
1322
+ /* @__PURE__ */ jsx45("div", { className: "absolute w-full h-1.5 bg-zinc-800 dark:bg-white rounded-full" }),
1323
+ /* @__PURE__ */ jsx45("div", { className: "absolute h-full w-1.5 bg-zinc-800 dark:bg-white rounded-full" })
1324
+ ]
1325
+ }
1326
+ );
1327
+ };
1328
+
1329
+ // .generated/ui/loading/cube-flip-spring.tsx
1330
+ import { motion as motion46 } from "framer-motion";
1331
+ import { jsx as jsx46 } from "react/jsx-runtime";
1332
+ var CubeFlipSpring = () => /* @__PURE__ */ jsx46(
1333
+ motion46.div,
1334
+ {
1335
+ className: "w-8 h-8 bg-zinc-800 dark:bg-white rounded-lg",
1336
+ animate: { rotateX: [0, 180, 180], rotateY: [0, 0, 180] },
1337
+ transition: { duration: 2, repeat: Infinity, type: "spring", bounce: 0.2 }
1338
+ }
1339
+ );
1340
+
1341
+ // .generated/ui/loading/dash-ring.tsx
1342
+ import { motion as motion47 } from "framer-motion";
1343
+ import { jsx as jsx47 } from "react/jsx-runtime";
1344
+ var DashRing = () => {
1345
+ return /* @__PURE__ */ jsx47("svg", { className: "w-12 h-12", viewBox: "0 0 50 50", children: /* @__PURE__ */ jsx47(
1346
+ motion47.circle,
1347
+ {
1348
+ cx: "25",
1349
+ cy: "25",
1350
+ r: "20",
1351
+ className: "stroke-zinc-800 dark:stroke-white fill-none",
1352
+ strokeWidth: "3",
1353
+ strokeDasharray: "8 8",
1354
+ animate: { rotate: 360 },
1355
+ style: { transformOrigin: "center" },
1356
+ transition: { duration: 4, repeat: Infinity, ease: "linear" }
1357
+ }
1358
+ ) });
1359
+ };
1360
+
1361
+ // .generated/ui/loading/dashed-spiral.tsx
1362
+ import { motion as motion48 } from "framer-motion";
1363
+ import { jsx as jsx48 } from "react/jsx-runtime";
1364
+ var DashedSpiral = () => /* @__PURE__ */ jsx48(
1365
+ motion48.div,
1366
+ {
1367
+ className: "w-10 h-10 border-[3px] border-zinc-800 dark:border-zinc-700 rounded-full border-dashed",
1368
+ animate: { rotate: 360, scale: [1, 1.1, 1] },
1369
+ transition: { duration: 4, repeat: Infinity, ease: "linear" }
1370
+ }
1371
+ );
1372
+
1373
+ // .generated/ui/loading/diamond-grid.tsx
1374
+ import { motion as motion49 } from "framer-motion";
1375
+ import { jsx as jsx49 } from "react/jsx-runtime";
1376
+ var DiamondGrid = () => {
1377
+ return /* @__PURE__ */ jsx49("div", { className: "grid grid-cols-2 gap-2 rotate-45", children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ jsx49(
1378
+ motion49.div,
1379
+ {
1380
+ className: "w-3 h-3 bg-zinc-800 dark:bg-white rounded-sm",
1381
+ animate: { scale: [1, 0.5, 1], opacity: [1, 0.3, 1] },
1382
+ transition: { duration: 1.5, repeat: Infinity, delay: i * 0.2, ease: "easeInOut" }
1383
+ },
1384
+ i
1385
+ )) });
1386
+ };
1387
+
1388
+ // .generated/ui/loading/diamond-rotate-spring.tsx
1389
+ import { motion as motion50 } from "framer-motion";
1390
+ import { jsx as jsx50 } from "react/jsx-runtime";
1391
+ var DiamondRotateSpring = () => /* @__PURE__ */ jsx50(
1392
+ motion50.div,
1393
+ {
1394
+ className: "w-8 h-8 bg-zinc-800 dark:bg-white rounded-sm origin-center",
1395
+ style: { rotate: 45 },
1396
+ animate: { rotate: [45, 135, 225, 315] },
1397
+ transition: { duration: 2, repeat: Infinity, type: "spring", bounce: 0.4 }
1398
+ }
1399
+ );
1400
+
1401
+ // .generated/ui/loading/dot-spinner.tsx
1402
+ import { motion as motion51 } from "framer-motion";
1403
+ import { jsx as jsx51 } from "react/jsx-runtime";
1404
+ var DotSpinner = () => {
1405
+ return /* @__PURE__ */ jsx51("div", { className: "relative w-10 h-10", children: [0, 1, 2, 3, 4, 5, 6, 7].map((i) => /* @__PURE__ */ jsx51(
1406
+ motion51.div,
1407
+ {
1408
+ className: "absolute top-0 left-1/2 w-2 h-2 bg-zinc-800 dark:bg-white rounded-full -ml-1 origin-[4px_20px]",
1409
+ style: { rotate: i * 45 },
1410
+ animate: { opacity: [1, 0.2] },
1411
+ transition: { duration: 1, repeat: Infinity, delay: i * 0.125, ease: "linear" }
1412
+ },
1413
+ i
1414
+ )) });
1415
+ };
1416
+
1417
+ // .generated/ui/loading/dots-ring.tsx
1418
+ import { motion as motion52 } from "framer-motion";
1419
+ import { jsx as jsx52 } from "react/jsx-runtime";
1420
+ var DotsRing = () => {
1421
+ return /* @__PURE__ */ jsx52("div", { className: "relative w-12 h-12", children: [0, 1, 2, 3, 4, 5, 6, 7].map((i) => /* @__PURE__ */ jsx52(
1422
+ motion52.div,
1423
+ {
1424
+ className: "absolute top-0 left-1/2 w-2 h-2 bg-zinc-800 dark:bg-white rounded-full -ml-1 origin-[4px_24px]",
1425
+ style: { rotate: i * 45 },
1426
+ animate: { scale: [1, 0.5, 1], opacity: [1, 0.3, 1] },
1427
+ transition: { duration: 1.5, repeat: Infinity, delay: i * 0.15, ease: "easeInOut" }
1428
+ },
1429
+ i
1430
+ )) });
1431
+ };
1432
+
1433
+ // .generated/ui/loading/double-ring.tsx
1434
+ import { motion as motion53 } from "framer-motion";
1435
+ import { jsx as jsx53, jsxs as jsxs15 } from "react/jsx-runtime";
1436
+ var DoubleRing = () => {
1437
+ return /* @__PURE__ */ jsxs15("div", { className: "relative w-10 h-10 flex items-center justify-center", children: [
1438
+ /* @__PURE__ */ jsx53(
1439
+ motion53.div,
1440
+ {
1441
+ className: "absolute w-10 h-10 border-2 border-zinc-200 dark:border-zinc-800 rounded-full border-t-zinc-800 dark:border-t-white",
1442
+ animate: { rotate: 360 },
1443
+ transition: { duration: 1.5, repeat: Infinity, ease: "linear" }
1444
+ }
1445
+ ),
1446
+ /* @__PURE__ */ jsx53(
1447
+ motion53.div,
1448
+ {
1449
+ className: "absolute w-6 h-6 border-2 border-zinc-200 dark:border-zinc-800 rounded-full border-b-zinc-800 dark:border-b-white",
1450
+ animate: { rotate: -360 },
1451
+ transition: { duration: 1, repeat: Infinity, ease: "linear" }
1452
+ }
1453
+ )
1454
+ ] });
1455
+ };
1456
+
1457
+ // .generated/ui/loading/drop-dot.tsx
1458
+ import { motion as motion54 } from "framer-motion";
1459
+ import { jsx as jsx54, jsxs as jsxs16 } from "react/jsx-runtime";
1460
+ var DropDot = () => /* @__PURE__ */ jsxs16("div", { className: "relative w-6 h-12 flex flex-col items-center", children: [
1461
+ /* @__PURE__ */ jsx54(
1462
+ motion54.div,
1463
+ {
1464
+ className: "w-2.5 h-2.5 bg-zinc-800 dark:bg-white rounded-full absolute top-0 z-10",
1465
+ animate: { y: [0, 24, 0], scaleY: [1, 1.2, 1], scaleX: [1, 0.8, 1] },
1466
+ transition: { duration: 1, repeat: Infinity, ease: "circIn" }
1467
+ }
1468
+ ),
1469
+ /* @__PURE__ */ jsx54("div", { className: "w-4 h-1 bg-zinc-300 dark:bg-zinc-700 rounded-full absolute bottom-2 blur-[1px]" })
1470
+ ] });
1471
+
1472
+ // .generated/ui/loading/dual-arc.tsx
1473
+ import { motion as motion55 } from "framer-motion";
1474
+ import { jsx as jsx55 } from "react/jsx-runtime";
1475
+ var DualArc = () => {
1476
+ return /* @__PURE__ */ jsx55("div", { className: "relative w-8 h-8 flex items-center justify-center", children: /* @__PURE__ */ jsx55(
1477
+ motion55.div,
1478
+ {
1479
+ className: "absolute inset-0 border-2 border-t-zinc-800 dark:border-t-white border-b-zinc-800 dark:border-b-white border-l-transparent border-r-transparent rounded-full",
1480
+ animate: { rotate: 360, scale: [1, 0.82, 1] },
1481
+ transition: {
1482
+ rotate: { duration: 1.2, repeat: Infinity, ease: "linear" },
1483
+ scale: { duration: 1.2, repeat: Infinity, ease: "easeInOut" }
1484
+ }
1485
+ }
1486
+ ) });
1487
+ };
1488
+
1489
+ // .generated/ui/loading/dynamic-island.tsx
1490
+ import { motion as motion56 } from "framer-motion";
1491
+ import { jsx as jsx56, jsxs as jsxs17 } from "react/jsx-runtime";
1492
+ var DynamicIsland = () => {
1493
+ return /* @__PURE__ */ jsxs17(
1494
+ motion56.div,
1495
+ {
1496
+ className: "bg-zinc-950 dark:bg-zinc-900 border border-black/10 dark:border-white/10 rounded-full flex items-center justify-center px-4 py-2 gap-3 h-8 shadow-sm",
1497
+ animate: {
1498
+ width: [80, 110, 80]
1499
+ },
1500
+ transition: {
1501
+ duration: 2.2,
1502
+ repeat: Infinity,
1503
+ ease: "easeInOut"
1504
+ },
1505
+ children: [
1506
+ /* @__PURE__ */ jsx56(
1507
+ motion56.div,
1508
+ {
1509
+ className: "w-1.5 h-1.5 rounded-full bg-emerald-500",
1510
+ animate: { opacity: [0.4, 1, 0.4] },
1511
+ transition: { duration: 1.1, repeat: Infinity, ease: "easeInOut" }
1512
+ }
1513
+ ),
1514
+ /* @__PURE__ */ jsx56("div", { className: "flex gap-1 items-center h-2", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx56(
1515
+ motion56.div,
1516
+ {
1517
+ className: "w-0.5 bg-zinc-300 dark:bg-zinc-500 rounded-full",
1518
+ animate: { height: [3, 8, 3] },
1519
+ transition: {
1520
+ duration: 0.8,
1521
+ repeat: Infinity,
1522
+ ease: "easeInOut",
1523
+ delay: i * 0.15
1524
+ }
1525
+ },
1526
+ i
1527
+ )) })
1528
+ ]
1529
+ }
1530
+ );
1531
+ };
1532
+
1533
+ // .generated/ui/loading/elastic-bars.tsx
1534
+ import { motion as motion57 } from "framer-motion";
1535
+ import { jsx as jsx57 } from "react/jsx-runtime";
1536
+ var ElasticBars = () => /* @__PURE__ */ jsx57("div", { className: "flex space-x-2 h-10 items-center justify-center", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx57(
1537
+ motion57.div,
1538
+ {
1539
+ className: "w-2 bg-zinc-800 dark:bg-white rounded-full",
1540
+ animate: { height: [8, 36, 8] },
1541
+ transition: {
1542
+ duration: 1.1,
1543
+ repeat: Infinity,
1544
+ ease: "easeInOut",
1545
+ delay: i * 0.15
1546
+ }
1547
+ },
1548
+ i
1549
+ )) });
1550
+
1551
+ // .generated/ui/loading/elastic-square.tsx
1552
+ import { motion as motion58 } from "framer-motion";
1553
+ import { jsx as jsx58 } from "react/jsx-runtime";
1554
+ var ElasticSquare = () => /* @__PURE__ */ jsx58("div", { className: "h-12 flex items-end border-b-2 border-zinc-200 dark:border-zinc-800 w-12 justify-center", children: /* @__PURE__ */ jsx58(
1555
+ motion58.div,
1556
+ {
1557
+ className: "w-6 h-6 bg-zinc-800 dark:bg-white rounded-sm origin-bottom",
1558
+ animate: { y: [0, -20, 0], scaleY: [0.7, 1.2, 0.7], scaleX: [1.3, 0.8, 1.3] },
1559
+ transition: { duration: 0.8, repeat: Infinity, ease: "easeInOut" }
1560
+ }
1561
+ ) });
1562
+
1563
+ // .generated/ui/loading/expanding-cross.tsx
1564
+ import { motion as motion59 } from "framer-motion";
1565
+ import { jsx as jsx59, jsxs as jsxs18 } from "react/jsx-runtime";
1566
+ var ExpandingCross = () => {
1567
+ return /* @__PURE__ */ jsxs18("div", { className: "relative w-8 h-8", children: [
1568
+ /* @__PURE__ */ jsx59(
1569
+ motion59.div,
1570
+ {
1571
+ className: "absolute top-1/2 left-0 w-full h-1 bg-zinc-800 dark:bg-white -mt-0.5 rounded-full",
1572
+ animate: { scaleX: [0.2, 1, 0.2] },
1573
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" }
1574
+ }
1575
+ ),
1576
+ /* @__PURE__ */ jsx59(
1577
+ motion59.div,
1578
+ {
1579
+ className: "absolute left-1/2 top-0 h-full w-1 bg-zinc-800 dark:bg-white -ml-0.5 rounded-full",
1580
+ animate: { scaleY: [0.2, 1, 0.2] },
1581
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut", delay: 0.75 }
1582
+ }
1583
+ )
1584
+ ] });
1585
+ };
1586
+
1587
+ // .generated/ui/loading/face-id-scan.tsx
1588
+ import { motion as motion60 } from "framer-motion";
1589
+ import { jsx as jsx60, jsxs as jsxs19 } from "react/jsx-runtime";
1590
+ var FaceIDScan = () => /* @__PURE__ */ jsxs19("div", { className: "w-12 h-12 border-2 border-zinc-300 rounded-xl relative overflow-hidden flex items-center justify-center", children: [
1591
+ /* @__PURE__ */ jsx60("svg", { viewBox: "0 0 24 24", className: "w-6 h-6 fill-zinc-300 dark:fill-zinc-700", children: /* @__PURE__ */ jsx60("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z" }) }),
1592
+ /* @__PURE__ */ jsx60(
1593
+ motion60.div,
1594
+ {
1595
+ className: "absolute left-0 w-full h-8 bg-gradient-to-b from-transparent to-green-400/30 border-b border-green-500",
1596
+ animate: { top: ["-100%", "100%", "-100%"] },
1597
+ transition: { duration: 2.5, repeat: Infinity, ease: "linear" }
1598
+ }
1599
+ )
1600
+ ] });
1601
+
1602
+ // .generated/ui/loading/fade-arc.tsx
1603
+ import { jsx as jsx61, jsxs as jsxs20 } from "react/jsx-runtime";
1604
+ var FadeArc = () => {
1605
+ return /* @__PURE__ */ jsx61("div", { className: "relative w-9 h-9", children: /* @__PURE__ */ jsxs20("svg", { className: "w-full h-full animate-spin", viewBox: "0 0 50 50", children: [
1606
+ /* @__PURE__ */ jsx61(
1607
+ "circle",
1608
+ {
1609
+ className: "stroke-zinc-200 dark:stroke-zinc-800",
1610
+ cx: "25",
1611
+ cy: "25",
1612
+ r: "20",
1613
+ fill: "none",
1614
+ strokeWidth: "3.5"
1615
+ }
1616
+ ),
1617
+ /* @__PURE__ */ jsx61(
1618
+ "circle",
1619
+ {
1620
+ className: "stroke-zinc-800 dark:stroke-white",
1621
+ cx: "25",
1622
+ cy: "25",
1623
+ r: "20",
1624
+ fill: "none",
1625
+ strokeWidth: "3.5",
1626
+ strokeDasharray: "80",
1627
+ strokeDashoffset: "28",
1628
+ strokeLinecap: "round"
1629
+ }
1630
+ )
1631
+ ] }) });
1632
+ };
1633
+
1634
+ // .generated/ui/loading/fade-dots.tsx
1635
+ import { motion as motion61 } from "framer-motion";
1636
+ import { jsx as jsx62 } from "react/jsx-runtime";
1637
+ var FadeDots = () => {
1638
+ return /* @__PURE__ */ jsx62("div", { className: "flex space-x-2", children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ jsx62(
1639
+ motion61.div,
1640
+ {
1641
+ className: "w-2.5 h-2.5 bg-zinc-800 dark:bg-white rounded-full",
1642
+ animate: { opacity: [0, 1, 0] },
1643
+ transition: { duration: 1.5, repeat: Infinity, delay: i * 0.2, ease: "linear" }
1644
+ },
1645
+ i
1646
+ )) });
1647
+ };
1648
+
1649
+ // .generated/ui/loading/flip-square.tsx
1650
+ import { motion as motion62 } from "framer-motion";
1651
+ import { jsx as jsx63 } from "react/jsx-runtime";
1652
+ var FlipSquare = () => {
1653
+ return /* @__PURE__ */ jsx63(
1654
+ motion62.div,
1655
+ {
1656
+ className: "w-8 h-8 bg-zinc-800 dark:bg-white rounded-md shadow-sm",
1657
+ animate: { rotateX: [0, 180, 180, 0], rotateY: [0, 0, 180, 180] },
1658
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
1659
+ }
1660
+ );
1661
+ };
1662
+
1663
+ // .generated/ui/loading/floating-diamonds.tsx
1664
+ import { motion as motion63 } from "framer-motion";
1665
+ import { jsx as jsx64 } from "react/jsx-runtime";
1666
+ var FloatingDiamonds = () => {
1667
+ return /* @__PURE__ */ jsx64("div", { className: "flex space-x-2", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx64(
1668
+ motion63.div,
1669
+ {
1670
+ className: "w-3 h-3 bg-zinc-800 dark:bg-white rounded-sm rotate-45",
1671
+ animate: { y: [0, -10, 0] },
1672
+ transition: { duration: 1, repeat: Infinity, delay: i * 0.2, ease: "easeInOut" }
1673
+ },
1674
+ i
1675
+ )) });
1676
+ };
1677
+
1678
+ // .generated/ui/loading/fluid-bars.tsx
1679
+ import { motion as motion64 } from "framer-motion";
1680
+ import { jsx as jsx65 } from "react/jsx-runtime";
1681
+ var FluidBars = () => /* @__PURE__ */ jsx65("div", { className: "flex space-x-1", children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ jsx65(
1682
+ motion64.div,
1683
+ {
1684
+ className: "w-1.5 h-8 bg-zinc-800 dark:bg-white rounded-full origin-bottom",
1685
+ animate: { rotate: [-15, 15, -15], scaleY: [0.8, 1, 0.8] },
1686
+ transition: { duration: 1.5, repeat: Infinity, delay: i * 0.1, ease: "easeInOut" }
1687
+ },
1688
+ i
1689
+ )) });
1690
+
1691
+ // .generated/ui/loading/fluid-diamond.tsx
1692
+ import { motion as motion65 } from "framer-motion";
1693
+ import { jsx as jsx66 } from "react/jsx-runtime";
1694
+ var FluidDiamond = () => /* @__PURE__ */ jsx66(
1695
+ motion65.div,
1696
+ {
1697
+ className: "w-6 h-6 bg-zinc-800 dark:bg-white rounded-sm",
1698
+ style: { rotate: 45 },
1699
+ animate: { scaleX: [1, 1.5, 1], scaleY: [1, 0.5, 1] },
1700
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" }
1701
+ }
1702
+ );
1703
+
1704
+ // .generated/ui/loading/fluid-dot-orbit.tsx
1705
+ import { motion as motion66 } from "framer-motion";
1706
+ import { jsx as jsx67, jsxs as jsxs21 } from "react/jsx-runtime";
1707
+ var FluidDotOrbit = () => /* @__PURE__ */ jsxs21("div", { className: "relative w-10 h-10 flex items-center justify-center", children: [
1708
+ /* @__PURE__ */ jsx67("div", { className: "w-2.5 h-2.5 bg-zinc-800 dark:bg-white rounded-full" }),
1709
+ /* @__PURE__ */ jsx67(
1710
+ motion66.div,
1711
+ {
1712
+ className: "absolute inset-0",
1713
+ animate: { rotate: 360 },
1714
+ transition: { duration: 2, repeat: Infinity, ease: "linear" },
1715
+ children: /* @__PURE__ */ jsx67("div", { className: "w-2 h-2 bg-zinc-500 dark:bg-zinc-350 rounded-full absolute top-1 left-1/2 -ml-1" })
1716
+ }
1717
+ )
1718
+ ] });
1719
+
1720
+ // .generated/ui/loading/fluid-skeleton.tsx
1721
+ import { motion as motion67 } from "framer-motion";
1722
+ import { jsx as jsx68 } from "react/jsx-runtime";
1723
+ var FluidSkeleton = () => /* @__PURE__ */ jsx68("div", { className: "w-24 h-10 bg-zinc-200 dark:bg-zinc-800 rounded-xl overflow-hidden relative", children: /* @__PURE__ */ jsx68(
1724
+ motion67.div,
1725
+ {
1726
+ className: "absolute inset-0 bg-gradient-to-r from-transparent via-white/60 to-transparent",
1727
+ animate: { x: ["-100%", "200%"] },
1728
+ transition: { duration: 1.5, repeat: Infinity, ease: "linear" }
1729
+ }
1730
+ ) });
1731
+
1732
+ // .generated/ui/loading/gears.tsx
1733
+ import { motion as motion68 } from "framer-motion";
1734
+ import { jsx as jsx69, jsxs as jsxs22 } from "react/jsx-runtime";
1735
+ var Gears = () => {
1736
+ return /* @__PURE__ */ jsxs22("div", { className: "flex space-x-[-4px]", children: [
1737
+ /* @__PURE__ */ jsx69(
1738
+ motion68.div,
1739
+ {
1740
+ className: "w-8 h-8 border-4 border-dashed border-zinc-800 dark:border-zinc-700 rounded-full",
1741
+ animate: { rotate: 360 },
1742
+ transition: { duration: 4, repeat: Infinity, ease: "linear" }
1743
+ }
1744
+ ),
1745
+ /* @__PURE__ */ jsx69(
1746
+ motion68.div,
1747
+ {
1748
+ className: "w-6 h-6 border-[3px] border-dashed border-zinc-500 rounded-full mt-3",
1749
+ animate: { rotate: -360 },
1750
+ transition: { duration: 3, repeat: Infinity, ease: "linear" }
1751
+ }
1752
+ )
1753
+ ] });
1754
+ };
1755
+
1756
+ // .generated/ui/loading/glassmorphic-card.tsx
1757
+ import { motion as motion69 } from "framer-motion";
1758
+ import { jsx as jsx70, jsxs as jsxs23 } from "react/jsx-runtime";
1759
+ var GlassmorphicCard = () => /* @__PURE__ */ jsxs23("div", { className: "w-20 h-16 bg-zinc-100 dark:bg-zinc-800/50 backdrop-blur-md border border-white/50 rounded-2xl shadow-sm flex items-center justify-center relative overflow-hidden", children: [
1760
+ /* @__PURE__ */ jsx70(
1761
+ motion69.div,
1762
+ {
1763
+ className: "absolute w-12 h-12 bg-zinc-300 dark:bg-zinc-700 rounded-full blur-xl -z-10",
1764
+ animate: { x: [-20, 20, -20], y: [-10, 10, -10] },
1765
+ transition: { duration: 3, repeat: Infinity, ease: "easeInOut" }
1766
+ }
1767
+ ),
1768
+ /* @__PURE__ */ jsx70("div", { className: "w-5 h-5 border-2 border-zinc-800 dark:border-zinc-700 border-t-transparent rounded-full animate-spin" })
1769
+ ] });
1770
+
1771
+ // .generated/ui/loading/gradient-arc.tsx
1772
+ import { motion as motion70 } from "framer-motion";
1773
+ import { jsx as jsx71 } from "react/jsx-runtime";
1774
+ var GradientArc = () => {
1775
+ return /* @__PURE__ */ jsx71("div", { className: "relative w-10 h-10 flex items-center justify-center", children: /* @__PURE__ */ jsx71(
1776
+ motion70.div,
1777
+ {
1778
+ className: "w-10 h-10 rounded-full",
1779
+ style: {
1780
+ background: "linear-gradient(135deg, #00f2fe 0%, #4facfe 100%)",
1781
+ maskImage: "radial-gradient(transparent 55%, black 60%)",
1782
+ WebkitMaskImage: "radial-gradient(transparent 55%, black 60%)"
1783
+ },
1784
+ animate: { rotate: 360 },
1785
+ transition: { duration: 1.2, repeat: Infinity, ease: "linear" }
1786
+ }
1787
+ ) });
1788
+ };
1789
+
1790
+ // .generated/ui/loading/grid-dots.tsx
1791
+ import { motion as motion71 } from "framer-motion";
1792
+ import { jsx as jsx72 } from "react/jsx-runtime";
1793
+ var GridDots = () => {
1794
+ return /* @__PURE__ */ jsx72("div", { className: "grid grid-cols-3 gap-1.5", children: [0, 1, 2, 3, 4, 5, 6, 7, 8].map((i) => /* @__PURE__ */ jsx72(
1795
+ motion71.div,
1796
+ {
1797
+ className: "w-2.5 h-2.5 bg-zinc-800 dark:bg-white rounded-full",
1798
+ animate: { scale: [1, 0.5, 1], opacity: [1, 0.3, 1] },
1799
+ transition: { duration: 1.5, repeat: Infinity, delay: i % 3 * 0.2 + Math.floor(i / 3) * 0.2, ease: "easeInOut" }
1800
+ },
1801
+ i
1802
+ )) });
1803
+ };
1804
+
1805
+ // .generated/ui/loading/haptic-ring.tsx
1806
+ import { motion as motion72 } from "framer-motion";
1807
+ import { jsx as jsx73 } from "react/jsx-runtime";
1808
+ var HapticRing = () => /* @__PURE__ */ jsx73(
1809
+ motion72.div,
1810
+ {
1811
+ className: "w-10 h-10 border-[3px] border-zinc-200 dark:border-zinc-800 rounded-full border-t-zinc-800 dark:border-t-white",
1812
+ animate: { rotate: [0, 90, 180, 270, 360] },
1813
+ transition: { duration: 2, repeat: Infinity, type: "spring", bounce: 0.4 }
1814
+ }
1815
+ );
1816
+
1817
+ // .generated/ui/loading/heartbeat.tsx
1818
+ import { motion as motion73 } from "framer-motion";
1819
+ import { jsx as jsx74 } from "react/jsx-runtime";
1820
+ var Heartbeat = () => {
1821
+ return /* @__PURE__ */ jsx74("svg", { className: "w-16 h-8 overflow-visible", viewBox: "0 0 64 32", children: /* @__PURE__ */ jsx74(
1822
+ motion73.polyline,
1823
+ {
1824
+ points: "0,16 16,16 24,4 32,28 40,16 64,16",
1825
+ className: "stroke-zinc-800 dark:stroke-white fill-none",
1826
+ strokeWidth: "2",
1827
+ strokeLinejoin: "round",
1828
+ strokeLinecap: "round",
1829
+ strokeDasharray: "100",
1830
+ animate: { strokeDashoffset: [100, -100] },
1831
+ transition: { duration: 2, repeat: Infinity, ease: "linear" }
1832
+ }
1833
+ ) });
1834
+ };
1835
+
1836
+ // .generated/ui/loading/hexagon-spinner.tsx
1837
+ import { motion as motion74 } from "framer-motion";
1838
+ import { jsx as jsx75, jsxs as jsxs24 } from "react/jsx-runtime";
1839
+ var HexagonSpinner = () => {
1840
+ return /* @__PURE__ */ jsxs24("svg", { className: "w-10 h-10", viewBox: "0 0 50 50", children: [
1841
+ /* @__PURE__ */ jsx75("polygon", { points: "25,5 45,15 45,35 25,45 5,35 5,15", className: "stroke-zinc-200 dark:stroke-zinc-800 fill-none", strokeWidth: "4" }),
1842
+ /* @__PURE__ */ jsx75(
1843
+ motion74.polygon,
1844
+ {
1845
+ points: "25,5 45,15 45,35 25,45 5,35 5,15",
1846
+ className: "stroke-zinc-800 dark:stroke-white fill-none",
1847
+ strokeWidth: "4",
1848
+ strokeLinecap: "round",
1849
+ strokeDasharray: "120",
1850
+ animate: { strokeDashoffset: [120, -120] },
1851
+ transition: { duration: 2, repeat: Infinity, ease: "linear" }
1852
+ }
1853
+ )
1854
+ ] });
1855
+ };
1856
+
1857
+ // .generated/ui/loading/hourglass.tsx
1858
+ import { motion as motion75 } from "framer-motion";
1859
+ import { jsx as jsx76, jsxs as jsxs25 } from "react/jsx-runtime";
1860
+ var Hourglass = () => {
1861
+ return /* @__PURE__ */ jsxs25(
1862
+ motion75.div,
1863
+ {
1864
+ className: "w-8 h-10 flex flex-col items-center justify-between",
1865
+ animate: { rotate: [0, 180, 180, 360, 360] },
1866
+ transition: { duration: 3, repeat: Infinity, ease: "easeInOut" },
1867
+ children: [
1868
+ /* @__PURE__ */ jsx76("div", { className: "w-8 h-0 border-t-[16px] border-t-zinc-800 dark:border-t-white border-l-[16px] border-l-transparent border-r-[16px] border-r-transparent origin-bottom" }),
1869
+ /* @__PURE__ */ jsx76("div", { className: "w-8 h-0 border-b-[16px] border-b-zinc-800 dark:border-b-white border-l-[16px] border-l-transparent border-r-[16px] border-r-transparent origin-top" })
1870
+ ]
1871
+ }
1872
+ );
1873
+ };
1874
+
1875
+ // .generated/ui/loading/infinity-path.tsx
1876
+ import { motion as motion76 } from "framer-motion";
1877
+ import { jsx as jsx77, jsxs as jsxs26 } from "react/jsx-runtime";
1878
+ var InfinityPath = () => {
1879
+ return /* @__PURE__ */ jsxs26("svg", { className: "w-12 h-6 overflow-visible", viewBox: "0 0 60 30", children: [
1880
+ /* @__PURE__ */ jsx77(
1881
+ "path",
1882
+ {
1883
+ d: "M 15 15 C 15 5, 25 5, 30 15 C 35 25, 45 25, 45 15 C 45 5, 35 5, 30 15 C 25 25, 15 25, 15 15",
1884
+ className: "stroke-zinc-200 dark:stroke-zinc-800 fill-none",
1885
+ strokeWidth: "4",
1886
+ strokeLinecap: "round"
1887
+ }
1888
+ ),
1889
+ /* @__PURE__ */ jsx77(
1890
+ motion76.path,
1891
+ {
1892
+ d: "M 15 15 C 15 5, 25 5, 30 15 C 35 25, 45 25, 45 15 C 45 5, 35 5, 30 15 C 25 25, 15 25, 15 15",
1893
+ className: "stroke-zinc-800 dark:stroke-white fill-none",
1894
+ strokeWidth: "4",
1895
+ strokeLinecap: "round",
1896
+ strokeDasharray: "100",
1897
+ animate: { strokeDashoffset: [100, -100] },
1898
+ transition: { duration: 2, repeat: Infinity, ease: "linear" }
1899
+ }
1900
+ )
1901
+ ] });
1902
+ };
1903
+
1904
+ // .generated/ui/loading/intersecting-rings.tsx
1905
+ import { motion as motion77 } from "framer-motion";
1906
+ import { jsx as jsx78, jsxs as jsxs27 } from "react/jsx-runtime";
1907
+ var IntersectingRings = () => {
1908
+ return /* @__PURE__ */ jsxs27("div", { className: "relative w-12 h-12 flex items-center justify-center [perspective:800px]", children: [
1909
+ /* @__PURE__ */ jsx78(
1910
+ motion77.div,
1911
+ {
1912
+ className: "absolute w-10 h-10 border-2 border-t-zinc-800 dark:border-t-white border-r-zinc-800/30 dark:border-r-white/30 border-b-zinc-800/10 dark:border-b-white/10 border-l-transparent rounded-full",
1913
+ style: { transformStyle: "preserve-3d" },
1914
+ animate: { rotateX: 360, rotateY: 180 },
1915
+ transition: { duration: 2.2, repeat: Infinity, ease: "linear" }
1916
+ }
1917
+ ),
1918
+ /* @__PURE__ */ jsx78(
1919
+ motion77.div,
1920
+ {
1921
+ className: "absolute w-10 h-10 border-2 border-b-zinc-800 dark:border-b-white border-t-zinc-800/30 dark:border-t-white/30 border-l-zinc-800/10 dark:border-l-white/10 border-r-transparent rounded-full",
1922
+ style: { transformStyle: "preserve-3d" },
1923
+ animate: { rotateX: 180, rotateY: 360 },
1924
+ transition: { duration: 2.2, repeat: Infinity, ease: "linear" }
1925
+ }
1926
+ )
1927
+ ] });
1928
+ };
1929
+
1930
+ // .generated/ui/loading/ios-spinner.tsx
1931
+ import { motion as motion78 } from "framer-motion";
1932
+ import { jsx as jsx79 } from "react/jsx-runtime";
1933
+ var IOSSpinner = () => /* @__PURE__ */ jsx79("div", { className: "relative w-8 h-8", children: Array.from({ length: 12 }).map((_, i) => /* @__PURE__ */ jsx79(
1934
+ motion78.div,
1935
+ {
1936
+ className: "absolute w-full h-full",
1937
+ style: { rotate: i * 30 },
1938
+ children: /* @__PURE__ */ jsx79(
1939
+ motion78.div,
1940
+ {
1941
+ className: "w-[2px] h-[7px] bg-zinc-800 dark:bg-white rounded-full mx-auto",
1942
+ animate: { opacity: [1, 0.2] },
1943
+ transition: { duration: 1, repeat: Infinity, delay: i * (1 / 12), ease: "linear" }
1944
+ }
1945
+ )
1946
+ },
1947
+ i
1948
+ )) });
1949
+
1950
+ // .generated/ui/loading/line-spinner.tsx
1951
+ import { motion as motion79 } from "framer-motion";
1952
+ import { jsx as jsx80, jsxs as jsxs28 } from "react/jsx-runtime";
1953
+ var LineSpinner = () => {
1954
+ return /* @__PURE__ */ jsxs28("div", { className: "relative w-10 h-10 flex items-center justify-center", children: [
1955
+ /* @__PURE__ */ jsx80("div", { className: "w-10 h-10 border-2 border-zinc-200 dark:border-zinc-800 rounded-full absolute" }),
1956
+ /* @__PURE__ */ jsx80(
1957
+ motion79.div,
1958
+ {
1959
+ className: "w-8 h-1 bg-zinc-800 dark:bg-white rounded-full",
1960
+ animate: { rotate: 360 },
1961
+ transition: { duration: 1.2, repeat: Infinity, ease: "linear" }
1962
+ }
1963
+ )
1964
+ ] });
1965
+ };
1966
+
1967
+ // .generated/ui/loading/liquid-dots.tsx
1968
+ import { motion as motion80 } from "framer-motion";
1969
+ import { jsx as jsx81, jsxs as jsxs29 } from "react/jsx-runtime";
1970
+ var LiquidDots = () => {
1971
+ return /* @__PURE__ */ jsxs29("div", { className: "relative w-16 h-8 flex items-center justify-center", style: { filter: "url(#goo)" }, children: [
1972
+ /* @__PURE__ */ jsx81("svg", { className: "absolute w-0 h-0", children: /* @__PURE__ */ jsx81("defs", { children: /* @__PURE__ */ jsxs29("filter", { id: "goo", children: [
1973
+ /* @__PURE__ */ jsx81("feGaussianBlur", { in: "SourceGraphic", stdDeviation: "4", result: "blur" }),
1974
+ /* @__PURE__ */ jsx81("feColorMatrix", { in: "blur", mode: "matrix", values: "1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -7", result: "goo" }),
1975
+ /* @__PURE__ */ jsx81("feBlend", { in: "SourceGraphic", in2: "goo" })
1976
+ ] }) }) }),
1977
+ /* @__PURE__ */ jsx81(
1978
+ motion80.div,
1979
+ {
1980
+ className: "absolute w-6 h-6 bg-zinc-800 dark:bg-white rounded-full",
1981
+ animate: { x: [-16, 16, -16] },
1982
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
1983
+ }
1984
+ ),
1985
+ /* @__PURE__ */ jsx81(
1986
+ motion80.div,
1987
+ {
1988
+ className: "absolute w-6 h-6 bg-zinc-800 dark:bg-white rounded-full",
1989
+ animate: { x: [16, -16, 16] },
1990
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
1991
+ }
1992
+ )
1993
+ ] });
1994
+ };
1995
+
1996
+ // .generated/ui/loading/mac-terminal.tsx
1997
+ import { motion as motion81 } from "framer-motion";
1998
+ import { jsx as jsx82, jsxs as jsxs30 } from "react/jsx-runtime";
1999
+ var MacTerminal = () => /* @__PURE__ */ jsxs30("div", { className: "flex items-center text-zinc-900 dark:text-white font-mono text-sm", children: [
2000
+ /* @__PURE__ */ jsx82("span", { children: "~ %" }),
2001
+ /* @__PURE__ */ jsx82(
2002
+ motion81.span,
2003
+ {
2004
+ className: "ml-1.5 w-2 h-4 bg-zinc-900 dark:bg-white inline-block",
2005
+ animate: { opacity: [1, 0, 1] },
2006
+ transition: { duration: 1, repeat: Infinity, ease: "linear" }
2007
+ }
2008
+ )
2009
+ ] });
2010
+
2011
+ // .generated/ui/loading/magnetic-dots.tsx
2012
+ import { motion as motion82 } from "framer-motion";
2013
+ import { jsx as jsx83, jsxs as jsxs31 } from "react/jsx-runtime";
2014
+ var MagneticDots = () => /* @__PURE__ */ jsxs31("div", { className: "flex space-x-1.5", style: { filter: "url(#goo)" }, children: [
2015
+ /* @__PURE__ */ jsx83("svg", { width: "0", height: "0", className: "absolute hidden", children: /* @__PURE__ */ jsx83("defs", { children: /* @__PURE__ */ jsxs31("filter", { id: "goo", children: [
2016
+ /* @__PURE__ */ jsx83("feGaussianBlur", { in: "SourceGraphic", stdDeviation: "2", result: "blur" }),
2017
+ /* @__PURE__ */ jsx83("feColorMatrix", { in: "blur", mode: "matrix", values: "1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 15 -7", result: "goo" }),
2018
+ /* @__PURE__ */ jsx83("feComposite", { in: "SourceGraphic", in2: "goo", operator: "atop" })
2019
+ ] }) }) }),
2020
+ /* @__PURE__ */ jsx83(
2021
+ motion82.div,
2022
+ {
2023
+ className: "w-4 h-4 bg-zinc-800 dark:bg-white rounded-full",
2024
+ animate: { x: [0, 8, 0] },
2025
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" }
2026
+ }
2027
+ ),
2028
+ /* @__PURE__ */ jsx83(
2029
+ motion82.div,
2030
+ {
2031
+ className: "w-4 h-4 bg-zinc-800 dark:bg-white rounded-full",
2032
+ animate: { x: [0, -8, 0] },
2033
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" }
2034
+ }
2035
+ )
2036
+ ] });
2037
+
2038
+ // .generated/ui/loading/minimal-triangle.tsx
2039
+ import { motion as motion83 } from "framer-motion";
2040
+ import { jsx as jsx84, jsxs as jsxs32 } from "react/jsx-runtime";
2041
+ var MinimalTriangle = () => /* @__PURE__ */ jsxs32("svg", { className: "w-10 h-10 overflow-visible", viewBox: "0 0 50 50", children: [
2042
+ /* @__PURE__ */ jsx84("polygon", { points: "25,5 45,40 5,40", className: "stroke-zinc-200 dark:stroke-zinc-800 fill-none", strokeWidth: "3" }),
2043
+ /* @__PURE__ */ jsx84(
2044
+ motion83.polygon,
2045
+ {
2046
+ points: "25,5 45,40 5,40",
2047
+ className: "stroke-zinc-800 dark:stroke-white fill-none",
2048
+ strokeWidth: "3",
2049
+ strokeDasharray: "120",
2050
+ animate: { strokeDashoffset: [120, 0, -120] },
2051
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
2052
+ }
2053
+ )
2054
+ ] });
2055
+
2056
+ // .generated/ui/loading/morph-dot-ring.tsx
2057
+ import { motion as motion84 } from "framer-motion";
2058
+ import { jsx as jsx85 } from "react/jsx-runtime";
2059
+ var MorphDotRing = () => /* @__PURE__ */ jsx85(
2060
+ motion84.div,
2061
+ {
2062
+ className: "grid grid-cols-2 gap-1 w-6 h-6",
2063
+ animate: { rotate: 180, gap: ["4px", "0px", "4px"] },
2064
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" },
2065
+ children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ jsx85("div", { className: "w-full h-full bg-zinc-800 dark:bg-white rounded-full" }, i))
2066
+ }
2067
+ );
2068
+
2069
+ // .generated/ui/loading/morph-loader.tsx
2070
+ import { motion as motion85 } from "framer-motion";
2071
+ import { jsx as jsx86 } from "react/jsx-runtime";
2072
+ function MorphLoader({
2073
+ size = 40,
2074
+ color = "bg-blue-500",
2075
+ className = ""
2076
+ }) {
2077
+ return /* @__PURE__ */ jsx86("div", { className: `relative flex items-center justify-center ${className}`, style: { width: size, height: size }, children: /* @__PURE__ */ jsx86(
2078
+ motion85.div,
2079
+ {
2080
+ animate: {
2081
+ borderRadius: ["25%", "50%", "50%", "25%", "25%"],
2082
+ rotate: [0, 90, 180, 270, 360],
2083
+ scale: [1, 0.8, 1.1, 0.8, 1]
2084
+ },
2085
+ transition: {
2086
+ duration: 2.2,
2087
+ ease: "easeInOut",
2088
+ repeat: Infinity
2089
+ },
2090
+ style: { width: size, height: size },
2091
+ className: `rounded-2xl ${color} shadow-lg`
2092
+ }
2093
+ ) });
2094
+ }
2095
+
2096
+ // .generated/ui/loading/morphing-bars.tsx
2097
+ import { motion as motion86 } from "framer-motion";
2098
+ import { jsx as jsx87 } from "react/jsx-runtime";
2099
+ var MorphingBars = () => /* @__PURE__ */ jsx87(
2100
+ motion86.div,
2101
+ {
2102
+ className: "flex space-x-1 h-8 items-center",
2103
+ animate: { gap: ["4px", "0px", "4px"] },
2104
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" },
2105
+ children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx87(
2106
+ motion86.div,
2107
+ {
2108
+ className: "w-2 h-8 bg-zinc-800 dark:bg-white rounded-sm",
2109
+ animate: { height: [32, 16, 32] },
2110
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
2111
+ },
2112
+ i
2113
+ ))
2114
+ }
2115
+ );
2116
+
2117
+ // .generated/ui/loading/morphing-infinity.tsx
2118
+ import { motion as motion87 } from "framer-motion";
2119
+ import { jsx as jsx88, jsxs as jsxs33 } from "react/jsx-runtime";
2120
+ var MorphingInfinity = () => {
2121
+ return /* @__PURE__ */ jsxs33("div", { className: "w-12 h-6 flex justify-between items-center relative", children: [
2122
+ /* @__PURE__ */ jsx88(
2123
+ motion87.div,
2124
+ {
2125
+ className: "w-6 h-6 border-2 border-zinc-800 dark:border-zinc-700 rounded-full",
2126
+ animate: { x: [0, 24, 0], scale: [1, 0.5, 1] },
2127
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
2128
+ }
2129
+ ),
2130
+ /* @__PURE__ */ jsx88(
2131
+ motion87.div,
2132
+ {
2133
+ className: "w-6 h-6 border-2 border-zinc-800 dark:border-zinc-700 rounded-full absolute top-0 left-0",
2134
+ animate: { x: [24, 0, 24], scale: [0.5, 1, 0.5] },
2135
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
2136
+ }
2137
+ )
2138
+ ] });
2139
+ };
2140
+
2141
+ // .generated/ui/loading/morphing-ring.tsx
2142
+ import { motion as motion88 } from "framer-motion";
2143
+ import { jsx as jsx89 } from "react/jsx-runtime";
2144
+ var MorphingRing = () => /* @__PURE__ */ jsx89(
2145
+ motion88.div,
2146
+ {
2147
+ className: "w-10 h-10 border-[3px] border-zinc-800 dark:border-zinc-700",
2148
+ animate: {
2149
+ rotate: 180,
2150
+ borderRadius: ["10%", "50%", "10%"]
2151
+ },
2152
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
2153
+ }
2154
+ );
2155
+
2156
+ // .generated/ui/loading/morphing-shape.tsx
2157
+ import { motion as motion89 } from "framer-motion";
2158
+ import { jsx as jsx90 } from "react/jsx-runtime";
2159
+ var MorphingShape = () => {
2160
+ return /* @__PURE__ */ jsx90(
2161
+ motion89.div,
2162
+ {
2163
+ className: "w-10 h-10 bg-zinc-800 dark:bg-white shadow-sm",
2164
+ animate: {
2165
+ borderRadius: ["10%", "50%", "10%"],
2166
+ rotate: [0, 90, 180],
2167
+ scale: [1, 0.8, 1]
2168
+ },
2169
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
2170
+ }
2171
+ );
2172
+ };
2173
+
2174
+ // .generated/ui/loading/newtons-cradle.tsx
2175
+ import { motion as motion90 } from "framer-motion";
2176
+ import { jsx as jsx91, jsxs as jsxs34 } from "react/jsx-runtime";
2177
+ var NewtonsCradle = () => {
2178
+ return /* @__PURE__ */ jsxs34("div", { className: "flex items-center justify-center space-x-0.5", children: [
2179
+ /* @__PURE__ */ jsx91(
2180
+ motion90.div,
2181
+ {
2182
+ className: "w-3 h-3 bg-zinc-800 dark:bg-white rounded-full origin-top",
2183
+ animate: { rotate: [25, 0, 0, 0, 0, 25] },
2184
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" }
2185
+ }
2186
+ ),
2187
+ /* @__PURE__ */ jsx91("div", { className: "w-3 h-3 bg-zinc-800 dark:bg-white rounded-full" }),
2188
+ /* @__PURE__ */ jsx91("div", { className: "w-3 h-3 bg-zinc-800 dark:bg-white rounded-full" }),
2189
+ /* @__PURE__ */ jsx91(
2190
+ motion90.div,
2191
+ {
2192
+ className: "w-3 h-3 bg-zinc-800 dark:bg-white rounded-full origin-top",
2193
+ animate: { rotate: [0, 0, 0, -25, 0, 0] },
2194
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" }
2195
+ }
2196
+ )
2197
+ ] });
2198
+ };
2199
+
2200
+ // .generated/ui/loading/offset-rings.tsx
2201
+ import { motion as motion91 } from "framer-motion";
2202
+ import { jsx as jsx92, jsxs as jsxs35 } from "react/jsx-runtime";
2203
+ var OffsetRings = () => /* @__PURE__ */ jsxs35("div", { className: "relative w-12 h-12 flex items-center justify-center", children: [
2204
+ /* @__PURE__ */ jsx92(
2205
+ motion91.div,
2206
+ {
2207
+ className: "absolute w-12 h-12 border-2 border-zinc-800 dark:border-zinc-700 border-x-transparent rounded-full",
2208
+ animate: { rotate: [0, 180, 360] },
2209
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
2210
+ }
2211
+ ),
2212
+ /* @__PURE__ */ jsx92(
2213
+ motion91.div,
2214
+ {
2215
+ className: "absolute w-8 h-8 border-2 border-zinc-500 border-y-transparent rounded-full",
2216
+ animate: { rotate: [0, -180, -360] },
2217
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut", delay: 0.2 }
2218
+ }
2219
+ )
2220
+ ] });
2221
+
2222
+ // .generated/ui/loading/orbiting-circles.tsx
2223
+ import { motion as motion92 } from "framer-motion";
2224
+ import { jsx as jsx93, jsxs as jsxs36 } from "react/jsx-runtime";
2225
+ var OrbitingCircles = () => {
2226
+ return /* @__PURE__ */ jsxs36("div", { className: "relative w-12 h-12 flex items-center justify-center", children: [
2227
+ /* @__PURE__ */ jsx93("div", { className: "w-3 h-3 bg-zinc-800 dark:bg-white rounded-full" }),
2228
+ [0, 1].map((i) => /* @__PURE__ */ jsx93(
2229
+ motion92.div,
2230
+ {
2231
+ className: "absolute w-full h-full",
2232
+ animate: { rotate: i === 0 ? 360 : -360 },
2233
+ transition: { duration: 2, repeat: Infinity, ease: "linear" },
2234
+ children: /* @__PURE__ */ jsx93("div", { className: "absolute top-0 left-1/2 -ml-1 w-2 h-2 bg-zinc-500 dark:bg-zinc-350 rounded-full" })
2235
+ },
2236
+ i
2237
+ ))
2238
+ ] });
2239
+ };
2240
+
2241
+ // .generated/ui/loading/orbiting-dot.tsx
2242
+ import { motion as motion93 } from "framer-motion";
2243
+ import { jsx as jsx94, jsxs as jsxs37 } from "react/jsx-runtime";
2244
+ var OrbitingDot = () => {
2245
+ return /* @__PURE__ */ jsxs37("div", { className: "relative w-10 h-10 flex items-center justify-center", children: [
2246
+ /* @__PURE__ */ jsx94("div", { className: "w-2 h-2 bg-zinc-300 dark:bg-zinc-700 rounded-full" }),
2247
+ /* @__PURE__ */ jsx94(
2248
+ motion93.div,
2249
+ {
2250
+ className: "absolute w-full h-full border border-zinc-200 dark:border-zinc-800 rounded-full",
2251
+ animate: { rotate: 360 },
2252
+ transition: { duration: 2, repeat: Infinity, ease: "linear" },
2253
+ children: /* @__PURE__ */ jsx94("div", { className: "absolute top-0 left-1/2 -ml-1.5 -mt-1.5 w-3 h-3 bg-zinc-800 dark:bg-white rounded-full shadow-sm" })
2254
+ }
2255
+ )
2256
+ ] });
2257
+ };
2258
+
2259
+ // .generated/ui/loading/origami-shape.tsx
2260
+ import { motion as motion94 } from "framer-motion";
2261
+ import { jsx as jsx95, jsxs as jsxs38 } from "react/jsx-runtime";
2262
+ var OrigamiShape = () => /* @__PURE__ */ jsxs38("div", { className: "relative w-10 h-10", children: [
2263
+ /* @__PURE__ */ jsx95(
2264
+ motion94.div,
2265
+ {
2266
+ className: "absolute top-0 left-0 w-5 h-5 bg-zinc-800 dark:bg-white rounded-tl-md",
2267
+ animate: { rotateY: [0, 180, 0] },
2268
+ style: { transformOrigin: "right" },
2269
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
2270
+ }
2271
+ ),
2272
+ /* @__PURE__ */ jsx95(
2273
+ motion94.div,
2274
+ {
2275
+ className: "absolute bottom-0 right-0 w-5 h-5 bg-zinc-500 dark:bg-zinc-350 rounded-br-md",
2276
+ animate: { rotateY: [0, 180, 0] },
2277
+ style: { transformOrigin: "left" },
2278
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
2279
+ }
2280
+ )
2281
+ ] });
2282
+
2283
+ // .generated/ui/loading/pendulum.tsx
2284
+ import { motion as motion95 } from "framer-motion";
2285
+ import { jsx as jsx96, jsxs as jsxs39 } from "react/jsx-runtime";
2286
+ var Pendulum = () => {
2287
+ return /* @__PURE__ */ jsxs39("div", { className: "relative w-16 h-12 flex items-start justify-center", children: [
2288
+ /* @__PURE__ */ jsx96("div", { className: "w-full h-1 bg-zinc-200 dark:bg-zinc-800 rounded-full rounded-b-none absolute top-0" }),
2289
+ /* @__PURE__ */ jsxs39(
2290
+ motion95.div,
2291
+ {
2292
+ className: "absolute top-0 w-1 bg-zinc-800 dark:bg-white origin-top flex flex-col items-center",
2293
+ animate: { rotate: [-45, 45, -45] },
2294
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" },
2295
+ children: [
2296
+ /* @__PURE__ */ jsx96("div", { className: "w-1 h-8 bg-zinc-800 dark:bg-white" }),
2297
+ /* @__PURE__ */ jsx96("div", { className: "w-4 h-4 bg-zinc-800 dark:bg-white rounded-full" })
2298
+ ]
2299
+ }
2300
+ )
2301
+ ] });
2302
+ };
2303
+
2304
+ // .generated/ui/loading/pulsating-dots.tsx
2305
+ import { motion as motion96 } from "framer-motion";
2306
+ import { jsx as jsx97 } from "react/jsx-runtime";
2307
+ var PulsatingDots = () => {
2308
+ return /* @__PURE__ */ jsx97("div", { className: "flex space-x-2", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx97(
2309
+ motion96.div,
2310
+ {
2311
+ className: "w-3 h-3 bg-zinc-800 dark:bg-white rounded-full",
2312
+ animate: { scale: [1, 1.5, 1], opacity: [0.5, 1, 0.5] },
2313
+ transition: { duration: 1.2, repeat: Infinity, delay: i * 0.2, ease: "easeInOut" }
2314
+ },
2315
+ i
2316
+ )) });
2317
+ };
2318
+
2319
+ // .generated/ui/loading/pulse-dot.tsx
2320
+ import { motion as motion97 } from "framer-motion";
2321
+ import { jsx as jsx98, jsxs as jsxs40 } from "react/jsx-runtime";
2322
+ var PulseDot = () => {
2323
+ return /* @__PURE__ */ jsxs40("div", { className: "relative w-10 h-10 flex items-center justify-center", children: [
2324
+ /* @__PURE__ */ jsx98(
2325
+ motion97.div,
2326
+ {
2327
+ className: "absolute w-10 h-10 bg-zinc-800 dark:bg-white rounded-full",
2328
+ animate: { scale: [0, 1], opacity: [0.8, 0] },
2329
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeOut" }
2330
+ }
2331
+ ),
2332
+ /* @__PURE__ */ jsx98("div", { className: "w-3 h-3 bg-zinc-800 dark:bg-white rounded-full relative z-10" })
2333
+ ] });
2334
+ };
2335
+
2336
+ // .generated/ui/loading/pulse-dots.tsx
2337
+ import { motion as motion98 } from "framer-motion";
2338
+ import { jsx as jsx99 } from "react/jsx-runtime";
2339
+ var PulseDots = () => {
2340
+ return /* @__PURE__ */ jsx99("div", { className: "flex space-x-1.5", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx99(
2341
+ motion98.div,
2342
+ {
2343
+ className: "w-2.5 h-2.5 bg-zinc-800 dark:bg-white rounded-full",
2344
+ animate: { opacity: [0.2, 1, 0.2] },
2345
+ transition: { duration: 1.4, repeat: Infinity, delay: i * 0.2 }
2346
+ },
2347
+ i
2348
+ )) });
2349
+ };
2350
+
2351
+ // .generated/ui/loading/pulse-square.tsx
2352
+ import { motion as motion99 } from "framer-motion";
2353
+ import { jsx as jsx100 } from "react/jsx-runtime";
2354
+ var PulseSquare = () => {
2355
+ return /* @__PURE__ */ jsx100(
2356
+ motion99.div,
2357
+ {
2358
+ className: "w-8 h-8 border-4 border-zinc-800 dark:border-zinc-700 rounded-md",
2359
+ animate: { scale: [1, 1.2, 1], opacity: [1, 0.3, 1], borderRadius: ["20%", "50%", "20%"] },
2360
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" }
2361
+ }
2362
+ );
2363
+ };
2364
+
2365
+ // .generated/ui/loading/pulse.tsx
2366
+ import { motion as motion100 } from "framer-motion";
2367
+ import { jsx as jsx101, jsxs as jsxs41 } from "react/jsx-runtime";
2368
+ function Pulse({
2369
+ size = 12,
2370
+ color = "bg-blue-500",
2371
+ className = ""
2372
+ }) {
2373
+ return /* @__PURE__ */ jsxs41("div", { className: `relative flex items-center justify-center ${className}`, style: { width: size, height: size }, children: [
2374
+ /* @__PURE__ */ jsx101("span", { className: `absolute w-full h-full rounded-full ${color}` }),
2375
+ /* @__PURE__ */ jsx101(
2376
+ motion100.span,
2377
+ {
2378
+ initial: { scale: 1, opacity: 0.5 },
2379
+ animate: { scale: 2.8, opacity: 0 },
2380
+ transition: {
2381
+ repeat: Infinity,
2382
+ duration: 1.8,
2383
+ ease: "easeOut"
2384
+ },
2385
+ className: `absolute w-full h-full rounded-full ${color} opacity-40`
2386
+ }
2387
+ ),
2388
+ /* @__PURE__ */ jsx101(
2389
+ motion100.span,
2390
+ {
2391
+ initial: { scale: 1, opacity: 0.5 },
2392
+ animate: { scale: 2.8, opacity: 0 },
2393
+ transition: {
2394
+ repeat: Infinity,
2395
+ duration: 1.8,
2396
+ delay: 0.6,
2397
+ ease: "easeOut"
2398
+ },
2399
+ className: `absolute w-full h-full rounded-full ${color} opacity-40`
2400
+ }
2401
+ )
2402
+ ] });
2403
+ }
2404
+
2405
+ // .generated/ui/loading/pumping-heart.tsx
2406
+ import { motion as motion101 } from "framer-motion";
2407
+ import { jsx as jsx102 } from "react/jsx-runtime";
2408
+ var PumpingHeart = () => {
2409
+ return /* @__PURE__ */ jsx102(
2410
+ motion101.div,
2411
+ {
2412
+ className: "w-8 h-8",
2413
+ animate: { scale: [1, 1.25, 1, 1.25, 1] },
2414
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" },
2415
+ children: /* @__PURE__ */ jsx102("svg", { viewBox: "0 0 24 24", className: "fill-zinc-800 dark:fill-white", children: /* @__PURE__ */ jsx102("path", { d: "M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" }) })
2416
+ }
2417
+ );
2418
+ };
2419
+
2420
+ // .generated/ui/loading/radar-sweep.tsx
2421
+ import { motion as motion102 } from "framer-motion";
2422
+ import { jsx as jsx103, jsxs as jsxs42 } from "react/jsx-runtime";
2423
+ var RadarSweep = ({ theme = "light" }) => {
2424
+ const isDark = theme === "dark";
2425
+ return /* @__PURE__ */ jsxs42("div", { className: "relative w-12 h-12 rounded-full border border-zinc-800/10 dark:border-white/10 flex items-center justify-center overflow-hidden", children: [
2426
+ /* @__PURE__ */ jsx103("div", { className: "absolute w-8 h-8 rounded-full border border-zinc-800/5 dark:border-white/5" }),
2427
+ /* @__PURE__ */ jsx103("div", { className: "absolute w-4 h-4 rounded-full border border-zinc-800/5 dark:border-white/5" }),
2428
+ /* @__PURE__ */ jsx103("div", { className: "absolute w-1.5 h-1.5 rounded-full bg-zinc-800/80 dark:bg-white/80" }),
2429
+ /* @__PURE__ */ jsx103(
2430
+ motion102.div,
2431
+ {
2432
+ className: "absolute inset-0 origin-center",
2433
+ style: {
2434
+ background: isDark ? "conic-gradient(from 0deg, transparent 50%, rgba(255,255,255,0.02) 65%, rgba(255,255,255,0.15) 85%, rgba(255,255,255,0.55) 100%)" : "conic-gradient(from 0deg, transparent 50%, rgba(39,39,42,0.02) 65%, rgba(39,39,42,0.1) 85%, rgba(39,39,42,0.45) 100%)"
2435
+ },
2436
+ animate: { rotate: 360 },
2437
+ transition: { duration: 1.8, repeat: Infinity, ease: "linear" }
2438
+ }
2439
+ )
2440
+ ] });
2441
+ };
2442
+
2443
+ // .generated/ui/loading/ring-sweep.tsx
2444
+ import { motion as motion103 } from "framer-motion";
2445
+ import { jsx as jsx104 } from "react/jsx-runtime";
2446
+ var RingSweep = () => {
2447
+ return /* @__PURE__ */ jsx104(
2448
+ motion103.div,
2449
+ {
2450
+ className: "w-10 h-10 border-[3px] border-zinc-200 dark:border-zinc-800 rounded-full border-t-zinc-800 dark:border-t-white",
2451
+ animate: { rotate: 360 },
2452
+ transition: { duration: 1, repeat: Infinity, ease: "linear" }
2453
+ }
2454
+ );
2455
+ };
2456
+
2457
+ // .generated/ui/loading/ripple-effect.tsx
2458
+ import { motion as motion104 } from "framer-motion";
2459
+ import { jsx as jsx105, jsxs as jsxs43 } from "react/jsx-runtime";
2460
+ var RippleEffect = () => {
2461
+ return /* @__PURE__ */ jsxs43("div", { className: "relative w-12 h-12 flex items-center justify-center", children: [
2462
+ /* @__PURE__ */ jsx105("div", { className: "absolute w-2.5 h-2.5 bg-zinc-800 dark:bg-white rounded-full" }),
2463
+ [0, 1, 2].map((i) => /* @__PURE__ */ jsx105(
2464
+ motion104.div,
2465
+ {
2466
+ className: "absolute w-8 h-8 border border-zinc-850 dark:border-white rounded-full",
2467
+ initial: { scale: 0.3, opacity: 0.8 },
2468
+ animate: { scale: 1.6, opacity: 0 },
2469
+ transition: {
2470
+ duration: 2.2,
2471
+ repeat: Infinity,
2472
+ ease: "easeOut",
2473
+ delay: i * 0.7
2474
+ }
2475
+ },
2476
+ i
2477
+ ))
2478
+ ] });
2479
+ };
2480
+
2481
+ // .generated/ui/loading/rotating-cross.tsx
2482
+ import { motion as motion105 } from "framer-motion";
2483
+ import { jsx as jsx106, jsxs as jsxs44 } from "react/jsx-runtime";
2484
+ var RotatingCross = () => {
2485
+ return /* @__PURE__ */ jsxs44(
2486
+ motion105.div,
2487
+ {
2488
+ className: "relative w-8 h-8 flex items-center justify-center",
2489
+ animate: { rotate: 180 },
2490
+ transition: { duration: 0.8, repeat: Infinity, ease: "easeInOut" },
2491
+ children: [
2492
+ /* @__PURE__ */ jsx106("div", { className: "absolute w-full h-1.5 bg-zinc-800 dark:bg-white rounded-sm" }),
2493
+ /* @__PURE__ */ jsx106("div", { className: "absolute h-full w-1.5 bg-zinc-800 dark:bg-white rounded-sm" })
2494
+ ]
2495
+ }
2496
+ );
2497
+ };
2498
+
2499
+ // .generated/ui/loading/rotating-triangle.tsx
2500
+ import { motion as motion106 } from "framer-motion";
2501
+ import { jsx as jsx107 } from "react/jsx-runtime";
2502
+ var RotatingTriangle = () => {
2503
+ return /* @__PURE__ */ jsx107("svg", { className: "w-10 h-10 overflow-visible", viewBox: "0 0 50 50", children: /* @__PURE__ */ jsx107(
2504
+ motion106.polygon,
2505
+ {
2506
+ points: "25,5 45,40 5,40",
2507
+ className: "stroke-zinc-800 dark:stroke-white fill-none origin-center",
2508
+ strokeWidth: "4",
2509
+ strokeLinejoin: "round",
2510
+ animate: { rotate: 360 },
2511
+ transition: { duration: 2, repeat: Infinity, ease: "linear" }
2512
+ }
2513
+ ) });
2514
+ };
2515
+
2516
+ // .generated/ui/loading/shape-shift-grid.tsx
2517
+ import { motion as motion107 } from "framer-motion";
2518
+ import { jsx as jsx108 } from "react/jsx-runtime";
2519
+ var ShapeShiftGrid = () => /* @__PURE__ */ jsx108("div", { className: "grid grid-cols-2 gap-1 w-8 h-8", children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ jsx108(
2520
+ motion107.div,
2521
+ {
2522
+ className: "w-full h-full bg-zinc-800 dark:bg-white",
2523
+ animate: { borderRadius: ["10%", "50%", "10%"], scale: [1, 0.8, 1] },
2524
+ transition: { duration: 1.5, repeat: Infinity, delay: i * 0.1, ease: "easeInOut" }
2525
+ },
2526
+ i
2527
+ )) });
2528
+
2529
+ // .generated/ui/loading/shimmer-line.tsx
2530
+ import { motion as motion108 } from "framer-motion";
2531
+ import { jsx as jsx109 } from "react/jsx-runtime";
2532
+ var ShimmerLine = () => {
2533
+ return /* @__PURE__ */ jsx109("div", { className: "w-24 h-1 bg-zinc-200 dark:bg-zinc-800 rounded-full overflow-hidden relative", children: /* @__PURE__ */ jsx109(
2534
+ motion108.div,
2535
+ {
2536
+ className: "absolute top-0 left-0 bottom-0 w-1/3 bg-zinc-800 dark:bg-white rounded-full",
2537
+ animate: { x: ["-100%", "300%"] },
2538
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" }
2539
+ }
2540
+ ) });
2541
+ };
2542
+
2543
+ // .generated/ui/loading/siri-wave.tsx
2544
+ import { motion as motion109 } from "framer-motion";
2545
+ import { jsx as jsx110 } from "react/jsx-runtime";
2546
+ var SiriWave = () => /* @__PURE__ */ jsx110("div", { className: "flex space-x-1 items-center h-8", children: [0, 1, 2, 3, 4].map((i) => /* @__PURE__ */ jsx110(
2547
+ motion109.div,
2548
+ {
2549
+ className: "w-1 bg-zinc-800 dark:bg-white rounded-full",
2550
+ animate: { height: [4, 24, 4] },
2551
+ transition: { duration: 1.2, repeat: Infinity, delay: i * 0.1, ease: "easeInOut" }
2552
+ },
2553
+ i
2554
+ )) });
2555
+
2556
+ // .generated/ui/loading/skeleton-loader.tsx
2557
+ import { motion as motion110 } from "framer-motion";
2558
+ import { jsx as jsx111, jsxs as jsxs45 } from "react/jsx-runtime";
2559
+ var SkeletonLoader = () => {
2560
+ return /* @__PURE__ */ jsxs45("div", { className: "w-full max-w-[120px] space-y-2", children: [
2561
+ /* @__PURE__ */ jsxs45("div", { className: "flex items-center space-x-2", children: [
2562
+ /* @__PURE__ */ jsx111(
2563
+ motion110.div,
2564
+ {
2565
+ className: "w-8 h-8 bg-zinc-200 dark:bg-zinc-800 rounded-full shrink-0",
2566
+ animate: { opacity: [0.5, 1, 0.5] },
2567
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" }
2568
+ }
2569
+ ),
2570
+ /* @__PURE__ */ jsx111(
2571
+ motion110.div,
2572
+ {
2573
+ className: "h-3 bg-zinc-200 dark:bg-zinc-800 rounded-full w-full",
2574
+ animate: { opacity: [0.5, 1, 0.5] },
2575
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut", delay: 0.2 }
2576
+ }
2577
+ )
2578
+ ] }),
2579
+ /* @__PURE__ */ jsx111(
2580
+ motion110.div,
2581
+ {
2582
+ className: "h-2 bg-zinc-200 dark:bg-zinc-800 rounded-full w-full",
2583
+ animate: { opacity: [0.5, 1, 0.5] },
2584
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut", delay: 0.4 }
2585
+ }
2586
+ ),
2587
+ /* @__PURE__ */ jsx111(
2588
+ motion110.div,
2589
+ {
2590
+ className: "h-2 bg-zinc-200 dark:bg-zinc-800 rounded-full w-4/5",
2591
+ animate: { opacity: [0.5, 1, 0.5] },
2592
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut", delay: 0.6 }
2593
+ }
2594
+ )
2595
+ ] });
2596
+ };
2597
+
2598
+ // .generated/ui/loading/skeleton.tsx
2599
+ import { motion as motion111 } from "framer-motion";
2600
+ import { jsx as jsx112 } from "react/jsx-runtime";
2601
+ function Skeleton({
2602
+ className = "",
2603
+ shimmerColor = "dark"
2604
+ }) {
2605
+ const isDark = shimmerColor === "dark";
2606
+ const shimmerGradient = isDark ? "linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,255,255,0.05) 50%, rgba(255,255,255,0) 100%)" : "linear-gradient(90deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.04) 50%, rgba(0,0,0,0) 100%)";
2607
+ return /* @__PURE__ */ jsx112(
2608
+ "div",
2609
+ {
2610
+ className: `relative overflow-hidden rounded-md bg-neutral-200/50 dark:bg-neutral-800/40 ${className}`,
2611
+ children: /* @__PURE__ */ jsx112(
2612
+ motion111.div,
2613
+ {
2614
+ initial: { x: "-150%" },
2615
+ animate: { x: "150%" },
2616
+ transition: {
2617
+ repeat: Infinity,
2618
+ duration: 1.6,
2619
+ ease: "easeInOut"
2620
+ },
2621
+ style: {
2622
+ background: shimmerGradient
2623
+ },
2624
+ className: "absolute inset-0 w-[80%] h-full"
2625
+ }
2626
+ )
2627
+ }
2628
+ );
2629
+ }
2630
+
2631
+ // .generated/ui/loading/sliding-bars.tsx
2632
+ import { motion as motion112 } from "framer-motion";
2633
+ import { jsx as jsx113, jsxs as jsxs46 } from "react/jsx-runtime";
2634
+ var SlidingBars = () => /* @__PURE__ */ jsxs46("div", { className: "relative w-8 h-8", children: [
2635
+ /* @__PURE__ */ jsx113(
2636
+ motion112.div,
2637
+ {
2638
+ className: "absolute top-0 left-0 w-8 h-1.5 bg-zinc-800 dark:bg-white rounded-full",
2639
+ animate: { y: [0, 24, 0] },
2640
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" }
2641
+ }
2642
+ ),
2643
+ /* @__PURE__ */ jsx113(
2644
+ motion112.div,
2645
+ {
2646
+ className: "absolute bottom-0 left-0 w-8 h-1.5 bg-zinc-400 dark:bg-zinc-200 rounded-full",
2647
+ animate: { y: [0, -24, 0] },
2648
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" }
2649
+ }
2650
+ )
2651
+ ] });
2652
+
2653
+ // .generated/ui/loading/smooth-dot-shift.tsx
2654
+ import { motion as motion113 } from "framer-motion";
2655
+ import { jsx as jsx114, jsxs as jsxs47 } from "react/jsx-runtime";
2656
+ var SmoothDotShift = () => /* @__PURE__ */ jsxs47("div", { className: "relative w-12 h-3 flex items-center", children: [
2657
+ /* @__PURE__ */ jsx114(
2658
+ motion113.div,
2659
+ {
2660
+ className: "absolute w-3 h-3 bg-zinc-800 dark:bg-white rounded-full z-10",
2661
+ animate: { x: [0, 18, 36, 18, 0] },
2662
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
2663
+ }
2664
+ ),
2665
+ /* @__PURE__ */ jsx114("div", { className: "w-3 h-3 bg-zinc-300 dark:bg-zinc-700 rounded-full absolute left-0" }),
2666
+ /* @__PURE__ */ jsx114("div", { className: "w-3 h-3 bg-zinc-300 dark:bg-zinc-700 rounded-full absolute left-[18px]" }),
2667
+ /* @__PURE__ */ jsx114("div", { className: "w-3 h-3 bg-zinc-300 dark:bg-zinc-700 rounded-full absolute left-[36px]" })
2668
+ ] });
2669
+
2670
+ // .generated/ui/loading/smooth-ring.tsx
2671
+ import { jsx as jsx115, jsxs as jsxs48 } from "react/jsx-runtime";
2672
+ var SmoothRing = () => /* @__PURE__ */ jsx115("div", { className: "w-9 h-9", children: /* @__PURE__ */ jsxs48("svg", { className: "w-full h-full animate-spin", viewBox: "0 0 32 32", children: [
2673
+ /* @__PURE__ */ jsx115(
2674
+ "circle",
2675
+ {
2676
+ cx: "16",
2677
+ cy: "16",
2678
+ r: "14",
2679
+ fill: "none",
2680
+ strokeWidth: "3",
2681
+ className: "stroke-zinc-200 dark:stroke-zinc-800"
2682
+ }
2683
+ ),
2684
+ /* @__PURE__ */ jsx115(
2685
+ "circle",
2686
+ {
2687
+ cx: "16",
2688
+ cy: "16",
2689
+ r: "14",
2690
+ fill: "none",
2691
+ strokeWidth: "3",
2692
+ className: "stroke-zinc-800 dark:stroke-white",
2693
+ strokeDasharray: "38 80",
2694
+ strokeLinecap: "round"
2695
+ }
2696
+ )
2697
+ ] }) });
2698
+
2699
+ // .generated/ui/loading/smooth-rounded-square.tsx
2700
+ import { motion as motion114 } from "framer-motion";
2701
+ import { jsx as jsx116 } from "react/jsx-runtime";
2702
+ var SmoothRoundedSquare = () => /* @__PURE__ */ jsx116(
2703
+ motion114.div,
2704
+ {
2705
+ className: "w-10 h-10 border-[3px] border-zinc-800 dark:border-zinc-700",
2706
+ animate: { borderRadius: ["10%", "50%", "10%"] },
2707
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
2708
+ }
2709
+ );
2710
+
2711
+ // .generated/ui/loading/spinning-squares.tsx
2712
+ import { motion as motion115 } from "framer-motion";
2713
+ import { jsx as jsx117, jsxs as jsxs49 } from "react/jsx-runtime";
2714
+ var SpinningSquares = () => {
2715
+ return /* @__PURE__ */ jsxs49("div", { className: "relative w-10 h-10", children: [
2716
+ /* @__PURE__ */ jsx117(
2717
+ motion115.div,
2718
+ {
2719
+ className: "absolute top-0 left-0 w-4 h-4 bg-zinc-800 dark:bg-white rounded-sm",
2720
+ animate: { x: [0, 24, 24, 0, 0], y: [0, 0, 24, 24, 0] },
2721
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
2722
+ }
2723
+ ),
2724
+ /* @__PURE__ */ jsx117(
2725
+ motion115.div,
2726
+ {
2727
+ className: "absolute bottom-0 right-0 w-4 h-4 bg-zinc-300 dark:bg-zinc-700 rounded-sm",
2728
+ animate: { x: [0, -24, -24, 0, 0], y: [0, 0, -24, -24, 0] },
2729
+ transition: { duration: 2, repeat: Infinity, ease: "easeInOut" }
2730
+ }
2731
+ )
2732
+ ] });
2733
+ };
2734
+
2735
+ // .generated/ui/loading/spiral-spinner.tsx
2736
+ import { motion as motion116 } from "framer-motion";
2737
+ import { jsx as jsx118 } from "react/jsx-runtime";
2738
+ var SpiralSpinner = () => {
2739
+ return /* @__PURE__ */ jsx118(
2740
+ motion116.div,
2741
+ {
2742
+ className: "w-10 h-10 border-[3px] border-zinc-800 dark:border-zinc-700 rounded-full border-t-transparent",
2743
+ animate: { rotate: 360, scale: [1, 0.8, 1] },
2744
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" }
2745
+ }
2746
+ );
2747
+ };
2748
+
2749
+ // .generated/ui/loading/spring-bars.tsx
2750
+ import { motion as motion117 } from "framer-motion";
2751
+ import { jsx as jsx119 } from "react/jsx-runtime";
2752
+ var SpringBars = () => /* @__PURE__ */ jsx119("div", { className: "flex flex-col space-y-2 w-10 justify-center", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx119(
2753
+ motion117.div,
2754
+ {
2755
+ className: "h-1.5 bg-zinc-800 dark:bg-white rounded-full origin-left",
2756
+ animate: { scaleX: [0.2, 1, 0.2] },
2757
+ transition: {
2758
+ duration: 1.4,
2759
+ repeat: Infinity,
2760
+ ease: "easeInOut",
2761
+ delay: i * 0.15
2762
+ }
2763
+ },
2764
+ i
2765
+ )) });
2766
+
2767
+ // .generated/ui/loading/spring-dot-matrix.tsx
2768
+ import { motion as motion118 } from "framer-motion";
2769
+ import { jsx as jsx120 } from "react/jsx-runtime";
2770
+ var SpringDotMatrix = () => {
2771
+ return /* @__PURE__ */ jsx120("div", { className: "grid grid-cols-3 gap-2.5", children: Array.from({ length: 9 }).map((_, i) => /* @__PURE__ */ jsx120(
2772
+ motion118.div,
2773
+ {
2774
+ className: "w-2 h-2 bg-zinc-800 dark:bg-white rounded-full",
2775
+ animate: { scale: [1, 0.4, 1] },
2776
+ transition: {
2777
+ duration: 1.5,
2778
+ repeat: Infinity,
2779
+ ease: "easeInOut",
2780
+ delay: (Math.floor(i / 3) + i % 3) * 0.15
2781
+ }
2782
+ },
2783
+ i
2784
+ )) });
2785
+ };
2786
+
2787
+ // .generated/ui/loading/spring-hexagon.tsx
2788
+ import { motion as motion119 } from "framer-motion";
2789
+ import { jsx as jsx121 } from "react/jsx-runtime";
2790
+ var SpringHexagon = () => /* @__PURE__ */ jsx121(
2791
+ motion119.svg,
2792
+ {
2793
+ className: "w-10 h-10",
2794
+ viewBox: "0 0 50 50",
2795
+ animate: { scale: [1, 1.15, 1], rotate: [0, 60, 60] },
2796
+ transition: { duration: 2, repeat: Infinity, type: "spring", bounce: 0.3 },
2797
+ children: /* @__PURE__ */ jsx121("polygon", { points: "25,5 45,15 45,35 25,45 5,35 5,15", className: "fill-zinc-800 dark:fill-white" })
2798
+ }
2799
+ );
2800
+
2801
+ // .generated/ui/loading/spring-ring-expand.tsx
2802
+ import { motion as motion120 } from "framer-motion";
2803
+ import { jsx as jsx122 } from "react/jsx-runtime";
2804
+ var SpringRingExpand = () => {
2805
+ return /* @__PURE__ */ jsx122("div", { className: "relative w-12 h-12 flex items-center justify-center", children: [0, 1].map((i) => /* @__PURE__ */ jsx122(
2806
+ motion120.div,
2807
+ {
2808
+ className: "absolute w-10 h-10 border-2 border-zinc-800 dark:border-white rounded-full",
2809
+ initial: { scale: 0.1, opacity: 1 },
2810
+ animate: { scale: 1.25, opacity: 0 },
2811
+ transition: {
2812
+ duration: 1.6,
2813
+ repeat: Infinity,
2814
+ ease: "easeOut",
2815
+ delay: i * 0.8
2816
+ }
2817
+ },
2818
+ i
2819
+ )) });
2820
+ };
2821
+
2822
+ // .generated/ui/loading/spring-text-pop.tsx
2823
+ import { motion as motion121 } from "framer-motion";
2824
+ import { jsx as jsx123 } from "react/jsx-runtime";
2825
+ var SpringTextPop = () => {
2826
+ const text = "Loading...";
2827
+ return /* @__PURE__ */ jsx123("div", { className: "flex font-medium text-sm tracking-widest text-zinc-800 dark:text-white", children: text.split("").map((char, i) => /* @__PURE__ */ jsx123(
2828
+ motion121.span,
2829
+ {
2830
+ className: "origin-bottom inline-block",
2831
+ animate: { y: [0, -6, 0] },
2832
+ transition: {
2833
+ duration: 1.2,
2834
+ repeat: Infinity,
2835
+ ease: "easeInOut",
2836
+ delay: i * 0.08
2837
+ },
2838
+ children: char === " " ? "\xA0" : char
2839
+ },
2840
+ i
2841
+ )) });
2842
+ };
2843
+
2844
+ // .generated/ui/loading/square-accordion.tsx
2845
+ import { motion as motion122 } from "framer-motion";
2846
+ import { jsx as jsx124 } from "react/jsx-runtime";
2847
+ var SquareAccordion = () => {
2848
+ return /* @__PURE__ */ jsx124("div", { className: "flex space-x-1 w-12 h-12 justify-center items-center", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx124(
2849
+ motion122.div,
2850
+ {
2851
+ className: "w-3 bg-zinc-800 dark:bg-white rounded-sm",
2852
+ animate: { height: [12, 32, 12] },
2853
+ transition: { duration: 1.5, repeat: Infinity, delay: i * 0.2, ease: "easeInOut" }
2854
+ },
2855
+ i
2856
+ )) });
2857
+ };
2858
+
2859
+ // .generated/ui/loading/square-grid.tsx
2860
+ import { motion as motion123 } from "framer-motion";
2861
+ import { jsx as jsx125 } from "react/jsx-runtime";
2862
+ var SquareGrid = () => {
2863
+ return /* @__PURE__ */ jsx125("div", { className: "grid grid-cols-2 gap-1.5", children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ jsx125(
2864
+ motion123.div,
2865
+ {
2866
+ className: "w-4 h-4 bg-zinc-800 dark:bg-white rounded-sm",
2867
+ animate: { scale: [1, 0.5, 1], opacity: [1, 0.3, 1] },
2868
+ transition: { duration: 1.5, repeat: Infinity, delay: i * 0.2, ease: "easeInOut" }
2869
+ },
2870
+ i
2871
+ )) });
2872
+ };
2873
+
2874
+ // .generated/ui/loading/square-snake.tsx
2875
+ import { motion as motion124 } from "framer-motion";
2876
+ import { jsx as jsx126 } from "react/jsx-runtime";
2877
+ var SquareSnake = () => {
2878
+ return /* @__PURE__ */ jsx126("div", { className: "grid grid-cols-3 gap-1 w-10 h-10", children: [
2879
+ [0, 0],
2880
+ [1, 0],
2881
+ [2, 0],
2882
+ [0, 1],
2883
+ [1, 1],
2884
+ [2, 1],
2885
+ [0, 2],
2886
+ [1, 2],
2887
+ [2, 2]
2888
+ ].map(([x, y], i) => /* @__PURE__ */ jsx126(
2889
+ motion124.div,
2890
+ {
2891
+ className: "bg-zinc-800 dark:bg-white rounded-sm w-full h-full",
2892
+ animate: { opacity: [0.1, 1, 0.1] },
2893
+ transition: { duration: 1.5, repeat: Infinity, delay: (x + y) * 0.15, ease: "easeInOut" }
2894
+ },
2895
+ i
2896
+ )) });
2897
+ };
2898
+
2899
+ // .generated/ui/loading/square-spinner.tsx
2900
+ import { motion as motion125 } from "framer-motion";
2901
+ import { jsx as jsx127 } from "react/jsx-runtime";
2902
+ var SquareSpinner = () => {
2903
+ return /* @__PURE__ */ jsx127(
2904
+ motion125.div,
2905
+ {
2906
+ className: "w-8 h-8 border-2 border-zinc-800 dark:border-zinc-700 flex items-center justify-center",
2907
+ animate: { rotate: 90 },
2908
+ transition: { duration: 0.6, repeat: Infinity, ease: "easeInOut" },
2909
+ children: /* @__PURE__ */ jsx127("div", { className: "w-2 h-2 bg-zinc-800 dark:bg-white" })
2910
+ }
2911
+ );
2912
+ };
2913
+
2914
+ // .generated/ui/loading/stacked-bar-pulse.tsx
2915
+ import { motion as motion126 } from "framer-motion";
2916
+ import { jsx as jsx128 } from "react/jsx-runtime";
2917
+ var StackedBarPulse = () => /* @__PURE__ */ jsx128("div", { className: "flex flex-col space-y-1 w-8 items-center", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx128(
2918
+ motion126.div,
2919
+ {
2920
+ className: "w-full h-1 bg-zinc-800 dark:bg-white rounded-full",
2921
+ animate: { opacity: [0.2, 1, 0.2], width: ["50%", "100%", "50%"] },
2922
+ transition: { duration: 1.5, repeat: Infinity, delay: i * 0.2, ease: "easeInOut" }
2923
+ },
2924
+ i
2925
+ )) });
2926
+
2927
+ // .generated/ui/loading/swapping-dots.tsx
2928
+ import { motion as motion127 } from "framer-motion";
2929
+ import { jsx as jsx129, jsxs as jsxs50 } from "react/jsx-runtime";
2930
+ var SwappingDots = () => {
2931
+ return /* @__PURE__ */ jsxs50("div", { className: "relative w-12 h-4 flex items-center", children: [
2932
+ /* @__PURE__ */ jsx129(
2933
+ motion127.div,
2934
+ {
2935
+ className: "absolute left-0 w-4 h-4 bg-zinc-800 dark:bg-white rounded-full",
2936
+ animate: { x: [0, 32, 0] },
2937
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" }
2938
+ }
2939
+ ),
2940
+ /* @__PURE__ */ jsx129(
2941
+ motion127.div,
2942
+ {
2943
+ className: "absolute right-0 w-4 h-4 bg-zinc-400 dark:bg-zinc-200 rounded-full",
2944
+ animate: { x: [0, -32, 0] },
2945
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" }
2946
+ }
2947
+ )
2948
+ ] });
2949
+ };
2950
+
2951
+ // .generated/ui/loading/swirling-spinner.tsx
2952
+ import { motion as motion128 } from "framer-motion";
2953
+ import { jsx as jsx130, jsxs as jsxs51 } from "react/jsx-runtime";
2954
+ var SwirlingSpinner = () => {
2955
+ return /* @__PURE__ */ jsxs51("div", { className: "relative w-10 h-10 flex items-center justify-center", children: [
2956
+ /* @__PURE__ */ jsx130(
2957
+ motion128.div,
2958
+ {
2959
+ className: "absolute inset-0 border-[2.5px] border-t-zinc-800 dark:border-t-white border-r-zinc-800/30 dark:border-r-white/30 border-b-zinc-800/10 dark:border-b-white/10 border-l-transparent rounded-full",
2960
+ animate: { rotate: 360 },
2961
+ transition: { duration: 1.3, repeat: Infinity, ease: "linear" }
2962
+ }
2963
+ ),
2964
+ /* @__PURE__ */ jsx130(
2965
+ motion128.div,
2966
+ {
2967
+ className: "absolute w-6 h-6 border-[2.5px] border-b-zinc-800 dark:border-b-white border-t-zinc-800/30 dark:border-t-white/30 border-r-zinc-800/10 dark:border-r-white/10 border-l-transparent rounded-full",
2968
+ animate: { rotate: -360 },
2969
+ transition: { duration: 0.9, repeat: Infinity, ease: "linear" }
2970
+ }
2971
+ )
2972
+ ] });
2973
+ };
2974
+
2975
+ // .generated/ui/loading/symmetric-wave.tsx
2976
+ import { motion as motion129 } from "framer-motion";
2977
+ import { jsx as jsx131 } from "react/jsx-runtime";
2978
+ var SymmetricWave = () => {
2979
+ return /* @__PURE__ */ jsx131("div", { className: "flex space-x-1.5 h-10 items-center", children: [0, 1, 2, 3, 4, 3, 2, 1, 0].map((val, i) => /* @__PURE__ */ jsx131(
2980
+ motion129.div,
2981
+ {
2982
+ className: "w-1.5 bg-zinc-800 dark:bg-white rounded-full",
2983
+ animate: { height: [8, 24, 8] },
2984
+ transition: { duration: 1.2, repeat: Infinity, delay: val * 0.1, ease: "easeInOut" }
2985
+ },
2986
+ i
2987
+ )) });
2988
+ };
2989
+
2990
+ // .generated/ui/loading/terminal-loader.tsx
2991
+ import { motion as motion130 } from "framer-motion";
2992
+ import { jsx as jsx132, jsxs as jsxs52 } from "react/jsx-runtime";
2993
+ var TerminalLoader = () => {
2994
+ return /* @__PURE__ */ jsxs52("div", { className: "bg-zinc-900 dark:bg-white text-zinc-100 font-mono text-[10px] p-3 rounded-md w-full h-16 flex flex-col justify-end overflow-hidden shadow-sm", children: [
2995
+ /* @__PURE__ */ jsxs52("div", { className: "flex text-zinc-500 dark:text-zinc-300 mb-1 leading-none", children: [
2996
+ /* @__PURE__ */ jsx132("span", { children: "$" }),
2997
+ /* @__PURE__ */ jsx132("span", { className: "ml-2", children: "loading..." })
2998
+ ] }),
2999
+ /* @__PURE__ */ jsxs52("div", { className: "flex items-center leading-none", children: [
3000
+ /* @__PURE__ */ jsx132("span", { className: "text-emerald-400", children: ">" }),
3001
+ /* @__PURE__ */ jsx132(
3002
+ motion130.span,
3003
+ {
3004
+ className: "ml-2 w-1.5 h-2.5 bg-zinc-100 dark:bg-zinc-800 block",
3005
+ animate: { opacity: [1, 0, 1] },
3006
+ transition: { duration: 0.8, repeat: Infinity, ease: "linear" }
3007
+ }
3008
+ )
3009
+ ] })
3010
+ ] });
3011
+ };
3012
+
3013
+ // .generated/ui/loading/text-blink.tsx
3014
+ import { motion as motion131 } from "framer-motion";
3015
+ import { jsx as jsx133 } from "react/jsx-runtime";
3016
+ var TextBlink = () => {
3017
+ return /* @__PURE__ */ jsx133(
3018
+ motion131.div,
3019
+ {
3020
+ className: "text-zinc-900 dark:text-white font-medium text-lg",
3021
+ animate: { opacity: [1, 0.2, 1] },
3022
+ transition: { duration: 1.5, repeat: Infinity, ease: "easeInOut" },
3023
+ children: "Thinking"
3024
+ }
3025
+ );
3026
+ };
3027
+
3028
+ // .generated/ui/loading/text-dots.tsx
3029
+ import { motion as motion132 } from "framer-motion";
3030
+ import { jsx as jsx134, jsxs as jsxs53 } from "react/jsx-runtime";
3031
+ var TextDots = () => {
3032
+ return /* @__PURE__ */ jsxs53("div", { className: "font-medium text-lg text-zinc-900 dark:text-white flex w-24", children: [
3033
+ /* @__PURE__ */ jsx134("span", { children: "Thinking" }),
3034
+ /* @__PURE__ */ jsxs53("span", { className: "flex w-6 pl-0.5", children: [
3035
+ /* @__PURE__ */ jsx134(motion132.span, { animate: { opacity: [0, 1, 1, 0] }, transition: { duration: 2, repeat: Infinity, times: [0, 0.2, 0.8, 1] }, children: "." }),
3036
+ /* @__PURE__ */ jsx134(motion132.span, { animate: { opacity: [0, 0, 1, 0] }, transition: { duration: 2, repeat: Infinity, times: [0, 0.4, 0.8, 1] }, children: "." }),
3037
+ /* @__PURE__ */ jsx134(motion132.span, { animate: { opacity: [0, 0, 1, 0] }, transition: { duration: 2, repeat: Infinity, times: [0, 0.6, 0.8, 1] }, children: "." })
3038
+ ] })
3039
+ ] });
3040
+ };
3041
+
3042
+ // .generated/ui/loading/text-morph.tsx
3043
+ import { motion as motion133 } from "framer-motion";
3044
+ import { jsx as jsx135, jsxs as jsxs54 } from "react/jsx-runtime";
3045
+ var TextMorph = () => /* @__PURE__ */ jsxs54("div", { className: "relative h-6 w-24 flex items-center justify-center font-medium text-sm text-zinc-900 dark:text-white overflow-hidden", children: [
3046
+ /* @__PURE__ */ jsx135(
3047
+ motion133.div,
3048
+ {
3049
+ className: "absolute",
3050
+ animate: { opacity: [1, 0, 0, 1], y: [0, -16, 16, 0] },
3051
+ transition: { duration: 3, repeat: Infinity, ease: "easeInOut" },
3052
+ children: "Loading"
3053
+ }
3054
+ ),
3055
+ /* @__PURE__ */ jsx135(
3056
+ motion133.div,
3057
+ {
3058
+ className: "absolute",
3059
+ animate: { opacity: [0, 1, 1, 0], y: [16, 0, 0, -16] },
3060
+ transition: { duration: 3, repeat: Infinity, ease: "easeInOut" },
3061
+ children: "Wait"
3062
+ }
3063
+ )
3064
+ ] });
3065
+
3066
+ // .generated/ui/loading/text-shimmer-wave.tsx
3067
+ import { motion as motion134 } from "framer-motion";
3068
+ import { jsx as jsx136 } from "react/jsx-runtime";
3069
+ var TextShimmerWave = () => {
3070
+ const text = "Thinking";
3071
+ return /* @__PURE__ */ jsx136("div", { className: "flex font-medium text-lg", children: text.split("").map((char, i) => /* @__PURE__ */ jsx136(
3072
+ motion134.span,
3073
+ {
3074
+ className: "text-zinc-900 dark:text-white",
3075
+ animate: { opacity: [0.3, 1, 0.3], y: [0, -2, 0] },
3076
+ transition: { duration: 1.5, repeat: Infinity, delay: i * 0.1, ease: "easeInOut" },
3077
+ children: char
3078
+ },
3079
+ i
3080
+ )) });
3081
+ };
3082
+
3083
+ // .generated/ui/loading/text-shimmer.tsx
3084
+ import { motion as motion135 } from "framer-motion";
3085
+ import { jsx as jsx137, jsxs as jsxs55 } from "react/jsx-runtime";
3086
+ var TextShimmer = () => {
3087
+ return /* @__PURE__ */ jsxs55("div", { className: "relative text-zinc-200 font-medium text-lg", children: [
3088
+ "Thinking",
3089
+ /* @__PURE__ */ jsx137(
3090
+ motion135.div,
3091
+ {
3092
+ className: "absolute inset-0 text-zinc-900 dark:text-white",
3093
+ style: { maskImage: "linear-gradient(90deg, transparent 0%, black 50%, transparent 100%)", maskSize: "200% 100%" },
3094
+ animate: { maskPosition: ["100% 0%", "-100% 0%"] },
3095
+ transition: { duration: 1.5, repeat: Infinity, ease: "linear" },
3096
+ children: "Thinking"
3097
+ }
3098
+ )
3099
+ ] });
3100
+ };
3101
+
3102
+ // .generated/ui/loading/trailing-dots.tsx
3103
+ import { motion as motion136 } from "framer-motion";
3104
+ import { jsx as jsx138 } from "react/jsx-runtime";
3105
+ var TrailingDots = () => /* @__PURE__ */ jsx138("div", { className: "relative w-10 h-10", children: [0, 1, 2, 3, 4].map((i) => /* @__PURE__ */ jsx138(
3106
+ motion136.div,
3107
+ {
3108
+ className: "absolute inset-0",
3109
+ animate: { rotate: 360 },
3110
+ transition: { duration: 1.5, repeat: Infinity, delay: i * 0.1, ease: "easeInOut" },
3111
+ children: /* @__PURE__ */ jsx138("div", { className: `w-2 h-2 rounded-full absolute top-0 left-1/2 -ml-1 ${i === 0 ? "bg-zinc-800 dark:bg-white" : "bg-zinc-400 dark:bg-zinc-200"}`, style: { opacity: 1 - i * 0.2 } })
3112
+ },
3113
+ i
3114
+ )) });
3115
+
3116
+ // .generated/ui/loading/triple-dot-spinner.tsx
3117
+ import { motion as motion137 } from "framer-motion";
3118
+ import { jsx as jsx139 } from "react/jsx-runtime";
3119
+ var TripleDotSpinner = () => {
3120
+ return /* @__PURE__ */ jsx139(
3121
+ motion137.div,
3122
+ {
3123
+ className: "relative w-10 h-10",
3124
+ animate: { rotate: 360 },
3125
+ transition: { duration: 2, repeat: Infinity, ease: "linear" },
3126
+ children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx139(
3127
+ "div",
3128
+ {
3129
+ className: "absolute top-0 left-1/2 w-2 h-2 bg-zinc-800 dark:bg-white rounded-full -ml-1 origin-[4px_20px]",
3130
+ style: { transform: `rotate(${i * 120}deg)` }
3131
+ },
3132
+ i
3133
+ ))
3134
+ }
3135
+ );
3136
+ };
3137
+
3138
+ // .generated/ui/loading/twin-orbit.tsx
3139
+ import { motion as motion138 } from "framer-motion";
3140
+ import { jsx as jsx140, jsxs as jsxs56 } from "react/jsx-runtime";
3141
+ var TwinOrbit = () => {
3142
+ return /* @__PURE__ */ jsxs56("div", { className: "relative w-12 h-12", children: [
3143
+ /* @__PURE__ */ jsx140(
3144
+ motion138.div,
3145
+ {
3146
+ className: "absolute inset-0 border-2 border-zinc-800 dark:border-zinc-700 rounded-full border-b-transparent border-r-transparent",
3147
+ animate: { rotate: 360 },
3148
+ transition: { duration: 1.5, repeat: Infinity, ease: "linear" }
3149
+ }
3150
+ ),
3151
+ /* @__PURE__ */ jsx140(
3152
+ motion138.div,
3153
+ {
3154
+ className: "absolute inset-2 border-2 border-zinc-400 rounded-full border-t-transparent border-l-transparent",
3155
+ animate: { rotate: -360 },
3156
+ transition: { duration: 1.5, repeat: Infinity, ease: "linear" }
3157
+ }
3158
+ )
3159
+ ] });
3160
+ };
3161
+
3162
+ // .generated/ui/loading/typing-indicator.tsx
3163
+ import { motion as motion139 } from "framer-motion";
3164
+ import { jsx as jsx141 } from "react/jsx-runtime";
3165
+ var TypingIndicator = () => {
3166
+ return /* @__PURE__ */ jsx141("div", { className: "flex items-center justify-center px-4 py-2 bg-zinc-100 dark:bg-zinc-800 rounded-full space-x-1", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx141(
3167
+ motion139.div,
3168
+ {
3169
+ className: "w-1.5 h-1.5 bg-zinc-500 dark:bg-zinc-350 rounded-full",
3170
+ animate: { y: [0, -4, 0] },
3171
+ transition: { duration: 0.6, repeat: Infinity, delay: i * 0.15, ease: "easeInOut" }
3172
+ },
3173
+ i
3174
+ )) });
3175
+ };
3176
+
3177
+ // .generated/ui/loading/typing.tsx
3178
+ import { motion as motion140 } from "framer-motion";
3179
+ import { jsx as jsx142, jsxs as jsxs57 } from "react/jsx-runtime";
3180
+ var Typing = () => {
3181
+ return /* @__PURE__ */ jsxs57("div", { className: "flex items-center text-zinc-900 dark:text-white font-medium text-lg w-20", children: [
3182
+ "Loading",
3183
+ /* @__PURE__ */ jsx142(
3184
+ motion140.span,
3185
+ {
3186
+ className: "w-1.5 h-4 bg-zinc-900 dark:bg-white ml-1 inline-block",
3187
+ animate: { opacity: [1, 0, 1] },
3188
+ transition: { duration: 0.8, repeat: Infinity, ease: "linear" }
3189
+ }
3190
+ )
3191
+ ] });
3192
+ };
3193
+
3194
+ // .generated/ui/loading/wandering-cube.tsx
3195
+ import { motion as motion141 } from "framer-motion";
3196
+ import { jsx as jsx143 } from "react/jsx-runtime";
3197
+ var WanderingCube = () => {
3198
+ return /* @__PURE__ */ jsx143("div", { className: "relative w-10 h-10", children: /* @__PURE__ */ jsx143(
3199
+ motion141.div,
3200
+ {
3201
+ className: "absolute top-0 left-0 w-4 h-4 bg-zinc-800 dark:bg-white rounded-sm",
3202
+ animate: {
3203
+ x: [0, 24, 24, 0, 0],
3204
+ y: [0, 0, 24, 24, 0],
3205
+ rotate: [0, -90, -180, -270, -360]
3206
+ },
3207
+ transition: { duration: 2.5, repeat: Infinity, ease: "easeInOut" }
3208
+ }
3209
+ ) });
3210
+ };
3211
+
3212
+ // .generated/ui/loading/watch-spinner.tsx
3213
+ import { motion as motion142 } from "framer-motion";
3214
+ import { jsx as jsx144 } from "react/jsx-runtime";
3215
+ var WatchSpinner = () => /* @__PURE__ */ jsx144("div", { className: "relative w-12 h-12 flex items-center justify-center", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx144(
3216
+ motion142.div,
3217
+ {
3218
+ className: "absolute rounded-full border-[3px] border-transparent border-t-zinc-800 dark:border-t-white",
3219
+ style: { width: 44 - i * 12, height: 44 - i * 12 },
3220
+ animate: { rotate: 360 },
3221
+ transition: { duration: 1 + i * 0.5, repeat: Infinity, ease: "easeInOut" }
3222
+ },
3223
+ i
3224
+ )) });
3225
+
3226
+ // .generated/ui/loading/wave-dots.tsx
3227
+ import { motion as motion143 } from "framer-motion";
3228
+ import { jsx as jsx145 } from "react/jsx-runtime";
3229
+ var WaveDots = () => {
3230
+ return /* @__PURE__ */ jsx145("div", { className: "flex space-x-1.5 h-6 items-center", children: [0, 1, 2, 3, 4].map((i) => /* @__PURE__ */ jsx145(
3231
+ motion143.div,
3232
+ {
3233
+ className: "w-2 h-2 bg-zinc-800 dark:bg-white rounded-full",
3234
+ animate: { y: [4, -4, 4] },
3235
+ transition: { duration: 1, repeat: Infinity, delay: i * 0.15, ease: "easeInOut" }
3236
+ },
3237
+ i
3238
+ )) });
3239
+ };
3240
+
3241
+ // .generated/ui/loading/wave-physics-loader.tsx
3242
+ import { motion as motion144 } from "framer-motion";
3243
+ import { useMemo as useMemo2 } from "react";
3244
+ import { jsx as jsx146, jsxs as jsxs58 } from "react/jsx-runtime";
3245
+ function WavePhysicsLoader({ theme = "light" }) {
3246
+ const numBars = 15;
3247
+ const barWidth = 12;
3248
+ const barGap = 8;
3249
+ const barTotalWidth = barWidth + barGap;
3250
+ const numFrames = 201;
3251
+ const B = 4;
3252
+ const maxBounce = 60;
3253
+ const baseBarH = 16;
3254
+ const wavePeakH = 48;
3255
+ const { bars, ballX, ballY, ballScaleX, ballScaleY, times } = useMemo2(() => {
3256
+ const barsData = Array.from({ length: numBars }).map(() => ({
3257
+ heights: [],
3258
+ colors: []
3259
+ }));
3260
+ const bX = [];
3261
+ const bY = [];
3262
+ const bScaleX = [];
3263
+ const bScaleY = [];
3264
+ const tArr = [];
3265
+ for (let k = 0; k < numFrames; k++) {
3266
+ const t = k / (numFrames - 1);
3267
+ tArr.push(t);
3268
+ const x_frac = t < 0.5 ? t / 0.5 : (1 - t) / 0.5;
3269
+ const ball_idx = x_frac * (numBars - 1);
3270
+ bX.push(`${ball_idx * barTotalWidth}px`);
3271
+ let bounce_f = x_frac * B % 1;
3272
+ if (x_frac === 1 || x_frac === 0) bounce_f = 0;
3273
+ const bounce_h = 4 * bounce_f * (1 - bounce_f);
3274
+ const height_factor = Math.max(0, 1 - bounce_h * 2);
3275
+ const ball_indent = height_factor * 20;
3276
+ const ball_y = baseBarH + wavePeakH - ball_indent + bounce_h * maxBounce;
3277
+ bY.push(`-${ball_y}px`);
3278
+ const squish = height_factor;
3279
+ bScaleY.push(1 - squish * 0.3);
3280
+ bScaleX.push(1 + squish * 0.25);
3281
+ for (let i = 0; i < numBars; i++) {
3282
+ const dist = Math.abs(i - ball_idx);
3283
+ let wave_val = 0;
3284
+ if (dist < 3) {
3285
+ wave_val = Math.cos(dist / 3 * (Math.PI / 2));
3286
+ }
3287
+ let indent = 0;
3288
+ if (dist < 1.5) {
3289
+ const indent_dist = Math.cos(dist / 1.5 * (Math.PI / 2));
3290
+ indent = indent_dist * height_factor * 20;
3291
+ }
3292
+ const bar_h = baseBarH + wave_val * wavePeakH - indent;
3293
+ barsData[i].heights.push(`${Math.max(4, bar_h)}px`);
3294
+ const isDark = theme === "dark";
3295
+ let r, g, b;
3296
+ if (isDark) {
3297
+ r = Math.round(39 + wave_val * (228 - 39));
3298
+ g = Math.round(39 + wave_val * (228 - 39));
3299
+ b = Math.round(42 + wave_val * (231 - 42));
3300
+ } else {
3301
+ r = Math.round(228 - wave_val * (228 - 39));
3302
+ g = Math.round(228 - wave_val * (228 - 39));
3303
+ b = Math.round(231 - wave_val * (231 - 42));
3304
+ }
3305
+ barsData[i].colors.push(`rgb(${r}, ${g}, ${b})`);
3306
+ }
3307
+ }
3308
+ return { bars: barsData, ballX: bX, ballY: bY, ballScaleX: bScaleX, ballScaleY: bScaleY, times: tArr };
3309
+ }, [theme]);
3310
+ return /* @__PURE__ */ jsx146("div", { className: "relative flex flex-col items-center justify-center w-full scale-[0.6] sm:scale-75 md:scale-100", children: /* @__PURE__ */ jsxs58("div", { className: "relative flex items-end justify-start h-48 space-x-2 w-[292px]", children: [
3311
+ bars.map((bar, i) => /* @__PURE__ */ jsx146(
3312
+ motion144.div,
3313
+ {
3314
+ className: "w-3 rounded-full origin-bottom",
3315
+ style: { height: "16px", backgroundColor: theme === "dark" ? "rgb(39, 39, 42)" : "rgb(228, 228, 231)" },
3316
+ animate: {
3317
+ height: bar.heights,
3318
+ backgroundColor: bar.colors
3319
+ },
3320
+ transition: {
3321
+ duration: 4,
3322
+ repeat: Infinity,
3323
+ times,
3324
+ ease: "linear"
3325
+ }
3326
+ },
3327
+ i
3328
+ )),
3329
+ /* @__PURE__ */ jsx146(
3330
+ motion144.div,
3331
+ {
3332
+ className: "absolute w-3 h-3 bg-zinc-900 dark:bg-white rounded-full z-10 shadow-sm",
3333
+ style: { bottom: 0, left: 0, transformOrigin: "bottom center" },
3334
+ animate: {
3335
+ x: ballX,
3336
+ y: ballY,
3337
+ scaleX: ballScaleX,
3338
+ scaleY: ballScaleY
3339
+ },
3340
+ transition: {
3341
+ duration: 4,
3342
+ repeat: Infinity,
3343
+ times,
3344
+ ease: "linear"
3345
+ }
3346
+ }
3347
+ )
3348
+ ] }) });
3349
+ }
3350
+
3351
+ // .generated/ui/loading/waveform-loader.tsx
3352
+ import { motion as motion145 } from "framer-motion";
3353
+ import { jsx as jsx147 } from "react/jsx-runtime";
3354
+ var WaveformLoader = () => /* @__PURE__ */ jsx147("div", { className: "flex items-center space-x-0.5 h-8", children: Array.from({ length: 8 }).map((_, i) => /* @__PURE__ */ jsx147(
3355
+ motion145.div,
3356
+ {
3357
+ className: "w-1 bg-zinc-800 dark:bg-white rounded-full",
3358
+ animate: { height: [4, 24, 4] },
3359
+ transition: { duration: 1, repeat: Infinity, delay: Math.sin(i) * 0.5, ease: "easeInOut" }
3360
+ },
3361
+ i
3362
+ )) });
3363
+
3364
+ // .generated/ui/loading/zig-zag-pulse.tsx
3365
+ import { motion as motion146 } from "framer-motion";
3366
+ import { jsx as jsx148 } from "react/jsx-runtime";
3367
+ var ZigZagPulse = () => {
3368
+ return /* @__PURE__ */ jsx148("div", { className: "grid grid-cols-3 gap-2 w-12 h-12", children: [
3369
+ [0, 0],
3370
+ [1, 1],
3371
+ [2, 0],
3372
+ [0, 2],
3373
+ [1, 1],
3374
+ [2, 2]
3375
+ ].map(([col, row], i) => /* @__PURE__ */ jsx148(
3376
+ motion146.div,
3377
+ {
3378
+ className: "w-2.5 h-2.5 bg-zinc-800 dark:bg-white rounded-full",
3379
+ style: { gridColumn: col + 1, gridRow: row + 1 },
3380
+ animate: { opacity: [0.2, 1, 0.2] },
3381
+ transition: { duration: 1.2, repeat: Infinity, delay: i * 0.1, ease: "easeInOut" }
3382
+ },
3383
+ i
3384
+ )) });
3385
+ };
3386
+
3387
+ // .generated/ui/scroll/progress-indicator.tsx
3388
+ import { motion as motion147, useScroll, useSpring as useSpring5 } from "framer-motion";
3389
+ import { jsx as jsx149 } from "react/jsx-runtime";
3390
+ function ProgressIndicator({
3391
+ color = "bg-blue-500",
3392
+ height = 4,
3393
+ className = ""
3394
+ }) {
3395
+ const { scrollYProgress } = useScroll();
3396
+ const scaleX = useSpring5(scrollYProgress, {
3397
+ stiffness: 100,
3398
+ damping: 30,
3399
+ restDelta: 1e-3
3400
+ });
3401
+ return /* @__PURE__ */ jsx149(
3402
+ motion147.div,
3403
+ {
3404
+ className: `fixed top-0 left-0 right-0 origin-left z-[9999] ${color} ${className}`,
3405
+ style: {
3406
+ scaleX,
3407
+ height,
3408
+ position: "fixed",
3409
+ top: 0,
3410
+ left: 0,
3411
+ right: 0,
3412
+ originX: 0,
3413
+ zIndex: 9999
3414
+ }
3415
+ }
3416
+ );
3417
+ }
3418
+
3419
+ // .generated/ui/scroll/scroll-reveal.tsx
3420
+ import { motion as motion148 } from "framer-motion";
3421
+ import { jsx as jsx150 } from "react/jsx-runtime";
3422
+ function ScrollReveal({
3423
+ children,
3424
+ duration = 0.6,
3425
+ yOffset = 30,
3426
+ xOffset = 0,
3427
+ scale = 0.95,
3428
+ className = ""
3429
+ }) {
3430
+ return /* @__PURE__ */ jsx150(
3431
+ motion148.div,
3432
+ {
3433
+ initial: { opacity: 0, y: yOffset, x: xOffset, scale },
3434
+ whileInView: { opacity: 1, y: 0, x: 0, scale: 1 },
3435
+ viewport: { once: true, margin: "-15%" },
3436
+ transition: {
3437
+ duration,
3438
+ ease: [0.16, 1, 0.3, 1]
3439
+ // easeOutExpo
3440
+ },
3441
+ className,
3442
+ children
3443
+ }
3444
+ );
3445
+ }
3446
+
3447
+ // .generated/ui/scroll/sticky-reveal.tsx
3448
+ import { useRef as useRef5, useState as useState11 } from "react";
3449
+ import { motion as motion149, useMotionValueEvent, useScroll as useScroll2 } from "framer-motion";
3450
+ import { jsx as jsx151, jsxs as jsxs59 } from "react/jsx-runtime";
3451
+ function StickyReveal({
3452
+ content,
3453
+ className = ""
3454
+ }) {
3455
+ const [activeCard, setActiveCard] = useState11(0);
3456
+ const ref = useRef5(null);
3457
+ const { scrollYProgress } = useScroll2({
3458
+ target: ref,
3459
+ offset: ["start start", "end end"]
3460
+ });
3461
+ const cardLength = content.length;
3462
+ useMotionValueEvent(scrollYProgress, "change", (latest) => {
3463
+ const cardsBreakpoints = content.map((_, index) => index / cardLength);
3464
+ const closestIndex = cardsBreakpoints.reduce((acc, val, index) => {
3465
+ if (latest >= val) {
3466
+ return index;
3467
+ }
3468
+ return acc;
3469
+ }, 0);
3470
+ setActiveCard(closestIndex);
3471
+ });
3472
+ return /* @__PURE__ */ jsxs59(
3473
+ "div",
3474
+ {
3475
+ ref,
3476
+ className: `relative flex justify-between gap-10 max-w-5xl mx-auto py-10 px-4 ${className}`,
3477
+ children: [
3478
+ /* @__PURE__ */ jsx151("div", { className: "w-1/2 flex flex-col gap-32 py-10", children: content.map((item, index) => /* @__PURE__ */ jsxs59("div", { className: "min-h-[50vh] flex flex-col justify-center", children: [
3479
+ /* @__PURE__ */ jsx151(
3480
+ motion149.h2,
3481
+ {
3482
+ animate: {
3483
+ opacity: activeCard === index ? 1 : 0.3
3484
+ },
3485
+ className: "text-2xl font-bold mb-4",
3486
+ children: item.title
3487
+ }
3488
+ ),
3489
+ /* @__PURE__ */ jsx151(
3490
+ motion149.p,
3491
+ {
3492
+ animate: {
3493
+ opacity: activeCard === index ? 1 : 0.3
3494
+ },
3495
+ className: "text-neutral-500 dark:text-neutral-450 leading-relaxed",
3496
+ children: item.description
3497
+ }
3498
+ )
3499
+ ] }, index)) }),
3500
+ /* @__PURE__ */ jsx151("div", { className: "sticky top-20 h-[60vh] w-1/2 rounded-2xl bg-neutral-100 dark:bg-neutral-900 border border-neutral-200/10 overflow-hidden flex items-center justify-center", children: content.map((item, index) => /* @__PURE__ */ jsx151(
3501
+ motion149.div,
3502
+ {
3503
+ initial: { opacity: 0, scale: 0.9 },
3504
+ animate: {
3505
+ opacity: activeCard === index ? 1 : 0,
3506
+ scale: activeCard === index ? 1 : 0.9
3507
+ },
3508
+ transition: { duration: 0.4 },
3509
+ className: "absolute inset-0 p-6 flex items-center justify-center",
3510
+ children: item.content || /* @__PURE__ */ jsxs59("div", { className: "text-lg font-semibold text-neutral-400", children: [
3511
+ "Card ",
3512
+ index + 1,
3513
+ " Visual"
3514
+ ] })
3515
+ },
3516
+ index
3517
+ )) })
3518
+ ]
3519
+ }
3520
+ );
3521
+ }
3522
+
3523
+ // .generated/ui/text/blur-text.tsx
3524
+ import { motion as motion150 } from "framer-motion";
3525
+ import { jsx as jsx152 } from "react/jsx-runtime";
3526
+ function BlurText({
3527
+ text,
3528
+ duration = 0.5,
3529
+ staggerDelay = 0.02,
3530
+ initialBlur = "8px",
3531
+ className = ""
3532
+ }) {
3533
+ const characters = Array.from(text);
3534
+ const containerVariants = {
3535
+ hidden: { opacity: 0 },
3536
+ visible: {
3537
+ opacity: 1,
3538
+ transition: {
3539
+ staggerChildren: staggerDelay
3540
+ }
3541
+ }
3542
+ };
3543
+ const charVariants = {
3544
+ hidden: { opacity: 0, filter: `blur(${initialBlur})` },
3545
+ visible: {
3546
+ opacity: 1,
3547
+ filter: "blur(0px)",
3548
+ transition: {
3549
+ duration,
3550
+ ease: "easeOut"
3551
+ }
3552
+ }
3553
+ };
3554
+ return /* @__PURE__ */ jsx152(
3555
+ motion150.div,
3556
+ {
3557
+ variants: containerVariants,
3558
+ initial: "hidden",
3559
+ whileInView: "visible",
3560
+ viewport: { once: true, margin: "-10%" },
3561
+ className: `inline-block ${className}`,
3562
+ children: characters.map((char, index) => /* @__PURE__ */ jsx152(
3563
+ motion150.span,
3564
+ {
3565
+ variants: charVariants,
3566
+ className: "inline-block whitespace-pre",
3567
+ children: char
3568
+ },
3569
+ index
3570
+ ))
3571
+ }
3572
+ );
3573
+ }
3574
+
3575
+ // .generated/ui/text/character-stagger.tsx
3576
+ import { motion as motion151 } from "framer-motion";
3577
+ import { jsx as jsx153 } from "react/jsx-runtime";
3578
+ function CharacterStagger({
3579
+ text,
3580
+ duration = 0.4,
3581
+ staggerDelay = 0.015,
3582
+ yOffset = 15,
3583
+ className = ""
3584
+ }) {
3585
+ const characters = Array.from(text);
3586
+ const containerVariants = {
3587
+ hidden: { opacity: 0 },
3588
+ visible: {
3589
+ opacity: 1,
3590
+ transition: {
3591
+ staggerChildren: staggerDelay
3592
+ }
3593
+ }
3594
+ };
3595
+ const charVariants = {
3596
+ hidden: { opacity: 0, y: yOffset, scale: 0.8 },
3597
+ visible: {
3598
+ opacity: 1,
3599
+ y: 0,
3600
+ scale: 1,
3601
+ transition: {
3602
+ type: "spring",
3603
+ stiffness: 300,
3604
+ damping: 18,
3605
+ mass: 0.8,
3606
+ duration
3607
+ }
3608
+ }
3609
+ };
3610
+ return /* @__PURE__ */ jsx153(
3611
+ motion151.div,
3612
+ {
3613
+ variants: containerVariants,
3614
+ initial: "hidden",
3615
+ whileInView: "visible",
3616
+ viewport: { once: true, margin: "-10%" },
3617
+ className: `inline-block ${className}`,
3618
+ children: characters.map((char, index) => /* @__PURE__ */ jsx153(
3619
+ motion151.span,
3620
+ {
3621
+ variants: charVariants,
3622
+ className: "inline-block whitespace-pre",
3623
+ children: char
3624
+ },
3625
+ index
3626
+ ))
3627
+ }
3628
+ );
3629
+ }
3630
+
3631
+ // .generated/ui/text/text-reveal.tsx
3632
+ import { motion as motion152 } from "framer-motion";
3633
+ import { jsx as jsx154 } from "react/jsx-runtime";
3634
+ function TextReveal({
3635
+ text,
3636
+ duration = 0.8,
3637
+ staggerDelay = 0.15,
3638
+ className = ""
3639
+ }) {
3640
+ const lines = text.split("\n");
3641
+ const containerVariants = {
3642
+ hidden: { opacity: 0 },
3643
+ visible: {
3644
+ opacity: 1,
3645
+ transition: {
3646
+ staggerChildren: staggerDelay
3647
+ }
3648
+ }
3649
+ };
3650
+ const itemVariants = {
3651
+ hidden: { y: "100%" },
3652
+ visible: {
3653
+ y: 0,
3654
+ transition: {
3655
+ duration,
3656
+ ease: [0.16, 1, 0.3, 1]
3657
+ // easeOutExpo
3658
+ }
3659
+ }
3660
+ };
3661
+ return /* @__PURE__ */ jsx154(
3662
+ motion152.div,
3663
+ {
3664
+ variants: containerVariants,
3665
+ initial: "hidden",
3666
+ whileInView: "visible",
3667
+ viewport: { once: true, margin: "-20%" },
3668
+ className: `flex flex-col ${className}`,
3669
+ children: lines.map((line, index) => /* @__PURE__ */ jsx154("div", { className: "overflow-hidden py-1", children: /* @__PURE__ */ jsx154(motion152.span, { variants: itemVariants, className: "block", children: line }) }, index))
3670
+ }
3671
+ );
3672
+ }
3673
+
3674
+ // .generated/ui/text/word-reveal.tsx
3675
+ import { motion as motion153 } from "framer-motion";
3676
+ import { jsx as jsx155 } from "react/jsx-runtime";
3677
+ function WordReveal({
3678
+ text,
3679
+ duration = 0.5,
3680
+ staggerDelay = 0.04,
3681
+ className = ""
3682
+ }) {
3683
+ const words = text.split(/\s+/);
3684
+ const containerVariants = {
3685
+ hidden: { opacity: 0 },
3686
+ visible: {
3687
+ opacity: 1,
3688
+ transition: {
3689
+ staggerChildren: staggerDelay
3690
+ }
3691
+ }
3692
+ };
3693
+ const wordVariants = {
3694
+ hidden: { opacity: 0, y: 15, scale: 0.9 },
3695
+ visible: {
3696
+ opacity: 1,
3697
+ y: 0,
3698
+ scale: 1,
3699
+ transition: {
3700
+ duration,
3701
+ ease: [0.215, 0.61, 0.355, 1]
3702
+ // easeOutCubic
3703
+ }
3704
+ }
3705
+ };
3706
+ return /* @__PURE__ */ jsx155(
3707
+ motion153.div,
3708
+ {
3709
+ variants: containerVariants,
3710
+ initial: "hidden",
3711
+ whileInView: "visible",
3712
+ viewport: { once: true, margin: "-10%" },
3713
+ className: `flex flex-wrap gap-x-2 gap-y-1.5 ${className}`,
3714
+ children: words.map((word, index) => /* @__PURE__ */ jsx155(
3715
+ motion153.span,
3716
+ {
3717
+ variants: wordVariants,
3718
+ className: "inline-block",
3719
+ children: word
3720
+ },
3721
+ index
3722
+ ))
3723
+ }
3724
+ );
3725
+ }
3726
+
3727
+ // .generated/ui/toggles/classic-toggle.tsx
3728
+ import { useState as useState12 } from "react";
3729
+ import { motion as motion154 } from "framer-motion";
3730
+ import { jsx as jsx156 } from "react/jsx-runtime";
3731
+ var ClassicToggle = () => {
3732
+ const [isOn, setIsOn] = useState12(false);
3733
+ return /* @__PURE__ */ jsx156(
3734
+ "button",
3735
+ {
3736
+ onClick: () => setIsOn(!isOn),
3737
+ className: `relative w-16 h-9 rounded-full p-1 transition-colors duration-300 cursor-pointer border-0 ${isOn ? "bg-emerald-500" : "bg-neutral-800"}`,
3738
+ children: /* @__PURE__ */ jsx156(
3739
+ motion154.div,
3740
+ {
3741
+ animate: { x: isOn ? 28 : 0 },
3742
+ transition: { type: "spring", stiffness: 500, damping: 30 },
3743
+ className: "w-7 h-7 bg-white rounded-full shadow-md"
3744
+ }
3745
+ )
3746
+ }
3747
+ );
3748
+ };
3749
+
3750
+ // .generated/ui/transitions/page-transition.tsx
3751
+ import { useEffect as useEffect6, useRef as useRef6 } from "react";
3752
+ import { motion as motion155 } from "framer-motion";
3753
+ import { jsx as jsx157, jsxs as jsxs60 } from "react/jsx-runtime";
3754
+ var PageTransition = ({
3755
+ type = "double-stairs",
3756
+ isVisible,
3757
+ onComplete,
3758
+ className = ""
3759
+ }) => {
3760
+ const pathRefs = useRef6([]);
3761
+ useEffect6(() => {
3762
+ if (type !== "liquid-wave" || !isVisible) return;
3763
+ let animId;
3764
+ const numPoints = 12;
3765
+ const numPaths = 3;
3766
+ const startTime = performance.now();
3767
+ const delays = Array.from(
3768
+ { length: numPaths },
3769
+ (_, i) => Array.from({ length: numPoints }, () => i * 0.08 + Math.random() * 0.15)
3770
+ );
3771
+ const animateFrame = (now) => {
3772
+ const elapsedSec = (now - startTime) / 1e3;
3773
+ pathRefs.current.forEach((path, i) => {
3774
+ if (!path) return;
3775
+ const stepX = 100 / (numPoints - 1);
3776
+ const pointsY = delays[i].map((delay) => {
3777
+ const rawProgress = Math.max(0, Math.min(1, (elapsedSec - delay) / 0.65));
3778
+ const easeProgress = rawProgress < 0.5 ? 2 * rawProgress * rawProgress : 1 - Math.pow(-2 * rawProgress + 2, 2) / 2;
3779
+ return 100 - easeProgress * 110;
3780
+ });
3781
+ let d = `M 0 100 V ${pointsY[0]}`;
3782
+ for (let j = 0; j < numPoints - 1; j++) {
3783
+ const currentX = j * stepX;
3784
+ const nextX = (j + 1) * stepX;
3785
+ const cpX = currentX + stepX * 0.5;
3786
+ d += ` C ${cpX} ${pointsY[j]} ${cpX} ${pointsY[j + 1]} ${nextX} ${pointsY[j + 1]}`;
3787
+ }
3788
+ d += ` V 100 H 0 Z`;
3789
+ path.setAttribute("d", d);
3790
+ });
3791
+ if (now - startTime < 1300) {
3792
+ animId = requestAnimationFrame(animateFrame);
3793
+ } else if (onComplete) {
3794
+ onComplete();
3795
+ }
3796
+ };
3797
+ animId = requestAnimationFrame(animateFrame);
3798
+ return () => cancelAnimationFrame(animId);
3799
+ }, [isVisible, type, onComplete]);
3800
+ if (!isVisible && type !== "liquid-wave") return null;
3801
+ if (type === "double-stairs") {
3802
+ const COLUMNS = 5;
3803
+ const variants = {
3804
+ initial: (i) => ({ y: i % 2 === 0 ? "-100%" : "100%" }),
3805
+ enter: (i) => ({
3806
+ y: "0%",
3807
+ transition: { duration: 0.8, ease: [0.76, 0, 0.24, 1], delay: i * 0.05 }
3808
+ }),
3809
+ exit: (i) => ({
3810
+ y: i % 2 === 0 ? "100%" : "-100%",
3811
+ transition: { duration: 0.8, ease: [0.76, 0, 0.24, 1], delay: i * 0.05 }
3812
+ })
3813
+ };
3814
+ return /* @__PURE__ */ jsx157(
3815
+ motion155.div,
3816
+ {
3817
+ className: `fixed inset-0 z-50 flex h-screen w-screen pointer-events-none ${className}`,
3818
+ initial: "initial",
3819
+ animate: isVisible ? "enter" : "exit",
3820
+ onAnimationComplete: () => {
3821
+ if (onComplete) onComplete();
3822
+ },
3823
+ children: [...Array(COLUMNS)].map((_, i) => /* @__PURE__ */ jsx157(
3824
+ motion155.div,
3825
+ {
3826
+ variants,
3827
+ custom: i,
3828
+ className: "relative h-full flex-1 bg-neutral-900 border-r border-neutral-800 last:border-r-0"
3829
+ },
3830
+ i
3831
+ ))
3832
+ }
3833
+ );
3834
+ }
3835
+ if (type === "liquid-wave") {
3836
+ return /* @__PURE__ */ jsxs60(
3837
+ "svg",
3838
+ {
3839
+ className: `fixed inset-0 w-full h-full pointer-events-none z-50 ${className}`,
3840
+ viewBox: "0 0 100 100",
3841
+ preserveAspectRatio: "none",
3842
+ children: [
3843
+ /* @__PURE__ */ jsx157("path", { ref: (el) => {
3844
+ pathRefs.current[0] = el;
3845
+ }, fill: "#3f3f46", style: { opacity: 0.4 } }),
3846
+ /* @__PURE__ */ jsx157("path", { ref: (el) => {
3847
+ pathRefs.current[1] = el;
3848
+ }, fill: "#27272a", style: { opacity: 0.75 } }),
3849
+ /* @__PURE__ */ jsx157("path", { ref: (el) => {
3850
+ pathRefs.current[2] = el;
3851
+ }, fill: "#09090b" })
3852
+ ]
3853
+ }
3854
+ );
3855
+ }
3856
+ return /* @__PURE__ */ jsx157(
3857
+ motion155.div,
3858
+ {
3859
+ className: `fixed inset-0 z-50 bg-neutral-900 pointer-events-none ${className}`,
3860
+ initial: { opacity: 0 },
3861
+ animate: isVisible ? { opacity: 1 } : { opacity: 0 },
3862
+ transition: { duration: 0.4 }
3863
+ }
3864
+ );
3865
+ };
3866
+ export {
3867
+ AccordionLoader,
3868
+ AppIconLoad,
3869
+ AppleBreathe,
3870
+ AppleEqualizer,
3871
+ AppleIconMorph,
3872
+ ApplePulseDots,
3873
+ AppleScalePulse,
3874
+ AppleSoundWave,
3875
+ AppleTextReveal,
3876
+ AppleUnlock,
3877
+ ArcTracer,
3878
+ BarCascade,
3879
+ BarSweep,
3880
+ BlurText,
3881
+ BobbingDots,
3882
+ BounceDots,
3883
+ BouncingBars,
3884
+ BouncingDots,
3885
+ BouncingLines,
3886
+ BouncingSquare,
3887
+ BreatheRing,
3888
+ BreathingGlow,
3889
+ BreathingSquare,
3890
+ CardHover,
3891
+ CharacterStagger,
3892
+ CircularBars,
3893
+ ClassicSpinner,
3894
+ ClassicToggle,
3895
+ ClockSpinner,
3896
+ CometSpinner,
3897
+ ConcentricPulse,
3898
+ ConcentricRing,
3899
+ ConcentricSquares,
3900
+ ConveyorLoop,
3901
+ CrossSpinner,
3902
+ CubeFlipSpring,
3903
+ CursorTrail,
3904
+ DashRing,
3905
+ DashedSpiral,
3906
+ DiamondGrid,
3907
+ DiamondRotateSpring,
3908
+ DotSpinner,
3909
+ DotsRing,
3910
+ DoubleRing,
3911
+ DropDot,
3912
+ DualArc,
3913
+ DynamicIsland,
3914
+ ElasticBars,
3915
+ ElasticSquare,
3916
+ ExpandingCross,
3917
+ FaceIDScan,
3918
+ FadeArc,
3919
+ FadeDots,
3920
+ FadeDown,
3921
+ FadeIn,
3922
+ FadeUp,
3923
+ FlipSquare,
3924
+ FloatingDiamonds,
3925
+ FluidBars,
3926
+ FluidDiamond,
3927
+ FluidDotOrbit,
3928
+ FluidSkeleton,
3929
+ Gears,
3930
+ GlassmorphicCard,
3931
+ GlowButton,
3932
+ GradientArc,
3933
+ GridDots,
3934
+ HapticRing,
3935
+ Heartbeat,
3936
+ HexagonSpinner,
3937
+ Hourglass,
3938
+ IOSSpinner,
3939
+ InfinityPath,
3940
+ IntersectingRings,
3941
+ LineSpinner,
3942
+ LiquidDots,
3943
+ MacTerminal,
3944
+ MagneticButton,
3945
+ MagneticDots,
3946
+ MinimalTriangle,
3947
+ MorphDotRing,
3948
+ MorphLoader,
3949
+ MorphingBars,
3950
+ MorphingInfinity,
3951
+ MorphingRing,
3952
+ MorphingShape,
3953
+ MouseFollow,
3954
+ NewtonsCradle,
3955
+ OffsetRings,
3956
+ OrbitingCircles,
3957
+ OrbitingDot,
3958
+ OrigamiShape,
3959
+ PageTransition,
3960
+ Pendulum,
3961
+ ProgressIndicator,
3962
+ PulsatingDots,
3963
+ Pulse,
3964
+ PulseDot,
3965
+ PulseDots,
3966
+ PulseSquare,
3967
+ PumpingHeart,
3968
+ RadarSweep,
3969
+ RingSweep,
3970
+ RippleEffect,
3971
+ RotatingCross,
3972
+ RotatingTriangle,
3973
+ ScaleIn,
3974
+ ScrollReveal,
3975
+ ShapeShiftGrid,
3976
+ ShimmerLine,
3977
+ SiriWave,
3978
+ Skeleton,
3979
+ SkeletonLoader,
3980
+ SlideLeft,
3981
+ SlideRight,
3982
+ SlidingBars,
3983
+ SmoothDotShift,
3984
+ SmoothRing,
3985
+ SmoothRoundedSquare,
3986
+ SpinningSquares,
3987
+ SpiralSpinner,
3988
+ Spotlight,
3989
+ SpringBars,
3990
+ SpringDotMatrix,
3991
+ SpringHexagon,
3992
+ SpringRingExpand,
3993
+ SpringTextPop,
3994
+ SquareAccordion,
3995
+ SquareGrid,
3996
+ SquareSnake,
3997
+ SquareSpinner,
3998
+ StackedBarPulse,
3999
+ StickyReveal,
4000
+ SwappingDots,
4001
+ SwirlingSpinner,
4002
+ SymmetricWave,
4003
+ TerminalLoader,
4004
+ TextBlink,
4005
+ TextDots,
4006
+ TextMorph,
4007
+ TextReveal,
4008
+ TextShimmer,
4009
+ TextShimmerWave,
4010
+ TiltCard,
4011
+ TrailingDots,
4012
+ TripleDotSpinner,
4013
+ TwinOrbit,
4014
+ Typing,
4015
+ TypingIndicator,
4016
+ WanderingCube,
4017
+ WatchSpinner,
4018
+ WaveDots,
4019
+ WavePhysicsLoader,
4020
+ WaveformLoader,
4021
+ WordReveal,
4022
+ ZigZagPulse,
4023
+ ZoomIn,
4024
+ cn,
4025
+ mapRange,
4026
+ presets,
4027
+ useMousePosition,
4028
+ useReducedMotion,
4029
+ useScrollProgress,
4030
+ useStagger,
4031
+ useWebHaptics
4032
+ };