premium-react-loaders 2.2.0 → 2.3.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 (81) hide show
  1. package/README.md +83 -0
  2. package/dist/components/index.d.ts +1 -0
  3. package/dist/components/index.d.ts.map +1 -1
  4. package/dist/components/transition/LoaderTransition.d.ts +32 -0
  5. package/dist/components/transition/LoaderTransition.d.ts.map +1 -0
  6. package/dist/components/transition/index.d.ts +2 -0
  7. package/dist/components/transition/index.d.ts.map +1 -0
  8. package/dist/hooks/index.d.ts +3 -1
  9. package/dist/hooks/index.d.ts.map +1 -1
  10. package/dist/hooks/useEnhancedLoader.d.ts +62 -0
  11. package/dist/hooks/useEnhancedLoader.d.ts.map +1 -0
  12. package/dist/index.cjs +2 -0
  13. package/dist/index.js +2 -0
  14. package/dist/index10.cjs +1 -1
  15. package/dist/index10.js +1 -1
  16. package/dist/index11.cjs +1 -1
  17. package/dist/index11.js +1 -1
  18. package/dist/index12.cjs +1 -1
  19. package/dist/index12.js +1 -1
  20. package/dist/index13.cjs +1 -1
  21. package/dist/index13.js +1 -1
  22. package/dist/index14.cjs +1 -1
  23. package/dist/index14.js +1 -1
  24. package/dist/index15.cjs +1 -1
  25. package/dist/index15.js +1 -1
  26. package/dist/index16.cjs +1 -1
  27. package/dist/index16.js +1 -1
  28. package/dist/index17.cjs +1 -1
  29. package/dist/index17.js +1 -1
  30. package/dist/index18.cjs +1 -1
  31. package/dist/index18.js +1 -1
  32. package/dist/index19.cjs +1 -1
  33. package/dist/index19.js +1 -1
  34. package/dist/index20.cjs +1 -1
  35. package/dist/index20.js +1 -1
  36. package/dist/index21.cjs +1 -1
  37. package/dist/index21.js +1 -1
  38. package/dist/index22.cjs +1 -1
  39. package/dist/index22.js +1 -1
  40. package/dist/index23.cjs +1 -1
  41. package/dist/index23.js +1 -1
  42. package/dist/index24.cjs +1 -1
  43. package/dist/index24.js +1 -1
  44. package/dist/index25.cjs +1 -1
  45. package/dist/index25.js +1 -1
  46. package/dist/index26.cjs +1 -1
  47. package/dist/index26.js +1 -1
  48. package/dist/index27.cjs +1 -1
  49. package/dist/index27.js +1 -1
  50. package/dist/index28.cjs +1 -1
  51. package/dist/index28.js +1 -1
  52. package/dist/index29.cjs +1 -1
  53. package/dist/index29.js +1 -1
  54. package/dist/index30.cjs +1 -1
  55. package/dist/index30.js +1 -1
  56. package/dist/index31.cjs +1 -1
  57. package/dist/index31.js +1 -1
  58. package/dist/index32.cjs +1 -1
  59. package/dist/index32.js +1 -1
  60. package/dist/index33.cjs +1 -1
  61. package/dist/index33.js +1 -1
  62. package/dist/index34.cjs +1 -1
  63. package/dist/index34.js +1 -1
  64. package/dist/index35.cjs +153 -111
  65. package/dist/index35.js +154 -112
  66. package/dist/index36.cjs +125 -0
  67. package/dist/index36.js +125 -0
  68. package/dist/index7.cjs +1 -1
  69. package/dist/index7.js +1 -1
  70. package/dist/index8.cjs +1 -1
  71. package/dist/index8.js +1 -1
  72. package/dist/index9.cjs +1 -1
  73. package/dist/index9.js +1 -1
  74. package/dist/premium-react-loaders.css +75 -0
  75. package/dist/types/hooks.d.ts +95 -0
  76. package/dist/types/hooks.d.ts.map +1 -0
  77. package/dist/types/index.d.ts +2 -0
  78. package/dist/types/index.d.ts.map +1 -1
  79. package/dist/types/transition.d.ts +34 -0
  80. package/dist/types/transition.d.ts.map +1 -0
  81. package/package.json +1 -1
