premium-react-loaders 3.0.0 → 3.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 (153) hide show
  1. package/README.md +45 -3
  2. package/dist/components/3d/CubeSpinner.d.ts +21 -0
  3. package/dist/components/3d/CubeSpinner.d.ts.map +1 -0
  4. package/dist/components/3d/FlipCard.d.ts +21 -0
  5. package/dist/components/3d/FlipCard.d.ts.map +1 -0
  6. package/dist/components/3d/Helix.d.ts +23 -0
  7. package/dist/components/3d/Helix.d.ts.map +1 -0
  8. package/dist/components/3d/PerspectiveRing.d.ts +21 -0
  9. package/dist/components/3d/PerspectiveRing.d.ts.map +1 -0
  10. package/dist/components/3d/PlaneRotate.d.ts +21 -0
  11. package/dist/components/3d/PlaneRotate.d.ts.map +1 -0
  12. package/dist/components/3d/index.d.ts +6 -0
  13. package/dist/components/3d/index.d.ts.map +1 -0
  14. package/dist/components/accessibility/LiveRegion.d.ts +34 -0
  15. package/dist/components/accessibility/LiveRegion.d.ts.map +1 -0
  16. package/dist/components/accessibility/index.d.ts +2 -0
  17. package/dist/components/accessibility/index.d.ts.map +1 -0
  18. package/dist/components/index.d.ts +3 -0
  19. package/dist/components/index.d.ts.map +1 -1
  20. package/dist/components/skeleton/DataTableSkeleton.d.ts +25 -0
  21. package/dist/components/skeleton/DataTableSkeleton.d.ts.map +1 -0
  22. package/dist/components/skeleton/SmartSkeleton.d.ts +23 -0
  23. package/dist/components/skeleton/SmartSkeleton.d.ts.map +1 -0
  24. package/dist/components/skeleton/index.d.ts +2 -0
  25. package/dist/components/skeleton/index.d.ts.map +1 -1
  26. package/dist/components/smart/FormFieldLoader.d.ts +22 -0
  27. package/dist/components/smart/FormFieldLoader.d.ts.map +1 -0
  28. package/dist/components/smart/index.d.ts +2 -0
  29. package/dist/components/smart/index.d.ts.map +1 -0
  30. package/dist/hooks/index.d.ts +6 -0
  31. package/dist/hooks/index.d.ts.map +1 -1
  32. package/dist/hooks/useLoadingAnalytics.d.ts +101 -0
  33. package/dist/hooks/useLoadingAnalytics.d.ts.map +1 -0
  34. package/dist/hooks/useLoadingOrchestrator.d.ts +104 -0
  35. package/dist/hooks/useLoadingOrchestrator.d.ts.map +1 -0
  36. package/dist/hooks/useSmartLoader.d.ts +98 -0
  37. package/dist/hooks/useSmartLoader.d.ts.map +1 -0
  38. package/dist/index.cjs +49 -31
  39. package/dist/index.js +49 -31
  40. package/dist/index10.cjs +1 -1
  41. package/dist/index10.js +1 -1
  42. package/dist/index11.cjs +1 -1
  43. package/dist/index11.js +1 -1
  44. package/dist/index12.cjs +1 -1
  45. package/dist/index12.js +1 -1
  46. package/dist/index13.cjs +1 -1
  47. package/dist/index13.js +1 -1
  48. package/dist/index14.cjs +1 -1
  49. package/dist/index14.js +1 -1
  50. package/dist/index15.cjs +1 -1
  51. package/dist/index15.js +1 -1
  52. package/dist/index16.cjs +131 -66
  53. package/dist/index16.js +132 -67
  54. package/dist/index17.cjs +245 -30
  55. package/dist/index17.js +246 -31
  56. package/dist/index18.cjs +24 -36
  57. package/dist/index18.js +24 -36
  58. package/dist/index19.cjs +19 -21
  59. package/dist/index19.js +19 -21
  60. package/dist/index20.cjs +25 -20
  61. package/dist/index20.js +25 -20
  62. package/dist/index21.cjs +22 -32
  63. package/dist/index21.js +22 -32
  64. package/dist/index22.cjs +26 -35
  65. package/dist/index22.js +28 -37
  66. package/dist/index23.cjs +40 -76
  67. package/dist/index23.js +42 -78
  68. package/dist/index24.cjs +53 -102
  69. package/dist/index24.js +54 -103
  70. package/dist/index25.cjs +46 -80
  71. package/dist/index25.js +47 -81
  72. package/dist/index26.cjs +105 -103
  73. package/dist/index26.js +107 -105
  74. package/dist/index27.cjs +108 -27
  75. package/dist/index27.js +111 -30
  76. package/dist/index28.cjs +104 -36
  77. package/dist/index28.js +106 -38
  78. package/dist/index29.cjs +22 -30
  79. package/dist/index29.js +23 -31
  80. package/dist/index30.cjs +30 -32
  81. package/dist/index30.js +31 -33
  82. package/dist/index31.cjs +49 -52
  83. package/dist/index31.js +50 -53
  84. package/dist/index32.cjs +37 -108
  85. package/dist/index32.js +38 -109
  86. package/dist/index33.cjs +54 -72
  87. package/dist/index33.js +55 -73
  88. package/dist/index34.cjs +112 -80
  89. package/dist/index34.js +112 -80
  90. package/dist/index35.cjs +78 -145
  91. package/dist/index35.js +80 -147
  92. package/dist/index36.cjs +78 -57
  93. package/dist/index36.js +79 -58
  94. package/dist/index37.cjs +138 -84
  95. package/dist/index37.js +140 -86
  96. package/dist/index38.cjs +33 -106
  97. package/dist/index38.js +34 -107
  98. package/dist/index39.cjs +66 -50
  99. package/dist/index39.js +66 -50
  100. package/dist/index40.cjs +123 -44
  101. package/dist/index40.js +124 -45
  102. package/dist/index41.cjs +43 -85
  103. package/dist/index41.js +44 -86
  104. package/dist/index42.cjs +35 -27
  105. package/dist/index42.js +35 -27
  106. package/dist/index43.cjs +87 -58
  107. package/dist/index43.js +87 -58
  108. package/dist/index44.cjs +35 -88
  109. package/dist/index44.js +36 -89
  110. package/dist/index45.cjs +62 -58
  111. package/dist/index45.js +63 -59
  112. package/dist/index46.cjs +87 -110
  113. package/dist/index46.js +88 -111
  114. package/dist/index47.cjs +101 -120
  115. package/dist/index47.js +102 -121
  116. package/dist/index48.cjs +158 -0
  117. package/dist/index48.js +158 -0
  118. package/dist/index49.cjs +167 -0
  119. package/dist/index49.js +167 -0
  120. package/dist/index50.cjs +110 -0
  121. package/dist/index50.js +110 -0
  122. package/dist/index51.cjs +112 -0
  123. package/dist/index51.js +112 -0
  124. package/dist/index52.cjs +144 -0
  125. package/dist/index52.js +144 -0
  126. package/dist/index53.cjs +112 -0
  127. package/dist/index53.js +112 -0
  128. package/dist/index54.cjs +189 -0
  129. package/dist/index54.js +189 -0
  130. package/dist/index55.cjs +53 -0
  131. package/dist/index55.js +53 -0
  132. package/dist/index56.cjs +125 -0
  133. package/dist/index56.js +125 -0
  134. package/dist/index7.cjs +1 -1
  135. package/dist/index7.js +1 -1
  136. package/dist/index8.cjs +1 -1
  137. package/dist/index8.js +1 -1
  138. package/dist/index9.cjs +1 -1
  139. package/dist/index9.js +1 -1
  140. package/dist/premium-react-loaders.css +140 -0
  141. package/dist/types/3d.d.ts +85 -0
  142. package/dist/types/3d.d.ts.map +1 -0
  143. package/dist/types/accessibility.d.ts +35 -0
  144. package/dist/types/accessibility.d.ts.map +1 -0
  145. package/dist/types/index.d.ts +3 -0
  146. package/dist/types/index.d.ts.map +1 -1
  147. package/dist/types/smart.d.ts +63 -0
  148. package/dist/types/smart.d.ts.map +1 -0
  149. package/dist/utils/accessibility.d.ts +67 -0
  150. package/dist/utils/accessibility.d.ts.map +1 -0
  151. package/dist/utils/index.d.ts +1 -0
  152. package/dist/utils/index.d.ts.map +1 -1
  153. package/package.json +1 -1
