premium-react-loaders 3.1.1 → 4.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 (197) hide show
  1. package/README.md +30 -3
  2. package/dist/components/gradient/GradientBar.d.ts +13 -0
  3. package/dist/components/gradient/GradientBar.d.ts.map +1 -0
  4. package/dist/components/gradient/GradientRing.d.ts +12 -0
  5. package/dist/components/gradient/GradientRing.d.ts.map +1 -0
  6. package/dist/components/gradient/GradientSpinner.d.ts +12 -0
  7. package/dist/components/gradient/GradientSpinner.d.ts.map +1 -0
  8. package/dist/components/gradient/index.d.ts +4 -0
  9. package/dist/components/gradient/index.d.ts.map +1 -0
  10. package/dist/components/index.d.ts +4 -0
  11. package/dist/components/index.d.ts.map +1 -1
  12. package/dist/components/morph/LiquidFill.d.ts +13 -0
  13. package/dist/components/morph/LiquidFill.d.ts.map +1 -0
  14. package/dist/components/morph/MorphBlob.d.ts +12 -0
  15. package/dist/components/morph/MorphBlob.d.ts.map +1 -0
  16. package/dist/components/morph/WaveCircle.d.ts +12 -0
  17. package/dist/components/morph/WaveCircle.d.ts.map +1 -0
  18. package/dist/components/morph/index.d.ts +4 -0
  19. package/dist/components/morph/index.d.ts.map +1 -0
  20. package/dist/components/neon/NeonPulse.d.ts +12 -0
  21. package/dist/components/neon/NeonPulse.d.ts.map +1 -0
  22. package/dist/components/neon/NeonSpinner.d.ts +12 -0
  23. package/dist/components/neon/NeonSpinner.d.ts.map +1 -0
  24. package/dist/components/neon/NeonText.d.ts +12 -0
  25. package/dist/components/neon/NeonText.d.ts.map +1 -0
  26. package/dist/components/neon/index.d.ts +4 -0
  27. package/dist/components/neon/index.d.ts.map +1 -0
  28. package/dist/components/particle/ParticleBurst.d.ts +12 -0
  29. package/dist/components/particle/ParticleBurst.d.ts.map +1 -0
  30. package/dist/components/particle/ParticleField.d.ts +3 -0
  31. package/dist/components/particle/ParticleField.d.ts.map +1 -0
  32. package/dist/components/particle/ParticleOrbit.d.ts +12 -0
  33. package/dist/components/particle/ParticleOrbit.d.ts.map +1 -0
  34. package/dist/components/particle/ParticleTrail.d.ts +12 -0
  35. package/dist/components/particle/ParticleTrail.d.ts.map +1 -0
  36. package/dist/components/particle/index.d.ts +5 -0
  37. package/dist/components/particle/index.d.ts.map +1 -0
  38. package/dist/components/progress/ProgressBar.d.ts.map +1 -1
  39. package/dist/components/progress/ProgressCircle.d.ts.map +1 -1
  40. package/dist/components/progress/ProgressRing.d.ts.map +1 -1
  41. package/dist/components/status/InfoIndicator.d.ts +29 -0
  42. package/dist/components/status/InfoIndicator.d.ts.map +1 -0
  43. package/dist/components/status/WarningIndicator.d.ts +29 -0
  44. package/dist/components/status/WarningIndicator.d.ts.map +1 -0
  45. package/dist/components/status/index.d.ts +2 -0
  46. package/dist/components/status/index.d.ts.map +1 -1
  47. package/dist/index.cjs +50 -20
  48. package/dist/index.d.ts +1 -1
  49. package/dist/index.js +50 -20
  50. package/dist/index10.cjs +1 -1
  51. package/dist/index10.js +1 -1
  52. package/dist/index11.cjs +1 -1
  53. package/dist/index11.js +1 -1
  54. package/dist/index12.cjs +1 -1
  55. package/dist/index12.js +1 -1
  56. package/dist/index13.cjs +1 -1
  57. package/dist/index13.js +1 -1
  58. package/dist/index14.cjs +1 -1
  59. package/dist/index14.js +1 -1
  60. package/dist/index15.cjs +1 -1
  61. package/dist/index15.js +1 -1
  62. package/dist/index17.cjs +1 -1
  63. package/dist/index17.js +1 -1
  64. package/dist/index18.cjs +1 -1
  65. package/dist/index18.js +1 -1
  66. package/dist/index19.cjs +1 -1
  67. package/dist/index19.js +1 -1
  68. package/dist/index20.cjs +1 -1
  69. package/dist/index20.js +1 -1
  70. package/dist/index21.cjs +1 -1
  71. package/dist/index21.js +1 -1
  72. package/dist/index22.cjs +1 -1
  73. package/dist/index22.js +1 -1
  74. package/dist/index23.cjs +1 -1
  75. package/dist/index23.js +1 -1
  76. package/dist/index24.cjs +1 -1
  77. package/dist/index24.js +1 -1
  78. package/dist/index25.cjs +17 -2
  79. package/dist/index25.js +18 -3
  80. package/dist/index26.cjs +17 -2
  81. package/dist/index26.js +18 -3
  82. package/dist/index27.cjs +17 -2
  83. package/dist/index27.js +18 -3
  84. package/dist/index28.cjs +1 -1
  85. package/dist/index28.js +1 -1
  86. package/dist/index29.cjs +1 -1
  87. package/dist/index29.js +1 -1
  88. package/dist/index30.cjs +1 -1
  89. package/dist/index30.js +1 -1
  90. package/dist/index31.cjs +1 -1
  91. package/dist/index31.js +1 -1
  92. package/dist/index32.cjs +1 -1
  93. package/dist/index32.js +1 -1
  94. package/dist/index33.cjs +1 -1
  95. package/dist/index33.js +1 -1
  96. package/dist/index34.cjs +1 -1
  97. package/dist/index34.js +1 -1
  98. package/dist/index35.cjs +1 -1
  99. package/dist/index35.js +1 -1
  100. package/dist/index36.cjs +1 -1
  101. package/dist/index36.js +1 -1
  102. package/dist/index37.cjs +59 -145
  103. package/dist/index37.js +61 -147
  104. package/dist/index38.cjs +32 -53
  105. package/dist/index38.js +33 -54
  106. package/dist/index39.cjs +138 -84
  107. package/dist/index39.js +140 -86
  108. package/dist/index4.cjs +10 -0
  109. package/dist/index4.js +10 -0
  110. package/dist/index40.cjs +33 -106
  111. package/dist/index40.js +34 -107
  112. package/dist/index41.cjs +66 -50
  113. package/dist/index41.js +66 -50
  114. package/dist/index42.cjs +123 -44
  115. package/dist/index42.js +124 -45
  116. package/dist/index43.cjs +43 -85
  117. package/dist/index43.js +44 -86
  118. package/dist/index44.cjs +35 -27
  119. package/dist/index44.js +35 -27
  120. package/dist/index45.cjs +87 -58
  121. package/dist/index45.js +87 -58
  122. package/dist/index46.cjs +35 -88
  123. package/dist/index46.js +36 -89
  124. package/dist/index47.cjs +62 -58
  125. package/dist/index47.js +63 -59
  126. package/dist/index48.cjs +87 -110
  127. package/dist/index48.js +88 -111
  128. package/dist/index49.cjs +48 -109
  129. package/dist/index49.js +49 -110
  130. package/dist/index50.cjs +110 -62
  131. package/dist/index50.js +111 -63
  132. package/dist/index51.cjs +104 -49
  133. package/dist/index51.js +104 -49
  134. package/dist/index52.cjs +43 -77
  135. package/dist/index52.js +44 -78
  136. package/dist/index53.cjs +56 -56
  137. package/dist/index53.js +56 -56
  138. package/dist/index54.cjs +104 -149
  139. package/dist/index54.js +106 -151
  140. package/dist/index55.cjs +97 -38
  141. package/dist/index55.js +99 -40
  142. package/dist/index56.cjs +184 -120
  143. package/dist/index56.js +185 -121
  144. package/dist/index57.cjs +53 -0
  145. package/dist/index57.js +53 -0
  146. package/dist/index58.cjs +55 -0
  147. package/dist/index58.js +55 -0
  148. package/dist/index59.cjs +119 -0
  149. package/dist/index59.js +119 -0
  150. package/dist/index60.cjs +70 -0
  151. package/dist/index60.js +70 -0
  152. package/dist/index61.cjs +66 -0
  153. package/dist/index61.js +66 -0
  154. package/dist/index62.cjs +68 -0
  155. package/dist/index62.js +68 -0
  156. package/dist/index63.cjs +99 -0
  157. package/dist/index63.js +99 -0
  158. package/dist/index64.cjs +75 -0
  159. package/dist/index64.js +75 -0
  160. package/dist/index65.cjs +92 -0
  161. package/dist/index65.js +92 -0
  162. package/dist/index66.cjs +76 -0
  163. package/dist/index66.js +76 -0
  164. package/dist/index67.cjs +76 -0
  165. package/dist/index67.js +76 -0
  166. package/dist/index68.cjs +64 -0
  167. package/dist/index68.js +64 -0
  168. package/dist/index69.cjs +60 -0
  169. package/dist/index69.js +60 -0
  170. package/dist/index7.cjs +1 -1
  171. package/dist/index7.js +1 -1
  172. package/dist/index70.cjs +57 -0
  173. package/dist/index70.js +57 -0
  174. package/dist/index71.cjs +125 -0
  175. package/dist/index71.js +125 -0
  176. package/dist/index8.cjs +1 -1
  177. package/dist/index8.js +1 -1
  178. package/dist/index9.cjs +1 -1
  179. package/dist/index9.js +1 -1
  180. package/dist/premium-react-loaders.css +126 -0
  181. package/dist/types/gradient.d.ts +38 -0
  182. package/dist/types/gradient.d.ts.map +1 -0
  183. package/dist/types/index.d.ts +4 -0
  184. package/dist/types/index.d.ts.map +1 -1
  185. package/dist/types/morph.d.ts +28 -0
  186. package/dist/types/morph.d.ts.map +1 -0
  187. package/dist/types/neon.d.ts +26 -0
  188. package/dist/types/neon.d.ts.map +1 -0
  189. package/dist/types/particle.d.ts +40 -0
  190. package/dist/types/particle.d.ts.map +1 -0
  191. package/dist/types/progress.d.ts +6 -0
  192. package/dist/types/progress.d.ts.map +1 -1
  193. package/dist/types/status.d.ts +30 -0
  194. package/dist/types/status.d.ts.map +1 -1
  195. package/dist/utils/colors.d.ts +5 -0
  196. package/dist/utils/colors.d.ts.map +1 -1
  197. package/package.json +1 -1
