@rokku-x/react-hook-loading-spinner 0.2.0 → 0.2.1
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.
- package/dist/index.cjs.js +6 -11
- package/dist/index.esm.js +127 -300
- package/dist/store/loadingStore.d.ts +1 -17
- package/package.json +2 -2
package/dist/index.cjs.js
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
2
|
-
|
|
3
|
-
[zustand devtools middleware] Unsupported __setState action format.
|
|
4
|
-
When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),
|
|
5
|
-
and value of this only key should be a state object. Example: { "type": "__setState", "state": { "abc123Store": { "foo": "bar" } } }
|
|
6
|
-
`);const S=l.state[a];if(S==null)return;JSON.stringify(o.getState())!==JSON.stringify(S)&&u(S);return}o.dispatchFromDevtools&&typeof o.dispatch=="function"&&o.dispatch(l)});case"DISPATCH":switch(d.payload.type){case"RESET":return u(b),a===void 0?r?.init(o.getState()):r?.init(w(v.name));case"COMMIT":if(a===void 0){r?.init(o.getState());return}return r?.init(w(v.name));case"ROLLBACK":return O(d.state,l=>{if(a===void 0){u(l),r?.init(o.getState());return}u(l[a]),r?.init(w(v.name))});case"JUMP_TO_STATE":case"JUMP_TO_ACTION":return O(d.state,l=>{if(a===void 0){u(l);return}JSON.stringify(o.getState())!==JSON.stringify(l[a])&&u(l[a])});case"IMPORT_STATE":{const{nextLiftedState:l}=d.payload,S=(p=l.computedStates.slice(-1)[0])==null?void 0:p.state;if(!S)return;u(a===void 0?S:S[a]),r?.send(null,l);return}case"PAUSE_RECORDING":return L=!L}return}}),b},G=q,O=(e,t)=>{let n;try{n=JSON.parse(e)}catch(i){console.error("[zustand devtools middleware] Could not parse the received json",i)}n!==void 0&&t(n)};class R extends EventTarget{constructor(){super(...arguments),this.controller=new AbortController}on(t,n){return this.addEventListener(t,i=>n(i.detail),{signal:this.controller.signal}),this}once(t,n){return this.addEventListener(t,i=>n(i.detail),{signal:this.controller.signal,once:!0}),this}emit(t,n){return this.dispatchEvent(new CustomEvent(t,{detail:n}))}removeAllListeners(){this.controller.abort(),this.controller=new AbortController}}const h=new R,_=$()(G((e,t)=>({loadingCount:0,overrideState:null,localCounters:{},isLoading(){return t().overrideState??t().loadingCount>0},actions:{isGlobalLoading(){return t().isLoading()},startLoading:n=>{const i=t().isLoading();e(s=>({loadingCount:s.loadingCount+1})),n&&e(s=>({localCounters:{...s.localCounters,[n]:(s.localCounters[n]??0)+1}}));const o=t().isLoading();o&&!i&&h.emit("start",null),h.emit("change",{isLoading:o,isOverrideState:t().overrideState!==null})},stopLoading:n=>{const i=t().isLoading(),o=n?t().localCounters[n]??0:0;n&&o>0&&e(f=>({loadingCount:Math.max(0,f.loadingCount-1),localCounters:{...f.localCounters,[n]:Math.max(0,f.localCounters[n]-1)}}));const s=t().isLoading();!s&&i&&h.emit("stop",null),h.emit("change",{isLoading:s,isOverrideState:t().overrideState!==null})},overrideLoading:n=>{const i=t().isLoading();e({overrideState:n});const o=t().isLoading();o&&!i?h.emit("start",null):!o&&i&&h.emit("stop",null),h.emit("change",{isLoading:o,isOverrideState:n!==null})},getLocalCounter:n=>t().localCounters[n]??0,isLocalLoading:n=>(t().localCounters[n]??0)>0}})));function A(){const e=y.useId(),{actions:t}=_(s=>s),n=()=>{t.startLoading(e)},i=()=>{t.isLocalLoading(e)&&t.stopLoading(e)},o=async s=>{n();try{return await s}finally{i()}};return{overrideLoading:t.overrideLoading,startLoading:n,stopLoading:i,get isLocalLoading(){return t.isLocalLoading(e)},asyncUseLoading:o,get isLoading(){return t.isGlobalLoading()}}}function V(){const e=N.randomUUID(),{actions:t}=_(s=>s),n=()=>{t.startLoading(e)},i=()=>{t.isLocalLoading(e)&&t.stopLoading(e)},o=async s=>{n();try{return await s}finally{i()}};return{overrideLoading:t.overrideLoading,startLoading:n,stopLoading:i,get isLocalLoading(){return t.isLocalLoading(e)},asyncUseLoading:o,get isLoading(){return t.isGlobalLoading()}}}const m={Spin:"spin",FadeInOut:"fadeInOut",None:"none"},B=({scale:e=1,animationType:t=m.Spin,animationDuration:n,children:i,style:o,className:s,id:f,prefix:a})=>{const v=t,g=t===m.Spin?1:t===m.FadeInOut?2:0,r=n||g,c=t===m.Spin?"linear":t===m.FadeInOut?"ease-in-out":"linear",L=t===m.None?"none":`${a}-${v} ${r}s ${c} infinite`;return C.jsx("div",{style:{animation:L,...e!==1?{zoom:e}:{},...o},className:s,id:f,children:i})},k=e=>C.jsx("div",{id:"loading-circle",style:{width:"90px",height:"90px",border:"15px solid #f3f3f3",borderTop:"15px solid #009b4bff",borderRadius:"50%",boxSizing:"border-box"},...e}),D=e=>C.jsx("div",{style:{padding:"20px",fontSize:"25px",color:"#333",fontFamily:"system-ui, sans-serif"},...e,children:"Please wait..."});function X({loadingComponent:e,loadingComponentScale:t=1,animationType:n=m.Spin,animationDuration:i,wrapperStyle:o,wrapperClassName:s,wrapperId:f,animationWrapperStyle:a,animationWrapperClassName:v,animationWrapperId:g}){e=e||(n===m.Spin?k:D);const r=y.useRef(Math.random().toString(36).substring(2,6).replace(/[0-9]/g,"")),{loadingCount:c,overrideState:L}=_(p=>p),u=L??c>0,b=y.useRef(null);y.useEffect(()=>{u?(b.current?.showModal(),document.body.setAttribute("inert","")):(b.current?.close(),document.body.removeAttribute("inert"))},[u]);const d=f||"loading-wrapper-"+r.current;return u?F.createPortal(C.jsxs(C.Fragment,{children:[C.jsx("style",{children:`
|
|
7
|
-
dialog#${d}[open] {
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react"),O=require("crypto"),L=require("react/jsx-runtime"),A=require("react-dom"),y=n=>{let t;const e=new Set,o=(s,l)=>{const d=typeof s=="function"?s(t):s;if(!Object.is(d,t)){const p=t;t=l??(typeof d!="object"||d===null)?d:Object.assign({},t,d),e.forEach(m=>m(t,p))}},r=()=>t,f={setState:o,getState:r,getInitialState:()=>b,subscribe:s=>(e.add(s),()=>e.delete(s))},b=t=n(o,r,f);return f},R=(n=>n?y(n):y),$=n=>n;function F(n,t=$){const e=a.useSyncExternalStore(n.subscribe,a.useCallback(()=>t(n.getState()),[n,t]),a.useCallback(()=>t(n.getInitialState()),[n,t]));return a.useDebugValue(e),e}const x=n=>{const t=R(n),e=o=>F(t,o);return Object.assign(e,t),e},k=(n=>n?x(n):x);class C extends EventTarget{constructor(){super(...arguments),this.controller=new AbortController}on(t,e){return this.addEventListener(t,o=>e(o.detail),{signal:this.controller.signal}),this}once(t,e){return this.addEventListener(t,o=>e(o.detail),{signal:this.controller.signal,once:!0}),this}emit(t,e){return this.dispatchEvent(new CustomEvent(t,{detail:e}))}removeAllListeners(){this.controller.abort(),this.controller=new AbortController}}const g=new C,v=k()((n,t)=>({loadingCount:0,overrideState:null,localCounters:{},isLoading(){return t().overrideState??t().loadingCount>0},actions:{isGlobalLoading(){return t().isLoading()},startLoading:e=>{const o=t().isLoading();n(i=>({loadingCount:i.loadingCount+1})),e&&n(i=>({localCounters:{...i.localCounters,[e]:(i.localCounters[e]??0)+1}}));const r=t().isLoading();r&&!o&&g.emit("start",null),g.emit("change",{isLoading:r,isOverrideState:t().overrideState!==null})},stopLoading:e=>{const o=t().isLoading(),r=e?t().localCounters[e]??0:0;e&&r>0&&n(u=>({loadingCount:Math.max(0,u.loadingCount-1),localCounters:{...u.localCounters,[e]:Math.max(0,u.localCounters[e]-1)}}));const i=t().isLoading();!i&&o&&g.emit("stop",null),g.emit("change",{isLoading:i,isOverrideState:t().overrideState!==null})},overrideLoading:e=>{const o=t().isLoading();n({overrideState:e});const r=t().isLoading();r&&!o?g.emit("start",null):!r&&o&&g.emit("stop",null),g.emit("change",{isLoading:r,isOverrideState:e!==null})},getLocalCounter:e=>t().localCounters[e]??0,isLocalLoading:e=>(t().localCounters[e]??0)>0}}));function w(){const n=a.useId(),{actions:t}=v(i=>i),e=()=>{t.startLoading(n)},o=()=>{t.isLocalLoading(n)&&t.stopLoading(n)},r=async i=>{e();try{return await i}finally{o()}};return{overrideLoading:t.overrideLoading,startLoading:e,stopLoading:o,get isLocalLoading(){return t.isLocalLoading(n)},asyncUseLoading:r,get isLoading(){return t.isGlobalLoading()}}}function M(){const n=O.randomUUID(),{actions:t}=v(i=>i),e=()=>{t.startLoading(n)},o=()=>{t.isLocalLoading(n)&&t.stopLoading(n)},r=async i=>{e();try{return await i}finally{o()}};return{overrideLoading:t.overrideLoading,startLoading:e,stopLoading:o,get isLocalLoading(){return t.isLocalLoading(n)},asyncUseLoading:r,get isLoading(){return t.isGlobalLoading()}}}const c={Spin:"spin",FadeInOut:"fadeInOut",None:"none"},N=({scale:n=1,animationType:t=c.Spin,animationDuration:e,children:o,style:r,className:i,id:u,prefix:f})=>{const b=t,s=t===c.Spin?1:t===c.FadeInOut?2:0,l=e||s,d=t===c.Spin?"linear":t===c.FadeInOut?"ease-in-out":"linear",p=t===c.None?"none":`${f}-${b} ${l}s ${d} infinite`;return L.jsx("div",{style:{animation:p,...n!==1?{zoom:n}:{},...r},className:i,id:u,children:o})},E=n=>L.jsx("div",{id:"loading-circle",style:{width:"90px",height:"90px",border:"15px solid #f3f3f3",borderTop:"15px solid #009b4bff",borderRadius:"50%",boxSizing:"border-box"},...n}),I=n=>L.jsx("div",{style:{padding:"20px",fontSize:"25px",color:"#333",fontFamily:"system-ui, sans-serif"},...n,children:"Please wait..."});function P({loadingComponent:n,loadingComponentScale:t=1,animationType:e=c.Spin,animationDuration:o,wrapperStyle:r,wrapperClassName:i,wrapperId:u,animationWrapperStyle:f,animationWrapperClassName:b,animationWrapperId:s}){n=n||(e===c.Spin?E:I);const l=a.useRef(Math.random().toString(36).substring(2,6).replace(/[0-9]/g,"")),{loadingCount:d,overrideState:p}=v(j=>j),m=p??d>0,S=a.useRef(null);a.useEffect(()=>{m?(S.current?.showModal(),document.body.setAttribute("inert","")):(S.current?.close(),document.body.removeAttribute("inert"))},[m]);const h=u||"loading-wrapper-"+l.current;return m?A.createPortal(L.jsxs(L.Fragment,{children:[L.jsx("style",{children:`
|
|
2
|
+
dialog#${h}[open] {
|
|
8
3
|
display: flex !important;
|
|
9
4
|
justify-content: center;
|
|
10
5
|
align-items: center;
|
|
@@ -13,18 +8,18 @@
|
|
|
13
8
|
max-width: 100%;
|
|
14
9
|
max-height: 100%;
|
|
15
10
|
}
|
|
16
|
-
@keyframes ${
|
|
11
|
+
@keyframes ${l.current}-spin {
|
|
17
12
|
0% { transform: rotate(0deg); }
|
|
18
13
|
100% { transform: rotate(360deg); }
|
|
19
14
|
}
|
|
20
|
-
@keyframes ${
|
|
15
|
+
@keyframes ${l.current}-fadeInOut {
|
|
21
16
|
0%, 100% { opacity: 0.2; }
|
|
22
17
|
50% { opacity: 1; }
|
|
23
18
|
}
|
|
24
|
-
body:has(dialog#${
|
|
19
|
+
body:has(dialog#${h}[open]) {
|
|
25
20
|
overflow: hidden;
|
|
26
21
|
}
|
|
27
22
|
body {
|
|
28
23
|
scrollbar-gutter: stable;
|
|
29
24
|
}
|
|
30
|
-
`}),
|
|
25
|
+
`}),L.jsx("dialog",{ref:S,style:{border:"none",padding:0,backgroundColor:"rgba(0, 0, 0, 0.5)",backdropFilter:"blur(2px)",...r},className:i,id:h,children:L.jsx(N,{scale:t,animationType:e,animationDuration:o,style:f,className:b,id:s,prefix:l.current,children:a.isValidElement(n)?n:a.createElement(n)})})]}),document.body):null}function q({isLoading:n=!1}){const{startLoading:t,stopLoading:e}=w();return a.useEffect(()=>(n?t():e(),()=>{n&&e()}),[n]),null}exports.AnimationType=c;exports.EventEmitter=C;exports.Loading=q;exports.LoadingCircle=E;exports.LoadingPleaseWait=I;exports.LoadingRenderer=P;exports.loadingEventTarget=g;exports.ssrLoading=M;exports.useLoading=w;
|
package/dist/index.esm.js
CHANGED
|
@@ -1,233 +1,60 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import
|
|
3
|
-
import { randomUUID as
|
|
4
|
-
import { jsx as
|
|
5
|
-
import { createPortal as
|
|
6
|
-
const
|
|
2
|
+
import L, { useId as E, useRef as y, useEffect as w } from "react";
|
|
3
|
+
import { randomUUID as O } from "crypto";
|
|
4
|
+
import { jsx as f, jsxs as $, Fragment as j } from "react/jsx-runtime";
|
|
5
|
+
import { createPortal as A } from "react-dom";
|
|
6
|
+
const x = (n) => {
|
|
7
7
|
let t;
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
if (!Object.is(
|
|
8
|
+
const o = /* @__PURE__ */ new Set(), e = (a, s) => {
|
|
9
|
+
const l = typeof a == "function" ? a(t) : a;
|
|
10
|
+
if (!Object.is(l, t)) {
|
|
11
11
|
const p = t;
|
|
12
|
-
t =
|
|
12
|
+
t = s ?? (typeof l != "object" || l === null) ? l : Object.assign({}, t, l), o.forEach((b) => b(t, p));
|
|
13
13
|
}
|
|
14
|
-
},
|
|
15
|
-
return
|
|
16
|
-
},
|
|
17
|
-
function
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
}, r = () => t, g = { setState: e, getState: r, getInitialState: () => m, subscribe: (a) => (o.add(a), () => o.delete(a)) }, m = t = n(e, r, g);
|
|
15
|
+
return g;
|
|
16
|
+
}, F = ((n) => n ? x(n) : x), k = (n) => n;
|
|
17
|
+
function N(n, t = k) {
|
|
18
|
+
const o = L.useSyncExternalStore(
|
|
19
|
+
n.subscribe,
|
|
20
|
+
L.useCallback(() => t(n.getState()), [n, t]),
|
|
21
|
+
L.useCallback(() => t(n.getInitialState()), [n, t])
|
|
22
22
|
);
|
|
23
|
-
return
|
|
23
|
+
return L.useDebugValue(o), o;
|
|
24
24
|
}
|
|
25
|
-
const
|
|
26
|
-
const t =
|
|
27
|
-
return Object.assign(
|
|
28
|
-
},
|
|
29
|
-
|
|
30
|
-
return t ? Object.fromEntries(
|
|
31
|
-
Object.entries(t.stores).map(([n, i]) => [n, i.getState()])
|
|
32
|
-
) : {};
|
|
33
|
-
}, z = (e, t, n) => {
|
|
34
|
-
if (e === void 0)
|
|
35
|
-
return {
|
|
36
|
-
type: "untracked",
|
|
37
|
-
connection: t.connect(n)
|
|
38
|
-
};
|
|
39
|
-
const i = w.get(n.name);
|
|
40
|
-
if (i)
|
|
41
|
-
return { type: "tracked", store: e, ...i };
|
|
42
|
-
const o = {
|
|
43
|
-
connection: t.connect(n),
|
|
44
|
-
stores: {}
|
|
45
|
-
};
|
|
46
|
-
return w.set(n.name, o), { type: "tracked", store: e, ...o };
|
|
47
|
-
}, G = (e, t) => {
|
|
48
|
-
if (t === void 0) return;
|
|
49
|
-
const n = w.get(e);
|
|
50
|
-
n && (delete n.stores[t], Object.keys(n.stores).length === 0 && w.delete(e));
|
|
51
|
-
}, V = (e) => {
|
|
52
|
-
var t, n;
|
|
53
|
-
if (!e) return;
|
|
54
|
-
const i = e.split(`
|
|
55
|
-
`), o = i.findIndex(
|
|
56
|
-
(g) => g.includes("api.setState")
|
|
57
|
-
);
|
|
58
|
-
if (o < 0) return;
|
|
59
|
-
const s = ((t = i[o + 1]) == null ? void 0 : t.trim()) || "";
|
|
60
|
-
return (n = /.+ (.+) .+/.exec(s)) == null ? void 0 : n[1];
|
|
61
|
-
}, W = (e, t = {}) => (n, i, o) => {
|
|
62
|
-
const { enabled: s, anonymousActionType: g, store: a, ...v } = t;
|
|
63
|
-
let f;
|
|
64
|
-
try {
|
|
65
|
-
f = (s ?? (k ? "production" : void 0) !== "production") && window.__REDUX_DEVTOOLS_EXTENSION__;
|
|
66
|
-
} catch {
|
|
67
|
-
}
|
|
68
|
-
if (!f)
|
|
69
|
-
return e(n, i, o);
|
|
70
|
-
const { connection: r, ...c } = z(a, f, v);
|
|
71
|
-
let p = !0;
|
|
72
|
-
o.setState = ((d, S, l) => {
|
|
73
|
-
const L = n(d, S);
|
|
74
|
-
if (!p) return L;
|
|
75
|
-
const O = l === void 0 ? {
|
|
76
|
-
type: g || V(new Error().stack) || "anonymous"
|
|
77
|
-
} : typeof l == "string" ? { type: l } : l;
|
|
78
|
-
return a === void 0 ? (r?.send(O, i()), L) : (r?.send(
|
|
79
|
-
{
|
|
80
|
-
...O,
|
|
81
|
-
type: `${a}/${O.type}`
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
..._(v.name),
|
|
85
|
-
[a]: o.getState()
|
|
86
|
-
}
|
|
87
|
-
), L);
|
|
88
|
-
}), o.devtools = {
|
|
89
|
-
cleanup: () => {
|
|
90
|
-
r && typeof r.unsubscribe == "function" && r.unsubscribe(), G(v.name, a);
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
const u = (...d) => {
|
|
94
|
-
const S = p;
|
|
95
|
-
p = !1, n(...d), p = S;
|
|
96
|
-
}, m = e(o.setState, i, o);
|
|
97
|
-
if (c.type === "untracked" ? r?.init(m) : (c.stores[c.store] = o, r?.init(
|
|
98
|
-
Object.fromEntries(
|
|
99
|
-
Object.entries(c.stores).map(([d, S]) => [
|
|
100
|
-
d,
|
|
101
|
-
d === c.store ? m : S.getState()
|
|
102
|
-
])
|
|
103
|
-
)
|
|
104
|
-
)), o.dispatchFromDevtools && typeof o.dispatch == "function") {
|
|
105
|
-
let d = !1;
|
|
106
|
-
const S = o.dispatch;
|
|
107
|
-
o.dispatch = (...l) => {
|
|
108
|
-
(k ? "production" : void 0) !== "production" && l[0].type === "__setState" && !d && (console.warn(
|
|
109
|
-
'[zustand devtools middleware] "__setState" action type is reserved to set state from the devtools. Avoid using it.'
|
|
110
|
-
), d = !0), S(...l);
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
return r.subscribe((d) => {
|
|
114
|
-
var S;
|
|
115
|
-
switch (d.type) {
|
|
116
|
-
case "ACTION":
|
|
117
|
-
if (typeof d.payload != "string") {
|
|
118
|
-
console.error(
|
|
119
|
-
"[zustand devtools middleware] Unsupported action format"
|
|
120
|
-
);
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
return E(
|
|
124
|
-
d.payload,
|
|
125
|
-
(l) => {
|
|
126
|
-
if (l.type === "__setState") {
|
|
127
|
-
if (a === void 0) {
|
|
128
|
-
u(l.state);
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
Object.keys(l.state).length !== 1 && console.error(
|
|
132
|
-
`
|
|
133
|
-
[zustand devtools middleware] Unsupported __setState action format.
|
|
134
|
-
When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),
|
|
135
|
-
and value of this only key should be a state object. Example: { "type": "__setState", "state": { "abc123Store": { "foo": "bar" } } }
|
|
136
|
-
`
|
|
137
|
-
);
|
|
138
|
-
const L = l.state[a];
|
|
139
|
-
if (L == null)
|
|
140
|
-
return;
|
|
141
|
-
JSON.stringify(o.getState()) !== JSON.stringify(L) && u(L);
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
o.dispatchFromDevtools && typeof o.dispatch == "function" && o.dispatch(l);
|
|
145
|
-
}
|
|
146
|
-
);
|
|
147
|
-
case "DISPATCH":
|
|
148
|
-
switch (d.payload.type) {
|
|
149
|
-
case "RESET":
|
|
150
|
-
return u(m), a === void 0 ? r?.init(o.getState()) : r?.init(_(v.name));
|
|
151
|
-
case "COMMIT":
|
|
152
|
-
if (a === void 0) {
|
|
153
|
-
r?.init(o.getState());
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
return r?.init(_(v.name));
|
|
157
|
-
case "ROLLBACK":
|
|
158
|
-
return E(d.state, (l) => {
|
|
159
|
-
if (a === void 0) {
|
|
160
|
-
u(l), r?.init(o.getState());
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
u(l[a]), r?.init(_(v.name));
|
|
164
|
-
});
|
|
165
|
-
case "JUMP_TO_STATE":
|
|
166
|
-
case "JUMP_TO_ACTION":
|
|
167
|
-
return E(d.state, (l) => {
|
|
168
|
-
if (a === void 0) {
|
|
169
|
-
u(l);
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
JSON.stringify(o.getState()) !== JSON.stringify(l[a]) && u(l[a]);
|
|
173
|
-
});
|
|
174
|
-
case "IMPORT_STATE": {
|
|
175
|
-
const { nextLiftedState: l } = d.payload, L = (S = l.computedStates.slice(-1)[0]) == null ? void 0 : S.state;
|
|
176
|
-
if (!L) return;
|
|
177
|
-
u(a === void 0 ? L : L[a]), r?.send(
|
|
178
|
-
null,
|
|
179
|
-
// FIXME no-any
|
|
180
|
-
l
|
|
181
|
-
);
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
case "PAUSE_RECORDING":
|
|
185
|
-
return p = !p;
|
|
186
|
-
}
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
}), m;
|
|
190
|
-
}, B = W, E = (e, t) => {
|
|
191
|
-
let n;
|
|
192
|
-
try {
|
|
193
|
-
n = JSON.parse(e);
|
|
194
|
-
} catch (i) {
|
|
195
|
-
console.error(
|
|
196
|
-
"[zustand devtools middleware] Could not parse the received json",
|
|
197
|
-
i
|
|
198
|
-
);
|
|
199
|
-
}
|
|
200
|
-
n !== void 0 && t(n);
|
|
201
|
-
};
|
|
202
|
-
class X extends EventTarget {
|
|
25
|
+
const C = (n) => {
|
|
26
|
+
const t = F(n), o = (e) => N(t, e);
|
|
27
|
+
return Object.assign(o, t), o;
|
|
28
|
+
}, R = ((n) => n ? C(n) : C);
|
|
29
|
+
class M extends EventTarget {
|
|
203
30
|
constructor() {
|
|
204
31
|
super(...arguments), this.controller = new AbortController();
|
|
205
32
|
}
|
|
206
|
-
on(t,
|
|
33
|
+
on(t, o) {
|
|
207
34
|
return this.addEventListener(
|
|
208
35
|
t,
|
|
209
|
-
(
|
|
36
|
+
(e) => o(e.detail),
|
|
210
37
|
{ signal: this.controller.signal }
|
|
211
38
|
), this;
|
|
212
39
|
}
|
|
213
|
-
once(t,
|
|
40
|
+
once(t, o) {
|
|
214
41
|
return this.addEventListener(
|
|
215
42
|
t,
|
|
216
|
-
(
|
|
43
|
+
(e) => o(e.detail),
|
|
217
44
|
{
|
|
218
45
|
signal: this.controller.signal,
|
|
219
46
|
once: !0
|
|
220
47
|
}
|
|
221
48
|
), this;
|
|
222
49
|
}
|
|
223
|
-
emit(t,
|
|
224
|
-
return this.dispatchEvent(new CustomEvent(t, { detail:
|
|
50
|
+
emit(t, o) {
|
|
51
|
+
return this.dispatchEvent(new CustomEvent(t, { detail: o }));
|
|
225
52
|
}
|
|
226
53
|
removeAllListeners() {
|
|
227
54
|
this.controller.abort(), this.controller = new AbortController();
|
|
228
55
|
}
|
|
229
56
|
}
|
|
230
|
-
const
|
|
57
|
+
const u = new M(), v = R()((n, t) => ({
|
|
231
58
|
loadingCount: 0,
|
|
232
59
|
overrideState: null,
|
|
233
60
|
localCounters: {},
|
|
@@ -238,121 +65,121 @@ const h = new X(), I = J()(B((e, t) => ({
|
|
|
238
65
|
isGlobalLoading() {
|
|
239
66
|
return t().isLoading();
|
|
240
67
|
},
|
|
241
|
-
startLoading: (
|
|
242
|
-
const
|
|
243
|
-
|
|
68
|
+
startLoading: (o) => {
|
|
69
|
+
const e = t().isLoading();
|
|
70
|
+
n((i) => ({ loadingCount: i.loadingCount + 1 })), o && n((i) => ({
|
|
244
71
|
localCounters: {
|
|
245
|
-
...
|
|
246
|
-
[
|
|
72
|
+
...i.localCounters,
|
|
73
|
+
[o]: (i.localCounters[o] ?? 0) + 1
|
|
247
74
|
}
|
|
248
75
|
}));
|
|
249
|
-
const
|
|
250
|
-
|
|
76
|
+
const r = t().isLoading();
|
|
77
|
+
r && !e && u.emit("start", null), u.emit("change", { isLoading: r, isOverrideState: t().overrideState !== null });
|
|
251
78
|
},
|
|
252
|
-
stopLoading: (
|
|
253
|
-
const
|
|
254
|
-
|
|
255
|
-
loadingCount: Math.max(0,
|
|
79
|
+
stopLoading: (o) => {
|
|
80
|
+
const e = t().isLoading(), r = o ? t().localCounters[o] ?? 0 : 0;
|
|
81
|
+
o && r > 0 && n((d) => ({
|
|
82
|
+
loadingCount: Math.max(0, d.loadingCount - 1),
|
|
256
83
|
localCounters: {
|
|
257
|
-
...
|
|
258
|
-
[
|
|
84
|
+
...d.localCounters,
|
|
85
|
+
[o]: Math.max(0, d.localCounters[o] - 1)
|
|
259
86
|
}
|
|
260
87
|
}));
|
|
261
|
-
const s = t().isLoading();
|
|
262
|
-
!s && i && h.emit("stop", null), h.emit("change", { isLoading: s, isOverrideState: t().overrideState !== null });
|
|
263
|
-
},
|
|
264
|
-
overrideLoading: (n) => {
|
|
265
88
|
const i = t().isLoading();
|
|
266
|
-
e({
|
|
267
|
-
|
|
268
|
-
|
|
89
|
+
!i && e && u.emit("stop", null), u.emit("change", { isLoading: i, isOverrideState: t().overrideState !== null });
|
|
90
|
+
},
|
|
91
|
+
overrideLoading: (o) => {
|
|
92
|
+
const e = t().isLoading();
|
|
93
|
+
n({ overrideState: o });
|
|
94
|
+
const r = t().isLoading();
|
|
95
|
+
r && !e ? u.emit("start", null) : !r && e && u.emit("stop", null), u.emit("change", { isLoading: r, isOverrideState: o !== null });
|
|
269
96
|
},
|
|
270
|
-
getLocalCounter: (
|
|
271
|
-
isLocalLoading: (
|
|
97
|
+
getLocalCounter: (o) => t().localCounters[o] ?? 0,
|
|
98
|
+
isLocalLoading: (o) => (t().localCounters[o] ?? 0) > 0
|
|
272
99
|
}
|
|
273
|
-
}))
|
|
274
|
-
function
|
|
275
|
-
const
|
|
276
|
-
t.startLoading(
|
|
277
|
-
},
|
|
278
|
-
t.isLocalLoading(
|
|
279
|
-
},
|
|
280
|
-
|
|
100
|
+
}));
|
|
101
|
+
function U() {
|
|
102
|
+
const n = E(), { actions: t } = v((i) => i), o = () => {
|
|
103
|
+
t.startLoading(n);
|
|
104
|
+
}, e = () => {
|
|
105
|
+
t.isLocalLoading(n) && t.stopLoading(n);
|
|
106
|
+
}, r = async (i) => {
|
|
107
|
+
o();
|
|
281
108
|
try {
|
|
282
|
-
return await
|
|
109
|
+
return await i;
|
|
283
110
|
} finally {
|
|
284
|
-
|
|
111
|
+
e();
|
|
285
112
|
}
|
|
286
113
|
};
|
|
287
114
|
return {
|
|
288
115
|
overrideLoading: t.overrideLoading,
|
|
289
|
-
startLoading:
|
|
290
|
-
stopLoading:
|
|
116
|
+
startLoading: o,
|
|
117
|
+
stopLoading: e,
|
|
291
118
|
get isLocalLoading() {
|
|
292
|
-
return t.isLocalLoading(
|
|
119
|
+
return t.isLocalLoading(n);
|
|
293
120
|
},
|
|
294
|
-
asyncUseLoading:
|
|
121
|
+
asyncUseLoading: r,
|
|
295
122
|
get isLoading() {
|
|
296
123
|
return t.isGlobalLoading();
|
|
297
124
|
}
|
|
298
125
|
};
|
|
299
126
|
}
|
|
300
|
-
function
|
|
301
|
-
const
|
|
302
|
-
t.startLoading(
|
|
303
|
-
},
|
|
304
|
-
t.isLocalLoading(
|
|
305
|
-
},
|
|
306
|
-
|
|
127
|
+
function q() {
|
|
128
|
+
const n = O(), { actions: t } = v((i) => i), o = () => {
|
|
129
|
+
t.startLoading(n);
|
|
130
|
+
}, e = () => {
|
|
131
|
+
t.isLocalLoading(n) && t.stopLoading(n);
|
|
132
|
+
}, r = async (i) => {
|
|
133
|
+
o();
|
|
307
134
|
try {
|
|
308
|
-
return await
|
|
135
|
+
return await i;
|
|
309
136
|
} finally {
|
|
310
|
-
|
|
137
|
+
e();
|
|
311
138
|
}
|
|
312
139
|
};
|
|
313
140
|
return {
|
|
314
141
|
overrideLoading: t.overrideLoading,
|
|
315
|
-
startLoading:
|
|
316
|
-
stopLoading:
|
|
142
|
+
startLoading: o,
|
|
143
|
+
stopLoading: e,
|
|
317
144
|
get isLocalLoading() {
|
|
318
|
-
return t.isLocalLoading(
|
|
145
|
+
return t.isLocalLoading(n);
|
|
319
146
|
},
|
|
320
|
-
asyncUseLoading:
|
|
147
|
+
asyncUseLoading: r,
|
|
321
148
|
get isLoading() {
|
|
322
149
|
return t.isGlobalLoading();
|
|
323
150
|
}
|
|
324
151
|
};
|
|
325
152
|
}
|
|
326
|
-
const
|
|
153
|
+
const c = {
|
|
327
154
|
Spin: "spin",
|
|
328
155
|
FadeInOut: "fadeInOut",
|
|
329
156
|
None: "none"
|
|
330
|
-
},
|
|
331
|
-
const
|
|
332
|
-
return /* @__PURE__ */
|
|
333
|
-
},
|
|
334
|
-
function
|
|
335
|
-
loadingComponent:
|
|
157
|
+
}, z = ({ scale: n = 1, animationType: t = c.Spin, animationDuration: o, children: e, style: r, className: i, id: d, prefix: g }) => {
|
|
158
|
+
const m = t, a = t === c.Spin ? 1 : t === c.FadeInOut ? 2 : 0, s = o || a, l = t === c.Spin ? "linear" : t === c.FadeInOut ? "ease-in-out" : "linear", p = t === c.None ? "none" : `${g}-${m} ${s}s ${l} infinite`;
|
|
159
|
+
return /* @__PURE__ */ f("div", { style: { animation: p, ...n !== 1 ? { zoom: n } : {}, ...r }, className: i, id: d, children: e });
|
|
160
|
+
}, D = (n) => /* @__PURE__ */ f("div", { id: "loading-circle", style: { width: "90px", height: "90px", border: "15px solid #f3f3f3", borderTop: "15px solid #009b4bff", borderRadius: "50%", boxSizing: "border-box" }, ...n }), G = (n) => /* @__PURE__ */ f("div", { style: { padding: "20px", fontSize: "25px", color: "#333", fontFamily: "system-ui, sans-serif" }, ...n, children: "Please wait..." });
|
|
161
|
+
function H({
|
|
162
|
+
loadingComponent: n,
|
|
336
163
|
loadingComponentScale: t = 1,
|
|
337
|
-
animationType:
|
|
338
|
-
animationDuration:
|
|
339
|
-
wrapperStyle:
|
|
340
|
-
wrapperClassName:
|
|
341
|
-
wrapperId:
|
|
342
|
-
animationWrapperStyle:
|
|
343
|
-
animationWrapperClassName:
|
|
344
|
-
animationWrapperId:
|
|
164
|
+
animationType: o = c.Spin,
|
|
165
|
+
animationDuration: e,
|
|
166
|
+
wrapperStyle: r,
|
|
167
|
+
wrapperClassName: i,
|
|
168
|
+
wrapperId: d,
|
|
169
|
+
animationWrapperStyle: g,
|
|
170
|
+
animationWrapperClassName: m,
|
|
171
|
+
animationWrapperId: a
|
|
345
172
|
}) {
|
|
346
|
-
|
|
347
|
-
const
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
}, [
|
|
351
|
-
const
|
|
352
|
-
return
|
|
353
|
-
/* @__PURE__ */
|
|
354
|
-
/* @__PURE__ */
|
|
355
|
-
dialog#${
|
|
173
|
+
n = n || (o === c.Spin ? D : G);
|
|
174
|
+
const s = y(Math.random().toString(36).substring(2, 6).replace(/[0-9]/g, "")), { loadingCount: l, overrideState: p } = v((I) => I), b = p ?? l > 0, S = y(null);
|
|
175
|
+
w(() => {
|
|
176
|
+
b ? (S.current?.showModal(), document.body.setAttribute("inert", "")) : (S.current?.close(), document.body.removeAttribute("inert"));
|
|
177
|
+
}, [b]);
|
|
178
|
+
const h = d || "loading-wrapper-" + s.current;
|
|
179
|
+
return b ? A(
|
|
180
|
+
/* @__PURE__ */ $(j, { children: [
|
|
181
|
+
/* @__PURE__ */ f("style", { children: `
|
|
182
|
+
dialog#${h}[open] {
|
|
356
183
|
display: flex !important;
|
|
357
184
|
justify-content: center;
|
|
358
185
|
align-items: center;
|
|
@@ -361,55 +188,55 @@ function ot({
|
|
|
361
188
|
max-width: 100%;
|
|
362
189
|
max-height: 100%;
|
|
363
190
|
}
|
|
364
|
-
@keyframes ${
|
|
191
|
+
@keyframes ${s.current}-spin {
|
|
365
192
|
0% { transform: rotate(0deg); }
|
|
366
193
|
100% { transform: rotate(360deg); }
|
|
367
194
|
}
|
|
368
|
-
@keyframes ${
|
|
195
|
+
@keyframes ${s.current}-fadeInOut {
|
|
369
196
|
0%, 100% { opacity: 0.2; }
|
|
370
197
|
50% { opacity: 1; }
|
|
371
198
|
}
|
|
372
|
-
body:has(dialog#${
|
|
199
|
+
body:has(dialog#${h}[open]) {
|
|
373
200
|
overflow: hidden;
|
|
374
201
|
}
|
|
375
202
|
body {
|
|
376
203
|
scrollbar-gutter: stable;
|
|
377
204
|
}
|
|
378
205
|
` }),
|
|
379
|
-
/* @__PURE__ */
|
|
206
|
+
/* @__PURE__ */ f(
|
|
380
207
|
"dialog",
|
|
381
208
|
{
|
|
382
|
-
ref:
|
|
209
|
+
ref: S,
|
|
383
210
|
style: {
|
|
384
211
|
border: "none",
|
|
385
212
|
padding: 0,
|
|
386
213
|
backgroundColor: "rgba(0, 0, 0, 0.5)",
|
|
387
214
|
backdropFilter: "blur(2px)",
|
|
388
|
-
...
|
|
215
|
+
...r
|
|
389
216
|
},
|
|
390
|
-
className:
|
|
391
|
-
id:
|
|
392
|
-
children: /* @__PURE__ */
|
|
217
|
+
className: i,
|
|
218
|
+
id: h,
|
|
219
|
+
children: /* @__PURE__ */ f(z, { scale: t, animationType: o, animationDuration: e, style: g, className: m, id: a, prefix: s.current, children: L.isValidElement(n) ? n : L.createElement(n) })
|
|
393
220
|
}
|
|
394
221
|
)
|
|
395
222
|
] }),
|
|
396
223
|
document.body
|
|
397
224
|
) : null;
|
|
398
225
|
}
|
|
399
|
-
function
|
|
400
|
-
const { startLoading: t, stopLoading:
|
|
401
|
-
return
|
|
402
|
-
|
|
403
|
-
}), [
|
|
226
|
+
function J({ isLoading: n = !1 }) {
|
|
227
|
+
const { startLoading: t, stopLoading: o } = U();
|
|
228
|
+
return w(() => (n ? t() : o(), () => {
|
|
229
|
+
n && o();
|
|
230
|
+
}), [n]), null;
|
|
404
231
|
}
|
|
405
232
|
export {
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
233
|
+
c as AnimationType,
|
|
234
|
+
M as EventEmitter,
|
|
235
|
+
J as Loading,
|
|
236
|
+
D as LoadingCircle,
|
|
237
|
+
G as LoadingPleaseWait,
|
|
238
|
+
H as LoadingRenderer,
|
|
239
|
+
u as loadingEventTarget,
|
|
240
|
+
q as ssrLoading,
|
|
241
|
+
U as useLoading
|
|
415
242
|
};
|
|
@@ -22,21 +22,5 @@ interface Store {
|
|
|
22
22
|
isLocalLoading: (instanceId: string) => boolean;
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
|
-
export declare const loadingStore: import('zustand').UseBoundStore<
|
|
26
|
-
setState(partial: Store | Partial<Store> | ((state: Store) => Store | Partial<Store>), replace?: false | undefined, action?: (string | {
|
|
27
|
-
[x: string]: unknown;
|
|
28
|
-
[x: number]: unknown;
|
|
29
|
-
[x: symbol]: unknown;
|
|
30
|
-
type: string;
|
|
31
|
-
}) | undefined): void;
|
|
32
|
-
setState(state: Store | ((state: Store) => Store), replace: true, action?: (string | {
|
|
33
|
-
[x: string]: unknown;
|
|
34
|
-
[x: number]: unknown;
|
|
35
|
-
[x: symbol]: unknown;
|
|
36
|
-
type: string;
|
|
37
|
-
}) | undefined): void;
|
|
38
|
-
devtools: {
|
|
39
|
-
cleanup: () => void;
|
|
40
|
-
};
|
|
41
|
-
}>;
|
|
25
|
+
export declare const loadingStore: import('zustand').UseBoundStore<import('zustand').StoreApi<Store>>;
|
|
42
26
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rokku-x/react-hook-loading-spinner",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "A lightweight and flexible React loading state hook library with built-in spinner components, global state management, and zero dependencies (except React and Zustand).",
|
|
5
5
|
"main": "dist/index.cjs.js",
|
|
6
6
|
"module": "dist/index.esm.js",
|
|
@@ -78,4 +78,4 @@
|
|
|
78
78
|
"dependencies": {
|
|
79
79
|
"zustand": "^5.0.10"
|
|
80
80
|
}
|
|
81
|
-
}
|
|
81
|
+
}
|