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/index24.js CHANGED
@@ -1,18 +1,14 @@
1
- import { jsxs, 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";
4
- import { normalizeSize, parseSizeToNumber } from "./index4.js";
3
+ import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index56.js";
5
4
  import { cn } from "./index3.js";
6
- const ProgressCircle = forwardRef(
5
+ import { normalizeSize } from "./index4.js";
6
+ const SpinnerPulse = forwardRef(
7
7
  ({
8
- value = 0,
9
- indeterminate = false,
10
- showValue = false,
11
- size = "lg",
12
- thickness = 4,
8
+ size = "md",
13
9
  color = "#3b82f6",
14
- secondaryColor = "#e0e0e0",
15
- buffer,
10
+ pulses = 2,
11
+ maxScale = 1.8,
16
12
  speed = "normal",
17
13
  reverse = false,
18
14
  respectMotionPreference = true,
@@ -21,9 +17,9 @@ const ProgressCircle = forwardRef(
21
17
  transition,
22
18
  className,
23
19
  style,
24
- testId = "progress-circle",
20
+ testId = "spinner-pulse",
25
21
  visible = true,
26
- ariaLabel,
22
+ ariaLabel = "Loading...",
27
23
  ...rest
28
24
  }, ref) => {
29
25
  const prefersReducedMotion = useReducedMotion();
@@ -35,112 +31,67 @@ const ProgressCircle = forwardRef(
35
31
  transition
36
32
  );
37
33
  if (!shouldRender) return null;
38
- const clampedValue = Math.min(100, Math.max(0, value));
39
- const clampedBuffer = buffer !== void 0 ? Math.min(100, Math.max(0, buffer)) : void 0;
40
- const sizeValue = parseSizeToNumber(size, 56);
41
- const thicknessValue = parseSizeToNumber(thickness, 4);
42
- const radius = (sizeValue - thicknessValue * 2) / 2;
43
- const circumference = 2 * Math.PI * radius;
44
- const strokeDashoffset = circumference - clampedValue / 100 * circumference;
45
- const bufferDashoffset = clampedBuffer !== void 0 ? circumference - clampedBuffer / 100 * circumference : void 0;
46
- const progressLabel = ariaLabel || `Loading ${clampedValue}%`;
47
- return /* @__PURE__ */ jsxs(
34
+ const sizeValue = normalizeSize(size);
35
+ return /* @__PURE__ */ jsx(
48
36
  "div",
49
37
  {
50
38
  ref,
51
39
  "data-testid": testId,
52
- className: cn("inline-flex items-center justify-center relative", className),
40
+ className: cn("inline-flex items-center justify-center", className),
53
41
  style: {
54
- width: normalizeSize(size),
55
- height: normalizeSize(size),
56
42
  ...style,
57
43
  opacity,
58
44
  transition: transitionStyle
59
45
  },
60
- role: "progressbar",
61
- "aria-label": progressLabel,
62
- "aria-valuenow": indeterminate ? void 0 : clampedValue,
63
- "aria-valuemin": 0,
64
- "aria-valuemax": 100,
46
+ role: "status",
47
+ "aria-label": ariaLabel,
48
+ "aria-busy": "true",
65
49
  ...rest,
66
- children: [
67
- /* @__PURE__ */ jsxs(
68
- "svg",
69
- {
70
- className: cn(indeterminate && "animate-spinner-rotate"),
50
+ children: /* @__PURE__ */ jsxs(
51
+ "div",
52
+ {
53
+ className: "relative",
54
+ style: {
71
55
  width: sizeValue,
72
- height: sizeValue,
73
- viewBox: `0 0 ${sizeValue} ${sizeValue}`,
74
- style: indeterminate ? {
75
- animation: `spinner-rotate ${effectiveDuration} linear infinite`,
76
- animationDirection: reverse ? "reverse" : "normal"
77
- } : void 0,
78
- children: [
79
- /* @__PURE__ */ jsx(
80
- "circle",
81
- {
82
- cx: sizeValue / 2,
83
- cy: sizeValue / 2,
84
- r: radius,
85
- fill: "none",
86
- stroke: secondaryColor,
87
- strokeWidth: thicknessValue
56
+ height: sizeValue
57
+ },
58
+ children: [
59
+ Array.from({ length: pulses }).map((_, index) => /* @__PURE__ */ jsx(
60
+ "div",
61
+ {
62
+ className: "absolute inset-0 rounded-full",
63
+ style: {
64
+ backgroundColor: color,
65
+ animation: `heartbeat-pulse ${effectiveDuration} ease-out infinite`,
66
+ animationDelay: reverse ? `${(pulses - index - 1) * 0.3}s` : `${index * 0.3}s`,
67
+ animationDirection: reverse ? "reverse" : "normal",
68
+ // @ts-ignore - CSS variable for animation
69
+ "--max-scale": maxScale
88
70
  }
89
- ),
90
- bufferDashoffset !== void 0 && !indeterminate && /* @__PURE__ */ jsx(
91
- "circle",
92
- {
93
- cx: sizeValue / 2,
94
- cy: sizeValue / 2,
95
- r: radius,
96
- fill: "none",
97
- stroke: color,
98
- strokeWidth: thicknessValue,
99
- strokeLinecap: "round",
100
- strokeDasharray: circumference,
101
- strokeDashoffset: bufferDashoffset,
102
- transform: `rotate(-90 ${sizeValue / 2} ${sizeValue / 2})`,
103
- opacity: 0.3
71
+ },
72
+ index
73
+ )),
74
+ /* @__PURE__ */ jsx(
75
+ "div",
76
+ {
77
+ className: "absolute rounded-full",
78
+ style: {
79
+ backgroundColor: color,
80
+ width: "50%",
81
+ height: "50%",
82
+ top: "25%",
83
+ left: "25%"
104
84
  }
105
- ),
106
- /* @__PURE__ */ jsx(
107
- "circle",
108
- {
109
- cx: sizeValue / 2,
110
- cy: sizeValue / 2,
111
- r: radius,
112
- fill: "none",
113
- stroke: color,
114
- strokeWidth: thicknessValue,
115
- strokeLinecap: "round",
116
- strokeDasharray: circumference,
117
- strokeDashoffset: indeterminate ? circumference * 0.75 : strokeDashoffset,
118
- transform: `rotate(-90 ${sizeValue / 2} ${sizeValue / 2})`,
119
- style: {
120
- transition: indeterminate ? "none" : "stroke-dashoffset 0.3s ease-in-out"
121
- }
122
- }
123
- )
124
- ]
125
- }
126
- ),
127
- showValue && !indeterminate && /* @__PURE__ */ jsxs(
128
- "span",
129
- {
130
- className: "absolute text-sm font-medium",
131
- style: { color },
132
- children: [
133
- clampedValue,
134
- "%"
135
- ]
136
- }
137
- )
138
- ]
85
+ }
86
+ )
87
+ ]
88
+ }
89
+ )
139
90
  }
140
91
  );
141
92
  }
142
93
  );
143
- ProgressCircle.displayName = "ProgressCircle";
94
+ SpinnerPulse.displayName = "SpinnerPulse";
144
95
  export {
145
- ProgressCircle
96
+ SpinnerPulse
146
97
  };
package/dist/index25.cjs CHANGED
@@ -2,16 +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
5
  const colors = require("./index4.cjs");
6
+ const hooks = require("./index56.cjs");
7
7
  const classNames = require("./index3.cjs");
8
- const ProgressRing = react.forwardRef(
8
+ const ProgressBar = react.forwardRef(
9
9
  ({
10
10
  value = 0,
11
11
  indeterminate = false,
12
12
  showValue = false,
13
- size = "lg",
14
- thickness = 4,
13
+ height = "0.5rem",
15
14
  color = "#3b82f6",
16
15
  secondaryColor = "#e0e0e0",
17
16
  gradient = false,
@@ -24,14 +23,14 @@ const ProgressRing = react.forwardRef(
24
23
  transition,
25
24
  className,
26
25
  style,
27
- testId = "progress-ring",
26
+ testId = "progress-bar",
28
27
  visible = true,
29
28
  ariaLabel,
30
29
  ...rest
31
30
  }, ref) => {
32
31
  const prefersReducedMotion = hooks.useReducedMotion();
33
32
  const effectiveDuration = hooks.getEffectiveDuration(speed, respectMotionPreference, prefersReducedMotion);
34
- const gradientId = react.useMemo(() => `progress-gradient-${Math.random().toString(36).substr(2, 9)}`, []);
33
+ const gradientId = react.useMemo(() => `progress-bar-gradient-${Math.random().toString(36).substr(2, 9)}`, []);
35
34
  const { shouldRender, opacity, transitionStyle } = hooks.useLoaderVisibility(
36
35
  visible,
37
36
  delay,
@@ -41,22 +40,16 @@ const ProgressRing = react.forwardRef(
41
40
  if (!shouldRender) return null;
42
41
  const clampedValue = Math.min(100, Math.max(0, value));
43
42
  const clampedBuffer = buffer !== void 0 ? Math.min(100, Math.max(0, buffer)) : void 0;
44
- const sizeValue = colors.parseSizeToNumber(size, 56);
45
- const thicknessValue = colors.parseSizeToNumber(thickness, 4);
46
- const radius = (sizeValue - thicknessValue * 2) / 2;
47
- const circumference = 2 * Math.PI * radius;
48
- const strokeDashoffset = circumference - clampedValue / 100 * circumference;
49
- const bufferDashoffset = clampedBuffer !== void 0 ? circumference - clampedBuffer / 100 * circumference : void 0;
50
43
  const progressLabel = ariaLabel || `Loading ${clampedValue}%`;
51
44
  return /* @__PURE__ */ jsxRuntime.jsxs(
52
45
  "div",
53
46
  {
54
47
  ref,
55
48
  "data-testid": testId,
56
- className: classNames.cn("inline-flex items-center justify-center relative", className),
49
+ className: classNames.cn("relative w-full overflow-hidden rounded-full", className),
57
50
  style: {
58
- width: colors.normalizeSize(size),
59
- height: colors.normalizeSize(size),
51
+ height: colors.normalizeSize(height),
52
+ backgroundColor: secondaryColor,
60
53
  ...style,
61
54
  opacity,
62
55
  transition: transitionStyle
@@ -68,75 +61,48 @@ const ProgressRing = react.forwardRef(
68
61
  "aria-valuemax": 100,
69
62
  ...rest,
70
63
  children: [
71
- /* @__PURE__ */ jsxRuntime.jsxs(
72
- "svg",
64
+ gradient && !indeterminate && /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "0", height: "0", style: { position: "absolute" }, children: /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs("linearGradient", { id: gradientId, x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
65
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "0%", stopColor: color }),
66
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "100%", stopColor: secondaryColor || "#8b5cf6" })
67
+ ] }) }) }),
68
+ clampedBuffer !== void 0 && !indeterminate && /* @__PURE__ */ jsxRuntime.jsx(
69
+ "div",
73
70
  {
74
- className: classNames.cn(indeterminate && "animate-spinner-rotate"),
75
- width: sizeValue,
76
- height: sizeValue,
77
- viewBox: `0 0 ${sizeValue} ${sizeValue}`,
78
- style: indeterminate ? {
79
- animation: `spinner-rotate ${effectiveDuration} linear infinite`,
80
- animationDirection: reverse ? "reverse" : "normal"
81
- } : void 0,
82
- children: [
83
- gradient && /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs("linearGradient", { id: gradientId, x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
84
- /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "0%", stopColor: color }),
85
- /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "100%", stopColor: secondaryColor === "#e0e0e0" ? "#8b5cf6" : secondaryColor })
86
- ] }) }),
87
- /* @__PURE__ */ jsxRuntime.jsx(
88
- "circle",
89
- {
90
- cx: sizeValue / 2,
91
- cy: sizeValue / 2,
92
- r: radius,
93
- fill: "none",
94
- stroke: gradient ? "#e0e0e0" : secondaryColor,
95
- strokeWidth: thicknessValue
96
- }
97
- ),
98
- bufferDashoffset !== void 0 && !indeterminate && /* @__PURE__ */ jsxRuntime.jsx(
99
- "circle",
100
- {
101
- cx: sizeValue / 2,
102
- cy: sizeValue / 2,
103
- r: radius,
104
- fill: "none",
105
- stroke: gradient ? `url(#${gradientId})` : color,
106
- strokeWidth: thicknessValue,
107
- strokeLinecap: "round",
108
- strokeDasharray: circumference,
109
- strokeDashoffset: bufferDashoffset,
110
- transform: `rotate(-90 ${sizeValue / 2} ${sizeValue / 2})`,
111
- opacity: 0.3
112
- }
113
- ),
114
- /* @__PURE__ */ jsxRuntime.jsx(
115
- "circle",
116
- {
117
- cx: sizeValue / 2,
118
- cy: sizeValue / 2,
119
- r: radius,
120
- fill: "none",
121
- stroke: gradient ? `url(#${gradientId})` : color,
122
- strokeWidth: thicknessValue,
123
- strokeLinecap: "round",
124
- strokeDasharray: circumference,
125
- strokeDashoffset: indeterminate ? circumference * 0.75 : strokeDashoffset,
126
- transform: `rotate(-90 ${sizeValue / 2} ${sizeValue / 2})`,
127
- style: {
128
- transition: indeterminate ? "none" : "stroke-dashoffset 0.3s ease-in-out"
129
- }
130
- }
131
- )
132
- ]
71
+ className: "absolute h-full rounded-full opacity-30",
72
+ style: {
73
+ width: `${clampedBuffer}%`,
74
+ backgroundColor: color
75
+ }
76
+ }
77
+ ),
78
+ indeterminate ? /* @__PURE__ */ jsxRuntime.jsx(
79
+ "div",
80
+ {
81
+ className: "absolute h-full rounded-full",
82
+ style: {
83
+ backgroundColor: gradient ? `url(#${gradientId})` : color,
84
+ animation: `progress-indeterminate ${effectiveDuration} ease-in-out infinite`,
85
+ animationDirection: reverse ? "reverse" : "normal",
86
+ width: "40%"
87
+ }
88
+ }
89
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
90
+ "div",
91
+ {
92
+ className: "h-full rounded-full transition-all duration-300 ease-in-out",
93
+ style: {
94
+ width: `${clampedValue}%`,
95
+ background: gradient ? `url(#${gradientId})` : color
96
+ }
133
97
  }
134
98
  ),
135
99
  showValue && !indeterminate && /* @__PURE__ */ jsxRuntime.jsxs(
136
100
  "span",
137
101
  {
138
- className: "absolute text-sm font-semibold",
139
- style: { color },
102
+ className: "absolute inset-0 flex items-center justify-center text-xs font-medium",
103
+ style: {
104
+ color: clampedValue > 50 ? colors.getContrastColor(color) : secondaryColor === "#e0e0e0" ? "#000000" : colors.getContrastColor(secondaryColor)
105
+ },
140
106
  children: [
141
107
  clampedValue,
142
108
  "%"
@@ -148,5 +114,5 @@ const ProgressRing = react.forwardRef(
148
114
  );
149
115
  }
150
116
  );
151
- ProgressRing.displayName = "ProgressRing";
152
- exports.ProgressRing = ProgressRing;
117
+ ProgressBar.displayName = "ProgressBar";
118
+ exports.ProgressBar = ProgressBar;
package/dist/index25.js CHANGED
@@ -1,15 +1,14 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { forwardRef, useMemo } from "react";
3
- import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index47.js";
4
- import { normalizeSize, parseSizeToNumber } from "./index4.js";
3
+ import { normalizeSize, getContrastColor } from "./index4.js";
4
+ import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index56.js";
5
5
  import { cn } from "./index3.js";
6
- const ProgressRing = forwardRef(
6
+ const ProgressBar = forwardRef(
7
7
  ({
8
8
  value = 0,
9
9
  indeterminate = false,
10
10
  showValue = false,
11
- size = "lg",
12
- thickness = 4,
11
+ height = "0.5rem",
13
12
  color = "#3b82f6",
14
13
  secondaryColor = "#e0e0e0",
15
14
  gradient = false,
@@ -22,14 +21,14 @@ const ProgressRing = forwardRef(
22
21
  transition,
23
22
  className,
24
23
  style,
25
- testId = "progress-ring",
24
+ testId = "progress-bar",
26
25
  visible = true,
27
26
  ariaLabel,
28
27
  ...rest
29
28
  }, ref) => {
30
29
  const prefersReducedMotion = useReducedMotion();
31
30
  const effectiveDuration = getEffectiveDuration(speed, respectMotionPreference, prefersReducedMotion);
32
- const gradientId = useMemo(() => `progress-gradient-${Math.random().toString(36).substr(2, 9)}`, []);
31
+ const gradientId = useMemo(() => `progress-bar-gradient-${Math.random().toString(36).substr(2, 9)}`, []);
33
32
  const { shouldRender, opacity, transitionStyle } = useLoaderVisibility(
34
33
  visible,
35
34
  delay,
@@ -39,22 +38,16 @@ const ProgressRing = forwardRef(
39
38
  if (!shouldRender) return null;
40
39
  const clampedValue = Math.min(100, Math.max(0, value));
41
40
  const clampedBuffer = buffer !== void 0 ? Math.min(100, Math.max(0, buffer)) : void 0;
42
- const sizeValue = parseSizeToNumber(size, 56);
43
- const thicknessValue = parseSizeToNumber(thickness, 4);
44
- const radius = (sizeValue - thicknessValue * 2) / 2;
45
- const circumference = 2 * Math.PI * radius;
46
- const strokeDashoffset = circumference - clampedValue / 100 * circumference;
47
- const bufferDashoffset = clampedBuffer !== void 0 ? circumference - clampedBuffer / 100 * circumference : void 0;
48
41
  const progressLabel = ariaLabel || `Loading ${clampedValue}%`;
49
42
  return /* @__PURE__ */ jsxs(
50
43
  "div",
51
44
  {
52
45
  ref,
53
46
  "data-testid": testId,
54
- className: cn("inline-flex items-center justify-center relative", className),
47
+ className: cn("relative w-full overflow-hidden rounded-full", className),
55
48
  style: {
56
- width: normalizeSize(size),
57
- height: normalizeSize(size),
49
+ height: normalizeSize(height),
50
+ backgroundColor: secondaryColor,
58
51
  ...style,
59
52
  opacity,
60
53
  transition: transitionStyle
@@ -66,75 +59,48 @@ const ProgressRing = forwardRef(
66
59
  "aria-valuemax": 100,
67
60
  ...rest,
68
61
  children: [
69
- /* @__PURE__ */ jsxs(
70
- "svg",
62
+ gradient && !indeterminate && /* @__PURE__ */ jsx("svg", { width: "0", height: "0", style: { position: "absolute" }, children: /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("linearGradient", { id: gradientId, x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
63
+ /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: color }),
64
+ /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: secondaryColor || "#8b5cf6" })
65
+ ] }) }) }),
66
+ clampedBuffer !== void 0 && !indeterminate && /* @__PURE__ */ jsx(
67
+ "div",
71
68
  {
72
- className: cn(indeterminate && "animate-spinner-rotate"),
73
- width: sizeValue,
74
- height: sizeValue,
75
- viewBox: `0 0 ${sizeValue} ${sizeValue}`,
76
- style: indeterminate ? {
77
- animation: `spinner-rotate ${effectiveDuration} linear infinite`,
78
- animationDirection: reverse ? "reverse" : "normal"
79
- } : void 0,
80
- children: [
81
- gradient && /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("linearGradient", { id: gradientId, x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
82
- /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: color }),
83
- /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: secondaryColor === "#e0e0e0" ? "#8b5cf6" : secondaryColor })
84
- ] }) }),
85
- /* @__PURE__ */ jsx(
86
- "circle",
87
- {
88
- cx: sizeValue / 2,
89
- cy: sizeValue / 2,
90
- r: radius,
91
- fill: "none",
92
- stroke: gradient ? "#e0e0e0" : secondaryColor,
93
- strokeWidth: thicknessValue
94
- }
95
- ),
96
- bufferDashoffset !== void 0 && !indeterminate && /* @__PURE__ */ jsx(
97
- "circle",
98
- {
99
- cx: sizeValue / 2,
100
- cy: sizeValue / 2,
101
- r: radius,
102
- fill: "none",
103
- stroke: gradient ? `url(#${gradientId})` : color,
104
- strokeWidth: thicknessValue,
105
- strokeLinecap: "round",
106
- strokeDasharray: circumference,
107
- strokeDashoffset: bufferDashoffset,
108
- transform: `rotate(-90 ${sizeValue / 2} ${sizeValue / 2})`,
109
- opacity: 0.3
110
- }
111
- ),
112
- /* @__PURE__ */ jsx(
113
- "circle",
114
- {
115
- cx: sizeValue / 2,
116
- cy: sizeValue / 2,
117
- r: radius,
118
- fill: "none",
119
- stroke: gradient ? `url(#${gradientId})` : color,
120
- strokeWidth: thicknessValue,
121
- strokeLinecap: "round",
122
- strokeDasharray: circumference,
123
- strokeDashoffset: indeterminate ? circumference * 0.75 : strokeDashoffset,
124
- transform: `rotate(-90 ${sizeValue / 2} ${sizeValue / 2})`,
125
- style: {
126
- transition: indeterminate ? "none" : "stroke-dashoffset 0.3s ease-in-out"
127
- }
128
- }
129
- )
130
- ]
69
+ className: "absolute h-full rounded-full opacity-30",
70
+ style: {
71
+ width: `${clampedBuffer}%`,
72
+ backgroundColor: color
73
+ }
74
+ }
75
+ ),
76
+ indeterminate ? /* @__PURE__ */ jsx(
77
+ "div",
78
+ {
79
+ className: "absolute h-full rounded-full",
80
+ style: {
81
+ backgroundColor: gradient ? `url(#${gradientId})` : color,
82
+ animation: `progress-indeterminate ${effectiveDuration} ease-in-out infinite`,
83
+ animationDirection: reverse ? "reverse" : "normal",
84
+ width: "40%"
85
+ }
86
+ }
87
+ ) : /* @__PURE__ */ jsx(
88
+ "div",
89
+ {
90
+ className: "h-full rounded-full transition-all duration-300 ease-in-out",
91
+ style: {
92
+ width: `${clampedValue}%`,
93
+ background: gradient ? `url(#${gradientId})` : color
94
+ }
131
95
  }
132
96
  ),
133
97
  showValue && !indeterminate && /* @__PURE__ */ jsxs(
134
98
  "span",
135
99
  {
136
- className: "absolute text-sm font-semibold",
137
- style: { color },
100
+ className: "absolute inset-0 flex items-center justify-center text-xs font-medium",
101
+ style: {
102
+ color: clampedValue > 50 ? getContrastColor(color) : secondaryColor === "#e0e0e0" ? "#000000" : getContrastColor(secondaryColor)
103
+ },
138
104
  children: [
139
105
  clampedValue,
140
106
  "%"
@@ -146,7 +112,7 @@ const ProgressRing = forwardRef(
146
112
  );
147
113
  }
148
114
  );
149
- ProgressRing.displayName = "ProgressRing";
115
+ ProgressBar.displayName = "ProgressBar";
150
116
  export {
151
- ProgressRing
117
+ ProgressBar
152
118
  };