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/index47.cjs CHANGED
@@ -2,27 +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");
6
- const colors = require("./index4.cjs");
5
+ const hooks = require("./index71.cjs");
7
6
  const classNames = require("./index3.cjs");
8
- const MobiusLoader = react.forwardRef(
7
+ const BouncingBalls = react.forwardRef(
9
8
  ({
10
9
  size = "md",
11
10
  color = "#3b82f6",
12
11
  secondaryColor,
13
- thickness = 2,
14
- segments = 6,
15
- twist = true,
16
- ribbonWidth = 8,
12
+ ballCount = 3,
13
+ ballSize = 14,
14
+ gap = 10,
15
+ bounceHeight = 1.5,
16
+ shadow = true,
17
+ squash = true,
17
18
  speed = "normal",
18
- reverse = false,
19
19
  respectMotionPreference = true,
20
20
  delay = 0,
21
21
  minDuration = 0,
22
22
  transition,
23
23
  className,
24
24
  style,
25
- testId = "mobius-loader",
25
+ testId = "bouncing-balls",
26
26
  visible = true,
27
27
  ariaLabel = "Loading...",
28
28
  ...rest
@@ -36,22 +36,19 @@ const MobiusLoader = react.forwardRef(
36
36
  transition
37
37
  );
38
38
  if (!shouldRender) return null;
39
- const normalizedSize = colors.normalizeSize(size);
40
- const sizeNum = parseInt(normalizedSize, 10);
41
- const durationNum = parseInt(effectiveDuration, 10);
42
- const centerX = sizeNum / 2;
43
- const centerY = sizeNum / 2;
44
- const radiusX = (sizeNum - ribbonWidth) / 2;
45
- const radiusY = (sizeNum - ribbonWidth) / 3;
39
+ const totalWidth = ballCount * ballSize + (ballCount - 1) * gap;
40
+ const bounceDistance = ballSize * bounceHeight;
41
+ const shadowSize = ballSize * 0.8;
42
+ const staggerDelay = 200;
46
43
  return /* @__PURE__ */ jsxRuntime.jsx(
47
44
  "div",
48
45
  {
49
46
  ref,
50
47
  "data-testid": testId,
51
- className: classNames.cn("inline-flex items-center justify-center", className),
48
+ className: classNames.cn("inline-flex items-end justify-center", className),
52
49
  style: {
53
- width: normalizedSize,
54
- height: normalizedSize,
50
+ width: totalWidth,
51
+ height: ballSize + bounceDistance + (shadow ? 8 : 0),
55
52
  opacity,
56
53
  transition: transitionStyle,
57
54
  ...style
@@ -60,47 +57,54 @@ const MobiusLoader = react.forwardRef(
60
57
  "aria-label": ariaLabel,
61
58
  "aria-busy": "true",
62
59
  ...rest,
63
- children: /* @__PURE__ */ jsxRuntime.jsx(
64
- "div",
65
- {
66
- className: "relative w-full h-full",
67
- style: {
68
- animation: `mobius-rotate ${durationNum}ms linear infinite`,
69
- animationDirection: reverse ? "reverse" : "normal"
70
- },
71
- children: Array.from({ length: segments }, (_, index) => {
72
- const angle = 360 / segments * index;
73
- const radians = angle * Math.PI / 180;
74
- const x = centerX + radiusX * Math.cos(radians);
75
- const y = centerY + radiusY * Math.sin(radians);
76
- const twistAngle = twist ? angle + 90 : 90;
77
- const segmentOpacity = 0.3 + 0.7 * (index / segments);
78
- const segmentColor = secondaryColor && index % 2 === 0 ? secondaryColor : color;
79
- return /* @__PURE__ */ jsxRuntime.jsx(
80
- "div",
81
- {
82
- className: "absolute",
83
- style: {
84
- width: ribbonWidth,
85
- height: thickness,
86
- backgroundColor: segmentColor,
87
- borderRadius: thickness / 2,
88
- left: x - ribbonWidth / 2,
89
- top: y - thickness / 2,
90
- transform: `rotate(${twistAngle}deg)`,
91
- opacity: segmentOpacity,
92
- animation: `mobius-segment ${durationNum}ms ease-in-out infinite`,
93
- animationDelay: `${index / segments * durationNum}ms`
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(
64
+ "div",
65
+ {
66
+ className: "relative flex flex-col items-center",
67
+ 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"
83
+ }
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)"
97
+ }
94
98
  }
95
- },
96
- index
97
- );
98
- })
99
- }
100
- )
99
+ )
100
+ ]
101
+ },
102
+ index
103
+ );
104
+ })
101
105
  }