package/dist/index29.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("./index35.cjs");
5
+ const hooks = require("./index36.cjs");
6
6
  const colors = require("./index4.cjs");
7
7
  const classNames = require("./index3.cjs");
8
8
  const PulseBars = react.forwardRef(
package/dist/index29.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { forwardRef } from "react";
3
- import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index35.js";
3
+ import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index36.js";
4
4
  import { normalizeSize, parseSizeToNumber } from "./index4.js";
5
5
  import { cn } from "./index3.js";
6
6
  const PulseBars = forwardRef(
package/dist/index30.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("./index35.cjs");
5
+ const hooks = require("./index36.cjs");
6
6
  const colors = require("./index4.cjs");
7
7
  const classNames = require("./index3.cjs");
8
8
  const TypingIndicator = react.forwardRef(
package/dist/index30.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { forwardRef } from "react";
3
- import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index35.js";
3
+ import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index36.js";
4
4
  import { normalizeSize } from "./index4.js";
5
5
  import { cn } from "./index3.js";
6
6
  const TypingIndicator = forwardRef(
package/dist/index31.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("./index35.cjs");
5
+ const hooks = require("./index36.cjs");
6
6
  const classNames = require("./index3.cjs");
7
7
  const LoaderOverlay = react.forwardRef(
8
8
  ({
package/dist/index31.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { forwardRef } from "react";
3
- import { useLoaderVisibility } from "./index35.js";
3
+ import { useLoaderVisibility } from "./index36.js";
4
4
  import { cn } from "./index3.js";
5
5
  const LoaderOverlay = forwardRef(
6
6
  ({
package/dist/index32.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("./index35.cjs");
5
+ const hooks = require("./index36.cjs");
6
6
  const classNames = require("./index3.cjs");
7
7
  const colors = require("./index4.cjs");
8
8
  const ButtonSpinner = react.forwardRef(
package/dist/index32.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { forwardRef } from "react";
3
- import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index35.js";
3
+ import { useReducedMotion, useLoaderVisibility, getEffectiveDuration } from "./index36.js";
4
4
  import { cn } from "./index3.js";
5
5
  import { normalizeSize } from "./index4.js";
6
6
  const ButtonSpinner = forwardRef(
package/dist/index33.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("./index35.cjs");
5
+ const hooks = require("./index36.cjs");
6
6
  const classNames = require("./index3.cjs");
7
7
  const colors = require("./index4.cjs");
8
8
  const SuccessCheckmark = react.forwardRef(
package/dist/index33.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { forwardRef } from "react";
3
- import { useLoaderVisibility } from "./index35.js";
3
+ import { useLoaderVisibility } from "./index36.js";
4
4
  import { cn } from "./index3.js";
5
5
  import { normalizeSize } from "./index4.js";
6
6
  const SuccessCheckmark = forwardRef(
package/dist/index34.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("./index35.cjs");
5
+ const hooks = require("./index36.cjs");
6
6
  const classNames = require("./index3.cjs");
7
7
  const colors = require("./index4.cjs");
8
8
  const ErrorIndicator = react.forwardRef(
package/dist/index34.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { forwardRef } from "react";
3
- import { useLoaderVisibility } from "./index35.js";
3
+ import { useLoaderVisibility } from "./index36.js";
4
4
  import { cn } from "./index3.js";
5
5
  import { normalizeSize } from "./index4.js";
6
6
  const ErrorIndicator = forwardRef(
package/dist/index35.cjs CHANGED
@@ -1,125 +1,167 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
3
4
  const react = require("react");
4
- function useReducedMotion() {
5
- const [prefersReducedMotion, setPrefersReducedMotion] = react.useState(false);
6
- react.useEffect(() => {
7
- if (typeof window === "undefined" || !window.matchMedia) {
8
- return;
9
- }
10
- const mediaQuery = window.matchMedia("(prefers-reduced-motion: reduce)");
11
- setPrefersReducedMotion(mediaQuery.matches);
12
- const handleChange = (event) => {
13
- setPrefersReducedMotion(event.matches);
14
- };
15
- if (mediaQuery.addEventListener) {
16
- mediaQuery.addEventListener("change", handleChange);
17
- return () => mediaQuery.removeEventListener("change", handleChange);
18
- } else {
19
- mediaQuery.addListener(handleChange);
20
- return () => mediaQuery.removeListener(handleChange);
21
- }
22
- }, []);
23
- return prefersReducedMotion;
24
- }
25
- function getEffectiveDuration(speed, respectMotionPreference, prefersReducedMotion) {
26
- if (respectMotionPreference && prefersReducedMotion) {
27
- return "0.01ms";
28
- }
29
- if (typeof speed === "number") {
30
- const validSpeed = !isNaN(speed) && speed > 0 ? Math.max(50, Math.min(1e4, speed)) : 1e3;
31
- return `${validSpeed}ms`;
32
- }
33
- const speedMap = {
34
- slow: "2s",
35
- normal: "1s",
36
- fast: "0.5s"
37
- };
38
- return speedMap[speed] || speedMap.normal;
39
- }
40
- function useLoaderVisibility(visible = true, delay = 0, minDuration = 0, transition) {
41
- const transitionDuration = transition === true ? 150 : typeof transition === "number" ? transition : 0;
42
- const hasTransition = transitionDuration > 0;
43
- const [shouldRender, setShouldRender] = react.useState(visible && delay === 0);
44
- const [isTransitioning, setIsTransitioning] = react.useState(visible && delay === 0 && hasTransition);
45
- const showTimeRef = react.useRef(visible && delay === 0 ? Date.now() : null);
46
- const delayTimerRef = react.useRef(null);
47
- const minDurationTimerRef = react.useRef(null);
48
- const transitionTimerRef = react.useRef(null);
49
- react.useEffect(() => {
50
- if (delayTimerRef.current) {
51
- clearTimeout(delayTimerRef.current);
52
- delayTimerRef.current = null;
53
- }
54
- if (minDurationTimerRef.current) {
55
- clearTimeout(minDurationTimerRef.current);
56
- minDurationTimerRef.current = null;
57
- }
58
- if (transitionTimerRef.current) {
59
- clearTimeout(transitionTimerRef.current);
60
- transitionTimerRef.current = null;
61
- }
62
- if (visible) {
63
- if (delay > 0) {
64
- delayTimerRef.current = setTimeout(() => {
65
- setShouldRender(true);
66
- showTimeRef.current = Date.now();
67
- if (hasTransition) {
68
- setIsTransitioning(true);
69
- }
70
- }, delay);
5
+ const classNames = require("./index3.cjs");
6
+ const LoaderTransition = react.forwardRef(
7
+ ({
8
+ loading,
9
+ loadingContent,
10
+ children,
11
+ transitionType = "fade",
12
+ duration = 300,
13
+ timing = "ease-out",
14
+ keepMounted = false,
15
+ exitDelay = 0,
16
+ appearOnMount = false,
17
+ className,
18
+ style,
19
+ testId = "loader-transition",
20
+ ariaLabel,
21
+ visible = true,
22
+ delay = 0,
23
+ minDuration = 0,
24
+ transition: transitionProp,
25
+ ...rest
26
+ }, ref) => {
27
+ const [isTransitioning, setIsTransitioning] = react.useState(false);
28
+ const [showLoading, setShowLoading] = react.useState(appearOnMount ? loading : false);
29
+ const [showContent, setShowContent] = react.useState(!appearOnMount && !loading);
30
+ const timeoutRef = react.useRef(null);
31
+ const entryTimeRef = react.useRef(null);
32
+ react.useEffect(() => {
33
+ if (!visible) {
34
+ setShowLoading(false);
35
+ setShowContent(false);
36
+ return;
37
+ }
38
+ if (loading) {
39
+ if (timeoutRef.current) {
40
+ clearTimeout(timeoutRef.current);
41
+ }
42
+ if (delay > 0) {
43
+ timeoutRef.current = setTimeout(() => {
44
+ setShowLoading(true);
45
+ setShowContent(false);
46
+ entryTimeRef.current = Date.now();
47
+ }, delay);
48
+ } else {
49
+ setShowLoading(true);
50
+ setShowContent(false);
51
+ entryTimeRef.current = Date.now();
52
+ }
71
53
  } else {
72
- setShouldRender(true);
73
- showTimeRef.current = Date.now();
74
- if (hasTransition) {
54
+ const elapsed = entryTimeRef.current ? Date.now() - entryTimeRef.current : 0;
55
+ const remainingMinDuration = Math.max(0, minDuration - elapsed);
56
+ const totalDelay = exitDelay + remainingMinDuration;
57
+ if (totalDelay > 0) {
58
+ timeoutRef.current = setTimeout(() => {
59
+ setIsTransitioning(true);
60
+ timeoutRef.current = setTimeout(() => {
61
+ setShowLoading(false);
62
+ setShowContent(true);
63
+ setIsTransitioning(false);
64
+ }, duration);
65
+ }, totalDelay);
66
+ } else {
75
67
  setIsTransitioning(true);
68
+ timeoutRef.current = setTimeout(() => {
69
+ setShowLoading(false);
70
+ setShowContent(true);
71
+ setIsTransitioning(false);
72
+ }, duration);
76
73
  }
77
74
  }
78
- } else {
79
- const hideLoader = () => {
80
- if (hasTransition) {
81
- setIsTransitioning(false);
82
- transitionTimerRef.current = setTimeout(() => {
83
- setShouldRender(false);
84
- showTimeRef.current = null;
85
- }, transitionDuration);
86
- } else {
87
- setShouldRender(false);
88
- showTimeRef.current = null;
75
+ return () => {
76
+ if (timeoutRef.current) {
77
+ clearTimeout(timeoutRef.current);
89
78
  }
90
79
  };
91
- if (showTimeRef.current !== null && minDuration > 0) {
92
- const elapsedTime = Date.now() - showTimeRef.current;
93
- const remainingTime = minDuration - elapsedTime;
94
- if (remainingTime > 0) {
95
- minDurationTimerRef.current = setTimeout(hideLoader, remainingTime);
96
- } else {
97
- hideLoader();
98
- }
99
- } else {
100
- hideLoader();
80
+ }, [loading, visible, delay, minDuration, exitDelay, duration]);
81
+ const getTransitionClasses = (isLoading, isTransition) => {
82
+ const baseClasses = "loader-transition";
83
+ const timingClass = `loader-transition-${timing}`;
84
+ if (transitionType === "none") {
85
+ return baseClasses;
86
+ }
87
+ if (transitionType === "fade") {
88
+ if (isLoading && !isTransition) return `${baseClasses} ${timingClass} loader-transition-fade-enter-active`;
89
+ if (!isLoading && isTransition) return `${baseClasses} ${timingClass} loader-transition-fade-exit-active`;
90
+ if (!isLoading && !isTransition) return `${baseClasses} ${timingClass} loader-transition-fade-enter-active`;
91
+ return `${baseClasses} ${timingClass}`;
101
92
  }
102
- }
103
- return () => {
104
- if (delayTimerRef.current) {
105
- clearTimeout(delayTimerRef.current);
93
+ if (transitionType === "slide-up") {
94
+ if (isLoading && !isTransition) return `${baseClasses} ${timingClass} loader-transition-slide-up-enter-active`;
95
+ if (!isLoading && isTransition) return `${baseClasses} ${timingClass} loader-transition-slide-up-exit-active`;
96
+ if (!isLoading && !isTransition) return `${baseClasses} ${timingClass} loader-transition-slide-up-enter-active`;
97
+ return `${baseClasses} ${timingClass}`;
106
98
  }
107
- if (minDurationTimerRef.current) {
108
- clearTimeout(minDurationTimerRef.current);
99
+ if (transitionType === "slide-down") {
100
+ if (isLoading && !isTransition) return `${baseClasses} ${timingClass} loader-transition-slide-down-enter-active`;
101
+ if (!isLoading && isTransition) return `${baseClasses} ${timingClass} loader-transition-slide-down-exit-active`;
102
+ if (!isLoading && !isTransition) return `${baseClasses} ${timingClass} loader-transition-slide-down-enter-active`;
103
+ return `${baseClasses} ${timingClass}`;
109
104
  }
110
- if (transitionTimerRef.current) {
111
- clearTimeout(transitionTimerRef.current);
105
+ if (transitionType === "slide-left") {
106
+ if (isLoading && !isTransition) return `${baseClasses} ${timingClass} loader-transition-slide-left-enter-active`;
107
+ if (!isLoading && isTransition) return `${baseClasses} ${timingClass} loader-transition-slide-left-exit-active`;
108
+ if (!isLoading && !isTransition) return `${baseClasses} ${timingClass} loader-transition-slide-left-enter-active`;
109
+ return `${baseClasses} ${timingClass}`;
112
110
  }
111
+ if (transitionType === "slide-right") {
112
+ if (isLoading && !isTransition) return `${baseClasses} ${timingClass} loader-transition-slide-right-enter-active`;
113
+ if (!isLoading && isTransition) return `${baseClasses} ${timingClass} loader-transition-slide-right-exit-active`;
114
+ if (!isLoading && !isTransition) return `${baseClasses} ${timingClass} loader-transition-slide-right-enter-active`;
115
+ return `${baseClasses} ${timingClass}`;
116
+ }
117
+ if (transitionType === "scale") {
118
+ if (isLoading && !isTransition) return `${baseClasses} ${timingClass} loader-transition-scale-enter-active`;
119
+ if (!isLoading && isTransition) return `${baseClasses} ${timingClass} loader-transition-scale-exit-active`;
120
+ if (!isLoading && !isTransition) return `${baseClasses} ${timingClass} loader-transition-scale-enter-active`;
121
+ return `${baseClasses} ${timingClass}`;
122
+ }
123
+ return baseClasses;
113
124
  };
114
- }, [visible, delay, minDuration, hasTransition, transitionDuration]);
115
- const opacity = hasTransition ? isTransitioning ? 1 : 0 : 1;
116
- const transitionStyle = hasTransition ? `opacity ${transitionDuration}ms ease-in-out` : "none";
117
- return {
118
- shouldRender,
119
- opacity,
120
- transitionStyle
121
- };
122
- }
123
- exports.getEffectiveDuration = getEffectiveDuration;
124
- exports.useLoaderVisibility = useLoaderVisibility;
125
- exports.useReducedMotion = useReducedMotion;
125
+ const shouldShowLoading = showLoading || keepMounted && loading;
126
+ const shouldShowContent = showContent || keepMounted && !loading;
127
+ return /* @__PURE__ */ jsxRuntime.jsxs(
128
+ "div",
129
+ {
130
+ ref,
131
+ "data-testid": testId,
132
+ className: classNames.cn("relative", className),
133
+ style,
134
+ role: "status",
135
+ "aria-label": ariaLabel,
136
+ "aria-busy": loading,
137
+ ...rest,
138
+ children: [
139
+ shouldShowLoading && /* @__PURE__ */ jsxRuntime.jsx(
140
+ "div",
141
+ {
142
+ className: getTransitionClasses(true, isTransitioning),
143
+ style: {
144
+ transitionDuration: `${duration}ms`,
145
+ display: showLoading ? "block" : "none"
146
+ },
147
+ children: loadingContent
148
+ }
149
+ ),
150
+ shouldShowContent && /* @__PURE__ */ jsxRuntime.jsx(
151
+ "div",
152
+ {
153
+ className: getTransitionClasses(false, isTransitioning),
154
+ style: {
155
+ transitionDuration: `${duration}ms`,
156
+ display: showContent ? "block" : "none"
157
+ },
158
+ children
159
+ }
160
+ )
161
+ ]
162
+ }
163
+ );
164
+ }
165
+ );
166
+ LoaderTransition.displayName = "LoaderTransition";
167
+ exports.LoaderTransition = LoaderTransition;