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
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const hooks = require("./index71.cjs");
6
+ const colors = require("./index4.cjs");
7
+ const classNames = require("./index3.cjs");
8
+ const ParticleTrail = react.forwardRef(
9
+ ({
10
+ size = 60,
11
+ count = 6,
12
+ color = "#3b82f6",
13
+ speed = "normal",
14
+ respectMotionPreference = true,
15
+ delay = 0,
16
+ minDuration = 0,
17
+ transition,
18
+ className,
19
+ style,
20
+ testId = "particle-trail",
21
+ visible = true,
22
+ ariaLabel = "Loading...",
23
+ ...rest
24
+ }, ref) => {
25
+ const prefersReducedMotion = hooks.useReducedMotion();
26
+ const effectiveDuration = hooks.getEffectiveDuration(speed, respectMotionPreference, prefersReducedMotion);
27
+ const { shouldRender, opacity, transitionStyle } = hooks.useLoaderVisibility(visible, delay, minDuration, transition);
28
+ if (!shouldRender) return null;
29
+ const clampedCount = Math.min(10, Math.max(3, count));
30
+ const orbitRadius = size * 0.35;
31
+ const particleSize = Math.max(3, size * 0.08);
32
+ const durationMs = colors.parseDurationMs(effectiveDuration);
33
+ return /* @__PURE__ */ jsxRuntime.jsx(
34
+ "div",
35
+ {
36
+ ref,
37
+ "data-testid": testId,
38
+ className: classNames.cn("relative inline-flex items-center justify-center", className),
39
+ style: { width: size, height: size, opacity, transition: transitionStyle, ...style },
40
+ role: "status",
41
+ "aria-label": ariaLabel,
42
+ "aria-busy": "true",
43
+ ...rest,
44
+ children: Array.from({ length: clampedCount }, (_, i) => {
45
+ const trailOpacity = 1 - i / clampedCount * 0.85;
46
+ const trailScale = 1 - i / clampedCount * 0.6;
47
+ const startAngle = `${i / clampedCount * 360}deg`;
48
+ const staggerDelay = `-${i / clampedCount * durationMs}ms`;
49
+ return /* @__PURE__ */ jsxRuntime.jsx(
50
+ "div",
51
+ {
52
+ className: "absolute rounded-full animate-particle-trail",
53
+ style: {
54
+ width: particleSize * trailScale,
55
+ height: particleSize * trailScale,
56
+ backgroundColor: color,
57
+ top: "50%",
58
+ left: "50%",
59
+ marginTop: -(particleSize * trailScale) / 2,
60
+ marginLeft: -(particleSize * trailScale) / 2,
61
+ opacity: trailOpacity,
62
+ animationDuration: effectiveDuration,
63
+ animationDelay: staggerDelay,
64
+ ["--start-angle"]: startAngle,
65
+ ["--orbit-radius"]: `${orbitRadius}px`
66
+ }
67
+ },
68
+ i
69
+ );
70
+ })
71
+ }
72
+ );
73
+ }
74
+ );
75
+ ParticleTrail.displayName = "ParticleTrail";
76
+ exports.ParticleTrail = ParticleTrail;
@@ -0,0 +1,76 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index71.js";
4
+ import { parseDurationMs } from "./index4.js";
5
+ import { cn } from "./index3.js";
6
+ const ParticleTrail = forwardRef(
7
+ ({
8
+ size = 60,
9
+ count = 6,
10
+ color = "#3b82f6",
11
+ speed = "normal",
12
+ respectMotionPreference = true,
13
+ delay = 0,
14
+ minDuration = 0,
15
+ transition,
16
+ className,
17
+ style,
18
+ testId = "particle-trail",
19
+ visible = true,
20
+ ariaLabel = "Loading...",
21
+ ...rest
22
+ }, ref) => {
23
+ const prefersReducedMotion = useReducedMotion();
24
+ const effectiveDuration = getEffectiveDuration(speed, respectMotionPreference, prefersReducedMotion);
25
+ const { shouldRender, opacity, transitionStyle } = useLoaderVisibility(visible, delay, minDuration, transition);
26
+ if (!shouldRender) return null;
27
+ const clampedCount = Math.min(10, Math.max(3, count));
28
+ const orbitRadius = size * 0.35;
29
+ const particleSize = Math.max(3, size * 0.08);
30
+ const durationMs = parseDurationMs(effectiveDuration);
31
+ return /* @__PURE__ */ jsx(
32
+ "div",
33
+ {
34
+ ref,
35
+ "data-testid": testId,
36
+ className: cn("relative inline-flex items-center justify-center", className),
37
+ style: { width: size, height: size, opacity, transition: transitionStyle, ...style },
38
+ role: "status",
39
+ "aria-label": ariaLabel,
40
+ "aria-busy": "true",
41
+ ...rest,
42
+ children: Array.from({ length: clampedCount }, (_, i) => {
43
+ const trailOpacity = 1 - i / clampedCount * 0.85;
44
+ const trailScale = 1 - i / clampedCount * 0.6;
45
+ const startAngle = `${i / clampedCount * 360}deg`;
46
+ const staggerDelay = `-${i / clampedCount * durationMs}ms`;
47
+ return /* @__PURE__ */ jsx(
48
+ "div",
49
+ {
50
+ className: "absolute rounded-full animate-particle-trail",
51
+ style: {
52
+ width: particleSize * trailScale,
53
+ height: particleSize * trailScale,
54
+ backgroundColor: color,
55
+ top: "50%",
56
+ left: "50%",
57
+ marginTop: -(particleSize * trailScale) / 2,
58
+ marginLeft: -(particleSize * trailScale) / 2,
59
+ opacity: trailOpacity,
60
+ animationDuration: effectiveDuration,
61
+ animationDelay: staggerDelay,
62
+ ["--start-angle"]: startAngle,
63
+ ["--orbit-radius"]: `${orbitRadius}px`
64
+ }
65
+ },
66
+ i
67
+ );
68
+ })
69
+ }
70
+ );
71
+ }
72
+ );
73
+ ParticleTrail.displayName = "ParticleTrail";
74
+ export {
75
+ ParticleTrail
76
+ };
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const hooks = require("./index71.cjs");
6
+ const classNames = require("./index3.cjs");
7
+ const ParticleField = react.forwardRef(
8
+ ({
9
+ width = 120,
10
+ height = 120,
11
+ count = 12,
12
+ color = "#3b82f6",
13
+ speed = "normal",
14
+ respectMotionPreference = true,
15
+ delay = 0,
16
+ minDuration = 0,
17
+ transition,
18
+ className,
19
+ style,
20
+ testId = "particle-field",
21
+ visible = true,
22
+ ariaLabel = "Loading...",
23
+ ...rest
24
+ }, ref) => {
25
+ const prefersReducedMotion = hooks.useReducedMotion();
26
+ const effectiveDuration = hooks.getEffectiveDuration(speed, respectMotionPreference, prefersReducedMotion);
27
+ const { shouldRender, opacity, transitionStyle } = hooks.useLoaderVisibility(visible, delay, minDuration, transition);
28
+ if (!shouldRender) return null;
29
+ const clampedCount = Math.min(30, Math.max(5, count));
30
+ const particles = Array.from({ length: clampedCount }, (_, i) => {
31
+ const seed = i * 137.508;
32
+ const x = seed * 7.3 % width;
33
+ const drift = seed * 3.1 % 20 - 10;
34
+ const size = 2 + seed % 4;
35
+ const particleOpacity = 0.4 + seed % 0.6;
36
+ const durationMultiplier = 0.6 + i / clampedCount * 0.8;
37
+ const delayMs = -(i / clampedCount * 3e3);
38
+ return { x, drift, size, particleOpacity, durationMultiplier, delayMs };
39
+ });
40
+ return /* @__PURE__ */ jsxRuntime.jsx(
41
+ "div",
42
+ {
43
+ ref,
44
+ "data-testid": testId,
45
+ className: classNames.cn("relative inline-block overflow-hidden", className),
46
+ style: { width, height, opacity, transition: transitionStyle, ...style },
47
+ role: "status",
48
+ "aria-label": ariaLabel,
49
+ "aria-busy": "true",
50
+ ...rest,
51
+ children: particles.map(({ x, drift, size: pSize, particleOpacity, durationMultiplier, delayMs }, i) => /* @__PURE__ */ jsxRuntime.jsx(
52
+ "div",
53
+ {
54
+ className: "absolute rounded-full animate-particle-field-float",
55
+ style: {
56
+ width: pSize,
57
+ height: pSize,
58
+ backgroundColor: color,
59
+ left: x,
60
+ bottom: 0,
61
+ animationDuration: `calc(${effectiveDuration} * ${durationMultiplier})`,
62
+ animationDelay: `${delayMs}ms`,
63
+ ["--tx-start"]: `${drift}px`,
64
+ ["--tx-end"]: `${drift * 1.5}px`,
65
+ ["--field-height"]: `${height}px`,
66
+ ["--particle-opacity"]: `${particleOpacity}`
67
+ }
68
+ },
69
+ i
70
+ ))
71
+ }
72
+ );
73
+ }
74
+ );
75
+ ParticleField.displayName = "ParticleField";
76
+ exports.ParticleField = ParticleField;
@@ -0,0 +1,76 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index71.js";
4
+ import { cn } from "./index3.js";
5
+ const ParticleField = forwardRef(
6
+ ({
7
+ width = 120,
8
+ height = 120,
9
+ count = 12,
10
+ color = "#3b82f6",
11
+ speed = "normal",
12
+ respectMotionPreference = true,
13
+ delay = 0,
14
+ minDuration = 0,
15
+ transition,
16
+ className,
17
+ style,
18
+ testId = "particle-field",
19
+ visible = true,
20
+ ariaLabel = "Loading...",
21
+ ...rest
22
+ }, ref) => {
23
+ const prefersReducedMotion = useReducedMotion();
24
+ const effectiveDuration = getEffectiveDuration(speed, respectMotionPreference, prefersReducedMotion);
25
+ const { shouldRender, opacity, transitionStyle } = useLoaderVisibility(visible, delay, minDuration, transition);
26
+ if (!shouldRender) return null;
27
+ const clampedCount = Math.min(30, Math.max(5, count));
28
+ const particles = Array.from({ length: clampedCount }, (_, i) => {
29
+ const seed = i * 137.508;
30
+ const x = seed * 7.3 % width;
31
+ const drift = seed * 3.1 % 20 - 10;
32
+ const size = 2 + seed % 4;
33
+ const particleOpacity = 0.4 + seed % 0.6;
34
+ const durationMultiplier = 0.6 + i / clampedCount * 0.8;
35
+ const delayMs = -(i / clampedCount * 3e3);
36
+ return { x, drift, size, particleOpacity, durationMultiplier, delayMs };
37
+ });
38
+ return /* @__PURE__ */ jsx(
39
+ "div",
40
+ {
41
+ ref,
42
+ "data-testid": testId,
43
+ className: cn("relative inline-block overflow-hidden", className),
44
+ style: { width, height, opacity, transition: transitionStyle, ...style },
45
+ role: "status",
46
+ "aria-label": ariaLabel,
47
+ "aria-busy": "true",
48
+ ...rest,
49
+ children: particles.map(({ x, drift, size: pSize, particleOpacity, durationMultiplier, delayMs }, i) => /* @__PURE__ */ jsx(
50
+ "div",
51
+ {
52
+ className: "absolute rounded-full animate-particle-field-float",
53
+ style: {
54
+ width: pSize,
55
+ height: pSize,
56
+ backgroundColor: color,
57
+ left: x,
58
+ bottom: 0,
59
+ animationDuration: `calc(${effectiveDuration} * ${durationMultiplier})`,
60
+ animationDelay: `${delayMs}ms`,
61
+ ["--tx-start"]: `${drift}px`,
62
+ ["--tx-end"]: `${drift * 1.5}px`,
63
+ ["--field-height"]: `${height}px`,
64
+ ["--particle-opacity"]: `${particleOpacity}`
65
+ }
66
+ },
67
+ i
68
+ ))
69
+ }
70
+ );
71
+ }
72
+ );
73
+ ParticleField.displayName = "ParticleField";
74
+ export {
75
+ ParticleField
76
+ };
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const hooks = require("./index71.cjs");
6
+ const classNames = require("./index3.cjs");
7
+ const GLOW_SPREAD = {
8
+ low: 4,
9
+ medium: 8,
10
+ high: 16
11
+ };
12
+ const NeonPulse = react.forwardRef(
13
+ ({
14
+ size = 60,
15
+ color = "#3b82f6",
16
+ glowIntensity = "medium",
17
+ speed = "normal",
18
+ respectMotionPreference = true,
19
+ delay = 0,
20
+ minDuration = 0,
21
+ transition,
22
+ className,
23
+ style,
24
+ testId = "neon-pulse",
25
+ visible = true,
26
+ ariaLabel = "Loading...",
27
+ ...rest
28
+ }, ref) => {
29
+ const prefersReducedMotion = hooks.useReducedMotion();
30
+ const effectiveDuration = hooks.getEffectiveDuration(speed, respectMotionPreference, prefersReducedMotion);
31
+ const { shouldRender, opacity, transitionStyle } = hooks.useLoaderVisibility(visible, delay, minDuration, transition);
32
+ if (!shouldRender) return null;
33
+ const spread = GLOW_SPREAD[glowIntensity];
34
+ return /* @__PURE__ */ jsxRuntime.jsx(
35
+ "div",
36
+ {
37
+ ref,
38
+ "data-testid": testId,
39
+ className: classNames.cn("relative inline-flex items-center justify-center", className),
40
+ style: { width: size, height: size, opacity, transition: transitionStyle, ...style },
41
+ role: "status",
42
+ "aria-label": ariaLabel,
43
+ "aria-busy": "true",
44
+ ...rest,
45
+ children: /* @__PURE__ */ jsxRuntime.jsx(
46
+ "div",
47
+ {
48
+ className: "rounded-full animate-neon-pulse",
49
+ style: {
50
+ width: size * 0.8,
51
+ height: size * 0.8,
52
+ border: `2px solid ${color}`,
53
+ animationDuration: effectiveDuration,
54
+ ["--neon-color"]: color,
55
+ ["--neon-glow-spread"]: `${spread}px`
56
+ }
57
+ }
58
+ )
59
+ }
60
+ );
61
+ }
62
+ );
63
+ NeonPulse.displayName = "NeonPulse";
64
+ exports.NeonPulse = NeonPulse;
@@ -0,0 +1,64 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index71.js";
4
+ import { cn } from "./index3.js";
5
+ const GLOW_SPREAD = {
6
+ low: 4,
7
+ medium: 8,
8
+ high: 16
9
+ };
10
+ const NeonPulse = forwardRef(
11
+ ({
12
+ size = 60,
13
+ color = "#3b82f6",
14
+ glowIntensity = "medium",
15
+ speed = "normal",
16
+ respectMotionPreference = true,
17
+ delay = 0,
18
+ minDuration = 0,
19
+ transition,
20
+ className,
21
+ style,
22
+ testId = "neon-pulse",
23
+ visible = true,
24
+ ariaLabel = "Loading...",
25
+ ...rest
26
+ }, ref) => {
27
+ const prefersReducedMotion = useReducedMotion();
28
+ const effectiveDuration = getEffectiveDuration(speed, respectMotionPreference, prefersReducedMotion);
29
+ const { shouldRender, opacity, transitionStyle } = useLoaderVisibility(visible, delay, minDuration, transition);
30
+ if (!shouldRender) return null;
31
+ const spread = GLOW_SPREAD[glowIntensity];
32
+ return /* @__PURE__ */ jsx(
33
+ "div",
34
+ {
35
+ ref,
36
+ "data-testid": testId,
37
+ className: cn("relative inline-flex items-center justify-center", className),
38
+ style: { width: size, height: size, opacity, transition: transitionStyle, ...style },
39
+ role: "status",
40
+ "aria-label": ariaLabel,
41
+ "aria-busy": "true",
42
+ ...rest,
43
+ children: /* @__PURE__ */ jsx(
44
+ "div",
45
+ {
46
+ className: "rounded-full animate-neon-pulse",
47
+ style: {
48
+ width: size * 0.8,
49
+ height: size * 0.8,
50
+ border: `2px solid ${color}`,
51
+ animationDuration: effectiveDuration,
52
+ ["--neon-color"]: color,
53
+ ["--neon-glow-spread"]: `${spread}px`
54
+ }
55
+ }
56
+ )
57
+ }
58
+ );
59
+ }
60
+ );
61
+ NeonPulse.displayName = "NeonPulse";
62
+ export {
63
+ NeonPulse
64
+ };
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const hooks = require("./index71.cjs");
6
+ const classNames = require("./index3.cjs");
7
+ const NeonSpinner = react.forwardRef(
8
+ ({
9
+ size = 60,
10
+ color = "#a855f7",
11
+ thickness = 4,
12
+ speed = "normal",
13
+ respectMotionPreference = true,
14
+ delay = 0,
15
+ minDuration = 0,
16
+ transition,
17
+ className,
18
+ style,
19
+ testId = "neon-spinner",
20
+ visible = true,
21
+ ariaLabel = "Loading...",
22
+ ...rest
23
+ }, ref) => {
24
+ const prefersReducedMotion = hooks.useReducedMotion();
25
+ const effectiveDuration = hooks.getEffectiveDuration(speed, respectMotionPreference, prefersReducedMotion);
26
+ const { shouldRender, opacity, transitionStyle } = hooks.useLoaderVisibility(visible, delay, minDuration, transition);
27
+ if (!shouldRender) return null;
28
+ const glowSize = thickness * 3;
29
+ return /* @__PURE__ */ jsxRuntime.jsx(
30
+ "div",
31
+ {
32
+ ref,
33
+ "data-testid": testId,
34
+ className: classNames.cn("relative inline-flex items-center justify-center", className),
35
+ style: { width: size, height: size, opacity, transition: transitionStyle, ...style },
36
+ role: "status",
37
+ "aria-label": ariaLabel,
38
+ "aria-busy": "true",
39
+ ...rest,
40
+ children: /* @__PURE__ */ jsxRuntime.jsx(
41
+ "div",
42
+ {
43
+ className: "rounded-full animate-neon-spinner",
44
+ style: {
45
+ width: size,
46
+ height: size,
47
+ border: `${thickness}px solid transparent`,
48
+ borderTopColor: color,
49
+ borderRightColor: color,
50
+ boxShadow: `0 0 ${glowSize}px ${color}, inset 0 0 ${glowSize}px transparent`,
51
+ animationDuration: effectiveDuration
52
+ }
53
+ }
54
+ )
55
+ }
56
+ );
57
+ }
58
+ );
59
+ NeonSpinner.displayName = "NeonSpinner";
60
+ exports.NeonSpinner = NeonSpinner;
@@ -0,0 +1,60 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index71.js";
4
+ import { cn } from "./index3.js";
5
+ const NeonSpinner = forwardRef(
6
+ ({
7
+ size = 60,
8
+ color = "#a855f7",
9
+ thickness = 4,
10
+ speed = "normal",
11
+ respectMotionPreference = true,
12
+ delay = 0,
13
+ minDuration = 0,
14
+ transition,
15
+ className,
16
+ style,
17
+ testId = "neon-spinner",
18
+ visible = true,
19
+ ariaLabel = "Loading...",
20
+ ...rest
21
+ }, ref) => {
22
+ const prefersReducedMotion = useReducedMotion();
23
+ const effectiveDuration = getEffectiveDuration(speed, respectMotionPreference, prefersReducedMotion);
24
+ const { shouldRender, opacity, transitionStyle } = useLoaderVisibility(visible, delay, minDuration, transition);
25
+ if (!shouldRender) return null;
26
+ const glowSize = thickness * 3;
27
+ return /* @__PURE__ */ jsx(
28
+ "div",
29
+ {
30
+ ref,
31
+ "data-testid": testId,
32
+ className: cn("relative inline-flex items-center justify-center", className),
33
+ style: { width: size, height: size, opacity, transition: transitionStyle, ...style },
34
+ role: "status",
35
+ "aria-label": ariaLabel,
36
+ "aria-busy": "true",
37
+ ...rest,
38
+ children: /* @__PURE__ */ jsx(
39
+ "div",
40
+ {
41
+ className: "rounded-full animate-neon-spinner",
42
+ style: {
43
+ width: size,
44
+ height: size,
45
+ border: `${thickness}px solid transparent`,
46
+ borderTopColor: color,
47
+ borderRightColor: color,
48
+ boxShadow: `0 0 ${glowSize}px ${color}, inset 0 0 ${glowSize}px transparent`,
49
+ animationDuration: effectiveDuration
50
+ }
51
+ }
52
+ )
53
+ }
54
+ );
55
+ }
56
+ );
57
+ NeonSpinner.displayName = "NeonSpinner";
58
+ export {
59
+ NeonSpinner
60
+ };
package/dist/index7.cjs CHANGED
@@ -2,7 +2,7 @@
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 colors = require("./index4.cjs");
7
7
  const classNames = require("./index3.cjs");