102
106
  );
103
107
  }
104
108
  );
105
- MobiusLoader.displayName = "MobiusLoader";
106
- exports.MobiusLoader = MobiusLoader;
109
+ BouncingBalls.displayName = "BouncingBalls";
110
+ exports.BouncingBalls = BouncingBalls;
package/dist/index47.js CHANGED
@@ -1,26 +1,26 @@
1
- import { jsx } from "react/jsx-runtime";
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { forwardRef } from "react";
3
- import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index56.js";
4
- import { normalizeSize } from "./index4.js";
3
+ import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index71.js";
5
4
  import { cn } from "./index3.js";
6
- const MobiusLoader = forwardRef(
5
+ const BouncingBalls = forwardRef(
7
6
  ({
8
7
  size = "md",
9
8
  color = "#3b82f6",
10
9
  secondaryColor,
11
- thickness = 2,
12
- segments = 6,
13
- twist = true,
14
- ribbonWidth = 8,
10
+ ballCount = 3,
11
+ ballSize = 14,
12
+ gap = 10,
13
+ bounceHeight = 1.5,
14
+ shadow = true,
15
+ squash = true,
15
16
  speed = "normal",
16
- reverse = false,
17
17
  respectMotionPreference = true,
18
18
  delay = 0,
19
19
  minDuration = 0,
20
20
  transition,
21
21
  className,
22
22
  style,
23
- testId = "mobius-loader",
23
+ testId = "bouncing-balls",
24
24
  visible = true,
25
25
  ariaLabel = "Loading...",
26
26
  ...rest
@@ -34,22 +34,19 @@ const MobiusLoader = forwardRef(
34
34
  transition
35
35
  );
36
36
  if (!shouldRender) return null;
37
- const normalizedSize = normalizeSize(size);
38
- const sizeNum = parseInt(normalizedSize, 10);
39
- const durationNum = parseInt(effectiveDuration, 10);
40
- const centerX = sizeNum / 2;
41
- const centerY = sizeNum / 2;
42
- const radiusX = (sizeNum - ribbonWidth) / 2;
43
- const radiusY = (sizeNum - ribbonWidth) / 3;
37
+ const totalWidth = ballCount * ballSize + (ballCount - 1) * gap;
38
+ const bounceDistance = ballSize * bounceHeight;
39
+ const shadowSize = ballSize * 0.8;
40
+ const staggerDelay = 200;
44
41
  return /* @__PURE__ */ jsx(
45
42
  "div",
46
43
  {
47
44
  ref,
48
45
  "data-testid": testId,
49
- className: cn("inline-flex items-center justify-center", className),
46
+ className: cn("inline-flex items-end justify-center", className),
50
47
  style: {
51
- width: normalizedSize,
52
- height: normalizedSize,
48
+ width: totalWidth,
49
+ height: ballSize + bounceDistance + (shadow ? 8 : 0),
53
50
  opacity,
54
51
  transition: transitionStyle,
55
52
  ...style
@@ -58,49 +55,56 @@ const MobiusLoader = forwardRef(
58
55
  "aria-label": ariaLabel,
59
56
  "aria-busy": "true",
60
57
  ...rest,
61
- children: /* @__PURE__ */ jsx(
62
- "div",
63
- {
64
- className: "relative w-full h-full",
65
- style: {
66
- animation: `mobius-rotate ${durationNum}ms linear infinite`,
67
- animationDirection: reverse ? "reverse" : "normal"
68
- },
69
- children: Array.from({ length: segments }, (_, index) => {
70
- const angle = 360 / segments * index;
71
- const radians = angle * Math.PI / 180;
72
- const x = centerX + radiusX * Math.cos(radians);
73
- const y = centerY + radiusY * Math.sin(radians);
74
- const twistAngle = twist ? angle + 90 : 90;
75
- const segmentOpacity = 0.3 + 0.7 * (index / segments);
76
- const segmentColor = secondaryColor && index % 2 === 0 ? secondaryColor : color;
77
- return /* @__PURE__ */ jsx(
78
- "div",
79
- {
80
- className: "absolute",
81
- style: {
82
- width: ribbonWidth,
83
- height: thickness,
84
- backgroundColor: segmentColor,
85
- borderRadius: thickness / 2,
86
- left: x - ribbonWidth / 2,
87
- top: y - thickness / 2,
88
- transform: `rotate(${twistAngle}deg)`,
89
- opacity: segmentOpacity,
90
- animation: `mobius-segment ${durationNum}ms ease-in-out infinite`,
91
- animationDelay: `${index / segments * durationNum}ms`
58
+ children: Array.from({ length: ballCount }, (_, index) => {
59
+ const ballColor = secondaryColor && index % 2 === 1 ? secondaryColor : color;
60
+ const animationDelay = `${index * staggerDelay}ms`;
61
+ return /* @__PURE__ */ jsxs(
62
+ "div",
63
+ {
64
+ className: "relative flex flex-col items-center",
65
+ style: {
66
+ marginRight: index < ballCount - 1 ? gap : 0
67
+ },
68
+ children: [
69
+ /* @__PURE__ */ jsx(
70
+ "div",
71
+ {
72
+ className: "rounded-full",
73
+ style: {
74
+ width: ballSize,
75
+ height: ballSize,
76
+ backgroundColor: ballColor,
77
+ animation: squash ? `bounce-ball-squash ${effectiveDuration} ease-in-out infinite` : `bounce-ball ${effectiveDuration} ease-in-out infinite`,
78
+ animationDelay,
79
+ ["--bounce-height"]: `${bounceDistance}px`,
80
+ transformOrigin: "center bottom"
81
+ }
82
+ }
83
+ ),
84
+ shadow && /* @__PURE__ */ jsx(
85
+ "div",
86
+ {
87
+ className: "absolute bottom-0 rounded-full",
88
+ style: {
89
+ width: shadowSize,
90
+ height: shadowSize * 0.3,
91
+ backgroundColor: "rgba(0, 0, 0, 0.2)",
92
+ animation: `bounce-shadow ${effectiveDuration} ease-in-out infinite`,
93
+ animationDelay,
94
+ filter: "blur(2px)"
95
+ }
92
96
  }
93
- },
94
- index
95
- );
96
- })
97
- }
98
- )
97
+ )
98
+ ]
99
+ },
100
+ index
101
+ );
102
+ })
99
103
  }
100
104
  );
101
105
  }
102
106
  );
103
- MobiusLoader.displayName = "MobiusLoader";
107
+ BouncingBalls.displayName = "BouncingBalls";
104
108
  export {
105
- MobiusLoader
109
+ BouncingBalls
106
110
  };
package/dist/index48.cjs CHANGED
@@ -2,28 +2,29 @@
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
6
  const classNames = require("./index3.cjs");
7
- const LoadingText = react.forwardRef(
7
+ const colors = require("./index4.cjs");
8
+ const InfinityLoader = react.forwardRef(
8
9
  ({
9
- text = "Loading",
10
- animation = "dots",
11
- fontSize = 16,
12
- fontWeight = 500,
13
- color = "#374151",
14
- dotCount = 3,
15
- showEllipsis = true,
16
- textClassName,
10
+ size = "md",
11
+ color = "#3b82f6",
12
+ secondaryColor,
13
+ thickness = 3,
14
+ gradient = false,
15
+ showDot = false,
16
+ dotSize = 6,
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 = "loading-text",
25
+ testId = "infinity-loader",
25
26
  visible = true,
26
- ariaLabel,
27
+ ariaLabel = "Loading...",
27
28
  ...rest
28
29
  }, ref) => {
29
30
  const prefersReducedMotion = hooks.useReducedMotion();
@@ -35,118 +36,94 @@ const LoadingText = react.forwardRef(
35
36
  transition
36
37
  );
37
38
  if (!shouldRender) return null;
38
- const durationNum = parseInt(effectiveDuration, 10);
39
- const normalizedFontSize = typeof fontSize === "number" ? `${fontSize}px` : fontSize;
40
- const renderDots = () => {
41
- if (!showEllipsis) return null;
42
- switch (animation) {
43
- case "dots":
44
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex", children: Array.from({ length: dotCount }, (_, index) => /* @__PURE__ */ jsxRuntime.jsx(
45
- "span",
46
- {
47
- style: {
48
- animation: `loading-text-dot ${durationNum}ms ease-in-out infinite`,
49
- animationDelay: `${index * (durationNum / dotCount / 2)}ms`
50
- },
51
- children: "."
52
- },
53
- index
54
- )) });
55
- case "fade":
56
- return /* @__PURE__ */ jsxRuntime.jsx(
57
- "span",
58
- {
59
- style: {
60
- animation: `loading-text-fade ${durationNum}ms ease-in-out infinite`
61
- },
62
- children: "..."
63
- }
64
- );
65
- case "bounce":
66
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex", children: Array.from({ length: dotCount }, (_, index) => /* @__PURE__ */ jsxRuntime.jsx(
67
- "span",
68
- {
69
- className: "inline-block",
70
- style: {
71
- animation: `loading-text-bounce ${durationNum}ms ease-in-out infinite`,
72
- animationDelay: `${index * (durationNum / dotCount / 2)}ms`
73
- },
74
- children: "."
75
- },
76
- index
77
- )) });
78
- case "wave":
79
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex", children: Array.from({ length: dotCount }, (_, index) => /* @__PURE__ */ jsxRuntime.jsx(
80
- "span",
81
- {
82
- className: "inline-block",
83
- style: {
84
- animation: `loading-text-wave ${durationNum}ms ease-in-out infinite`,
85
- animationDelay: `${index * (durationNum / dotCount / 1.5)}ms`
86
- },
87
- children: "."
88
- },
89
- index
90
- )) });
91
- default:
92
- return "...";
93
- }
94
- };
95
- const renderText = () => {
96
- if (animation === "wave" || animation === "bounce") {
97
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: text.split("").map((char, index) => /* @__PURE__ */ jsxRuntime.jsx(
98
- "span",
99
- {
100
- className: "inline-block",
101
- style: {
102
- animation: `loading-text-${animation} ${durationNum}ms ease-in-out infinite`,
103
- animationDelay: `${index * 50}ms`
104
- },
105
- children: char === " " ? " " : char
106
- },
107
- index
108
- )) });
109
- }
110
- if (animation === "fade") {
111
- return /* @__PURE__ */ jsxRuntime.jsx(
112
- "span",
113
- {
114
- style: {
115
- animation: `loading-text-fade ${durationNum}ms ease-in-out infinite`
116
- },
117
- children: text
118
- }
119
- );
120
- }
121
- return text;
122
- };
39
+ const normalizedSize = colors.normalizeSize(size);
40
+ const sizeNum = parseInt(normalizedSize, 10);
41
+ const width = sizeNum;
42
+ const height = sizeNum * 0.5;
43
+ const infinityPath = `M ${width * 0.15} ${height * 0.5}
44
+ C ${width * 0.15} ${height * 0.1}, ${width * 0.4} ${height * 0.1}, ${width * 0.5} ${height * 0.5}
45
+ C ${width * 0.6} ${height * 0.9}, ${width * 0.85} ${height * 0.9}, ${width * 0.85} ${height * 0.5}
46
+ C ${width * 0.85} ${height * 0.1}, ${width * 0.6} ${height * 0.1}, ${width * 0.5} ${height * 0.5}
47
+ C ${width * 0.4} ${height * 0.9}, ${width * 0.15} ${height * 0.9}, ${width * 0.15} ${height * 0.5}`;
48
+ const gradientId = `infinity-gradient-${testId}`;
49
+ const pathId = `infinity-path-${testId}`;
123
50
  return /* @__PURE__ */ jsxRuntime.jsx(
124
51
  "div",
125
52
  {
126
53
  ref,
127
54
  "data-testid": testId,
128
- className: classNames.cn("inline-flex items-center", className),
55
+ className: classNames.cn("inline-flex items-center justify-center", className),
129
56
  style: {
57
+ width,
58
+ height,
130
59
  opacity,
131
60
  transition: transitionStyle,
132
61
  ...style
133
62
  },
134
63
  role: "status",
135
- "aria-label": ariaLabel || `${text}...`,
64
+ "aria-label": ariaLabel,
136
65
  "aria-busy": "true",
137
66
  ...rest,
138
67
  children: /* @__PURE__ */ jsxRuntime.jsxs(
139
- "span",
68
+ "svg",
140
69
  {
141
- className: classNames.cn("inline-flex items-baseline", textClassName),
142
- style: {
143
- fontSize: normalizedFontSize,
144
- fontWeight,
145
- color
146
- },
70
+ width,
71
+ height,
72
+ viewBox: `0 0 ${width} ${height}`,
73
+ fill: "none",
147
74
  children: [
148
- renderText(),
149
- renderDots()
75
+ gradient && secondaryColor && /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs("linearGradient", { id: gradientId, x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
76
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "0%", stopColor: color }),
77
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "100%", stopColor: secondaryColor })
78
+ ] }) }),
79
+ /* @__PURE__ */ jsxRuntime.jsx(
80
+ "path",
81
+ {
82
+ d: infinityPath,
83
+ stroke: gradient && secondaryColor ? `url(#${gradientId})` : color,
84
+ strokeWidth: thickness,
85
+ strokeLinecap: "round",
86
+ fill: "none",
87
+ opacity: 0.2
88
+ }
89
+ ),
90
+ /* @__PURE__ */ jsxRuntime.jsx(
91
+ "path",
92
+ {
93
+ id: pathId,
94
+ d: infinityPath,
95
+ stroke: gradient && secondaryColor ? `url(#${gradientId})` : color,
96
+ strokeWidth: thickness,
97
+ strokeLinecap: "round",
98
+ fill: "none",
99
+ style: {
100
+ strokeDasharray: "50 200",
101
+ animation: `infinity-dash ${effectiveDuration} linear infinite`,
102
+ animationDirection: reverse ? "reverse" : "normal"
103
+ }
104
+ }
105
+ ),
106
+ showDot && /* @__PURE__ */ jsxRuntime.jsx(
107
+ "circle",
108
+ {
109
+ r: dotSize / 2,
110
+ fill: secondaryColor || color,
111
+ style: {
112
+ animation: `infinity-dot ${effectiveDuration} linear infinite`,
113
+ animationDirection: reverse ? "reverse" : "normal"
114
+ },
115
+ children: /* @__PURE__ */ jsxRuntime.jsx(
116
+ "animateMotion",
117
+ {
118
+ dur: effectiveDuration,
119
+ repeatCount: "indefinite",
120
+ path: infinityPath,
121
+ keyPoints: reverse ? "1;0" : "0;1",
122
+ keyTimes: "0;1"
123
+ }
124
+ )
125
+ }
126
+ )
150
127
  ]
151
128
  }
152
129
  )
@@ -154,5 +131,5 @@ const LoadingText = react.forwardRef(
154
131
  );
155
132
  }
156
133
  );
157
- LoadingText.displayName = "LoadingText";
158
- exports.LoadingText = LoadingText;
134
+ InfinityLoader.displayName = "InfinityLoader";
135
+ exports.InfinityLoader = InfinityLoader;