package/dist/index17.js CHANGED
@@ -1,29 +1,35 @@
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 "./index47.js";
3
+ import { Skeleton } from "./index7.js";
4
+ import { useLoaderVisibility } from "./index56.js";
4
5
  import { cn } from "./index3.js";
5
- import { normalizeSize } from "./index4.js";
6
- const SpinnerRing = forwardRef(
6
+ const DataTableSkeleton = forwardRef(
7
7
  ({
8
- size = "md",
9
- color = "#3b82f6",
10
- secondaryColor = "rgba(0, 0, 0, 0.1)",
11
- thickness = 4,
12
- speed = "normal",
13
- reverse = false,
14
- respectMotionPreference = true,
8
+ rows = 5,
9
+ columns = 4,
10
+ showHeader = true,
11
+ showSortIndicators = false,
12
+ showFilters = false,
13
+ showPagination = false,
14
+ showSelection = false,
15
+ showActions = false,
16
+ columnWidths,
17
+ rowHeight = 48,
18
+ striped = false,
19
+ width = "100%",
20
+ animate = true,
21
+ baseColor,
22
+ highlightColor,
15
23
  delay = 0,
16
24
  minDuration = 0,
17
25
  transition,
18
26
  className,
19
27
  style,
20
- testId = "spinner-ring",
28
+ testId = "data-table-skeleton",
21
29
  visible = true,
22
- ariaLabel = "Loading...",
30
+ ariaLabel = "Loading table...",
23
31
  ...rest
24
32
  }, ref) => {
25
- const prefersReducedMotion = useReducedMotion();
26
- const effectiveDuration = getEffectiveDuration(speed, respectMotionPreference, prefersReducedMotion);
27
33
  const { shouldRender, opacity, transitionStyle } = useLoaderVisibility(
28
34
  visible,
29
35
  delay,
@@ -31,14 +37,22 @@ const SpinnerRing = forwardRef(
31
37
  transition
32
38
  );
33
39
  if (!shouldRender) return null;
40
+ const getColumnWidth = (index) => {
41
+ if (columnWidths && columnWidths[index]) {
42
+ const width2 = columnWidths[index];
43
+ return typeof width2 === "number" ? `${width2}px` : width2 === "auto" ? "auto" : width2;
44
+ }
45
+ return "auto";
46
+ };
34
47
  return /* @__PURE__ */ jsx(
35
48
  "div",
36
49
  {
37
50
  ref,
38
51
  "data-testid": testId,
39
- className: cn("inline-flex items-center justify-center", className),
52
+ className: cn("w-full", className),
40
53
  style: {
41
54
  ...style,
55
+ width,
42
56
  opacity,
43
57
  transition: transitionStyle
44
58
  },
@@ -46,25 +60,226 @@ const SpinnerRing = forwardRef(
46
60
  "aria-label": ariaLabel,
47
61
  "aria-busy": "true",
48
62
  ...rest,
49
- children: /* @__PURE__ */ jsx(
50
- "div",
51
- {
52
- className: "rounded-full",
53
- style: {
54
- width: normalizeSize(size),
55
- height: normalizeSize(size),
56
- border: `${thickness}px solid ${secondaryColor}`,
57
- borderTopColor: color,
58
- animation: `spinner-rotate ${effectiveDuration} linear infinite`,
59
- animationDirection: reverse ? "reverse" : "normal"
63
+ children: /* @__PURE__ */ jsxs("div", { className: "border border-gray-200 rounded-lg overflow-hidden", children: [
64
+ showHeader && /* @__PURE__ */ jsx(
65
+ "div",
66
+ {
67
+ className: "border-b border-gray-200",
68
+ style: {
69
+ backgroundColor: baseColor || "var(--skeleton-base, #f3f4f6)",
70
+ padding: "12px"
71
+ },
72
+ children: /* @__PURE__ */ jsxs(
73
+ "div",
74
+ {
75
+ className: "grid gap-4",
76
+ style: {
77
+ gridTemplateColumns: [
78
+ showSelection && "40px",
79
+ ...Array.from({ length: columns }, (_, i) => getColumnWidth(i)),
80
+ showActions && "80px"
81
+ ].filter(Boolean).join(" ")
82
+ },
83
+ children: [
84
+ showSelection && /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx(
85
+ Skeleton,
86
+ {
87
+ width: 18,
88
+ height: 18,
89
+ borderRadius: 3,
90
+ animate,
91
+ baseColor,
92
+ highlightColor
93
+ }
94
+ ) }),
95
+ Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
96
+ /* @__PURE__ */ jsx(
97
+ Skeleton,
98
+ {
99
+ width: "70%",
100
+ height: 16,
101
+ borderRadius: 4,
102
+ animate,
103
+ baseColor,
104
+ highlightColor
105
+ }
106
+ ),
107
+ showSortIndicators && /* @__PURE__ */ jsx(
108
+ Skeleton,
109
+ {
110
+ width: 12,
111
+ height: 12,
112
+ borderRadius: 2,
113
+ animate,
114
+ baseColor,
115
+ highlightColor
116
+ }
117
+ )
118
+ ] }, index)),
119
+ showActions && /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx(
120
+ Skeleton,
121
+ {
122
+ width: 60,
123
+ height: 16,
124
+ borderRadius: 4,
125
+ animate,
126
+ baseColor,
127
+ highlightColor
128
+ }
129
+ ) })
130
+ ]
131
+ }
132
+ )
133
+ }
134
+ ),
135
+ showFilters && /* @__PURE__ */ jsx(
136
+ "div",
137
+ {
138
+ className: "border-b border-gray-200",
139
+ style: { padding: "8px 12px" },
140
+ children: /* @__PURE__ */ jsxs(
141
+ "div",
142
+ {
143
+ className: "grid gap-4",
144
+ style: {
145
+ gridTemplateColumns: [
146
+ showSelection && "40px",
147
+ ...Array.from({ length: columns }, (_, i) => getColumnWidth(i)),
148
+ showActions && "80px"
149
+ ].filter(Boolean).join(" ")
150
+ },
151
+ children: [
152
+ showSelection && /* @__PURE__ */ jsx("div", {}),
153
+ Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ jsx(
154
+ Skeleton,
155
+ {
156
+ width: "90%",
157
+ height: 28,
158
+ borderRadius: 4,
159
+ animate,
160
+ baseColor,
161
+ highlightColor
162
+ },
163
+ index
164
+ )),
165
+ showActions && /* @__PURE__ */ jsx("div", {})
166
+ ]
167
+ }
168
+ )
169
+ }
170
+ ),
171
+ Array.from({ length: rows }).map((_, rowIndex) => /* @__PURE__ */ jsx(
172
+ "div",
173
+ {
174
+ className: cn(
175
+ "border-b border-gray-200 last:border-b-0",
176
+ striped && rowIndex % 2 === 1 && "bg-gray-50"
177
+ ),
178
+ style: { padding: "12px" },
179
+ children: /* @__PURE__ */ jsxs(
180
+ "div",
181
+ {
182
+ className: "grid gap-4 items-center",
183
+ style: {
184
+ gridTemplateColumns: [
185
+ showSelection && "40px",
186
+ ...Array.from({ length: columns }, (_2, i) => getColumnWidth(i)),
187
+ showActions && "80px"
188
+ ].filter(Boolean).join(" "),
189
+ height: `${rowHeight - 24}px`
190
+ },
191
+ children: [
192
+ showSelection && /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx(
193
+ Skeleton,
194
+ {
195
+ width: 18,
196
+ height: 18,
197
+ borderRadius: 3,
198
+ animate,
199
+ baseColor,
200
+ highlightColor
201
+ }
202
+ ) }),
203
+ Array.from({ length: columns }).map((_2, colIndex) => /* @__PURE__ */ jsx(
204
+ Skeleton,
205
+ {
206
+ width: colIndex === 0 ? "80%" : "60%",
207
+ height: 14,
208
+ borderRadius: 4,
209
+ animate,
210
+ baseColor,
211
+ highlightColor
212
+ },
213
+ colIndex
214
+ )),
215
+ showActions && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-2", children: [
216
+ /* @__PURE__ */ jsx(
217
+ Skeleton,
218
+ {
219
+ width: 24,
220
+ height: 24,
221
+ variant: "circular",
222
+ animate,
223
+ baseColor,
224
+ highlightColor
225
+ }
226
+ ),
227
+ /* @__PURE__ */ jsx(
228
+ Skeleton,
229
+ {
230
+ width: 24,
231
+ height: 24,
232
+ variant: "circular",
233
+ animate,
234
+ baseColor,
235
+ highlightColor
236
+ }
237
+ )
238
+ ] })
239
+ ]
240
+ }
241
+ )
242
+ },
243
+ rowIndex
244
+ )),
245
+ showPagination && /* @__PURE__ */ jsxs(
246
+ "div",
247
+ {
248
+ className: "border-t border-gray-200 flex items-center justify-between",
249
+ style: { padding: "12px" },
250
+ children: [
251
+ /* @__PURE__ */ jsx(
252
+ Skeleton,
253
+ {
254
+ width: 100,
255
+ height: 14,
256
+ borderRadius: 4,
257
+ animate,
258
+ baseColor,
259
+ highlightColor
260
+ }
261
+ ),
262
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ jsx(
263
+ Skeleton,
264
+ {
265
+ width: 32,
266
+ height: 32,
267
+ borderRadius: 4,
268
+ animate,
269
+ baseColor,
270
+ highlightColor
271
+ },
272
+ index
273
+ )) })
274
+ ]
60
275
  }
