@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 CHANGED
@@ -1,10 +1,5 @@
1
- "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("react"),N=require("crypto"),C=require("react/jsx-runtime"),F=require("react-dom"),I=e=>{let t;const n=new Set,i=(g,r)=>{const c=typeof g=="function"?g(t):g;if(!Object.is(c,t)){const L=t;t=r??(typeof c!="object"||c===null)?c:Object.assign({},t,c),n.forEach(u=>u(t,L))}},o=()=>t,a={setState:i,getState:o,getInitialState:()=>v,subscribe:g=>(n.add(g),()=>n.delete(g))},v=t=e(i,o,a);return a},M=(e=>e?I(e):I),P=e=>e;function U(e,t=P){const n=y.useSyncExternalStore(e.subscribe,y.useCallback(()=>t(e.getState()),[e,t]),y.useCallback(()=>t(e.getInitialState()),[e,t]));return y.useDebugValue(n),n}const j=e=>{const t=M(e),n=i=>U(t,i);return Object.assign(n,t),n},$=(e=>e?j(e):j),T={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},E=new Map,w=e=>{const t=E.get(e);return t?Object.fromEntries(Object.entries(t.stores).map(([n,i])=>[n,i.getState()])):{}},J=(e,t,n)=>{if(e===void 0)return{type:"untracked",connection:t.connect(n)};const i=E.get(n.name);if(i)return{type:"tracked",store:e,...i};const o={connection:t.connect(n),stores:{}};return E.set(n.name,o),{type:"tracked",store:e,...o}},z=(e,t)=>{if(t===void 0)return;const n=E.get(e);n&&(delete n.stores[t],Object.keys(n.stores).length===0&&E.delete(e))},W=e=>{var t,n;if(!e)return;const i=e.split(`
2
- `),o=i.findIndex(f=>f.includes("api.setState"));if(o<0)return;const s=((t=i[o+1])==null?void 0:t.trim())||"";return(n=/.+ (.+) .+/.exec(s))==null?void 0:n[1]},q=(e,t={})=>(n,i,o)=>{const{enabled:s,anonymousActionType:f,store:a,...v}=t;let g;try{g=(s??(T?"production":void 0)!=="production")&&window.__REDUX_DEVTOOLS_EXTENSION__}catch{}if(!g)return e(n,i,o);const{connection:r,...c}=J(a,g,v);let L=!0;o.setState=((d,p,l)=>{const S=n(d,p);if(!L)return S;const x=l===void 0?{type:f||W(new Error().stack)||"anonymous"}:typeof l=="string"?{type:l}:l;return a===void 0?(r?.send(x,i()),S):(r?.send({...x,type:`${a}/${x.type}`},{...w(v.name),[a]:o.getState()}),S)}),o.devtools={cleanup:()=>{r&&typeof r.unsubscribe=="function"&&r.unsubscribe(),z(v.name,a)}};const u=(...d)=>{const p=L;L=!1,n(...d),L=p},b=e(o.setState,i,o);if(c.type==="untracked"?r?.init(b):(c.stores[c.store]=o,r?.init(Object.fromEntries(Object.entries(c.stores).map(([d,p])=>[d,d===c.store?b:p.getState()])))),o.dispatchFromDevtools&&typeof o.dispatch=="function"){let d=!1;const p=o.dispatch;o.dispatch=(...l)=>{(T?"production":void 0)!=="production"&&l[0].type==="__setState"&&!d&&(console.warn('[zustand devtools middleware] "__setState" action type is reserved to set state from the devtools. Avoid using it.'),d=!0),p(...l)}}return r.subscribe(d=>{var p;switch(d.type){case"ACTION":if(typeof d.payload!="string"){console.error("[zustand devtools middleware] Unsupported action format");return}return O(d.payload,l=>{if(l.type==="__setState"){if(a===void 0){u(l.state);return}Object.keys(l.state).length!==1&&console.error(`
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 ${r.current}-spin {
11
+ @keyframes ${l.current}-spin {
17
12
  0% { transform: rotate(0deg); }
18
13
  100% { transform: rotate(360deg); }
19
14
  }
20
- @keyframes ${r.current}-fadeInOut {
15
+ @keyframes ${l.current}-fadeInOut {
21
16
  0%, 100% { opacity: 0.2; }
22
17
  50% { opacity: 1; }
23
18
  }
24
- body:has(dialog#${d}[open]) {
19
+ body:has(dialog#${h}[open]) {
25
20
  overflow: hidden;
26
21
  }
27
22
  body {
28
23
  scrollbar-gutter: stable;
29
24
  }
30
- `}),C.jsx("dialog",{ref:b,style:{border:"none",padding:0,backgroundColor:"rgba(0, 0, 0, 0.5)",backdropFilter:"blur(2px)",...o},className:s,id:d,children:C.jsx(B,{scale:t,animationType:n,animationDuration:i,style:a,className:v,id:g,prefix:r.current,children:y.isValidElement(e)?e:y.createElement(e)})})]}),document.body):null}function H({isLoading:e=!1}){const{startLoading:t,stopLoading:n}=A();return y.useEffect(()=>(e?t():n(),()=>{e&&n()}),[e]),null}exports.AnimationType=m;exports.EventEmitter=R;exports.Loading=H;exports.LoadingCircle=k;exports.LoadingPleaseWait=D;exports.LoadingRenderer=X;exports.loadingEventTarget=h;exports.ssrLoading=V;exports.useLoading=A;
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 b, { useId as N, useRef as x, useEffect as A } from "react";
3
- import { randomUUID as j } from "crypto";
4
- import { jsx as C, jsxs as D, Fragment as F } from "react/jsx-runtime";
5
- import { createPortal as M } from "react-dom";
6
- const T = (e) => {
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 n = /* @__PURE__ */ new Set(), i = (f, r) => {
9
- const c = typeof f == "function" ? f(t) : f;
10
- if (!Object.is(c, t)) {
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 = r ?? (typeof c != "object" || c === null) ? c : Object.assign({}, t, c), n.forEach((u) => u(t, p));
12
+ t = s ?? (typeof l != "object" || l === null) ? l : Object.assign({}, t, l), o.forEach((b) => b(t, p));
13
13
  }
14
- }, o = () => t, a = { setState: i, getState: o, getInitialState: () => v, subscribe: (f) => (n.add(f), () => n.delete(f)) }, v = t = e(i, o, a);
15
- return a;
16
- }, U = ((e) => e ? T(e) : T), $ = (e) => e;
17
- function P(e, t = $) {
18
- const n = b.useSyncExternalStore(
19
- e.subscribe,
20
- b.useCallback(() => t(e.getState()), [e, t]),
21
- b.useCallback(() => t(e.getInitialState()), [e, t])
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 b.useDebugValue(n), n;
23
+ return L.useDebugValue(o), o;
24
24
  }
25
- const R = (e) => {
26
- const t = U(e), n = (i) => P(t, i);
27
- return Object.assign(n, t), n;
28
- }, J = ((e) => e ? R(e) : R), k = { BASE_URL: "/", DEV: !1, MODE: "production", PROD: !0, SSR: !1 }, w = /* @__PURE__ */ new Map(), _ = (e) => {
29
- const t = w.get(e);
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, n) {
33
+ on(t, o) {
207
34
  return this.addEventListener(
208
35
  t,
209
- (i) => n(i.detail),
36
+ (e) => o(e.detail),
210
37
  { signal: this.controller.signal }
211
38
  ), this;
212
39
  }
213
- once(t, n) {
40
+ once(t, o) {
214
41
  return this.addEventListener(
215
42
  t,
216
- (i) => n(i.detail),
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, n) {
224
- return this.dispatchEvent(new CustomEvent(t, { detail: n }));
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 h = new X(), I = J()(B((e, t) => ({
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: (n) => {
242
- const i = t().isLoading();
243
- e((s) => ({ loadingCount: s.loadingCount + 1 })), n && e((s) => ({
68
+ startLoading: (o) => {
69
+ const e = t().isLoading();
70
+ n((i) => ({ loadingCount: i.loadingCount + 1 })), o && n((i) => ({
244
71
  localCounters: {
245
- ...s.localCounters,
246
- [n]: (s.localCounters[n] ?? 0) + 1
72
+ ...i.localCounters,
73
+ [o]: (i.localCounters[o] ?? 0) + 1
247
74
  }
248
75
  }));
249
- const o = t().isLoading();
250
- o && !i && h.emit("start", null), h.emit("change", { isLoading: o, isOverrideState: t().overrideState !== null });
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: (n) => {
253
- const i = t().isLoading(), o = n ? t().localCounters[n] ?? 0 : 0;
254
- n && o > 0 && e((g) => ({
255
- loadingCount: Math.max(0, g.loadingCount - 1),
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
- ...g.localCounters,
258
- [n]: Math.max(0, g.localCounters[n] - 1)
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({ overrideState: n });
267
- const o = t().isLoading();
268
- o && !i ? h.emit("start", null) : !o && i && h.emit("stop", null), h.emit("change", { isLoading: o, isOverrideState: n !== null });
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: (n) => t().localCounters[n] ?? 0,
271
- isLocalLoading: (n) => (t().localCounters[n] ?? 0) > 0
97
+ getLocalCounter: (o) => t().localCounters[o] ?? 0,
98
+ isLocalLoading: (o) => (t().localCounters[o] ?? 0) > 0
272
99
  }
273
- })));
274
- function H() {
275
- const e = N(), { actions: t } = I((s) => s), n = () => {
276
- t.startLoading(e);
277
- }, i = () => {
278
- t.isLocalLoading(e) && t.stopLoading(e);
279
- }, o = async (s) => {
280
- n();
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 s;
109
+ return await i;
283
110
  } finally {
284
- i();
111
+ e();
285
112
  }
286
113
  };
287
114
  return {
288
115
  overrideLoading: t.overrideLoading,
289
- startLoading: n,
290
- stopLoading: i,
116
+ startLoading: o,
117
+ stopLoading: e,
291
118
  get isLocalLoading() {
292
- return t.isLocalLoading(e);
119
+ return t.isLocalLoading(n);
293
120
  },
294
- asyncUseLoading: o,
121
+ asyncUseLoading: r,
295
122
  get isLoading() {
296
123
  return t.isGlobalLoading();
297
124
  }
298
125
  };
299
126
  }
300
- function nt() {
301
- const e = j(), { actions: t } = I((s) => s), n = () => {
302
- t.startLoading(e);
303
- }, i = () => {
304
- t.isLocalLoading(e) && t.stopLoading(e);
305
- }, o = async (s) => {
306
- n();
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 s;
135
+ return await i;
309
136
  } finally {
310
- i();
137
+ e();
311
138
  }
312
139
  };
313
140
  return {
314
141
  overrideLoading: t.overrideLoading,
315
- startLoading: n,
316
- stopLoading: i,
142
+ startLoading: o,
143
+ stopLoading: e,
317
144
  get isLocalLoading() {
318
- return t.isLocalLoading(e);
145
+ return t.isLocalLoading(n);
319
146
  },
320
- asyncUseLoading: o,
147
+ asyncUseLoading: r,
321
148
  get isLoading() {
322
149
  return t.isGlobalLoading();
323
150
  }
324
151
  };
325
152
  }
326
- const y = {
153
+ const c = {
327
154
  Spin: "spin",
328
155
  FadeInOut: "fadeInOut",
329
156
  None: "none"
330
- }, K = ({ scale: e = 1, animationType: t = y.Spin, animationDuration: n, children: i, style: o, className: s, id: g, prefix: a }) => {
331
- const v = t, f = t === y.Spin ? 1 : t === y.FadeInOut ? 2 : 0, r = n || f, c = t === y.Spin ? "linear" : t === y.FadeInOut ? "ease-in-out" : "linear", p = t === y.None ? "none" : `${a}-${v} ${r}s ${c} infinite`;
332
- return /* @__PURE__ */ C("div", { style: { animation: p, ...e !== 1 ? { zoom: e } : {}, ...o }, className: s, id: g, children: i });
333
- }, q = (e) => /* @__PURE__ */ C("div", { id: "loading-circle", style: { width: "90px", height: "90px", border: "15px solid #f3f3f3", borderTop: "15px solid #009b4bff", borderRadius: "50%", boxSizing: "border-box" }, ...e }), Q = (e) => /* @__PURE__ */ C("div", { style: { padding: "20px", fontSize: "25px", color: "#333", fontFamily: "system-ui, sans-serif" }, ...e, children: "Please wait..." });
334
- function ot({
335
- loadingComponent: e,
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: n = y.Spin,
338
- animationDuration: i,
339
- wrapperStyle: o,
340
- wrapperClassName: s,
341
- wrapperId: g,
342
- animationWrapperStyle: a,
343
- animationWrapperClassName: v,
344
- animationWrapperId: f
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
- e = e || (n === y.Spin ? q : Q);
347
- const r = x(Math.random().toString(36).substring(2, 6).replace(/[0-9]/g, "")), { loadingCount: c, overrideState: p } = I((S) => S), u = p ?? c > 0, m = x(null);
348
- A(() => {
349
- u ? (m.current?.showModal(), document.body.setAttribute("inert", "")) : (m.current?.close(), document.body.removeAttribute("inert"));
350
- }, [u]);
351
- const d = g || "loading-wrapper-" + r.current;
352
- return u ? M(
353
- /* @__PURE__ */ D(F, { children: [
354
- /* @__PURE__ */ C("style", { children: `
355
- dialog#${d}[open] {
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 ${r.current}-spin {
191
+ @keyframes ${s.current}-spin {
365
192
  0% { transform: rotate(0deg); }
366
193
  100% { transform: rotate(360deg); }
367
194
  }
368
- @keyframes ${r.current}-fadeInOut {
195
+ @keyframes ${s.current}-fadeInOut {
369
196
  0%, 100% { opacity: 0.2; }
370
197
  50% { opacity: 1; }
371
198
  }
372
- body:has(dialog#${d}[open]) {
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__ */ C(
206
+ /* @__PURE__ */ f(
380
207
  "dialog",
381
208
  {
382
- ref: m,
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
- ...o
215
+ ...r
389
216
  },
390
- className: s,
391
- id: d,
392
- children: /* @__PURE__ */ C(K, { scale: t, animationType: n, animationDuration: i, style: a, className: v, id: f, prefix: r.current, children: b.isValidElement(e) ? e : b.createElement(e) })
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 it({ isLoading: e = !1 }) {
400
- const { startLoading: t, stopLoading: n } = H();
401
- return A(() => (e ? t() : n(), () => {
402
- e && n();
403
- }), [e]), null;
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
- y as AnimationType,
407
- X as EventEmitter,
408
- it as Loading,
409
- q as LoadingCircle,
410
- Q as LoadingPleaseWait,
411
- ot as LoadingRenderer,
412
- h as loadingEventTarget,
413
- nt as ssrLoading,
414
- H as useLoading
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<Omit<import('zustand').StoreApi<Store>, "setState" | "devtools"> & {
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.0",
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
+ }