@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
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const MorphingRing: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const MorphingShape: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const NewtonsCradle: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const OffsetRings: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const OrbitingCircles: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const OrbitingDot: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const OrigamiShape: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const Pendulum: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const PulsatingDots: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const PulseDot: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const PulseDots: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const PulseSquare: () => React.JSX.Element;
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface PulseProps {
3
+ size?: number;
4
+ color?: string;
5
+ className?: string;
6
+ }
7
+ export declare function Pulse({ size, color, className, }: PulseProps): React.JSX.Element;
8
+ export {};
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const PumpingHeart: () => React.JSX.Element;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export declare const RadarSweep: ({ theme }: {
3
+ theme?: "light" | "dark";
4
+ }) => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const RingSweep: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const RippleEffect: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const RotatingCross: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const RotatingTriangle: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const ShapeShiftGrid: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const ShimmerLine: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SiriWave: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SkeletonLoader: () => React.JSX.Element;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ interface SkeletonProps {
3
+ className?: string;
4
+ shimmerColor?: 'light' | 'dark';
5
+ }
6
+ export declare function Skeleton({ className, shimmerColor, }: SkeletonProps): React.JSX.Element;
7
+ export {};
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SlidingBars: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SmoothDotShift: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SmoothRing: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SmoothRoundedSquare: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SpinningSquares: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SpiralSpinner: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SpringBars: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SpringDotMatrix: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SpringHexagon: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SpringRingExpand: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SpringTextPop: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SquareAccordion: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SquareGrid: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SquareSnake: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SquareSpinner: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const StackedBarPulse: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SwappingDots: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SwirlingSpinner: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const SymmetricWave: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const TerminalLoader: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const TextBlink: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const TextDots: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const TextMorph: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const TextShimmerWave: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const TextShimmer: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const TrailingDots: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const TripleDotSpinner: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const TwinOrbit: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const TypingIndicator: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const Typing: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const WanderingCube: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const WatchSpinner: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const WaveDots: () => React.JSX.Element;
@@ -0,0 +1,3 @@
1
+ export declare function WavePhysicsLoader({ theme }: {
2
+ theme?: 'light' | 'dark';
3
+ }): import("react").JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const WaveformLoader: () => React.JSX.Element;
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const ZigZagPulse: () => React.JSX.Element;
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface ProgressIndicatorProps {
3
+ color?: string;
4
+ height?: number;
5
+ className?: string;
6
+ }
7
+ export declare function ProgressIndicator({ color, height, className, }: ProgressIndicatorProps): React.JSX.Element;
8
+ export {};
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ interface ScrollRevealProps {
3
+ children: React.ReactNode;
4
+ duration?: number;
5
+ yOffset?: number;
6
+ xOffset?: number;
7
+ scale?: number;
8
+ className?: string;
9
+ }
10
+ export declare function ScrollReveal({ children, duration, yOffset, xOffset, scale, className, }: ScrollRevealProps): React.JSX.Element;
11
+ export {};
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ interface StickyRevealProps {
3
+ content: {
4
+ title: string;
5
+ description: string;
6
+ content?: React.ReactNode;
7
+ }[];
8
+ className?: string;
9
+ }
10
+ export declare function StickyReveal({ content, className, }: StickyRevealProps): React.JSX.Element;
11
+ export {};
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ interface BlurTextProps {
3
+ text: string;
4
+ duration?: number;
5
+ staggerDelay?: number;
6
+ initialBlur?: string;
7
+ className?: string;
8
+ }
9
+ export declare function BlurText({ text, duration, staggerDelay, initialBlur, className, }: BlurTextProps): React.JSX.Element;
10
+ export {};
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ interface CharacterStaggerProps {
3
+ text: string;
4
+ duration?: number;
5
+ staggerDelay?: number;
6
+ yOffset?: number;
7
+ className?: string;
8
+ }
9
+ export declare function CharacterStagger({ text, duration, staggerDelay, yOffset, className, }: CharacterStaggerProps): React.JSX.Element;
10
+ export {};
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ interface TextRevealProps {
3
+ text: string;
4
+ duration?: number;
5
+ staggerDelay?: number;
6
+ className?: string;
7
+ }
8
+ export declare function TextReveal({ text, duration, staggerDelay, className, }: TextRevealProps): React.JSX.Element;
9
+ export {};
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ interface WordRevealProps {
3
+ text: string;
4
+ duration?: number;
5
+ staggerDelay?: number;
6
+ className?: string;
7
+ }
8
+ export declare function WordReveal({ text, duration, staggerDelay, className, }: WordRevealProps): React.JSX.Element;
9
+ export {};
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const ClassicToggle: () => React.JSX.Element;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ export type TransitionType = 'double-stairs' | 'shutter-stairs' | 'split-stairs' | 'horizontal-split' | 'vertical-split' | 'slash' | 'lattice' | 'curtain-shred' | 'pixel' | 'pixel-wave' | 'pixel-spiral' | 'vortex' | 'cross-fade' | 'expand-grow' | 'push-slide' | 'pop-over' | 'depth-forward' | 'liquid-wave';
3
+ export interface PageTransitionProps {
4
+ type?: TransitionType;
5
+ isVisible: boolean;
6
+ onComplete?: () => void;
7
+ className?: string;
8
+ }
9
+ export declare const PageTransition: React.FC<PageTransitionProps>;
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@mova-ui/react",
3
+ "version": "0.1.0",
4
+ "description": "Mova — Make interfaces feel alive. React motion components and an offline source CLI.",
5
+ "private": false,
6
+ "type": "module",
7
+ "license": "MIT",
8
+ "homepage": "https://mova.zeeland.studio",
9
+ "keywords": ["react", "animation", "motion", "components", "mova"],
10
+ "engines": { "node": ">=20" },
11
+ "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org/" },
12
+ "main": "./dist/index.js",
13
+ "module": "./dist/index.js",
14
+ "types": "./dist/index.d.ts",
15
+ "exports": {
16
+ ".": { "types": "./dist/index.d.ts", "import": "./dist/index.js" },
17
+ "./styles.css": "./dist/styles.css",
18
+ "./package.json": "./package.json"
19
+ },
20
+ "bin": { "mova": "./bin/mova.mjs" },
21
+ "files": ["dist/**/*.js", "dist/**/*.d.ts", "dist/styles.css", "bin/mova.mjs", "registry/*.json", "LICENSE", "README.md"],
22
+ "sideEffects": ["**/*.css"],
23
+ "scripts": { "build": "node scripts/build.mjs", "prepack": "npm run build" },
24
+ "peerDependencies": { "react": "^18.2.0 || ^19.0.0", "react-dom": "^18.2.0 || ^19.0.0" },
25
+ "dependencies": { "framer-motion": "^12.23.24", "clsx": "^2.1.1", "tailwind-merge": "^3.3.0" },
26
+ "devDependencies": { "@tailwindcss/cli": "^4.1.14", "tailwindcss": "^4.1.14", "@types/react": "^19.0.0", "@types/react-dom": "^19.0.0", "typescript": "~5.8.2", "esbuild": "^0.25.0", "react": "^19.0.1", "react-dom": "^19.0.1" }
27
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "accordion-loader",
3
+ "file": "accordion-loader.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const AccordionLoader = () => {\n return (\n <div className=\"flex flex-col space-y-1.5 w-10 h-10 justify-center\">\n {[0, 1, 2, 3].map((i) => (\n <motion.div\n key={i}\n className=\"w-full h-1 bg-zinc-800 dark:bg-white rounded-full origin-left\"\n animate={{ scaleX: [1, 0.2, 1] }}\n transition={{ duration: 1.5, repeat: Infinity, ease: \"easeInOut\", delay: i * 0.15 }}\n />\n ))}\n </div>\n );\n};\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "app-icon-load",
3
+ "file": "app-icon-load.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const AppIconLoad = () => (\n <div className=\"relative w-12 h-12 bg-zinc-200 dark:bg-zinc-800 rounded-[12px] flex items-center justify-center overflow-hidden\">\n <svg className=\"w-8 h-8 absolute\" viewBox=\"0 0 50 50\">\n <circle\n cx=\"25\" cy=\"25\" r=\"20\"\n className=\"stroke-zinc-300 dark:stroke-zinc-700 fill-none\"\n strokeWidth=\"4\"\n />\n <motion.circle\n cx=\"25\" cy=\"25\" r=\"20\"\n className=\"stroke-zinc-800 dark:stroke-white fill-none\"\n strokeWidth=\"4\"\n strokeDasharray=\"125\"\n animate={{ strokeDashoffset: [125, 0] }}\n transition={{ duration: 2, repeat: Infinity, ease: \"easeInOut\" }}\n style={{ rotate: -90, transformOrigin: 'center' }}\n />\n </svg>\n </div>\n);\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "apple-breathe",
3
+ "file": "apple-breathe.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const AppleBreathe = () => {\n return (\n <div className=\"relative flex items-center justify-center w-12 h-12\">\n {[0, 60, 120, 180, 240, 300].map((angle, idx) => {\n // Alternating color teal-blue palette\n const bgClass = idx % 2 === 0 \n ? 'bg-teal-400/35 dark:bg-teal-400/40' \n : 'bg-cyan-400/35 dark:bg-cyan-400/40';\n return (\n <motion.div\n key={angle}\n className={`absolute w-3.5 h-3.5 rounded-full ${bgClass}`}\n style={{ transformOrigin: 'center' }}\n animate={{\n scale: [1, 1.75, 1],\n x: [0, Math.cos(angle * Math.PI / 180) * 11, 0],\n y: [0, Math.sin(angle * Math.PI / 180) * 11, 0]\n }}\n transition={{\n duration: 3.6,\n repeat: Infinity,\n ease: \"easeInOut\"\n }}\n />\n );\n })}\n </div>\n );\n};\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "apple-equalizer",
3
+ "file": "apple-equalizer.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const AppleEqualizer = () => (\n <div className=\"flex space-x-1 h-8 items-end\">\n {[0,1,2,3].map(i => (\n <motion.div\n key={i}\n className=\"w-1.5 bg-zinc-800 dark:bg-white rounded-t-sm\"\n animate={{ height: ['20%', '100%', '20%'] }}\n transition={{ duration: 0.8, repeat: Infinity, delay: Math.random() * 0.5, ease: \"circInOut\" }}\n />\n ))}\n </div>\n);\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "apple-icon-morph",
3
+ "file": "apple-icon-morph.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const AppleIconMorph = () => (\n <motion.div\n className=\"w-8 h-8 bg-zinc-800 dark:bg-white\"\n animate={{\n borderRadius: [\"20%\", \"50%\", \"50%\", \"20%\"],\n rotate: [0, 90, 180, 270]\n }}\n transition={{ duration: 2, repeat: Infinity, ease: \"easeInOut\" }}\n />\n);\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "apple-pulse-dots",
3
+ "file": "apple-pulse-dots.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const ApplePulseDots = () => (\n <div className=\"flex space-x-2\">\n {[0, 1, 2].map(i => (\n <motion.div\n key={i}\n className=\"w-2.5 h-2.5 bg-zinc-800 dark:bg-white rounded-full\"\n animate={{ scale: [0.5, 1, 0.5], opacity: [0.3, 1, 0.3] }}\n transition={{ duration: 1.2, repeat: Infinity, delay: i * 0.15, ease: \"easeInOut\" }}\n />\n ))}\n </div>\n);\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "apple-scale-pulse",
3
+ "file": "apple-scale-pulse.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const AppleScalePulse = () => (\n <div className=\"relative w-12 h-12 flex items-center justify-center\">\n <motion.div\n className=\"absolute w-full h-full bg-zinc-200 dark:bg-zinc-800 rounded-full\"\n animate={{ scale: [0, 1], opacity: [1, 0] }}\n transition={{ duration: 1.5, repeat: Infinity, ease: \"easeOut\" }}\n />\n <motion.div\n className=\"absolute w-full h-full bg-zinc-200 dark:bg-zinc-800 rounded-full\"\n animate={{ scale: [0, 1], opacity: [1, 0] }}\n transition={{ duration: 1.5, repeat: Infinity, delay: 0.5, ease: \"easeOut\" }}\n />\n <div className=\"w-3 h-3 bg-zinc-800 dark:bg-white rounded-full z-10\" />\n </div>\n);\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "apple-sound-wave",
3
+ "file": "apple-sound-wave.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const AppleSoundWave = () => (\n <div className=\"flex space-x-1 h-8 items-center\">\n {[1, 2, 3, 2, 1].map((val, i) => (\n <motion.div\n key={i}\n className=\"w-1 bg-zinc-800 dark:bg-white rounded-full\"\n animate={{ height: [4, val * 8, 4] }}\n transition={{ duration: 1, repeat: Infinity, delay: i * 0.1, ease: \"easeInOut\" }}\n />\n ))}\n </div>\n);\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "apple-text-reveal",
3
+ "file": "apple-text-reveal.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const AppleTextReveal = () => (\n <div className=\"font-medium text-lg text-zinc-900 dark:text-white overflow-hidden h-6 relative\">\n <motion.div\n animate={{ y: [\"100%\", \"0%\", \"-100%\"] }}\n transition={{ duration: 2, repeat: Infinity, ease: \"easeInOut\" }}\n >\n Loading\n </motion.div>\n </div>\n);\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "apple-unlock",
3
+ "file": "apple-unlock.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const AppleUnlock = ({ theme = 'light' }: { theme?: 'light' | 'dark' }) => {\n const isDark = theme === 'dark';\n return (\n <div className=\"relative font-medium text-sm tracking-wide select-none\">\n <span className=\"text-zinc-400 dark:text-zinc-600\">\n Slide to unlock\n </span>\n <motion.div\n 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\"\n style={{\n backgroundSize: \"200% 100%\",\n }}\n animate={{ backgroundPosition: [\"200% 0\", \"-200% 0\"] }}\n transition={{ duration: 2.2, repeat: Infinity, ease: \"linear\" }}\n >\n Slide to unlock\n </motion.div>\n </div>\n );\n};\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "arc-tracer",
3
+ "file": "arc-tracer.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const ArcTracer = () => {\n return (\n <svg className=\"w-10 h-10\" viewBox=\"0 0 50 50\">\n <circle cx=\"25\" cy=\"25\" r=\"20\" className=\"stroke-zinc-200 dark:stroke-zinc-800 fill-none\" strokeWidth=\"4\" />\n <motion.circle\n cx=\"25\"\n cy=\"25\"\n r=\"20\"\n className=\"stroke-zinc-800 dark:stroke-white fill-none\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n strokeDasharray=\"125\"\n animate={{ strokeDashoffset: [125, 0, -125] }}\n transition={{ duration: 2, repeat: Infinity, ease: \"easeInOut\" }}\n />\n </svg>\n );\n};\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "bar-cascade",
3
+ "file": "bar-cascade.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const BarCascade = () => {\n return (\n <div className=\"flex space-x-1 items-center h-8\">\n {[0, 1, 2, 3, 4].map((i) => (\n <motion.div\n key={i}\n className=\"w-1.5 bg-zinc-800 dark:bg-white rounded-full\"\n animate={{ height: [\"8px\", \"24px\", \"8px\"] }}\n transition={{ duration: 1, repeat: Infinity, delay: i * 0.1, ease: \"easeInOut\" }}\n />\n ))}\n </div>\n );\n};\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "bar-sweep",
3
+ "file": "bar-sweep.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const BarSweep = () => {\n return (\n <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\">\n <motion.div\n className=\"w-4 h-4 bg-zinc-800 dark:bg-white rounded-full absolute\"\n animate={{ x: [0, 24, 0] }}\n transition={{ duration: 1.5, repeat: Infinity, ease: \"easeInOut\" }}\n />\n </div>\n );\n};\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "blur-text",
3
+ "file": "blur-text.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion, type Variants } from 'framer-motion';\n\ninterface BlurTextProps {\n text: string;\n duration?: number;\n staggerDelay?: number;\n initialBlur?: string;\n className?: string;\n}\n\nexport function BlurText({\n text,\n duration = 0.5,\n staggerDelay = 0.02,\n initialBlur = '8px',\n className = '',\n}: BlurTextProps) {\n const characters = Array.from(text);\n\n const containerVariants: Variants = {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: {\n staggerChildren: staggerDelay,\n },\n },\n };\n\n const charVariants: Variants = {\n hidden: { opacity: 0, filter: `blur(${initialBlur})` },\n visible: {\n opacity: 1,\n filter: 'blur(0px)',\n transition: {\n duration,\n ease: 'easeOut',\n },\n },\n };\n\n return (\n <motion.div\n variants={containerVariants}\n initial=\"hidden\"\n whileInView=\"visible\"\n viewport={{ once: true, margin: '-10%' }}\n className={`inline-block ${className}`}\n >\n {characters.map((char, index) => (\n <motion.span\n key={index}\n variants={charVariants}\n className=\"inline-block whitespace-pre\"\n >\n {char}\n </motion.span>\n ))}\n </motion.div>\n );\n}\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "bobbing-dots",
3
+ "file": "bobbing-dots.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const BobbingDots = () => {\n return (\n <div className=\"flex space-x-2\">\n {[0, 1, 2].map((i) => (\n <motion.div\n key={i}\n className=\"w-3 h-3 bg-zinc-800 dark:bg-white rounded-full\"\n animate={{ y: [0, -10, 0] }}\n transition={{ duration: 1.2, repeat: Infinity, delay: i * 0.15, ease: \"easeInOut\" }}\n />\n ))}\n </div>\n );\n};\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "bounce-dots",
3
+ "file": "bounce-dots.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const BounceDots = () => {\n return (\n <div className=\"flex space-x-1.5\">\n {[0, 1, 2].map((i) => (\n <motion.div\n key={i}\n className=\"w-2.5 h-2.5 bg-zinc-800 dark:bg-white rounded-full\"\n animate={{ y: [0, -8, 0] }}\n transition={{\n duration: 0.6,\n repeat: Infinity,\n delay: i * 0.1,\n ease: \"easeInOut\",\n }}\n />\n ))}\n </div>\n );\n};\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "bouncing-bars",
3
+ "file": "bouncing-bars.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const BouncingBars = () => {\n return (\n <div className=\"flex space-x-1.5 h-8 items-center\">\n {[0, 1, 2].map((i) => (\n <motion.div\n key={i}\n className=\"w-1.5 h-8 bg-zinc-800 dark:bg-white rounded-full\"\n animate={{ scaleY: [0.3, 1, 0.3] }}\n transition={{ duration: 1, repeat: Infinity, delay: i * 0.2, ease: \"easeInOut\" }}\n />\n ))}\n </div>\n );\n};\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "bouncing-dots",
3
+ "file": "bouncing-dots.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const BouncingDots = () => {\n return (\n <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\">\n {[0, 1, 2].map((i) => (\n <motion.div\n key={i}\n className=\"w-3 h-3 bg-zinc-800 dark:bg-white rounded-full absolute bottom-2\"\n style={{ left: `${(i * 14) + 10}px` }}\n animate={{ y: [0, -20, 0], scaleY: [0.8, 1.1, 0.8] }}\n transition={{ duration: 0.8, repeat: Infinity, delay: i * 0.1, ease: \"easeInOut\" }}\n />\n ))}\n </div>\n );\n};\n"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "id": "bouncing-lines",
3
+ "file": "bouncing-lines.tsx",
4
+ "dependencies": [
5
+ "framer-motion"
6
+ ],
7
+ "content": "\"use client\";\nimport React from 'react';\nimport { motion } from 'framer-motion';\n\nexport const BouncingLines = () => {\n return (\n <div className=\"flex flex-col space-y-1.5 w-8\">\n {[0, 1, 2].map((i) => (\n <motion.div\n key={i}\n className=\"w-full h-1.5 bg-zinc-800 dark:bg-white rounded-full origin-left\"\n animate={{ scaleX: [0.3, 1, 0.3] }}\n transition={{ duration: 1, repeat: Infinity, delay: i * 0.2, ease: \"easeInOut\" }}\n />\n ))}\n </div>\n );\n};\n"
8
+ }