61
- }
62
- )
276
+ )
277
+ ] })
63
278
  }
64
279
  );
65
280
  }
66
281
  );
67
- SpinnerRing.displayName = "SpinnerRing";
282
+ DataTableSkeleton.displayName = "DataTableSkeleton";
68
283
  export {
69
- SpinnerRing
284
+ DataTableSkeleton
70
285
  };
package/dist/index18.cjs CHANGED
@@ -2,15 +2,14 @@
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 colors = require("./index4.cjs");
6
- const hooks = require("./index47.cjs");
5
+ const hooks = require("./index56.cjs");
7
6
  const classNames = require("./index3.cjs");
8
- const SpinnerDots = react.forwardRef(
7
+ const colors = require("./index4.cjs");
8
+ const SpinnerCircle = react.forwardRef(
9
9
  ({
10
10
  size = "md",
11
11
  color = "#3b82f6",
12
- dotCount = 8,
13
- dotSize = 4,
12
+ thickness = 4,
14
13
  speed = "normal",
15
14
  reverse = false,
16
15
  respectMotionPreference = true,
@@ -19,7 +18,7 @@ const SpinnerDots = react.forwardRef(
19
18
  transition,
20
19
  className,
21
20
  style,
22
- testId = "spinner-dots",
21
+ testId = "spinner-circle",
23
22
  visible = true,
24
23
  ariaLabel = "Loading...",
25
24
  ...rest
@@ -33,9 +32,6 @@ const SpinnerDots = react.forwardRef(
33
32
  transition
34
33
  );
35
34
  if (!shouldRender) return null;
36
- const sizeValue = colors.parseSizeToNumber(size, 40);
37
- const dotSizeValue = colors.parseSizeToNumber(dotSize, 4);
38
- const radius = (sizeValue - dotSizeValue) / 2;
39
35
  return /* @__PURE__ */ jsxRuntime.jsx(
40
36
  "div",
41
37
  {
@@ -52,42 +48,34 @@ const SpinnerDots = react.forwardRef(
52
48
  "aria-busy": "true",
53
49
  ...rest,
54
50
  children: /* @__PURE__ */ jsxRuntime.jsx(
55
- "div",
51
+ "svg",
56
52
  {
57
- className: "relative",
53
+ className: "animate-spinner-rotate",
58
54
  style: {
59
55
  width: colors.normalizeSize(size),
60
56
  height: colors.normalizeSize(size),
61
- animation: `spinner-rotate ${effectiveDuration} linear infinite`,
57
+ animationDuration: effectiveDuration,
62
58
  animationDirection: reverse ? "reverse" : "normal"
63
59
  },
64
- children: Array.from({ length: dotCount }).map((_, index) => {
65
- const angle = 360 / dotCount * index;
66
- const radian = angle * Math.PI / 180;
67
- const x = radius * Math.cos(radian) + radius;
68
- const y = radius * Math.sin(radian) + radius;
69
- return /* @__PURE__ */ jsxRuntime.jsx(
70
- "div",
71
- {
72
- className: "absolute rounded-full",
73
- style: {
74
- width: colors.normalizeSize(dotSize),
75
- height: colors.normalizeSize(dotSize),
76
- backgroundColor: color,
77
- left: `${x}px`,
78
- top: `${y}px`,
79
- opacity: 1 - index / dotCount * 0.7
80
- // Fade effect
81
- }
82
- },
83
- index
84
- );
85
- })
60
+ viewBox: "0 0 50 50",
61
+ children: /* @__PURE__ */ jsxRuntime.jsx(
62
+ "circle",
63
+ {
64
+ cx: "25",
65
+ cy: "25",
66
+ r: 25 - thickness * 2,
67
+ fill: "none",
68
+ stroke: color,
69
+ strokeWidth: thickness,
70
+ strokeDasharray: "80, 200",
71
+ strokeLinecap: "round"
72
+ }
73
+ )
86
74
  }
87
75
  )
88
76
  }
89
77
  );
90
78
  }
91
79
  );
92
- SpinnerDots.displayName = "SpinnerDots";
93
- exports.SpinnerDots = SpinnerDots;
80
+ SpinnerCircle.displayName = "SpinnerCircle";
81
+ exports.SpinnerCircle = SpinnerCircle;
package/dist/index18.js CHANGED
@@ -1,14 +1,13 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { forwardRef } from "react";
3
- import { normalizeSize, parseSizeToNumber } from "./index4.js";
4
- import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index47.js";
3
+ import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index56.js";
5
4
  import { cn } from "./index3.js";
6
- const SpinnerDots = forwardRef(
5
+ import { normalizeSize } from "./index4.js";
6
+ const SpinnerCircle = forwardRef(
7
7
  ({
8
8
  size = "md",
9
9
  color = "#3b82f6",
10
- dotCount = 8,
11
- dotSize = 4,
10
+ thickness = 4,
12
11
  speed = "normal",
13
12
  reverse = false,
14
13
  respectMotionPreference = true,
@@ -17,7 +16,7 @@ const SpinnerDots = forwardRef(
17
16
  transition,
18
17
  className,
19
18
  style,
20
- testId = "spinner-dots",
19
+ testId = "spinner-circle",
21
20
  visible = true,
22
21
  ariaLabel = "Loading...",
23
22
  ...rest
@@ -31,9 +30,6 @@ const SpinnerDots = forwardRef(
31
30
  transition
32
31
  );
33
32
  if (!shouldRender) return null;
34
- const sizeValue = parseSizeToNumber(size, 40);
35
- const dotSizeValue = parseSizeToNumber(dotSize, 4);
36
- const radius = (sizeValue - dotSizeValue) / 2;
37
33
  return /* @__PURE__ */ jsx(
38
34
  "div",
39
35
  {
@@ -50,44 +46,36 @@ const SpinnerDots = forwardRef(
50
46
  "aria-busy": "true",
51
47
  ...rest,
52
48
  children: /* @__PURE__ */ jsx(
53
- "div",
49
+ "svg",
54
50
  {
55
- className: "relative",
51
+ className: "animate-spinner-rotate",
56
52
  style: {
57
53
  width: normalizeSize(size),
58
54
  height: normalizeSize(size),
59
- animation: `spinner-rotate ${effectiveDuration} linear infinite`,
55
+ animationDuration: effectiveDuration,
60
56
  animationDirection: reverse ? "reverse" : "normal"
61
57
  },
62
- children: Array.from({ length: dotCount }).map((_, index) => {
63
- const angle = 360 / dotCount * index;
64
- const radian = angle * Math.PI / 180;
65
- const x = radius * Math.cos(radian) + radius;
66
- const y = radius * Math.sin(radian) + radius;
67
- return /* @__PURE__ */ jsx(
68
- "div",
69
- {
70
- className: "absolute rounded-full",
71
- style: {
72
- width: normalizeSize(dotSize),
73
- height: normalizeSize(dotSize),
74
- backgroundColor: color,
75
- left: `${x}px`,
76
- top: `${y}px`,
77
- opacity: 1 - index / dotCount * 0.7
78
- // Fade effect
79
- }
80
- },
81
- index
82
- );
83
- })
58
+ viewBox: "0 0 50 50",
59
+ children: /* @__PURE__ */ jsx(
60
+ "circle",
61
+ {
62
+ cx: "25",
63
+ cy: "25",
64
+ r: 25 - thickness * 2,
65
+ fill: "none",
66
+ stroke: color,
67
+ strokeWidth: thickness,
68
+ strokeDasharray: "80, 200",
69
+ strokeLinecap: "round"
70
+ }
71
+ )
84
72
  }
85
73
  )
86
74
  }
87
75
  );
88
76
  }
89
77
  );
90
- SpinnerDots.displayName = "SpinnerDots";
78
+ SpinnerCircle.displayName = "SpinnerCircle";
91
79
  export {
92
- SpinnerDots
80
+ SpinnerCircle
93
81
  };
package/dist/index19.cjs CHANGED
@@ -2,14 +2,15 @@
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("./index47.cjs");
6
- const colors = require("./index4.cjs");
5
+ const hooks = require("./index56.cjs");
7
6
  const classNames = require("./index3.cjs");
8
- const SpinnerBars = react.forwardRef(
7
+ const colors = require("./index4.cjs");
8
+ const SpinnerRing = react.forwardRef(
9
9
  ({
10
10
  size = "md",
11
11
  color = "#3b82f6",
12
- barCount = 5,
12
+ secondaryColor = "rgba(0, 0, 0, 0.1)",
13
+ thickness = 4,
13
14
  speed = "normal",
14
15
  reverse = false,
15
16
  respectMotionPreference = true,
@@ -18,7 +19,7 @@ const SpinnerBars = react.forwardRef(
18
19
  transition,
19
20
  className,
20
21
  style,
21
- testId = "spinner-bars",
22
+ testId = "spinner-ring",
22
23
  visible = true,
23
24
  ariaLabel = "Loading...",
24
25
  ...rest
@@ -32,16 +33,13 @@ const SpinnerBars = react.forwardRef(
32
33
  transition
33
34
  );
34
35
  if (!shouldRender) return null;
35
- const sizeValue = colors.parseSizeToNumber(size, 40);
36
- const barWidth = Math.floor(sizeValue / (barCount * 2));
37
36
  return /* @__PURE__ */ jsxRuntime.jsx(
38
37
  "div",
39
38
  {
40
39
  ref,
41
40
  "data-testid": testId,
42
- className: classNames.cn("inline-flex items-center justify-center gap-1", className),
41
+ className: classNames.cn("inline-flex items-center justify-center", className),
43
42
  style: {
44
- height: colors.normalizeSize(size),
45
43
  ...style,
46
44
  opacity,
47
45
  transition: transitionStyle
@@ -50,23 +48,23 @@ const SpinnerBars = react.forwardRef(
50
48
  "aria-label": ariaLabel,
51
49
  "aria-busy": "true",
52
50
  ...rest,
53
- children: Array.from({ length: barCount }).map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
51
+ children: /* @__PURE__ */ jsxRuntime.jsx(
54
52
  "div",
55
53
  {
56
- className: "rounded-sm",
54
+ className: "rounded-full",
57
55
  style: {
58
- width: `${barWidth}px`,
59
- height: "100%",
60
- backgroundColor: color,
61
- animation: `pulse-wave ${effectiveDuration} ease-in-out infinite`,
62
- animationDelay: reverse ? `${(barCount - index - 1) * 0.1}s` : `${index * 0.1}s`
56
+ width: colors.normalizeSize(size),
57
+ height: colors.normalizeSize(size),
58
+ border: `${thickness}px solid ${secondaryColor}`,
59
+ borderTopColor: color,
60
+ animation: `spinner-rotate ${effectiveDuration} linear infinite`,
61
+ animationDirection: reverse ? "reverse" : "normal"
63
62
  }
64
- },
65
- index
66
- ))
63
+ }
64
+ )
67
65
  }
68
66
  );
69
67
  }
70
68
  );
71
- SpinnerBars.displayName = "SpinnerBars";
72
- exports.SpinnerBars = SpinnerBars;
69
+ SpinnerRing.displayName = "SpinnerRing";
70
+ exports.SpinnerRing = SpinnerRing;