package/dist/index43.js CHANGED
@@ -1,18 +1,17 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
1
+ import { jsx } from "react/jsx-runtime";
2
2
  import { forwardRef } from "react";
3
- import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index56.js";
3
+ import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index71.js";
4
4
  import { normalizeSize } from "./index4.js";
5
5
  import { cn } from "./index3.js";
6
- const AtomLoader = forwardRef(
6
+ const OrbitDots = forwardRef(
7
7
  ({
8
8
  size = "md",
9
9
  color = "#3b82f6",
10
10
  secondaryColor,
11
- orbits = 3,
12
- nucleusSize = 8,
13
- electronSize = 5,
14
- showNucleus = true,
15
- thickness = 1,
11
+ dotCount = 4,
12
+ dotSize = 8,
13
+ orbitRadius = 0.4,
14
+ stagger = true,
16
15
  speed = "normal",
17
16
  reverse = false,
18
17
  respectMotionPreference = true,
@@ -21,7 +20,7 @@ const AtomLoader = forwardRef(
21
20
  transition,
22
21
  className,
23
22
  style,
24
- testId = "atom-loader",
23
+ testId = "orbit-dots",
25
24
  visible = true,
26
25
  ariaLabel = "Loading...",
27
26
  ...rest
@@ -36,8 +35,8 @@ const AtomLoader = forwardRef(
36
35
  );
37
36
  if (!shouldRender) return null;
38
37
  const normalizedSize = normalizeSize(size);
39
- const durationNum = parseInt(effectiveDuration, 10);
40
- const orbitAngles = Array.from({ length: orbits }, (_, i) => 180 / orbits * i);
38
+ const sizeNum = parseInt(normalizedSize, 10);
39
+ const radius = sizeNum * orbitRadius;
41
40
  return /* @__PURE__ */ jsx(
42
41
  "div",
43
42
  {
@@ -55,85 +54,44 @@ const AtomLoader = forwardRef(
55
54
  "aria-label": ariaLabel,
56
55
  "aria-busy": "true",
57
56
  ...rest,
58
- children: /* @__PURE__ */ jsxs("div", { className: "relative w-full h-full", children: [
59
- showNucleus && /* @__PURE__ */ jsx(
60
- "div",
61
- {
62
- className: "absolute rounded-full",
63
- style: {
64
- width: nucleusSize,
65
- height: nucleusSize,
66
- backgroundColor: secondaryColor || color,
67
- left: "50%",
68
- top: "50%",
69
- transform: "translate(-50%, -50%)"
70
- }
71
- }
72
- ),
73
- orbitAngles.map((angle, index) => {
74
- const orbitDuration = durationNum + index * 150;
75
- const shouldReverse = index % 2 === 1 ? !reverse : reverse;
76
- const electronColor = secondaryColor && index % 2 === 1 ? secondaryColor : color;
77
- return /* @__PURE__ */ jsxs(
78
- "div",
79
- {
80
- className: "absolute inset-0",
81
- style: {
82
- transform: `rotate(${angle}deg)`
57
+ children: /* @__PURE__ */ jsx(
58
+ "div",
59
+ {
60
+ className: "relative w-full h-full",
61
+ style: {
62
+ animation: `orbit-rotate ${effectiveDuration} linear infinite`,
63
+ animationDirection: reverse ? "reverse" : "normal"
64
+ },
65
+ children: Array.from({ length: dotCount }, (_, index) => {
66
+ const angle = 360 / dotCount * index;
67
+ const dotColor = secondaryColor && index % 2 === 1 ? secondaryColor : color;
68
+ const staggerDelay = stagger ? `${index / dotCount * 300}ms` : "0ms";
69
+ return /* @__PURE__ */ jsx(
70
+ "div",
71
+ {
72
+ className: "absolute rounded-full",
73
+ style: {
74
+ width: dotSize,
75
+ height: dotSize,
76
+ backgroundColor: dotColor,
77
+ left: "50%",
78
+ top: "50%",
79
+ transform: `translate(-50%, -50%) rotate(${angle}deg) translateX(${radius}px)`,
80
+ opacity: stagger ? void 0 : 1,
81
+ animation: stagger ? `orbit-dot-pulse 1s ease-in-out infinite` : void 0,
82
+ animationDelay: staggerDelay
83
+ }
83
84
  },
84
- children: [
85
- /* @__PURE__ */ jsx(
86
- "div",
87
- {
88
- className: "absolute rounded-full",
89
- style: {
90
- width: "100%",
91
- height: "60%",
92
- left: "0",
93
- top: "20%",
94
- border: `${thickness}px solid ${color}20`
95
- }
96
- }
97
- ),
98
- /* @__PURE__ */ jsx(
99
- "div",
100
- {
101
- className: "absolute",
102
- style: {
103
- width: "100%",
104
- height: "60%",
105
- left: "0",
106
- top: "20%",
107
- animation: `atom-orbit ${orbitDuration}ms linear infinite`,
108
- animationDirection: shouldReverse ? "reverse" : "normal"
109
- },
110
- children: /* @__PURE__ */ jsx(
111
- "div",
112
- {
113
- className: "absolute rounded-full",
114
- style: {
115
- width: electronSize,
116
- height: electronSize,
117
- backgroundColor: electronColor,
118
- left: "50%",
119
- top: 0,
120
- transform: "translate(-50%, -50%)"
121
- }
122
- }
123
- )
124
- }
125
- )
126
- ]
127
- },
128
- index
129
- );
130
- })
131
- ] })
85
+ index
86
+ );
87
+ })
88
+ }
89
+ )
132
90
  }
133
91
  );
134
92
  }
135
93
  );
136
- AtomLoader.displayName = "AtomLoader";
94
+ OrbitDots.displayName = "OrbitDots";
137
95
  export {
138
- AtomLoader
96
+ OrbitDots
139
97
  };
package/dist/index44.cjs CHANGED
@@ -2,26 +2,27 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
- const hooks = require("./index56.cjs");
5
+ const hooks = require("./index71.cjs");
6
+ const colors = require("./index4.cjs");
6
7
  const classNames = require("./index3.cjs");
7
- const BouncingDots = react.forwardRef(
8
+ const OrbitRings = react.forwardRef(
8
9
  ({
9
10
  size = "md",
10
11
  color = "#3b82f6",
11
12
  secondaryColor,
12
- dotCount = 3,
13
- dotSize = 10,
14
- gap = 8,
15
- bounceHeight = 1,
16
- staggerDelay = 150,
13
+ thickness = 2,
14
+ ringCount = 3,
15
+ ringGap = 6,
16
+ alternate = true,
17
17
  speed = "normal",
18
+ reverse = false,
18
19
  respectMotionPreference = true,
19
20
  delay = 0,
20
21
  minDuration = 0,
21
22
  transition,
22
23
  className,
23
24
  style,
24
- testId = "bouncing-dots",
25
+ testId = "orbit-rings",
25
26
  visible = true,
26
27
  ariaLabel = "Loading...",
27
28
  ...rest
@@ -35,17 +36,18 @@ const BouncingDots = react.forwardRef(
35
36
  transition
36
37
  );
37
38
  if (!shouldRender) return null;
38
- const totalWidth = dotCount * dotSize + (dotCount - 1) * gap;
39
- const bounceDistance = dotSize * bounceHeight;
39
+ const normalizedSize = colors.normalizeSize(size);
40
+ const sizeNum = parseInt(normalizedSize, 10);
41
+ const durationNum = parseInt(effectiveDuration, 10);
40
42
  return /* @__PURE__ */ jsxRuntime.jsx(
41
43
  "div",
42
44
  {
43
45
  ref,
44
46
  "data-testid": testId,
45
- className: classNames.cn("inline-flex items-end justify-center", className),
47
+ className: classNames.cn("inline-flex items-center justify-center", className),
46
48
  style: {
47
- width: totalWidth,
48
- height: dotSize + bounceDistance,
49
+ width: normalizedSize,
50
+ height: normalizedSize,
49
51
  opacity,
50
52
  transition: transitionStyle,
51
53
  ...style
@@ -54,29 +56,35 @@ const BouncingDots = react.forwardRef(
54
56
  "aria-label": ariaLabel,
55
57
  "aria-busy": "true",
56
58
  ...rest,
57
- children: Array.from({ length: dotCount }, (_, index) => {
58
- const dotColor = secondaryColor && index % 2 === 1 ? secondaryColor : color;
59
- const animationDelay = `${index * staggerDelay}ms`;
59
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative w-full h-full", children: Array.from({ length: ringCount }, (_, index) => {
60
+ const ringSize = sizeNum - index * (ringGap + thickness) * 2;
61
+ if (ringSize <= 0) return null;
62
+ const ringColor = secondaryColor && index % 2 === 1 ? secondaryColor : color;
63
+ const shouldReverse = alternate ? index % 2 === 1 !== reverse : reverse;
64
+ const ringDuration = durationNum + index * 200;
60
65
  return /* @__PURE__ */ jsxRuntime.jsx(
61
66
  "div",
62
67
  {
63
- className: "rounded-full",
68
+ className: "absolute rounded-full",
64
69
  style: {
65
- width: dotSize,
66
- height: dotSize,
67
- backgroundColor: dotColor,
68
- marginRight: index < dotCount - 1 ? gap : 0,
69
- animation: `bounce-dot ${effectiveDuration} ease-in-out infinite`,
70
- animationDelay,
71
- ["--bounce-height"]: `${bounceDistance}px`
70
+ width: ringSize,
71
+ height: ringSize,
72
+ left: "50%",
73
+ top: "50%",
74
+ transform: "translate(-50%, -50%)",
75
+ border: `${thickness}px solid transparent`,
76
+ borderTopColor: ringColor,
77
+ borderRightColor: ringColor,
78
+ animation: `orbit-rotate ${ringDuration}ms linear infinite`,
79
+ animationDirection: shouldReverse ? "reverse" : "normal"
72
80
  }
73
81
  },
74
82
  index
75
83
  );
76
- })
84
+ }) })
77
85
  }
78
86
  );
79
87
  }
80
88
  );
81
- BouncingDots.displayName = "BouncingDots";
82
- exports.BouncingDots = BouncingDots;
89
+ OrbitRings.displayName = "OrbitRings";
90
+ exports.OrbitRings = OrbitRings;
package/dist/index44.js CHANGED
@@ -1,25 +1,26 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { forwardRef } from "react";
3
- import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index56.js";
3
+ import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index71.js";
4
+ import { normalizeSize } from "./index4.js";
4
5
  import { cn } from "./index3.js";
5
- const BouncingDots = forwardRef(
6
+ const OrbitRings = forwardRef(
6
7
  ({
7
8
  size = "md",
8
9
  color = "#3b82f6",
9
10
  secondaryColor,
10
- dotCount = 3,
11
- dotSize = 10,
12
- gap = 8,
13
- bounceHeight = 1,
14
- staggerDelay = 150,
11
+ thickness = 2,
12
+ ringCount = 3,
13
+ ringGap = 6,
14
+ alternate = true,
15
15
  speed = "normal",
16
+ reverse = false,
16
17
  respectMotionPreference = true,
17
18
  delay = 0,
18
19
  minDuration = 0,
19
20
  transition,
20
21
  className,
21
22
  style,
22
- testId = "bouncing-dots",
23
+ testId = "orbit-rings",
23
24
  visible = true,
24
25
  ariaLabel = "Loading...",
25
26
  ...rest
@@ -33,17 +34,18 @@ const BouncingDots = forwardRef(
33
34
  transition
34
35
  );
35
36
  if (!shouldRender) return null;
36
- const totalWidth = dotCount * dotSize + (dotCount - 1) * gap;
37
- const bounceDistance = dotSize * bounceHeight;
37
+ const normalizedSize = normalizeSize(size);
38
+ const sizeNum = parseInt(normalizedSize, 10);
39
+ const durationNum = parseInt(effectiveDuration, 10);
38
40
  return /* @__PURE__ */ jsx(
39
41
  "div",
40
42
  {
41
43
  ref,
42
44
  "data-testid": testId,
43
- className: cn("inline-flex items-end justify-center", className),
45
+ className: cn("inline-flex items-center justify-center", className),
44
46
  style: {
45
- width: totalWidth,
46
- height: dotSize + bounceDistance,
47
+ width: normalizedSize,
48
+ height: normalizedSize,
47
49
  opacity,
48
50
  transition: transitionStyle,
49
51
  ...style
@@ -52,31 +54,37 @@ const BouncingDots = forwardRef(
52
54
  "aria-label": ariaLabel,
53
55
  "aria-busy": "true",
54
56
  ...rest,
55
- children: Array.from({ length: dotCount }, (_, index) => {
56
- const dotColor = secondaryColor && index % 2 === 1 ? secondaryColor : color;
57
- const animationDelay = `${index * staggerDelay}ms`;
57
+ children: /* @__PURE__ */ jsx("div", { className: "relative w-full h-full", children: Array.from({ length: ringCount }, (_, index) => {
58
+ const ringSize = sizeNum - index * (ringGap + thickness) * 2;
59
+ if (ringSize <= 0) return null;
60
+ const ringColor = secondaryColor && index % 2 === 1 ? secondaryColor : color;
61
+ const shouldReverse = alternate ? index % 2 === 1 !== reverse : reverse;
62
+ const ringDuration = durationNum + index * 200;
58
63
  return /* @__PURE__ */ jsx(
59
64
  "div",
60
65
  {
61
- className: "rounded-full",
66
+ className: "absolute rounded-full",
62
67
  style: {
63
- width: dotSize,
64
- height: dotSize,
65
- backgroundColor: dotColor,
66
- marginRight: index < dotCount - 1 ? gap : 0,
67
- animation: `bounce-dot ${effectiveDuration} ease-in-out infinite`,
68
- animationDelay,
69
- ["--bounce-height"]: `${bounceDistance}px`
68
+ width: ringSize,
69
+ height: ringSize,
70
+ left: "50%",
71
+ top: "50%",
72
+ transform: "translate(-50%, -50%)",
73
+ border: `${thickness}px solid transparent`,
74
+ borderTopColor: ringColor,
75
+ borderRightColor: ringColor,
76
+ animation: `orbit-rotate ${ringDuration}ms linear infinite`,
77
+ animationDirection: shouldReverse ? "reverse" : "normal"
70
78
  }
71
79
  },
72
80
  index
73
81
  );
74
- })
82
+ }) })
75
83
  }
76
84
  );
77
85
  }
78
86
  );
79
- BouncingDots.displayName = "BouncingDots";
87
+ OrbitRings.displayName = "OrbitRings";
80
88
  export {
81
- BouncingDots
89
+ OrbitRings
82
90
  };
package/dist/index45.cjs CHANGED
@@ -2,27 +2,28 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
- const hooks = require("./index56.cjs");
5
+ const hooks = require("./index71.cjs");
6
+ const colors = require("./index4.cjs");
6
7
  const classNames = require("./index3.cjs");
7
- const BouncingBalls = react.forwardRef(
8
+ const AtomLoader = react.forwardRef(
8
9
  ({
9
10
  size = "md",
10
11
  color = "#3b82f6",
11
12
  secondaryColor,
12
- ballCount = 3,
13
- ballSize = 14,
14
- gap = 10,
15
- bounceHeight = 1.5,
16
- shadow = true,
17
- squash = true,
13
+ orbits = 3,
14
+ nucleusSize = 8,
15
+ electronSize = 5,
16
+ showNucleus = true,
17
+ thickness = 1,
18
18
  speed = "normal",
19
+ reverse = false,
19
20
  respectMotionPreference = true,
20
21
  delay = 0,
21
22
  minDuration = 0,
22
23
  transition,
23
24
  className,
24
25
  style,
25
- testId = "bouncing-balls",
26
+ testId = "atom-loader",
26
27
  visible = true,
27
28
  ariaLabel = "Loading...",
28
29
  ...rest
@@ -36,19 +37,18 @@ const BouncingBalls = react.forwardRef(
36
37
  transition
37
38
  );
38
39
  if (!shouldRender) return null;
39
- const totalWidth = ballCount * ballSize + (ballCount - 1) * gap;
40
- const bounceDistance = ballSize * bounceHeight;
41
- const shadowSize = ballSize * 0.8;
42
- const staggerDelay = 200;
40
+ const normalizedSize = colors.normalizeSize(size);
41
+ const durationNum = parseInt(effectiveDuration, 10);
42
+ const orbitAngles = Array.from({ length: orbits }, (_, i) => 180 / orbits * i);
43
43
  return /* @__PURE__ */ jsxRuntime.jsx(
44
44
  "div",
45
45
  {
46
46
  ref,
47
47
  "data-testid": testId,
48
- className: classNames.cn("inline-flex items-end justify-center", className),
48
+ className: classNames.cn("inline-flex items-center justify-center", className),
49
49
  style: {
50
- width: totalWidth,
51
- height: ballSize + bounceDistance + (shadow ? 8 : 0),
50
+ width: normalizedSize,
51
+ height: normalizedSize,
52
52
  opacity,
53
53
  transition: transitionStyle,
54
54
  ...style
@@ -57,54 +57,83 @@ const BouncingBalls = react.forwardRef(
57
57
  "aria-label": ariaLabel,
58
58
  "aria-busy": "true",
59
59
  ...rest,
60
- children: Array.from({ length: ballCount }, (_, index) => {
61
- const ballColor = secondaryColor && index % 2 === 1 ? secondaryColor : color;
62
- const animationDelay = `${index * staggerDelay}ms`;
63
- return /* @__PURE__ */ jsxRuntime.jsxs(
60
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative w-full h-full", children: [
61
+ showNucleus && /* @__PURE__ */ jsxRuntime.jsx(
64
62
  "div",
65
63
  {
66
- className: "relative flex flex-col items-center",
64
+ className: "absolute rounded-full",
67
65
  style: {
68
- marginRight: index < ballCount - 1 ? gap : 0
69
- },
70
- children: [
71
- /* @__PURE__ */ jsxRuntime.jsx(
72
- "div",
73
- {
74
- className: "rounded-full",
75
- style: {
76
- width: ballSize,
77
- height: ballSize,
78
- backgroundColor: ballColor,
79
- animation: squash ? `bounce-ball-squash ${effectiveDuration} ease-in-out infinite` : `bounce-ball ${effectiveDuration} ease-in-out infinite`,
80
- animationDelay,
81
- ["--bounce-height"]: `${bounceDistance}px`,
82
- transformOrigin: "center bottom"
66
+ width: nucleusSize,
67
+ height: nucleusSize,
68
+ backgroundColor: secondaryColor || color,
69
+ left: "50%",
70
+ top: "50%",
71
+ transform: "translate(-50%, -50%)"
72
+ }
73
+ }
74
+ ),
75
+ orbitAngles.map((angle, index) => {
76
+ const orbitDuration = durationNum + index * 150;
77
+ const shouldReverse = index % 2 === 1 ? !reverse : reverse;
78
+ const electronColor = secondaryColor && index % 2 === 1 ? secondaryColor : color;
79
+ return /* @__PURE__ */ jsxRuntime.jsxs(
80
+ "div",
81
+ {
82
+ className: "absolute inset-0",
83
+ style: {
84
+ transform: `rotate(${angle}deg)`
85
+ },
86
+ children: [
87
+ /* @__PURE__ */ jsxRuntime.jsx(
88
+ "div",
89
+ {
90
+ className: "absolute rounded-full",
91
+ style: {
92
+ width: "100%",
93
+ height: "60%",
94
+ left: "0",
95
+ top: "20%",
96
+ border: `${thickness}px solid ${color}20`
97
+ }
83
98
  }
84
- }
85
- ),
86
- shadow && /* @__PURE__ */ jsxRuntime.jsx(
87
- "div",
88
- {
89
- className: "absolute bottom-0 rounded-full",
90
- style: {
91
- width: shadowSize,
92
- height: shadowSize * 0.3,
93
- backgroundColor: "rgba(0, 0, 0, 0.2)",
94
- animation: `bounce-shadow ${effectiveDuration} ease-in-out infinite`,
95
- animationDelay,
96
- filter: "blur(2px)"
99
+ ),
100
+ /* @__PURE__ */ jsxRuntime.jsx(
101
+ "div",
102
+ {
103
+ className: "absolute",
104
+ style: {
105
+ width: "100%",
106
+ height: "60%",
107
+ left: "0",
108
+ top: "20%",
109
+ animation: `atom-orbit ${orbitDuration}ms linear infinite`,
110
+ animationDirection: shouldReverse ? "reverse" : "normal"
111
+ },
112
+ children: /* @__PURE__ */ jsxRuntime.jsx(
113
+ "div",
114
+ {
115
+ className: "absolute rounded-full",
116
+ style: {
117
+ width: electronSize,
118
+ height: electronSize,
119
+ backgroundColor: electronColor,
120
+ left: "50%",
121
+ top: 0,
122
+ transform: "translate(-50%, -50%)"
123
+ }
124
+ }
125
+ )
97
126
  }
98
- }
99
- )
100
- ]
101
- },
102
- index
103
- );
104
- })
127
+ )
128
+ ]
129
+ },
130
+ index
131
+ );
132
+ })
133
+ ] })
105
134
  }
106
135
  );
107
136
  }
108
137
  );
109
- BouncingBalls.displayName = "BouncingBalls";
110
- exports.BouncingBalls = BouncingBalls;
138
+ AtomLoader.displayName = "AtomLoader";
139
+ exports.AtomLoader = AtomLoader;