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/index40.js CHANGED
@@ -1,18 +1,16 @@
1
- import { jsxs, jsx } 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 { cn } from "./index3.js";
5
- const ShimmerButton = forwardRef(
5
+ const ShimmerBox = forwardRef(
6
6
  ({
7
- width = 120,
8
- height = 40,
7
+ width = 200,
8
+ height,
9
9
  borderRadius = 8,
10
10
  baseColor = "#e5e7eb",
11
11
  highlightColor = "#f3f4f6",
12
12
  direction = "left-to-right",
13
- variant = "solid",
14
- showIcon = false,
15
- iconPosition = "left",
13
+ aspectRatio,
16
14
  speed = "normal",
17
15
  respectMotionPreference = true,
18
16
  delay = 0,
@@ -20,9 +18,9 @@ const ShimmerButton = forwardRef(
20
18
  transition,
21
19
  className,
22
20
  style,
23
- testId = "shimmer-button",
21
+ testId = "shimmer-box",
24
22
  visible = true,
25
- ariaLabel = "Loading button...",
23
+ ariaLabel = "Loading...",
26
24
  ...rest
27
25
  }, ref) => {
28
26
  const prefersReducedMotion = useReducedMotion();
@@ -34,48 +32,42 @@ const ShimmerButton = forwardRef(
34
32
  transition
35
33
  );
36
34
  if (!shouldRender) return null;
37
- const getAnimationName = () => {
35
+ const getGradientDirection = () => {
38
36
  switch (direction) {
39
37
  case "right-to-left":
40
- return "shimmer-rtl";
38
+ return "to left";
41
39
  case "top-to-bottom":
42
- return "shimmer-ttb";
40
+ return "to bottom";
43
41
  case "bottom-to-top":
44
- return "shimmer-btt";
42
+ return "to top";
45
43
  default:
46
- return "shimmer-ltr";
44
+ return "to right";
47
45
  }
48
46
  };
49
- const getGradientDirection = () => {
47
+ const getAnimationName = () => {
50
48
  switch (direction) {
51
49
  case "right-to-left":
52
- return "to left";
50
+ return "shimmer-rtl";
53
51
  case "top-to-bottom":
54
- return "to bottom";
52
+ return "shimmer-ttb";
55
53
  case "bottom-to-top":
56
- return "to top";
54
+ return "shimmer-btt";
57
55
  default:
58
- return "to right";
56
+ return "shimmer-ltr";
59
57
  }
60
58
  };
61
- const normalizedHeight = typeof height === "number" ? height : 40;
62
- const iconSize = Math.floor(normalizedHeight * 0.5);
63
- return /* @__PURE__ */ jsxs(
59
+ return /* @__PURE__ */ jsx(
64
60
  "div",
65
61
  {
66
62
  ref,
67
63
  "data-testid": testId,
68
- className: cn(
69
- "relative overflow-hidden inline-flex items-center justify-center gap-2",
70
- className
71
- ),
64
+ className: cn("relative overflow-hidden", className),
72
65
  style: {
73
66
  width: typeof width === "number" ? `${width}px` : width,
74
- height: typeof height === "number" ? `${height}px` : height,
67
+ height: aspectRatio ? void 0 : typeof height === "number" ? `${height}px` : height || "100px",
68
+ aspectRatio,
75
69
  borderRadius: typeof borderRadius === "number" ? `${borderRadius}px` : borderRadius,
76
- backgroundColor: variant === "solid" ? baseColor : "transparent",
77
- border: variant === "outline" ? `2px solid ${baseColor}` : "none",
78
- padding: "0 16px",
70
+ backgroundColor: baseColor,
79
71
  opacity,
80
72
  transition: transitionStyle,
81
73
  ...style
@@ -84,86 +76,21 @@ const ShimmerButton = forwardRef(
84
76
  "aria-label": ariaLabel,
85
77
  "aria-busy": "true",
86
78
  ...rest,
87
- children: [
88
- showIcon && iconPosition === "left" && /* @__PURE__ */ jsx(
89
- "div",
90
- {
91
- className: "relative overflow-hidden rounded-full flex-shrink-0",
92
- style: {
93
- width: iconSize,
94
- height: iconSize,
95
- backgroundColor: variant === "solid" ? highlightColor : baseColor
96
- },
97
- children: /* @__PURE__ */ jsx(
98
- "div",
99
- {
100
- className: "absolute inset-0",
101
- style: {
102
- background: `linear-gradient(${getGradientDirection()}, transparent 0%, ${variant === "solid" ? baseColor : highlightColor} 50%, transparent 100%)`,
103
- animation: `${getAnimationName()} ${effectiveDuration} infinite`
104
- }
105
- }
106
- )
107
- }
108
- ),
109
- /* @__PURE__ */ jsx(
110
- "div",
111
- {
112
- className: "relative overflow-hidden flex-1",
113
- style: {
114
- height: Math.floor(normalizedHeight * 0.35),
115
- borderRadius: 4,
116
- backgroundColor: variant === "solid" ? highlightColor : baseColor
117
- },
118
- children: /* @__PURE__ */ jsx(
119
- "div",
120
- {
121
- className: "absolute inset-0",
122
- style: {
123
- background: `linear-gradient(${getGradientDirection()}, transparent 0%, ${variant === "solid" ? baseColor : highlightColor} 50%, transparent 100%)`,
124
- animation: `${getAnimationName()} ${effectiveDuration} infinite`
125
- }
126
- }
127
- )
128
- }
129
- ),
130
- showIcon && iconPosition === "right" && /* @__PURE__ */ jsx(
131
- "div",
132
- {
133
- className: "relative overflow-hidden rounded-full flex-shrink-0",
134
- style: {
135
- width: iconSize,
136
- height: iconSize,
137
- backgroundColor: variant === "solid" ? highlightColor : baseColor
138
- },
139
- children: /* @__PURE__ */ jsx(
140
- "div",
141
- {
142
- className: "absolute inset-0",
143
- style: {
144
- background: `linear-gradient(${getGradientDirection()}, transparent 0%, ${variant === "solid" ? baseColor : highlightColor} 50%, transparent 100%)`,
145
- animation: `${getAnimationName()} ${effectiveDuration} infinite`
146
- }
147
- }
148
- )
149
- }
150
- ),
151
- variant === "solid" && /* @__PURE__ */ jsx(
152
- "div",
153
- {
154
- className: "absolute inset-0 pointer-events-none",
155
- style: {
156
- background: `linear-gradient(${getGradientDirection()}, transparent 0%, rgba(255,255,255,0.3) 50%, transparent 100%)`,
157
- animation: `${getAnimationName()} ${effectiveDuration} infinite`
158
- }
79
+ children: /* @__PURE__ */ jsx(
80
+ "div",
81
+ {
82
+ className: "absolute inset-0",
83
+ style: {
84
+ background: `linear-gradient(${getGradientDirection()}, transparent 0%, ${highlightColor} 50%, transparent 100%)`,
85
+ animation: `${getAnimationName()} ${effectiveDuration} infinite`
159
86
  }
160
- )
161
- ]
87
+ }
88
+ )
162
89
  }
163
90
  );
164
91
  }
165
92
  );
166
- ShimmerButton.displayName = "ShimmerButton";
93
+ ShimmerBox.displayName = "ShimmerBox";
167
94
  export {
168
- ShimmerButton
95
+ ShimmerBox
169
96
  };
package/dist/index41.cjs CHANGED
@@ -2,29 +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");
6
- const colors = require("./index4.cjs");
5
+ const hooks = require("./index71.cjs");
7
6
  const classNames = require("./index3.cjs");
8
- const OrbitDots = react.forwardRef(
7
+ const ShimmerText = react.forwardRef(
9
8
  ({
10
- size = "md",
11
- color = "#3b82f6",
12
- secondaryColor,
13
- dotCount = 4,
14
- dotSize = 8,
15
- orbitRadius = 0.4,
16
- stagger = true,
9
+ width = "100%",
10
+ height = 16,
11
+ borderRadius = 4,
12
+ baseColor = "#e5e7eb",
13
+ highlightColor = "#f3f4f6",
14
+ direction = "left-to-right",
15
+ lines = 3,
16
+ lineGap = 12,
17
+ lastLineWidth = "75%",
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 = "orbit-dots",
25
+ testId = "shimmer-text",
26
26
  visible = true,
27
- ariaLabel = "Loading...",
27
+ ariaLabel = "Loading text...",
28
28
  ...rest
29
29
  }, ref) => {
30
30
  const prefersReducedMotion = hooks.useReducedMotion();
@@ -36,18 +36,39 @@ const OrbitDots = 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 radius = sizeNum * orbitRadius;
39
+ const getGradientDirection = () => {
40
+ switch (direction) {
41
+ case "right-to-left":
42
+ return "to left";
43
+ case "top-to-bottom":
44
+ return "to bottom";
45
+ case "bottom-to-top":
46
+ return "to top";
47
+ default:
48
+ return "to right";
49
+ }
50
+ };
51
+ const getAnimationName = () => {
52
+ switch (direction) {
53
+ case "right-to-left":
54
+ return "shimmer-rtl";
55
+ case "top-to-bottom":
56
+ return "shimmer-ttb";
57
+ case "bottom-to-top":
58
+ return "shimmer-btt";
59
+ default:
60
+ return "shimmer-ltr";
61
+ }
62
+ };
63
+ const normalizedGap = typeof lineGap === "number" ? `${lineGap}px` : lineGap;
42
64
  return /* @__PURE__ */ jsxRuntime.jsx(
43
65
  "div",
44
66
  {
45
67
  ref,
46
68
  "data-testid": testId,
47
- className: classNames.cn("inline-flex items-center justify-center", className),
69
+ className: classNames.cn("flex flex-col", className),
48
70
  style: {
49
- width: normalizedSize,
50
- height: normalizedSize,
71
+ gap: normalizedGap,
51
72
  opacity,
52
73
  transition: transitionStyle,
53
74
  ...style
@@ -56,42 +77,37 @@ const OrbitDots = react.forwardRef(
56
77
  "aria-label": ariaLabel,
57
78
  "aria-busy": "true",
58
79
  ...rest,
59
- children: /* @__PURE__ */ jsxRuntime.jsx(
60
- "div",
61
- {
62
- className: "relative w-full h-full",
63
- style: {
64
- animation: `orbit-rotate ${effectiveDuration} linear infinite`,
65
- animationDirection: reverse ? "reverse" : "normal"
66
- },
67
- children: Array.from({ length: dotCount }, (_, index) => {
68
- const angle = 360 / dotCount * index;
69
- const dotColor = secondaryColor && index % 2 === 1 ? secondaryColor : color;
70
- const staggerDelay = stagger ? `${index / dotCount * 300}ms` : "0ms";
71
- return /* @__PURE__ */ jsxRuntime.jsx(
80
+ children: Array.from({ length: lines }, (_, index) => {
81
+ const isLastLine = index === lines - 1;
82
+ const lineWidth = isLastLine && lines > 1 ? lastLineWidth : width;
83
+ return /* @__PURE__ */ jsxRuntime.jsx(
84
+ "div",
85
+ {
86
+ className: "relative overflow-hidden",
87
+ style: {
88
+ width: typeof lineWidth === "number" ? `${lineWidth}px` : lineWidth,
89
+ height: typeof height === "number" ? `${height}px` : height,
90
+ borderRadius: typeof borderRadius === "number" ? `${borderRadius}px` : borderRadius,
91
+ backgroundColor: baseColor
92
+ },
93
+ children: /* @__PURE__ */ jsxRuntime.jsx(
72
94
  "div",
73
95
  {
74
- className: "absolute rounded-full",
96
+ className: "absolute inset-0",
75
97
  style: {
76
- width: dotSize,
77
- height: dotSize,
78
- backgroundColor: dotColor,
79
- left: "50%",
80
- top: "50%",
81
- transform: `translate(-50%, -50%) rotate(${angle}deg) translateX(${radius}px)`,
82
- opacity: stagger ? void 0 : 1,
83
- animation: stagger ? `orbit-dot-pulse 1s ease-in-out infinite` : void 0,
84
- animationDelay: staggerDelay
98
+ background: `linear-gradient(${getGradientDirection()}, transparent 0%, ${highlightColor} 50%, transparent 100%)`,
99
+ animation: `${getAnimationName()} ${effectiveDuration} infinite`,
100
+ animationDelay: `${index * 100}ms`
85
101
  }
86
- },
87
- index
88
- );
89
- })
90
- }
91
- )
102
+ }
103
+ )
104
+ },
105
+ index
106
+ );
107
+ })
92
108
  }
93
109
  );
94
110
  }
95
111
  );
96
- OrbitDots.displayName = "OrbitDots";
97
- exports.OrbitDots = OrbitDots;
112
+ ShimmerText.displayName = "ShimmerText";
113
+ exports.ShimmerText = ShimmerText;
package/dist/index41.js CHANGED
@@ -1,28 +1,28 @@
1
1
  import { jsx } 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 OrbitDots = forwardRef(
5
+ const ShimmerText = forwardRef(
7
6
  ({
8
- size = "md",
9
- color = "#3b82f6",
10
- secondaryColor,
11
- dotCount = 4,
12
- dotSize = 8,
13
- orbitRadius = 0.4,
14
- stagger = true,
7
+ width = "100%",
8
+ height = 16,
9
+ borderRadius = 4,
10
+ baseColor = "#e5e7eb",
11
+ highlightColor = "#f3f4f6",
12
+ direction = "left-to-right",
13
+ lines = 3,
14
+ lineGap = 12,
15
+ lastLineWidth = "75%",
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 = "orbit-dots",
23
+ testId = "shimmer-text",
24
24
  visible = true,
25
- ariaLabel = "Loading...",
25
+ ariaLabel = "Loading text...",
26
26
  ...rest
27
27
  }, ref) => {
28
28
  const prefersReducedMotion = useReducedMotion();
@@ -34,18 +34,39 @@ const OrbitDots = 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 radius = sizeNum * orbitRadius;
37
+ const getGradientDirection = () => {
38
+ switch (direction) {
39
+ case "right-to-left":
40
+ return "to left";
41
+ case "top-to-bottom":
42
+ return "to bottom";
43
+ case "bottom-to-top":
44
+ return "to top";
45
+ default:
46
+ return "to right";
47
+ }
48
+ };
49
+ const getAnimationName = () => {
50
+ switch (direction) {
51
+ case "right-to-left":
52
+ return "shimmer-rtl";
53
+ case "top-to-bottom":
54
+ return "shimmer-ttb";
55
+ case "bottom-to-top":
56
+ return "shimmer-btt";
57
+ default:
58
+ return "shimmer-ltr";
59
+ }
60
+ };
61
+ const normalizedGap = typeof lineGap === "number" ? `${lineGap}px` : lineGap;
40
62
  return /* @__PURE__ */ jsx(
41
63
  "div",
42
64
  {
43
65
  ref,
44
66
  "data-testid": testId,
45
- className: cn("inline-flex items-center justify-center", className),
67
+ className: cn("flex flex-col", className),
46
68
  style: {
47
- width: normalizedSize,
48
- height: normalizedSize,
69
+ gap: normalizedGap,
49
70
  opacity,
50
71
  transition: transitionStyle,
51
72
  ...style
@@ -54,44 +75,39 @@ const OrbitDots = forwardRef(
54
75
  "aria-label": ariaLabel,
55
76
  "aria-busy": "true",
56
77
  ...rest,
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(
78
+ children: Array.from({ length: lines }, (_, index) => {
79
+ const isLastLine = index === lines - 1;
80
+ const lineWidth = isLastLine && lines > 1 ? lastLineWidth : width;
81
+ return /* @__PURE__ */ jsx(
82
+ "div",
83
+ {
84
+ className: "relative overflow-hidden",
85
+ style: {
86
+ width: typeof lineWidth === "number" ? `${lineWidth}px` : lineWidth,
87
+ height: typeof height === "number" ? `${height}px` : height,
88
+ borderRadius: typeof borderRadius === "number" ? `${borderRadius}px` : borderRadius,
89
+ backgroundColor: baseColor
90
+ },
91
+ children: /* @__PURE__ */ jsx(
70
92
  "div",
71
93
  {
72
- className: "absolute rounded-full",
94
+ className: "absolute inset-0",
73
95
  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
96
+ background: `linear-gradient(${getGradientDirection()}, transparent 0%, ${highlightColor} 50%, transparent 100%)`,
97
+ animation: `${getAnimationName()} ${effectiveDuration} infinite`,
98
+ animationDelay: `${index * 100}ms`
83
99
  }
84
- },
85
- index
86
- );
87
- })
88
- }
89
- )
100
+ }
101
+ )
102
+ },
103
+ index
104
+ );
105
+ })
90
106
  }
91
107
  );
92
108
  }
93
109
  );
94
- OrbitDots.displayName = "OrbitDots";
110
+ ShimmerText.displayName = "ShimmerText";
95
111
  export {
96
- OrbitDots
112
+ ShimmerText
97
113
  };