8
8
  const Skeleton = react.forwardRef(
package/dist/index7.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { forwardRef } from "react";
3
- import { useLoaderVisibility } from "./index56.js";
3
+ import { useLoaderVisibility } from "./index71.js";
4
4
  import { normalizeSize } from "./index4.js";
5
5
  import { cn } from "./index3.js";
6
6
  const Skeleton = forwardRef(
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("react");
5
+ const hooks = require("./index71.cjs");
6
+ const classNames = require("./index3.cjs");
7
+ const NeonText = react.forwardRef(
8
+ ({
9
+ text = "LOADING",
10
+ color = "#22d3ee",
11
+ fontSize = 18,
12
+ speed = "normal",
13
+ respectMotionPreference = true,
14
+ delay = 0,
15
+ minDuration = 0,
16
+ transition,
17
+ className,
18
+ style,
19
+ testId = "neon-text",
20
+ visible = true,
21
+ ariaLabel,
22
+ ...rest
23
+ }, ref) => {
24
+ const prefersReducedMotion = hooks.useReducedMotion();
25
+ const effectiveDuration = hooks.getEffectiveDuration(speed, respectMotionPreference, prefersReducedMotion);
26
+ const { shouldRender, opacity, transitionStyle } = hooks.useLoaderVisibility(visible, delay, minDuration, transition);
27
+ if (!shouldRender) return null;
28
+ return /* @__PURE__ */ jsxRuntime.jsx(
29
+ "div",
30
+ {
31
+ ref,
32
+ "data-testid": testId,
33
+ className: classNames.cn("inline-flex items-center justify-center", className),
34
+ style: { opacity, transition: transitionStyle, ...style },
35
+ role: "status",
36
+ "aria-label": ariaLabel ?? text,
37
+ "aria-busy": "true",
38
+ ...rest,
39
+ children: /* @__PURE__ */ jsxRuntime.jsx(
40
+ "span",
41
+ {
42
+ className: "animate-neon-text-glow font-bold tracking-widest uppercase",
43
+ style: {
44
+ color,
45
+ fontSize,
46
+ animationDuration: effectiveDuration,
47
+ ["--neon-color"]: color
48
+ },
49
+ children: text
50
+ }
51
+ )
52
+ }
53
+ );
54
+ }
55
+ );
56
+ NeonText.displayName = "NeonText";
57
+ exports.NeonText = NeonText;
@@ -0,0 +1,57 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index71.js";
4
+ import { cn } from "./index3.js";
5
+ const NeonText = forwardRef(
6
+ ({
7
+ text = "LOADING",
8
+ color = "#22d3ee",
9
+ fontSize = 18,
10
+ speed = "normal",
11
+ respectMotionPreference = true,
12
+ delay = 0,
13
+ minDuration = 0,
14
+ transition,
15
+ className,
16
+ style,
17
+ testId = "neon-text",
18
+ visible = true,
19
+ ariaLabel,
20
+ ...rest
21
+ }, ref) => {
22
+ const prefersReducedMotion = useReducedMotion();
23
+ const effectiveDuration = getEffectiveDuration(speed, respectMotionPreference, prefersReducedMotion);
24
+ const { shouldRender, opacity, transitionStyle } = useLoaderVisibility(visible, delay, minDuration, transition);
25
+ if (!shouldRender) return null;
26
+ return /* @__PURE__ */ jsx(
27
+ "div",
28
+ {
29
+ ref,
30
+ "data-testid": testId,
31
+ className: cn("inline-flex items-center justify-center", className),
32
+ style: { opacity, transition: transitionStyle, ...style },
33
+ role: "status",
34
+ "aria-label": ariaLabel ?? text,
35
+ "aria-busy": "true",
36
+ ...rest,
37
+ children: /* @__PURE__ */ jsx(
38
+ "span",
39
+ {
40
+ className: "animate-neon-text-glow font-bold tracking-widest uppercase",
41
+ style: {
42
+ color,
43
+ fontSize,
44
+ animationDuration: effectiveDuration,
45
+ ["--neon-color"]: color
46
+ },
47
+ children: text
48
+ }
49
+ )
50
+ }
51
+ );
52
+ }
53
+ );
54
+ NeonText.displayName = "NeonText";
55
+ export {
56
+ NeonText
57
+ };