@zuzjs/hooks 0.1.3 → 0.1.4
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 +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';var react=require('react'),core=require('@zuzjs/core');/* ZuzJS UI CLI */
|
|
2
2
|
var J=(s=>(s.Circle="circle",s.Square="square",s))(J||{}),V={TopLeft:"top left",TopRight:"top right",TopCenter:"top center",BottomLeft:"bottom left",BottomRight:"bottom right"},dt=V,G=(t=>(t[t.Backspace=8]="Backspace",t[t.Tab=9]="Tab",t[t.Enter=13]="Enter",t[t.Shift=16]="Shift",t[t.Ctrl=17]="Ctrl",t[t.Alt=18]="Alt",t[t.PauseBreak=19]="PauseBreak",t[t.Command=19]="Command",t[t.CapsLock=20]="CapsLock",t[t.Escape=27]="Escape",t[t.Space=32]="Space",t[t.PageUp=33]="PageUp",t[t.PageDown=34]="PageDown",t[t.End=35]="End",t[t.Home=36]="Home",t[t.ArrowLeft=37]="ArrowLeft",t[t.ArrowUp=38]="ArrowUp",t[t.ArrowRight=39]="ArrowRight",t[t.ArrowDown=40]="ArrowDown",t[t.Insert=45]="Insert",t[t.Delete=46]="Delete",t[t.Digit0=48]="Digit0",t[t.Digit1=49]="Digit1",t[t.Digit2=50]="Digit2",t[t.Digit3=51]="Digit3",t[t.Digit4=52]="Digit4",t[t.Digit5=53]="Digit5",t[t.Digit6=54]="Digit6",t[t.Digit7=55]="Digit7",t[t.Digit8=56]="Digit8",t[t.Digit9=57]="Digit9",t[t.KeyA=65]="KeyA",t[t.KeyB=66]="KeyB",t[t.KeyC=67]="KeyC",t[t.KeyD=68]="KeyD",t[t.KeyE=69]="KeyE",t[t.KeyF=70]="KeyF",t[t.KeyG=71]="KeyG",t[t.KeyH=72]="KeyH",t[t.KeyI=73]="KeyI",t[t.KeyJ=74]="KeyJ",t[t.KeyK=75]="KeyK",t[t.KeyL=76]="KeyL",t[t.KeyM=77]="KeyM",t[t.KeyN=78]="KeyN",t[t.KeyO=79]="KeyO",t[t.KeyP=80]="KeyP",t[t.KeyQ=81]="KeyQ",t[t.KeyR=82]="KeyR",t[t.KeyS=83]="KeyS",t[t.KeyT=84]="KeyT",t[t.KeyU=85]="KeyU",t[t.KeyV=86]="KeyV",t[t.KeyW=87]="KeyW",t[t.KeyX=88]="KeyX",t[t.KeyY=89]="KeyY",t[t.KeyZ=90]="KeyZ",t[t.Numpad0=96]="Numpad0",t[t.Numpad1=97]="Numpad1",t[t.Numpad2=98]="Numpad2",t[t.Numpad3=99]="Numpad3",t[t.Numpad4=100]="Numpad4",t[t.Numpad5=101]="Numpad5",t[t.Numpad6=102]="Numpad6",t[t.Numpad7=103]="Numpad7",t[t.Numpad8=104]="Numpad8",t[t.Numpad9=105]="Numpad9",t[t.NumpadMultiply=106]="NumpadMultiply",t[t.NumpadAdd=107]="NumpadAdd",t[t.NumpadSubtract=109]="NumpadSubtract",t[t.NumpadDecimal=110]="NumpadDecimal",t[t.NumpadDivide=111]="NumpadDivide",t[t.F1=112]="F1",t[t.F2=113]="F2",t[t.F3=114]="F3",t[t.F4=115]="F4",t[t.F5=116]="F5",t[t.F6=117]="F6",t[t.F7=118]="F7",t[t.F8=119]="F8",t[t.F9=120]="F9",t[t.F10=121]="F10",t[t.F11=122]="F11",t[t.F12=123]="F12",t[t.NumLock=144]="NumLock",t[t.ScrollLock=145]="ScrollLock",t[t.Semicolon=186]="Semicolon",t[t.Equal=187]="Equal",t[t.Comma=188]="Comma",t[t.Minus=189]="Minus",t[t.Period=190]="Period",t[t.Slash=191]="Slash",t[t.Backquote=192]="Backquote",t[t.BracketLeft=219]="BracketLeft",t[t.Backslash=220]="Backslash",t[t.BracketRight=221]="BracketRight",t[t.Quote=222]="Quote",t))(G||{});var wt=({command:e="/",commands:o=[],cmd:s,ref:n})=>{let[r,u]=react.useState(-1),[p,m]=react.useState(false),[b,x]=react.useState({top:0,left:0}),w=react.useRef(null),f=d=>{let l=n.current;if(l&&p){let{value:a}=l;(r<0||r>=a.length||a[r]!==e)&&m(false);}},v=d=>{let l=n.current;if(!l)return;let{selectionStart:a}=l;if(d.key===e){u(a||-1);let i=M(l,a||-1);x({top:i.top+20,left:i.left}),m(true);}else d.key==="Escape"&&(d.preventDefault(),d.stopPropagation(),m(false));},g=d=>{let l=n.current;if(l){if(s)s(d,l);else {let{value:a,selectionStart:i}=l,c=a.slice(0,r)+d+a.slice(i||-1);l.value=c,l.setSelectionRange(r+d.length,r+d.length);let S=new Event("input",{bubbles:true});l.dispatchEvent(S);}m(false),l.focus();}},M=(d,l)=>{let a=document.createElement("canvas"),i=a.getContext("2d");if(!i)return {top:0,left:0};let c=window.getComputedStyle(d);i.font=`${c.fontSize} ${c.fontFamily}`;let E=d.value.substring(0,l).split(`
|
|
3
3
|
`),P=E[E.length-1],h=i.measureText(P).width,T=parseFloat(c.lineHeight)||parseFloat(c.fontSize)*1.2,D=(E.length-1)*T,R=parseFloat(c.paddingTop)||0,F=parseFloat(c.paddingLeft)||0,k=d.scrollTop;return a.remove(),{top:D-k+R,left:h+F}};return react.useEffect(()=>{let d=l=>{n.current&&w.current&&!n.current.contains(l.target)&&!w.current.contains(l.target)&&m(false);};return document.addEventListener("mousedown",d),()=>{document.removeEventListener("mousedown",d);}},[n]),{showDropdown:p,dropdownPosition:b,handleKeyDown:v,handleInput:f,handleCommandSelect:g,parentRef:w}},xt=wt;var Et=e=>{let{name:o,version:s,meta:n}=e,r=react.useRef(null),[u,p]=react.useState(null);react.useEffect(()=>{let l=indexedDB.open(o,+s.toString().replace(/\./g,""));return l.onupgradeneeded=a=>{let i=a.target.result;n.forEach(c=>{if(!i.objectStoreNames.contains(c.name)){let S=i.createObjectStore(c.name,c.config);c.schema.forEach(E=>{S.createIndex(E.name,E.key||E.name,{unique:E.unique||false});});}});},l.onsuccess=a=>{r.current=a.target.result;},l.onerror=()=>{p("Failed to open database");},()=>r.current?.close()},[o,s]);let m=()=>new Promise((l,a)=>{r.current&&l(r.current);let i=indexedDB.open(o,+s.toString().replace(/\./g,""));i.onsuccess=c=>{r.current=c.target.result,l(r.current);},i.onerror=c=>{a(["Failed to open database",c].join(`
|
|
4
|
-
`));};}),b=(l,a)=>({store:r.current.transaction(l,a).objectStore(l)});return {getAll:l=>new Promise((a,i)=>{m().then(c=>{let{store:S}=b(l,"readonly"),E=S.getAll();E.onsuccess=P=>{P.target.result==null&&i("Record not found"),a(P.target.result);},E.onerror=P=>{i(`SELECT Failed. ${P.target.result}`);};}).catch(c=>{console.log("[getAll]",c),i("Database either corrupted or not initialized");});}),getByID:(l,a)=>new Promise((i,c)=>{m().then(S=>{let{store:E}=b(l,"readonly"),P=E.get(a);P.onsuccess=h=>{h.target.result==null&&c("Record not found"),i(h.target.result);},P.onerror=h=>{c(`SELECT Failed. ${h.target.result}`);};}).catch(S=>{console.log("[getByID]",S),c("Database either corrupted or not initialized");});}),getStore:(l,a)=>new Promise((i,c)=>{m().then(S=>{let{store:E}=b(l,"readonly"),P=E.getAll();P.onsuccess=h=>{h.target.result==null&&c("Record not found"),i(h.target.result);},P.onerror=h=>{c(`SELECT Failed. ${h.target.result}`);};}).catch(S=>{c(S.message||"Database either corrupted or not initialized");});}),insert:(l,a,i)=>new Promise((c,S)=>{m().then(E=>{let{store:P}=b(l,"readwrite"),h=P.add(a,i);h.onsuccess=T=>{c(T.target.result);},h.onerror=T=>{S(`INSERTION Failed. ${T.target.result}`);};}).catch(E=>{S(E.message||"Database either corrupted or not initialized");});}),update:(l,a)=>new Promise((i,c)=>{m().then(S=>{let {store:E}=b(l,"readwrite"),h=E.put(a);h.onsuccess=T=>{i();},h.onerror=T=>{c(`UPDATE Failed. ${T.target.result}`);};}).catch(S=>{c(`UPDATE Failed. ${S}`);});}),update_one:(l,a,i)=>new Promise((c,S)=>{m().then(E=>{let{store:P}=b(l,"readwrite"),h=P.get(i);h.onsuccess=()=>{let T=h.result;if(!T){S(`Record with key ${i} not found.`);return}let D=P.put({...T,...a});D.onsuccess=()=>c(),D.onerror=R=>S(`Update failed. ${R.target.error}`);},h.onerror=T=>{S(`Failed to get existing record. ${T.target.error}`);};}).catch(E=>{S("Database either corrupted or not initialized");});}),remove:(l,a)=>new Promise((i,c)=>{m().then(S=>{let{store:E}=b(l,"readwrite"),P=E.delete(a);P.onsuccess=h=>{i();};}).catch(S=>{console.log(S),c(`Delete failed from ${l} with key: ${a}`);});}),error:u}},Dt=Et;var Rt=(e,o,s={})=>{let[n,r]=react.useState({top:0,left:0}),[u,p]=react.useState(s.preferredAnchor||V.TopLeft),{offsetX:m=0,offsetY:b=0,overflow:x=true}=s,w=react.useRef(null),f=react.useCallback(()=>{let v=0,g=0,M=s.preferredAnchor||V.TopLeft;if(o)v=o.clientY+b,g=o.clientX+m;else if(e){let d=e.getBoundingClientRect();v=d.bottom+b,g=d.left+m;}if(x&&w.current){let d=w.current.offsetWidth,l=w.current.offsetHeight,{innerWidth:a,innerHeight:i}=window;g+d>a&&(g=o?o.clientX-d-m:(e?.getBoundingClientRect().right||0)-d,M=M.includes("Right")?M:V.TopRight),v+l>i&&(v=o?o.clientY-l-b:(e?.getBoundingClientRect().top||0)-l-b);}r({top:v,left:g}),p(M);},[o,e,m,b,x,s.preferredAnchor]);return react.useEffect(()=>{let v=setTimeout(f,0);return window.addEventListener("resize",f),()=>{clearTimeout(v),window.removeEventListener("resize",f);}},[f]),{position:n,targetRef:w,calculatedAnchor:u}},kt=Rt;var Ft=e=>e%4===0&&e%100!==0||e%400===0,Ot=(e,o)=>{switch(e){case 1:return Ft(o)?29:28;case 3:case 5:case 8:case 10:return 30;default:return 31}},nt=(e,o)=>e.toLocaleString("default",{weekday:o}),rt=(e,o)=>{let s=new Date;return s.setMonth(e),s.toLocaleString("default",{month:o})},qt=(e=1,o,s)=>{let[n,r]=react.useState(new Date),u=()=>{r(f=>{let v=new Date(f);return v.setMonth(f.getMonth()+e),v});},p=()=>{r(f=>{let v=new Date(f);return v.setMonth(v.getMonth()-e),v});},m=Ot(n.getMonth(),n.getFullYear()),b=rt(n.getMonth(),s||"long"),x=nt(n,o||"short"),w=Array.from({length:m},(f,v)=>{let g=new Date(n.getFullYear(),n.getMonth(),v+1);return {day:nt(g,o||"short"),date:g.getDate(),month:rt(g.getMonth(),s||"long"),year:g.getFullYear()}});return {today:n,daysCount:m,month:b,day:x,days:w,next:u,prev:p}},At=qt;var yt=(e,o)=>{let s=react.useRef(null);return react.useCallback((...r)=>{s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{e(...r);},o);},[e,o])},Ht=yt;var Ut=(e=100)=>{let[o,s]=react.useState(false);return react.useEffect(()=>{let n=setTimeout(()=>s(true),e);return ()=>clearTimeout(n)},[e]),o},st=Ut;var zt=e=>{let[o,s]=react.useState({width:0,height:0,top:0,left:0,bottom:0,right:0,x:0,y:0}),n=()=>{if(e){let{width:r,height:u,top:p,left:m,bottom:b,right:x,x:w,y:f}=e.getBoundingClientRect();s({width:r,height:u,top:p,left:m,bottom:b,right:x,x:w,y:f});}else s({width:window.innerWidth,height:window.innerHeight,top:0,left:0,bottom:0,right:0,x:0,y:0});};return react.useEffect(()=>(n(),window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)),[]),o},C=zt;var Qt=()=>{let e=navigator.userAgent,o=/Mobi|Android/i.test(e),s=/Tablet|iPad/i.test(e),n=C();return react.useEffect(()=>{},[]),{isMobile:o,isTablet:s,isDesktop:!o&&!s,...n}},jt=Qt;var Jt=(e,o=false)=>(react.useEffect(()=>{if(e){if(!window.fbq){let u=document.createElement("script");u.async=true,u.src="https://connect.facebook.net/en_US/fbevents.js",document.head.appendChild(u),window._fbq=window._fbq||[],window.fbq=function(){window._fbq.push(arguments);},window.fbq("init",e),o&&window.fbq("set","debug",true);}window.fbq("track","PageView");}},[e,o]),{trackPageView:()=>{e&&window.fbq("track","PageView");},trackEvent:(u,p)=>{e&&window.fbq("track",u,p);},trackCustom:(u,p)=>{e&&window.fbq("trackCustom",u,p);}}),Gt=Jt;var Ct=e=>(react.useEffect(()=>{if(e){if(!window.gtag){let n=document.createElement("script");n.async=true,n.src=`https://www.googletagmanager.com/gtag/js?id=${e}`,document.head.appendChild(n),window.dataLayer=window.dataLayer||[],window.gtag=function(){window.dataLayer.push(arguments);},window.gtag("js",new Date);}window.gtag("config",e);}},[e]),{trackPageView:n=>{e&&window.gtag("config",e,{page_path:n||window.location.pathname});},trackEvent:(n,r)=>{e&&window.gtag("event",n,r);}}),Kt=Ct;var re=(e,o,s)=>{let[n,r]=react.useState({loaded:false,error:null}),u=react.useRef(null);return react.useEffect(()=>{if(e&&e!==""){var p=new Image;o&&(p.crossOrigin=o),s&&(p.referrerPolicy=s),p.onload=()=>{u.current=p,r({loaded:true,error:null});},p.onerror=()=>{r({loaded:false,error:`Failed to load image at ${e}`});},p.src=e;}},[e]),[u.current?u.current.src:"",n.loaded,n.error]},se=re;var oe=(e,o,s="circle",n=1)=>{let[r,u]=react.useState(false),[p,m]=react.useState({x:0,y:0}),[b,x]=react.useState(n),w=react.useRef(null),f=react.useRef(null),v=()=>{let a=f.current,i=a?.getContext("2d"),c=w.current;!a||!i||!c||(a.width=o,a.height=o,i.clearRect(0,0,o,o),i.globalAlpha=.5,i.drawImage(c,p.x,p.y,c.width*b,c.height*b),i.globalAlpha=1,i.save(),s==="circle"&&(i.beginPath(),i.arc(o/2,o/2,o/2,0,Math.PI*2),i.closePath(),i.clip()),i.drawImage(c,p.x,p.y,c.width*b,c.height*b),i.restore());};return react.useEffect(v,[b]),react.useEffect(()=>{if(e){let a=new Image;a.onload=()=>{w.current=a,v();},a.src=e;}},[e,p]),{canvasRef:f,crop:()=>{let a=f.current;return a?a.toDataURL("image/png"):null},setScale:x,handleMouseDown:()=>u(true),handleMouseUp:()=>u(false),handleMouseMove:a=>{!r||!w.current||m(i=>({x:i.x+a.movementX,y:i.y+a.movementY}));}}},ie=oe;var ue=(e,o={})=>{let[s,n]=react.useState(e&&e.length>0?new Array(e.length).fill(0):[]);return react.useEffect(()=>{if(!e||!e.length)return;let r=new IntersectionObserver(u=>{requestAnimationFrame(()=>{n(p=>{let m=[...p],b=false;return u.forEach(x=>{let w=e.findIndex(f=>f.current===x.target);w!==-1&&m[w]!==x.intersectionRatio&&(m[w]=x.intersectionRatio,b=true);}),b?m:p});});},{rootMargin:"200px",threshold:[1],...o});return e.forEach(u=>{u.current&&r.observe(u.current);}),()=>{e.forEach(u=>{u.current&&r.unobserve(u.current);});}},[e,o]),s},le=ue;var ct=(e,o,s,n=20)=>{if(!e||e.length===0||o<=0||s<=0)return "";let r=Math.min(...e.map(g=>g.x)),u=Math.max(...e.map(g=>g.x)),p=Math.min(...e.map(g=>g.y)),m=Math.max(...e.map(g=>g.y)),b=(o-2*n)/(u-r),x=(s-2*n)/(m-p),w=g=>{let M=(g.x-r)*b+n,d=s-((g.y-p)*x+n);return {x:M,y:d}},f=e.map(w),v="";if(f.length>0){v=`M ${f[0].x},${f[0].y}`;for(let g=0;g<f.length-1;g++){let M=f[g],d=f[g+1],l={x:(M.x+d.x)/2,y:M.y},a={x:(M.x+d.x)/2,y:d.y};v+=` C ${l.x},${l.y} ${a.x},${a.y} ${d.x},${d.y}`;}}return v},fe=(e,o,s,n=20)=>{if(!e||e.length===0)return "";let r=ct(e,o,s,n),u=Math.min(...e.map(f=>f.x)),p=Math.max(...e.map(f=>f.x)),m=(o-2*n)/(p-u),b=(e[0].x-u)*m+n,x=(e[e.length-1].x-u)*m+n,w=s-n;return `${r} L ${x},${w} L ${b},${w} Z`},pe=(e,o={width:600,height:300},s=20)=>{let[n,r]=react.useState(""),[u,p]=react.useState("");return react.useEffect(()=>{let m=ct(e,o.width,o.height,s);r(m);let b=fe(e,o.width,o.height,s);p(b);},[e,o.width,o.height,s]),{pathD:n,areaPathD:u}},ge=pe;var be=(e,o)=>{let[s,n]=react.useState(null);return react.useLayoutEffect(()=>{if(o&&e.current){let r=e.current.getBoundingClientRect();n({width:r.width,height:r.height,top:r.top,left:r.left});}},[o,e]),{sourceRect:s,isMeasured:!!s}},we=be;var Me=(e,o,s={childList:true,subtree:true})=>{let n=react.useRef(null);react.useEffect(()=>{if(e)return n.current=new MutationObserver(o),n.current.observe(e,s),()=>{n.current&&n.current.disconnect();}},[e,o,s]);},tt=Me;var De=()=>{let[e,o]=react.useState(null),s=()=>{o(navigator.onLine);};return react.useEffect(()=>(setTimeout(()=>o(navigator.onLine)),window.addEventListener("online",s),window.addEventListener("offline",s),()=>{window.removeEventListener("online",s),window.removeEventListener("offline",s);}),[]),e},Te=De;var Re=(e=15)=>{if(e<=0)throw new Error("intervalMinutes must be greater than 0");let o=x=>{let w=new Date(x),f=w.getMinutes(),v=f%e;return v===0?w.setMinutes(f+e):w.setMinutes(f+(e-v)),w.setSeconds(0),w.setMilliseconds(0),w},[s,n]=react.useState(()=>o(new Date));react.useEffect(()=>{let x=()=>{let v=o(new Date);v.getTime()!==s.getTime()&&n(v);};x();let w=setInterval(x,1e3);return ()=>clearInterval(w)},[e,s]);let r=new Date,u=Math.max(0,s.getTime()-r.getTime()),p=Math.floor(u/6e4),m=Math.floor(u%6e4/1e3),b=`${p}m ${m.toString().padStart(2,"0")}s`;return {minutes:p,seconds:m,formatted:b,nextBoundary:s}},ke=Re;var Fe=e=>{let{vapidPublicKey:o,serviceWorkerPath:s="/sw.js",requestPermissionOnMount:n=false}=e,[r,u]=react.useState("default"),[p,m]=react.useState(null),[b,x]=react.useState(null),[w,f]=react.useState(null),[v,g]=react.useState(false),[M,d]=react.useState(null),[l,a]=react.useState(false),i=react.useCallback(async()=>{if(!l)return null;try{let h=await navigator.serviceWorker.register(s,{scope:"/",updateViaCache:"all"});return d(h),h}catch(h){return console.error("Service Worker registration failed:",h),f("Failed to register service worker"),null}},[s,l]),c=react.useCallback(async h=>{try{let T=await h.pushManager.getSubscription();return m(T),x(T?T.toJSON():null),T}catch(T){return console.error("Failed to get subscription:",T),f("Failed to get subscription"),null}},[]),S=react.useCallback(async()=>{if(!l||!M)return f("Push not supported or service worker not registered"),null;g(true),f(null);try{let h=await Notification.requestPermission();if(u(h),h!=="granted")return f("Permission not granted for notifications"),g(!1),null;let T=core.urlBase64ToUint8Array(o),D=await M.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:T});return m(D),x(D.toJSON()),g(!1),D}catch(h){return console.error("Subscription failed:",h),f(h.message||"Failed to subscribe"),g(false),null}},[l,M,o]),E=react.useCallback(async()=>{if(!p)return true;try{let h=await p.unsubscribe();return h&&(m(null),x(null)),h}catch(h){return console.error("Failed to unsubscribe:",h),false}},[p]),P=react.useCallback(async()=>{let h=await Notification.requestPermission();return u(h),h},[]);return react.useEffect(()=>{let h="PushManager"in window&&"serviceWorker"in navigator;if(a(h),!h){f("Push notifications not supported in this browser");return}let T=true;return (async()=>{let R=await i();!R||!T||(u(Notification.permission),await c(R),n&&Notification.permission==="default"&&await P());})(),()=>{T=false;}},[l,i,c,n,P]),react.useEffect(()=>{if(!("permissions"in navigator))return;let h=false;(async()=>{if(h)return;let D=await navigator.permissions.query({name:"notifications"});D.onchange=()=>{u(Notification.permission),Notification.permission==="denied"&&(h=true,E());};})();},[E]),{permission:r,subscription:p,subscriptionMeta:b,isSupported:l,subscribe:S,unsubscribe:E,requestPermission:P,error:w,isLoading:v}},Oe=Fe;var Be=e=>{let[o,s]=react.useState({width:0,height:0,top:0,left:0});return react.useEffect(()=>{let n=e instanceof HTMLElement?e:e.current,r=p=>{for(let m of p){let{width:b,height:x,top:w,left:f}=m.contentRect;s({width:b,height:x,top:w,left:f});}},u=new ResizeObserver(r);return n&&u.observe(n),()=>{n&&u.unobserve(n);}},[e]),o},Ne=Be;var We=(e,o={})=>{let s=react.useRef(null),n=react.useRef(null),r=react.useRef(null),u=react.useRef(null),p=react.useMemo(()=>e??1,[e]),m=react.useRef(false),b=react.useRef(false),x=react.useRef(0),w=react.useRef(0),f=react.useRef(0),v=react.useRef(0),g=react.useRef(null),M=react.useCallback(()=>{if(!n.current||!r.current||!u.current)return;let{clientHeight:D,scrollHeight:R,scrollTop:F,clientWidth:k,scrollWidth:N,scrollLeft:O}=n.current,B=Math.max(D/R*D,30),y=D-B,I=F/(R-D)*y;r.current.style.height=`${B}px`,r.current.style.transform=`translateY(${I}px)`,r.current.style.willChange="transform, height";let Y=Math.max(k/N*k,30),z=k-Y,gt=O/(N-k)*z;u.current.style.width=`${Y}px`,u.current.style.transform=`translateX(${gt}px)`,u.current.style.willChange="transform, width",R<=D&&s.current?s.current.classList.add("--no-y"):s.current&&s.current.classList.remove("--no-y"),N<=k&&s.current?s.current.classList.add("--no-x"):s.current&&s.current.classList.remove("--no-x");},[]),d=react.useCallback(()=>{g.current&&cancelAnimationFrame(g.current),g.current=requestAnimationFrame(()=>{if(M(),n.current){let{scrollTop:D,scrollHeight:R,clientHeight:F,scrollLeft:k,scrollWidth:N,clientWidth:O}=n.current,A=D/(R-F)*100,B=k/(N-O)*100;Object.keys(o).forEach(y=>{let I=parseFloat(y);Math.abs(A-I)<1&&o[I]?.(),Math.abs(B-I)<1&&o[I]?.();});}});},[M,o]),l=react.useCallback(()=>{n.current&&d();},[d]),a=D=>{m.current=true,w.current=D.clientY,f.current=n.current?.scrollTop||0,document.body.style.userSelect="none",s.current&&s.current?.classList.add("--scrolling");},i=D=>{b.current=true,x.current=D.clientX,v.current=n.current?.scrollLeft||0,document.body.style.userSelect="none",s.current&&s.current?.classList.add("--scrolling");},c=react.useCallback(D=>{if(!n.current||!m.current&&!b.current)return;let{clientHeight:R,scrollHeight:F,clientWidth:k,scrollWidth:N}=n.current;if(m.current){let O=F-R,A=r.current?.clientHeight||30,B=R-A,y=D.clientY-w.current,I=Math.min(Math.max(f.current+y/B*O,0),O);n.current.scrollTop=I;}if(b.current){let O=N-k,A=u.current?.clientWidth||30,B=k-A,y=D.clientX-x.current,I=Math.min(Math.max(v.current+y/B*O,0),O);n.current.scrollLeft=I;}},[]),S=()=>{m.current=false,b.current=false,document.body.style.userSelect="",s.current&&s.current?.classList.remove("--scrolling"),g.current&&cancelAnimationFrame(g.current);},E=()=>n.current?.scrollTo({top:0,behavior:"smooth"}),P=()=>n.current?.scrollTo({top:n.current.scrollHeight,behavior:"smooth"}),h=()=>n.current?.scrollTo({left:0,behavior:"smooth"}),T=()=>n.current?.scrollTo({left:n.current.scrollWidth,behavior:"smooth"});return react.useEffect(()=>{let D=n.current;if(!D)return;let R=F=>{if(!n.current)return;let{scrollTop:k,scrollHeight:N,clientHeight:O,scrollLeft:A,scrollWidth:B,clientWidth:y}=n.current,I=k,X=A,Y=false;if(Math.abs(F.deltaY)>Math.abs(F.deltaX)){let z=N-O;I=k+F.deltaY*p,I=Math.max(0,Math.min(I,z)),I!==k&&(n.current.scrollTop=I,Y=true);}else {let z=B-y;X=A+F.deltaX*p,X=Math.max(0,Math.min(X,z)),X!==A&&(n.current.scrollLeft=X,Y=true);}Y&&d();};return window.addEventListener("resize",d),D.addEventListener("scroll",l,{passive:true}),D.addEventListener("wheel",R,{passive:true}),document.addEventListener("mousemove",c),document.addEventListener("mouseup",S),d(),()=>{window.removeEventListener("resize",d),D.removeEventListener("scroll",l),D.removeEventListener("wheel",R),document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",S),g.current&&cancelAnimationFrame(g.current);}},[l,c,d,p]),tt(n.current,d),{rootRef:s,containerRef:n,thumbY:r,thumbX:u,scrollToTop:E,scrollToBottom:P,scrollToLeft:h,scrollToRight:T,onScrollY:a,onScrollX:i}},$e=We;var Ye=(e,o)=>{let{lerpFactor:s=.1,x:n,y:r,xMultiplier:u=.25,yMultiplier:p=.25,scale:m,rotate:b}=o,x=react.useRef(0),w=react.useRef(0),f=react.useRef(0),v=react.useRef(0),g=react.useRef(performance.now()),M=react.useRef(null),d=react.useRef(false),l=react.useRef(0),a=.2;return react.useEffect(()=>{if(typeof window>"u")return;let i=()=>{let S=performance.now(),E=(S-g.current)/1e3;g.current=S;let P=v.current-f.current,h=P/E;if(f.current+=P*s,x.current=f.current,w.current=h,l.current+=(h-l.current)*s,e.current){let T=n?x.current*n*u:0,D=r?x.current*r*p:0,R=m?core.clamp(m.max-Math.abs(l.current)*m.factor,m.min,m.max):1,F=b?w.current*(b.multiplier??1)*(b.direction??1):0;e.current.style.transform=`
|
|
4
|
+
`));};}),b=(l,a)=>({store:r.current.transaction(l,a).objectStore(l)});return {getAll:l=>new Promise((a,i)=>{m().then(c=>{let{store:S}=b(l,"readonly"),E=S.getAll();E.onsuccess=P=>{P.target.result==null&&i("Record not found"),a(P.target.result);},E.onerror=P=>{i(`SELECT Failed. ${P.target.result}`);};}).catch(c=>{console.log("[getAll]",c),i("Database either corrupted or not initialized");});}),getByID:(l,a)=>new Promise((i,c)=>{m().then(S=>{let{store:E}=b(l,"readonly"),P=E.get(a);P.onsuccess=h=>{h.target.result==null&&c("Record not found"),i(h.target.result);},P.onerror=h=>{c(`SELECT Failed. ${h.target.result}`);};}).catch(S=>{console.log("[getByID]",S),c("Database either corrupted or not initialized");});}),getStore:(l,a)=>new Promise((i,c)=>{m().then(S=>{let{store:E}=b(l,"readonly"),P=E.getAll();P.onsuccess=h=>{h.target.result==null&&c("Record not found"),i(h.target.result);},P.onerror=h=>{c(`SELECT Failed. ${h.target.result}`);};}).catch(S=>{c(S.message||"Database either corrupted or not initialized");});}),insert:(l,a,i)=>new Promise((c,S)=>{m().then(E=>{let{store:P}=b(l,"readwrite"),h=P.add(a,i);h.onsuccess=T=>{c(T.target.result);},h.onerror=T=>{S(`INSERTION Failed. ${T.target.result}`);};}).catch(E=>{S(E.message||"Database either corrupted or not initialized");});}),update:(l,a)=>new Promise((i,c)=>{m().then(S=>{let {store:E}=b(l,"readwrite"),h=E.put(a);h.onsuccess=T=>{i();},h.onerror=T=>{c(`UPDATE Failed. ${T.target.result}`);};}).catch(S=>{c(`UPDATE Failed. ${S}`);});}),update_one:(l,a,i)=>new Promise((c,S)=>{m().then(E=>{let{store:P}=b(l,"readwrite"),h=P.get(i);h.onsuccess=()=>{let T=h.result;if(!T){S(`Record with key ${i} not found.`);return}let D=P.put({...T,...a});D.onsuccess=()=>c(),D.onerror=R=>S(`Update failed. ${R.target.error}`);},h.onerror=T=>{S(`Failed to get existing record. ${T.target.error}`);};}).catch(E=>{S("Database either corrupted or not initialized");});}),remove:(l,a)=>new Promise((i,c)=>{m().then(S=>{let{store:E}=b(l,"readwrite"),P=E.delete(a);P.onsuccess=h=>{i();};}).catch(S=>{console.log(S),c(`Delete failed from ${l} with key: ${a}`);});}),error:u}},Dt=Et;var Rt=(e,o,s={})=>{let[n,r]=react.useState({top:0,left:0}),[u,p]=react.useState(s.preferredAnchor||V.TopLeft),{offsetX:m=0,offsetY:b=0,overflow:x=true}=s,w=react.useRef(null),f=react.useCallback(()=>{let v=0,g=0,M=s.preferredAnchor||V.TopLeft;if(o)v=o.clientY+b,g=o.clientX+m;else if(e){let d=e.getBoundingClientRect();v=d.bottom+b,g=d.left+m;}if(x&&w.current){let d=w.current.offsetWidth,l=w.current.offsetHeight,{innerWidth:a,innerHeight:i}=window;g+d>a&&(g=o?o.clientX-d-m:(e?.getBoundingClientRect().right||0)-d,M=M.includes("Right")?M:V.TopRight),v+l>i&&(v=o?o.clientY-l-b:(e?.getBoundingClientRect().top||0)-l-b);}r({top:v,left:g}),p(M);},[o,e,m,b,x,s.preferredAnchor]);return react.useEffect(()=>{let v=setTimeout(f,0);return window.addEventListener("resize",f),()=>{clearTimeout(v),window.removeEventListener("resize",f);}},[f]),{position:n,targetRef:w,calculatedAnchor:u}},kt=Rt;var Ft=e=>e%4===0&&e%100!==0||e%400===0,Ot=(e,o)=>{switch(e){case 1:return Ft(o)?29:28;case 3:case 5:case 8:case 10:return 30;default:return 31}},nt=(e,o)=>e.toLocaleString("default",{weekday:o}),rt=(e,o)=>{let s=new Date;return s.setMonth(e),s.toLocaleString("default",{month:o})},qt=(e=1,o,s)=>{let[n,r]=react.useState(new Date),u=()=>{r(f=>{let v=new Date(f);return v.setMonth(f.getMonth()+e),v});},p=()=>{r(f=>{let v=new Date(f);return v.setMonth(v.getMonth()-e),v});},m=Ot(n.getMonth(),n.getFullYear()),b=rt(n.getMonth(),s||"long"),x=nt(n,o||"short"),w=Array.from({length:m},(f,v)=>{let g=new Date(n.getFullYear(),n.getMonth(),v+1);return {day:nt(g,o||"short"),date:g.getDate(),month:rt(g.getMonth(),s||"long"),year:g.getFullYear()}});return {today:n,daysCount:m,month:b,day:x,days:w,next:u,prev:p}},At=qt;var yt=(e,o)=>{let s=react.useRef(null);return react.useCallback((...r)=>{s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{e(...r);},o);},[e,o])},Ht=yt;var Ut=(e=100)=>{let[o,s]=react.useState(false);return react.useEffect(()=>{let n=setTimeout(()=>s(true),e);return ()=>clearTimeout(n)},[e]),o},st=Ut;var zt=e=>{let[o,s]=react.useState({width:0,height:0,top:0,left:0,bottom:0,right:0,x:0,y:0}),n=()=>{if(e){let{width:r,height:u,top:p,left:m,bottom:b,right:x,x:w,y:f}=e.getBoundingClientRect();s({width:r,height:u,top:p,left:m,bottom:b,right:x,x:w,y:f});}else s({width:window.innerWidth,height:window.innerHeight,top:0,left:0,bottom:0,right:0,x:0,y:0});};return react.useEffect(()=>(n(),window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)),[]),o},C=zt;var Qt=()=>{let e=navigator.userAgent,o=/Mobi|Android/i.test(e),s=/Tablet|iPad/i.test(e),n=C();return react.useEffect(()=>{},[]),{isMobile:o,isTablet:s,isDesktop:!o&&!s,...n}},jt=Qt;var Jt=(e,o=false)=>(react.useEffect(()=>{if(e){if(!window.fbq){let u=document.createElement("script");u.async=true,u.src="https://connect.facebook.net/en_US/fbevents.js",document.head.appendChild(u),window._fbq=window._fbq||[],window.fbq=function(){window._fbq.push(arguments);},window.fbq("init",e),o&&window.fbq("set","debug",true);}window.fbq("track","PageView");}},[e,o]),{trackPageView:()=>{e&&window.fbq("track","PageView");},trackEvent:(u,p)=>{e&&window.fbq("track",u,p);},trackCustom:(u,p)=>{e&&window.fbq("trackCustom",u,p);}}),Gt=Jt;var Ct=e=>(react.useEffect(()=>{if(e){if(!window.gtag){let n=document.createElement("script");n.async=true,n.src=`https://www.googletagmanager.com/gtag/js?id=${e}`,document.head.appendChild(n),window.dataLayer=window.dataLayer||[],window.gtag=function(){window.dataLayer.push(arguments);},window.gtag("js",new Date);}window.gtag("config",e);}},[e]),{trackPageView:n=>{e&&window.gtag("config",e,{page_path:n||window.location.pathname});},trackEvent:(n,r)=>{e&&window.gtag("event",n,r);}}),Kt=Ct;var re=(e,o,s)=>{let[n,r]=react.useState({loaded:false,error:null}),u=react.useRef(null);return react.useEffect(()=>{if(e&&e!==""){var p=new Image;o&&(p.crossOrigin=o),s&&(p.referrerPolicy=s),p.onload=()=>{u.current=p,r({loaded:true,error:null});},p.onerror=()=>{r({loaded:false,error:`Failed to load image at ${e}`});},p.src=e;}},[e]),[u.current?u.current.src:"",n.loaded,n.error]},se=re;var oe=(e,o,s="circle",n=1)=>{let[r,u]=react.useState(false),[p,m]=react.useState({x:0,y:0}),[b,x]=react.useState(n),w=react.useRef(null),f=react.useRef(null),v=()=>{let a=f.current,i=a?.getContext("2d"),c=w.current;!a||!i||!c||(a.width=o,a.height=o,i.clearRect(0,0,o,o),i.globalAlpha=.5,i.drawImage(c,p.x,p.y,c.width*b,c.height*b),i.globalAlpha=1,i.save(),s==="circle"&&(i.beginPath(),i.arc(o/2,o/2,o/2,0,Math.PI*2),i.closePath(),i.clip()),i.drawImage(c,p.x,p.y,c.width*b,c.height*b),i.restore());};return react.useEffect(v,[b]),react.useEffect(()=>{if(e){let a=new Image;a.onload=()=>{w.current=a,v();},a.src=e;}},[e,p]),{canvasRef:f,crop:()=>{let a=f.current;return a?a.toDataURL("image/png"):null},setScale:x,handleMouseDown:()=>u(true),handleMouseUp:()=>u(false),handleMouseMove:a=>{!r||!w.current||m(i=>({x:i.x+a.movementX,y:i.y+a.movementY}));}}},ie=oe;var ue=(e,o={})=>{let[s,n]=react.useState(e&&e.length>0?new Array(e.length).fill(0):[]);return react.useEffect(()=>{if(!e||!e.length)return;let r=new IntersectionObserver(u=>{requestAnimationFrame(()=>{n(p=>{let m=[...p],b=false;return u.forEach(x=>{let w=e.findIndex(f=>f.current===x.target);w!==-1&&m[w]!==x.intersectionRatio&&(m[w]=x.intersectionRatio,b=true);}),b?m:p});});},{rootMargin:"200px",threshold:[1],...o});return e.forEach(u=>{u.current&&r.observe(u.current);}),()=>{e.forEach(u=>{u.current&&r.unobserve(u.current);});}},[e,o]),s},le=ue;var ct=(e,o,s,n=20)=>{if(!e||e.length===0||o<=0||s<=0)return "";let r=Math.min(...e.map(g=>g.x)),u=Math.max(...e.map(g=>g.x)),p=Math.min(...e.map(g=>g.y)),m=Math.max(...e.map(g=>g.y)),b=(o-2*n)/(u-r),x=(s-2*n)/(m-p),w=g=>{let M=(g.x-r)*b+n,d=s-((g.y-p)*x+n);return {x:M,y:d}},f=e.map(w),v="";if(f.length>0){v=`M ${f[0].x},${f[0].y}`;for(let g=0;g<f.length-1;g++){let M=f[g],d=f[g+1],l={x:(M.x+d.x)/2,y:M.y},a={x:(M.x+d.x)/2,y:d.y};v+=` C ${l.x},${l.y} ${a.x},${a.y} ${d.x},${d.y}`;}}return v},fe=(e,o,s,n=20)=>{if(!e||e.length===0)return "";let r=ct(e,o,s,n),u=Math.min(...e.map(f=>f.x)),p=Math.max(...e.map(f=>f.x)),m=(o-2*n)/(p-u),b=(e[0].x-u)*m+n,x=(e[e.length-1].x-u)*m+n,w=s-n;return `${r} L ${x},${w} L ${b},${w} Z`},pe=(e,o={width:600,height:300},s=20)=>{let[n,r]=react.useState(""),[u,p]=react.useState("");return react.useEffect(()=>{let m=ct(e,o.width,o.height,s);r(m);let b=fe(e,o.width,o.height,s);p(b);},[e,o.width,o.height,s]),{pathD:n,areaPathD:u}},ge=pe;var be=(e,o)=>{let[s,n]=react.useState(null);return react.useLayoutEffect(()=>{if(o&&e.current){let r=e.current.getBoundingClientRect();n({width:r.width,height:r.height,top:r.top,left:r.left});}},[o,e]),{sourceRect:s,isMeasured:!!s}},we=be;var Me=(e,o,s={childList:true,subtree:true})=>{let n=react.useRef(null);react.useEffect(()=>{if(e)return n.current=new MutationObserver(o),n.current.observe(e,s),()=>{n.current&&n.current.disconnect();}},[e,o,s]);},tt=Me;var De=()=>{let[e,o]=react.useState(null),s=()=>{o(navigator.onLine);};return react.useEffect(()=>(setTimeout(()=>o(navigator.onLine)),window.addEventListener("online",s),window.addEventListener("offline",s),()=>{window.removeEventListener("online",s),window.removeEventListener("offline",s);}),[]),e},Te=De;var Re=(e=15)=>{if(e<=0)throw new Error("intervalMinutes must be greater than 0");let o=x=>{let w=new Date(x),f=w.getMinutes(),v=f%e;return v===0?w.setMinutes(f+e):w.setMinutes(f+(e-v)),w.setSeconds(0),w.setMilliseconds(0),w},[s,n]=react.useState(()=>o(new Date));react.useEffect(()=>{let x=()=>{let v=o(new Date);v.getTime()!==s.getTime()&&n(v);};x();let w=setInterval(x,1e3);return ()=>clearInterval(w)},[e,s]);let r=new Date,u=Math.max(0,s.getTime()-r.getTime()),p=Math.floor(u/6e4),m=Math.floor(u%6e4/1e3),b=`${p}m ${m.toString().padStart(2,"0")}s`;return {minutes:p,seconds:m,formatted:b,nextBoundary:s}},ke=Re;var Fe=e=>{let{vapidPublicKey:o,serviceWorkerPath:s="/sw.js",requestPermissionOnMount:n=false}=e,[r,u]=react.useState("default"),[p,m]=react.useState(null),[b,x]=react.useState(null),[w,f]=react.useState(null),[v,g]=react.useState(false),[M,d]=react.useState(null),[l,a]=react.useState(false),i=react.useCallback(async()=>{if(!l)return null;try{let h=await navigator.serviceWorker.register(s,{scope:"/",updateViaCache:"all"});return d(h),h}catch(h){return console.error("Service Worker registration failed:",h),f("Failed to register service worker"),null}},[s,l]),c=react.useCallback(async h=>{try{let T=await h.pushManager.getSubscription();return m(T),x(T?T.toJSON():null),T}catch(T){return console.error("Failed to get subscription:",T),f("Failed to get subscription"),null}},[]),S=react.useCallback(async()=>{if(!l||!M)return f("Push not supported or service worker not registered"),null;g(true),f(null);try{let h=await Notification.requestPermission();if(u(h),h!=="granted")return f("Permission not granted for notifications"),g(!1),null;let T=core.urlBase64ToUint8Array(o),D=await M.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:T});return m(D),x(D.toJSON()),g(!1),D}catch(h){return console.error("Subscription failed:",h),f(h.message||"Failed to subscribe"),g(false),null}},[l,M,o]),E=react.useCallback(async()=>{if(!p)return true;try{let h=await p.unsubscribe();return h&&(m(null),x(null)),h}catch(h){return console.error("Failed to unsubscribe:",h),false}},[p]),P=react.useCallback(async()=>{let h=await Notification.requestPermission();return u(h),h},[]);return react.useEffect(()=>{let h="PushManager"in window&&"serviceWorker"in navigator;if(a(h),!h){f("Push notifications not supported in this browser");return}let T=true;return (async()=>{let R=await i();!R||!T||(u(Notification.permission),await c(R),n&&Notification.permission==="default"&&await P());})(),()=>{T=false;}},[l,i,c,n,P]),react.useEffect(()=>{if(!("permissions"in navigator))return;let h=false;(async()=>{if(h)return;let D=await navigator.permissions.query({name:"notifications"});D.onchange=()=>{u(Notification.permission),Notification.permission==="denied"&&(h=true,E());};})();},[E]),{permission:r,subscription:p,subscriptionMeta:b,isSupported:l,subscribe:S,unsubscribe:E,requestPermission:P,error:w,isLoading:v}},Oe=Fe;var Be=e=>{let[o,s]=react.useState({width:0,height:0,top:0,left:0});return react.useEffect(()=>{let n=e instanceof HTMLElement?e:e.current,r=p=>{for(let m of p){let{width:b,height:x,top:w,left:f}=m.contentRect;s({width:b,height:x,top:w,left:f});}},u=new ResizeObserver(r);return n&&u.observe(n),()=>{n&&u.unobserve(n);}},[e]),o},Ne=Be;var We=(e,o={})=>{let s=react.useRef(null),n=react.useRef(null),r=react.useRef(null),u=react.useRef(null),p=react.useMemo(()=>e??1,[e]),m=react.useRef(false),b=react.useRef(false),x=react.useRef(0),w=react.useRef(0),f=react.useRef(0),v=react.useRef(0),g=react.useRef(null),M=react.useCallback(()=>{if(!n.current||!r.current||!u.current)return;let{clientHeight:D,scrollHeight:R,scrollTop:F,clientWidth:k,scrollWidth:N,scrollLeft:O}=n.current,B=Math.max(D/R*D,30),y=D-B,I=F/(R-D)*y;r.current.style.height=`${B}px`,r.current.style.transform=`translateY(${I}px)`,r.current.style.willChange="transform, height";let Y=Math.max(k/N*k,30),z=k-Y,gt=O/(N-k)*z;u.current.style.width=`${Y}px`,u.current.style.transform=`translateX(${gt}px)`,u.current.style.willChange="transform, width",R<=D&&s.current?s.current.classList.add("--no-y"):s.current&&s.current.classList.remove("--no-y"),N<=k&&s.current?s.current.classList.add("--no-x"):s.current&&s.current.classList.remove("--no-x");},[]),d=react.useCallback(()=>{g.current&&cancelAnimationFrame(g.current),g.current=requestAnimationFrame(()=>{if(M(),n.current){let{scrollTop:D,scrollHeight:R,clientHeight:F,scrollLeft:k,scrollWidth:N,clientWidth:O}=n.current,A=D/(R-F)*100,B=k/(N-O)*100;Object.keys(o).forEach(y=>{let I=parseFloat(y);Math.abs(A-I)<1&&o[I]?.(),Math.abs(B-I)<1&&o[I]?.();});}});},[M,o]),l=react.useCallback(()=>{n.current&&(d(),window.dispatchEvent(new Event("scroll")));},[d]),a=D=>{m.current=true,w.current=D.clientY,f.current=n.current?.scrollTop||0,document.body.style.userSelect="none",s.current&&s.current?.classList.add("--scrolling");},i=D=>{b.current=true,x.current=D.clientX,v.current=n.current?.scrollLeft||0,document.body.style.userSelect="none",s.current&&s.current?.classList.add("--scrolling");},c=react.useCallback(D=>{if(!n.current||!m.current&&!b.current)return;let{clientHeight:R,scrollHeight:F,clientWidth:k,scrollWidth:N}=n.current;if(m.current){let O=F-R,A=r.current?.clientHeight||30,B=R-A,y=D.clientY-w.current,I=Math.min(Math.max(f.current+y/B*O,0),O);n.current.scrollTop=I;}if(b.current){let O=N-k,A=u.current?.clientWidth||30,B=k-A,y=D.clientX-x.current,I=Math.min(Math.max(v.current+y/B*O,0),O);n.current.scrollLeft=I;}},[]),S=()=>{m.current=false,b.current=false,document.body.style.userSelect="",s.current&&s.current?.classList.remove("--scrolling"),g.current&&cancelAnimationFrame(g.current);},E=()=>n.current?.scrollTo({top:0,behavior:"smooth"}),P=()=>n.current?.scrollTo({top:n.current.scrollHeight,behavior:"smooth"}),h=()=>n.current?.scrollTo({left:0,behavior:"smooth"}),T=()=>n.current?.scrollTo({left:n.current.scrollWidth,behavior:"smooth"});return react.useEffect(()=>{let D=n.current;if(!D)return;let R=F=>{if(!n.current)return;let{scrollTop:k,scrollHeight:N,clientHeight:O,scrollLeft:A,scrollWidth:B,clientWidth:y}=n.current,I=k,X=A,Y=false;if(Math.abs(F.deltaY)>Math.abs(F.deltaX)){let z=N-O;I=k+F.deltaY*p,I=Math.max(0,Math.min(I,z)),I!==k&&(n.current.scrollTop=I,Y=true);}else {let z=B-y;X=A+F.deltaX*p,X=Math.max(0,Math.min(X,z)),X!==A&&(n.current.scrollLeft=X,Y=true);}Y&&d();};return window.addEventListener("resize",d),D.addEventListener("scroll",l,{passive:true}),D.addEventListener("wheel",R,{passive:true}),document.addEventListener("mousemove",c),document.addEventListener("mouseup",S),d(),()=>{window.removeEventListener("resize",d),D.removeEventListener("scroll",l),D.removeEventListener("wheel",R),document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",S),g.current&&cancelAnimationFrame(g.current);}},[l,c,d,p]),tt(n.current,d),{rootRef:s,containerRef:n,thumbY:r,thumbX:u,scrollToTop:E,scrollToBottom:P,scrollToLeft:h,scrollToRight:T,onScrollY:a,onScrollX:i}},$e=We;var Ye=(e,o)=>{let{lerpFactor:s=.1,x:n,y:r,xMultiplier:u=.25,yMultiplier:p=.25,scale:m,rotate:b}=o,x=react.useRef(0),w=react.useRef(0),f=react.useRef(0),v=react.useRef(0),g=react.useRef(performance.now()),M=react.useRef(null),d=react.useRef(false),l=react.useRef(0),a=.2;return react.useEffect(()=>{if(typeof window>"u")return;let i=()=>{let S=performance.now(),E=(S-g.current)/1e3;g.current=S;let P=v.current-f.current,h=P/E;if(f.current+=P*s,x.current=f.current,w.current=h,l.current+=(h-l.current)*s,e.current){let T=n?x.current*n*u:0,D=r?x.current*r*p:0,R=m?core.clamp(m.max-Math.abs(l.current)*m.factor,m.min,m.max):1,F=b?w.current*(b.multiplier??1)*(b.direction??1):0;e.current.style.transform=`
|
|
5
5
|
translate3d(${T}px, ${D}px, 0)
|
|
6
6
|
scale(${R})
|
|
7
7
|
rotate(${F}deg)
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {useState,useRef,useEffect,useCallback,useLayoutEffect,useMemo}from'react';import {urlBase64ToUint8Array,uuid,clamp,withPost,getCancelToken}from'@zuzjs/core';var G=(s=>(s.Circle="circle",s.Square="square",s))(G||{}),Q={TopLeft:"top left",TopRight:"top right",TopCenter:"top center",BottomLeft:"bottom left",BottomRight:"bottom right"},ht=Q,Z=(t=>(t[t.Backspace=8]="Backspace",t[t.Tab=9]="Tab",t[t.Enter=13]="Enter",t[t.Shift=16]="Shift",t[t.Ctrl=17]="Ctrl",t[t.Alt=18]="Alt",t[t.PauseBreak=19]="PauseBreak",t[t.Command=19]="Command",t[t.CapsLock=20]="CapsLock",t[t.Escape=27]="Escape",t[t.Space=32]="Space",t[t.PageUp=33]="PageUp",t[t.PageDown=34]="PageDown",t[t.End=35]="End",t[t.Home=36]="Home",t[t.ArrowLeft=37]="ArrowLeft",t[t.ArrowUp=38]="ArrowUp",t[t.ArrowRight=39]="ArrowRight",t[t.ArrowDown=40]="ArrowDown",t[t.Insert=45]="Insert",t[t.Delete=46]="Delete",t[t.Digit0=48]="Digit0",t[t.Digit1=49]="Digit1",t[t.Digit2=50]="Digit2",t[t.Digit3=51]="Digit3",t[t.Digit4=52]="Digit4",t[t.Digit5=53]="Digit5",t[t.Digit6=54]="Digit6",t[t.Digit7=55]="Digit7",t[t.Digit8=56]="Digit8",t[t.Digit9=57]="Digit9",t[t.KeyA=65]="KeyA",t[t.KeyB=66]="KeyB",t[t.KeyC=67]="KeyC",t[t.KeyD=68]="KeyD",t[t.KeyE=69]="KeyE",t[t.KeyF=70]="KeyF",t[t.KeyG=71]="KeyG",t[t.KeyH=72]="KeyH",t[t.KeyI=73]="KeyI",t[t.KeyJ=74]="KeyJ",t[t.KeyK=75]="KeyK",t[t.KeyL=76]="KeyL",t[t.KeyM=77]="KeyM",t[t.KeyN=78]="KeyN",t[t.KeyO=79]="KeyO",t[t.KeyP=80]="KeyP",t[t.KeyQ=81]="KeyQ",t[t.KeyR=82]="KeyR",t[t.KeyS=83]="KeyS",t[t.KeyT=84]="KeyT",t[t.KeyU=85]="KeyU",t[t.KeyV=86]="KeyV",t[t.KeyW=87]="KeyW",t[t.KeyX=88]="KeyX",t[t.KeyY=89]="KeyY",t[t.KeyZ=90]="KeyZ",t[t.Numpad0=96]="Numpad0",t[t.Numpad1=97]="Numpad1",t[t.Numpad2=98]="Numpad2",t[t.Numpad3=99]="Numpad3",t[t.Numpad4=100]="Numpad4",t[t.Numpad5=101]="Numpad5",t[t.Numpad6=102]="Numpad6",t[t.Numpad7=103]="Numpad7",t[t.Numpad8=104]="Numpad8",t[t.Numpad9=105]="Numpad9",t[t.NumpadMultiply=106]="NumpadMultiply",t[t.NumpadAdd=107]="NumpadAdd",t[t.NumpadSubtract=109]="NumpadSubtract",t[t.NumpadDecimal=110]="NumpadDecimal",t[t.NumpadDivide=111]="NumpadDivide",t[t.F1=112]="F1",t[t.F2=113]="F2",t[t.F3=114]="F3",t[t.F4=115]="F4",t[t.F5=116]="F5",t[t.F6=117]="F6",t[t.F7=118]="F7",t[t.F8=119]="F8",t[t.F9=120]="F9",t[t.F10=121]="F10",t[t.F11=122]="F11",t[t.F12=123]="F12",t[t.NumLock=144]="NumLock",t[t.ScrollLock=145]="ScrollLock",t[t.Semicolon=186]="Semicolon",t[t.Equal=187]="Equal",t[t.Comma=188]="Comma",t[t.Minus=189]="Minus",t[t.Period=190]="Period",t[t.Slash=191]="Slash",t[t.Backquote=192]="Backquote",t[t.BracketLeft=219]="BracketLeft",t[t.Backslash=220]="Backslash",t[t.BracketRight=221]="BracketRight",t[t.Quote=222]="Quote",t))(Z||{});var xt=({command:e="/",commands:o=[],cmd:s,ref:n})=>{let[r,u]=useState(-1),[p,m]=useState(false),[b,x]=useState({top:0,left:0}),w=useRef(null),f=d=>{let l=n.current;if(l&&p){let{value:a}=l;(r<0||r>=a.length||a[r]!==e)&&m(false);}},v=d=>{let l=n.current;if(!l)return;let{selectionStart:a}=l;if(d.key===e){u(a||-1);let i=M(l,a||-1);x({top:i.top+20,left:i.left}),m(true);}else d.key==="Escape"&&(d.preventDefault(),d.stopPropagation(),m(false));},g=d=>{let l=n.current;if(l){if(s)s(d,l);else {let{value:a,selectionStart:i}=l,c=a.slice(0,r)+d+a.slice(i||-1);l.value=c,l.setSelectionRange(r+d.length,r+d.length);let S=new Event("input",{bubbles:true});l.dispatchEvent(S);}m(false),l.focus();}},M=(d,l)=>{let a=document.createElement("canvas"),i=a.getContext("2d");if(!i)return {top:0,left:0};let c=window.getComputedStyle(d);i.font=`${c.fontSize} ${c.fontFamily}`;let E=d.value.substring(0,l).split(`
|
|
2
2
|
`),P=E[E.length-1],h=i.measureText(P).width,T=parseFloat(c.lineHeight)||parseFloat(c.fontSize)*1.2,D=(E.length-1)*T,k=parseFloat(c.paddingTop)||0,O=parseFloat(c.paddingLeft)||0,I=d.scrollTop;return a.remove(),{top:D-I+k,left:h+O}};return useEffect(()=>{let d=l=>{n.current&&w.current&&!n.current.contains(l.target)&&!w.current.contains(l.target)&&m(false);};return document.addEventListener("mousedown",d),()=>{document.removeEventListener("mousedown",d);}},[n]),{showDropdown:p,dropdownPosition:b,handleKeyDown:v,handleInput:f,handleCommandSelect:g,parentRef:w}},vt=xt;var Dt=e=>{let{name:o,version:s,meta:n}=e,r=useRef(null),[u,p]=useState(null);useEffect(()=>{let l=indexedDB.open(o,+s.toString().replace(/\./g,""));return l.onupgradeneeded=a=>{let i=a.target.result;n.forEach(c=>{if(!i.objectStoreNames.contains(c.name)){let S=i.createObjectStore(c.name,c.config);c.schema.forEach(E=>{S.createIndex(E.name,E.key||E.name,{unique:E.unique||false});});}});},l.onsuccess=a=>{r.current=a.target.result;},l.onerror=()=>{p("Failed to open database");},()=>r.current?.close()},[o,s]);let m=()=>new Promise((l,a)=>{r.current&&l(r.current);let i=indexedDB.open(o,+s.toString().replace(/\./g,""));i.onsuccess=c=>{r.current=c.target.result,l(r.current);},i.onerror=c=>{a(["Failed to open database",c].join(`
|
|
3
|
-
`));};}),b=(l,a)=>({store:r.current.transaction(l,a).objectStore(l)});return {getAll:l=>new Promise((a,i)=>{m().then(c=>{let{store:S}=b(l,"readonly"),E=S.getAll();E.onsuccess=P=>{P.target.result==null&&i("Record not found"),a(P.target.result);},E.onerror=P=>{i(`SELECT Failed. ${P.target.result}`);};}).catch(c=>{console.log("[getAll]",c),i("Database either corrupted or not initialized");});}),getByID:(l,a)=>new Promise((i,c)=>{m().then(S=>{let{store:E}=b(l,"readonly"),P=E.get(a);P.onsuccess=h=>{h.target.result==null&&c("Record not found"),i(h.target.result);},P.onerror=h=>{c(`SELECT Failed. ${h.target.result}`);};}).catch(S=>{console.log("[getByID]",S),c("Database either corrupted or not initialized");});}),getStore:(l,a)=>new Promise((i,c)=>{m().then(S=>{let{store:E}=b(l,"readonly"),P=E.getAll();P.onsuccess=h=>{h.target.result==null&&c("Record not found"),i(h.target.result);},P.onerror=h=>{c(`SELECT Failed. ${h.target.result}`);};}).catch(S=>{c(S.message||"Database either corrupted or not initialized");});}),insert:(l,a,i)=>new Promise((c,S)=>{m().then(E=>{let{store:P}=b(l,"readwrite"),h=P.add(a,i);h.onsuccess=T=>{c(T.target.result);},h.onerror=T=>{S(`INSERTION Failed. ${T.target.result}`);};}).catch(E=>{S(E.message||"Database either corrupted or not initialized");});}),update:(l,a)=>new Promise((i,c)=>{m().then(S=>{let {store:E}=b(l,"readwrite"),h=E.put(a);h.onsuccess=T=>{i();},h.onerror=T=>{c(`UPDATE Failed. ${T.target.result}`);};}).catch(S=>{c(`UPDATE Failed. ${S}`);});}),update_one:(l,a,i)=>new Promise((c,S)=>{m().then(E=>{let{store:P}=b(l,"readwrite"),h=P.get(i);h.onsuccess=()=>{let T=h.result;if(!T){S(`Record with key ${i} not found.`);return}let D=P.put({...T,...a});D.onsuccess=()=>c(),D.onerror=k=>S(`Update failed. ${k.target.error}`);},h.onerror=T=>{S(`Failed to get existing record. ${T.target.error}`);};}).catch(E=>{S("Database either corrupted or not initialized");});}),remove:(l,a)=>new Promise((i,c)=>{m().then(S=>{let{store:E}=b(l,"readwrite"),P=E.delete(a);P.onsuccess=h=>{i();};}).catch(S=>{console.log(S),c(`Delete failed from ${l} with key: ${a}`);});}),error:u}},Tt=Dt;var kt=(e,o,s={})=>{let[n,r]=useState({top:0,left:0}),[u,p]=useState(s.preferredAnchor||Q.TopLeft),{offsetX:m=0,offsetY:b=0,overflow:x=true}=s,w=useRef(null),f=useCallback(()=>{let v=0,g=0,M=s.preferredAnchor||Q.TopLeft;if(o)v=o.clientY+b,g=o.clientX+m;else if(e){let d=e.getBoundingClientRect();v=d.bottom+b,g=d.left+m;}if(x&&w.current){let d=w.current.offsetWidth,l=w.current.offsetHeight,{innerWidth:a,innerHeight:i}=window;g+d>a&&(g=o?o.clientX-d-m:(e?.getBoundingClientRect().right||0)-d,M=M.includes("Right")?M:Q.TopRight),v+l>i&&(v=o?o.clientY-l-b:(e?.getBoundingClientRect().top||0)-l-b);}r({top:v,left:g}),p(M);},[o,e,m,b,x,s.preferredAnchor]);return useEffect(()=>{let v=setTimeout(f,0);return window.addEventListener("resize",f),()=>{clearTimeout(v),window.removeEventListener("resize",f);}},[f]),{position:n,targetRef:w,calculatedAnchor:u}},It=kt;var Ot=e=>e%4===0&&e%100!==0||e%400===0,qt=(e,o)=>{switch(e){case 1:return Ot(o)?29:28;case 3:case 5:case 8:case 10:return 30;default:return 31}},rt=(e,o)=>e.toLocaleString("default",{weekday:o}),st=(e,o)=>{let s=new Date;return s.setMonth(e),s.toLocaleString("default",{month:o})},At=(e=1,o,s)=>{let[n,r]=useState(new Date),u=()=>{r(f=>{let v=new Date(f);return v.setMonth(f.getMonth()+e),v});},p=()=>{r(f=>{let v=new Date(f);return v.setMonth(v.getMonth()-e),v});},m=qt(n.getMonth(),n.getFullYear()),b=st(n.getMonth(),s||"long"),x=rt(n,o||"short"),w=Array.from({length:m},(f,v)=>{let g=new Date(n.getFullYear(),n.getMonth(),v+1);return {day:rt(g,o||"short"),date:g.getDate(),month:st(g.getMonth(),s||"long"),year:g.getFullYear()}});return {today:n,daysCount:m,month:b,day:x,days:w,next:u,prev:p}},Bt=At;var Ht=(e,o)=>{let s=useRef(null);return useCallback((...r)=>{s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{e(...r);},o);},[e,o])},Wt=Ht;var Xt=(e=100)=>{let[o,s]=useState(false);return useEffect(()=>{let n=setTimeout(()=>s(true),e);return ()=>clearTimeout(n)},[e]),o},ot=Xt;var Vt=e=>{let[o,s]=useState({width:0,height:0,top:0,left:0,bottom:0,right:0,x:0,y:0}),n=()=>{if(e){let{width:r,height:u,top:p,left:m,bottom:b,right:x,x:w,y:f}=e.getBoundingClientRect();s({width:r,height:u,top:p,left:m,bottom:b,right:x,x:w,y:f});}else s({width:window.innerWidth,height:window.innerHeight,top:0,left:0,bottom:0,right:0,x:0,y:0});};return useEffect(()=>(n(),window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)),[]),o},K=Vt;var jt=()=>{let e=navigator.userAgent,o=/Mobi|Android/i.test(e),s=/Tablet|iPad/i.test(e),n=K();return useEffect(()=>{},[]),{isMobile:o,isTablet:s,isDesktop:!o&&!s,...n}},_t=jt;var Gt=(e,o=false)=>(useEffect(()=>{if(e){if(!window.fbq){let u=document.createElement("script");u.async=true,u.src="https://connect.facebook.net/en_US/fbevents.js",document.head.appendChild(u),window._fbq=window._fbq||[],window.fbq=function(){window._fbq.push(arguments);},window.fbq("init",e),o&&window.fbq("set","debug",true);}window.fbq("track","PageView");}},[e,o]),{trackPageView:()=>{e&&window.fbq("track","PageView");},trackEvent:(u,p)=>{e&&window.fbq("track",u,p);},trackCustom:(u,p)=>{e&&window.fbq("trackCustom",u,p);}}),Zt=Gt;var Kt=e=>(useEffect(()=>{if(e){if(!window.gtag){let n=document.createElement("script");n.async=true,n.src=`https://www.googletagmanager.com/gtag/js?id=${e}`,document.head.appendChild(n),window.dataLayer=window.dataLayer||[],window.gtag=function(){window.dataLayer.push(arguments);},window.gtag("js",new Date);}window.gtag("config",e);}},[e]),{trackPageView:n=>{e&&window.gtag("config",e,{page_path:n||window.location.pathname});},trackEvent:(n,r)=>{e&&window.gtag("event",n,r);}}),te=Kt;var se=(e,o,s)=>{let[n,r]=useState({loaded:false,error:null}),u=useRef(null);return useEffect(()=>{if(e&&e!==""){var p=new Image;o&&(p.crossOrigin=o),s&&(p.referrerPolicy=s),p.onload=()=>{u.current=p,r({loaded:true,error:null});},p.onerror=()=>{r({loaded:false,error:`Failed to load image at ${e}`});},p.src=e;}},[e]),[u.current?u.current.src:"",n.loaded,n.error]},oe=se;var ie=(e,o,s="circle",n=1)=>{let[r,u]=useState(false),[p,m]=useState({x:0,y:0}),[b,x]=useState(n),w=useRef(null),f=useRef(null),v=()=>{let a=f.current,i=a?.getContext("2d"),c=w.current;!a||!i||!c||(a.width=o,a.height=o,i.clearRect(0,0,o,o),i.globalAlpha=.5,i.drawImage(c,p.x,p.y,c.width*b,c.height*b),i.globalAlpha=1,i.save(),s==="circle"&&(i.beginPath(),i.arc(o/2,o/2,o/2,0,Math.PI*2),i.closePath(),i.clip()),i.drawImage(c,p.x,p.y,c.width*b,c.height*b),i.restore());};return useEffect(v,[b]),useEffect(()=>{if(e){let a=new Image;a.onload=()=>{w.current=a,v();},a.src=e;}},[e,p]),{canvasRef:f,crop:()=>{let a=f.current;return a?a.toDataURL("image/png"):null},setScale:x,handleMouseDown:()=>u(true),handleMouseUp:()=>u(false),handleMouseMove:a=>{!r||!w.current||m(i=>({x:i.x+a.movementX,y:i.y+a.movementY}));}}},ae=ie;var le=(e,o={})=>{let[s,n]=useState(e&&e.length>0?new Array(e.length).fill(0):[]);return useEffect(()=>{if(!e||!e.length)return;let r=new IntersectionObserver(u=>{requestAnimationFrame(()=>{n(p=>{let m=[...p],b=false;return u.forEach(x=>{let w=e.findIndex(f=>f.current===x.target);w!==-1&&m[w]!==x.intersectionRatio&&(m[w]=x.intersectionRatio,b=true);}),b?m:p});});},{rootMargin:"200px",threshold:[1],...o});return e.forEach(u=>{u.current&&r.observe(u.current);}),()=>{e.forEach(u=>{u.current&&r.unobserve(u.current);});}},[e,o]),s},me=le;var ut=(e,o,s,n=20)=>{if(!e||e.length===0||o<=0||s<=0)return "";let r=Math.min(...e.map(g=>g.x)),u=Math.max(...e.map(g=>g.x)),p=Math.min(...e.map(g=>g.y)),m=Math.max(...e.map(g=>g.y)),b=(o-2*n)/(u-r),x=(s-2*n)/(m-p),w=g=>{let M=(g.x-r)*b+n,d=s-((g.y-p)*x+n);return {x:M,y:d}},f=e.map(w),v="";if(f.length>0){v=`M ${f[0].x},${f[0].y}`;for(let g=0;g<f.length-1;g++){let M=f[g],d=f[g+1],l={x:(M.x+d.x)/2,y:M.y},a={x:(M.x+d.x)/2,y:d.y};v+=` C ${l.x},${l.y} ${a.x},${a.y} ${d.x},${d.y}`;}}return v},pe=(e,o,s,n=20)=>{if(!e||e.length===0)return "";let r=ut(e,o,s,n),u=Math.min(...e.map(f=>f.x)),p=Math.max(...e.map(f=>f.x)),m=(o-2*n)/(p-u),b=(e[0].x-u)*m+n,x=(e[e.length-1].x-u)*m+n,w=s-n;return `${r} L ${x},${w} L ${b},${w} Z`},ge=(e,o={width:600,height:300},s=20)=>{let[n,r]=useState(""),[u,p]=useState("");return useEffect(()=>{let m=ut(e,o.width,o.height,s);r(m);let b=pe(e,o.width,o.height,s);p(b);},[e,o.width,o.height,s]),{pathD:n,areaPathD:u}},de=ge;var we=(e,o)=>{let[s,n]=useState(null);return useLayoutEffect(()=>{if(o&&e.current){let r=e.current.getBoundingClientRect();n({width:r.width,height:r.height,top:r.top,left:r.left});}},[o,e]),{sourceRect:s,isMeasured:!!s}},xe=we;var Se=(e,o,s={childList:true,subtree:true})=>{let n=useRef(null);useEffect(()=>{if(e)return n.current=new MutationObserver(o),n.current.observe(e,s),()=>{n.current&&n.current.disconnect();}},[e,o,s]);},et=Se;var Te=()=>{let[e,o]=useState(null),s=()=>{o(navigator.onLine);};return useEffect(()=>(setTimeout(()=>o(navigator.onLine)),window.addEventListener("online",s),window.addEventListener("offline",s),()=>{window.removeEventListener("online",s),window.removeEventListener("offline",s);}),[]),e},Pe=Te;var ke=(e=15)=>{if(e<=0)throw new Error("intervalMinutes must be greater than 0");let o=x=>{let w=new Date(x),f=w.getMinutes(),v=f%e;return v===0?w.setMinutes(f+e):w.setMinutes(f+(e-v)),w.setSeconds(0),w.setMilliseconds(0),w},[s,n]=useState(()=>o(new Date));useEffect(()=>{let x=()=>{let v=o(new Date);v.getTime()!==s.getTime()&&n(v);};x();let w=setInterval(x,1e3);return ()=>clearInterval(w)},[e,s]);let r=new Date,u=Math.max(0,s.getTime()-r.getTime()),p=Math.floor(u/6e4),m=Math.floor(u%6e4/1e3),b=`${p}m ${m.toString().padStart(2,"0")}s`;return {minutes:p,seconds:m,formatted:b,nextBoundary:s}},Ie=ke;var Oe=e=>{let{vapidPublicKey:o,serviceWorkerPath:s="/sw.js",requestPermissionOnMount:n=false}=e,[r,u]=useState("default"),[p,m]=useState(null),[b,x]=useState(null),[w,f]=useState(null),[v,g]=useState(false),[M,d]=useState(null),[l,a]=useState(false),i=useCallback(async()=>{if(!l)return null;try{let h=await navigator.serviceWorker.register(s,{scope:"/",updateViaCache:"all"});return d(h),h}catch(h){return console.error("Service Worker registration failed:",h),f("Failed to register service worker"),null}},[s,l]),c=useCallback(async h=>{try{let T=await h.pushManager.getSubscription();return m(T),x(T?T.toJSON():null),T}catch(T){return console.error("Failed to get subscription:",T),f("Failed to get subscription"),null}},[]),S=useCallback(async()=>{if(!l||!M)return f("Push not supported or service worker not registered"),null;g(true),f(null);try{let h=await Notification.requestPermission();if(u(h),h!=="granted")return f("Permission not granted for notifications"),g(!1),null;let T=urlBase64ToUint8Array(o),D=await M.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:T});return m(D),x(D.toJSON()),g(!1),D}catch(h){return console.error("Subscription failed:",h),f(h.message||"Failed to subscribe"),g(false),null}},[l,M,o]),E=useCallback(async()=>{if(!p)return true;try{let h=await p.unsubscribe();return h&&(m(null),x(null)),h}catch(h){return console.error("Failed to unsubscribe:",h),false}},[p]),P=useCallback(async()=>{let h=await Notification.requestPermission();return u(h),h},[]);return useEffect(()=>{let h="PushManager"in window&&"serviceWorker"in navigator;if(a(h),!h){f("Push notifications not supported in this browser");return}let T=true;return (async()=>{let k=await i();!k||!T||(u(Notification.permission),await c(k),n&&Notification.permission==="default"&&await P());})(),()=>{T=false;}},[l,i,c,n,P]),useEffect(()=>{if(!("permissions"in navigator))return;let h=false;(async()=>{if(h)return;let D=await navigator.permissions.query({name:"notifications"});D.onchange=()=>{u(Notification.permission),Notification.permission==="denied"&&(h=true,E());};})();},[E]),{permission:r,subscription:p,subscriptionMeta:b,isSupported:l,subscribe:S,unsubscribe:E,requestPermission:P,error:w,isLoading:v}},qe=Oe;var Ne=e=>{let[o,s]=useState({width:0,height:0,top:0,left:0});return useEffect(()=>{let n=e instanceof HTMLElement?e:e.current,r=p=>{for(let m of p){let{width:b,height:x,top:w,left:f}=m.contentRect;s({width:b,height:x,top:w,left:f});}},u=new ResizeObserver(r);return n&&u.observe(n),()=>{n&&u.unobserve(n);}},[e]),o},ye=Ne;var $e=(e,o={})=>{let s=useRef(null),n=useRef(null),r=useRef(null),u=useRef(null),p=useMemo(()=>e??1,[e]),m=useRef(false),b=useRef(false),x=useRef(0),w=useRef(0),f=useRef(0),v=useRef(0),g=useRef(null),M=useCallback(()=>{if(!n.current||!r.current||!u.current)return;let{clientHeight:D,scrollHeight:k,scrollTop:O,clientWidth:I,scrollWidth:y,scrollLeft:q}=n.current,N=Math.max(D/k*D,30),H=D-N,F=O/(k-D)*H;r.current.style.height=`${N}px`,r.current.style.transform=`translateY(${F}px)`,r.current.style.willChange="transform, height";let z=Math.max(I/y*I,30),V=I-z,dt=q/(y-I)*V;u.current.style.width=`${z}px`,u.current.style.transform=`translateX(${dt}px)`,u.current.style.willChange="transform, width",k<=D&&s.current?s.current.classList.add("--no-y"):s.current&&s.current.classList.remove("--no-y"),y<=I&&s.current?s.current.classList.add("--no-x"):s.current&&s.current.classList.remove("--no-x");},[]),d=useCallback(()=>{g.current&&cancelAnimationFrame(g.current),g.current=requestAnimationFrame(()=>{if(M(),n.current){let{scrollTop:D,scrollHeight:k,clientHeight:O,scrollLeft:I,scrollWidth:y,clientWidth:q}=n.current,B=D/(k-O)*100,N=I/(y-q)*100;Object.keys(o).forEach(H=>{let F=parseFloat(H);Math.abs(B-F)<1&&o[F]?.(),Math.abs(N-F)<1&&o[F]?.();});}});},[M,o]),l=useCallback(()=>{n.current&&d();},[d]),a=D=>{m.current=true,w.current=D.clientY,f.current=n.current?.scrollTop||0,document.body.style.userSelect="none",s.current&&s.current?.classList.add("--scrolling");},i=D=>{b.current=true,x.current=D.clientX,v.current=n.current?.scrollLeft||0,document.body.style.userSelect="none",s.current&&s.current?.classList.add("--scrolling");},c=useCallback(D=>{if(!n.current||!m.current&&!b.current)return;let{clientHeight:k,scrollHeight:O,clientWidth:I,scrollWidth:y}=n.current;if(m.current){let q=O-k,B=r.current?.clientHeight||30,N=k-B,H=D.clientY-w.current,F=Math.min(Math.max(f.current+H/N*q,0),q);n.current.scrollTop=F;}if(b.current){let q=y-I,B=u.current?.clientWidth||30,N=I-B,H=D.clientX-x.current,F=Math.min(Math.max(v.current+H/N*q,0),q);n.current.scrollLeft=F;}},[]),S=()=>{m.current=false,b.current=false,document.body.style.userSelect="",s.current&&s.current?.classList.remove("--scrolling"),g.current&&cancelAnimationFrame(g.current);},E=()=>n.current?.scrollTo({top:0,behavior:"smooth"}),P=()=>n.current?.scrollTo({top:n.current.scrollHeight,behavior:"smooth"}),h=()=>n.current?.scrollTo({left:0,behavior:"smooth"}),T=()=>n.current?.scrollTo({left:n.current.scrollWidth,behavior:"smooth"});return useEffect(()=>{let D=n.current;if(!D)return;let k=O=>{if(!n.current)return;let{scrollTop:I,scrollHeight:y,clientHeight:q,scrollLeft:B,scrollWidth:N,clientWidth:H}=n.current,F=I,Y=B,z=false;if(Math.abs(O.deltaY)>Math.abs(O.deltaX)){let V=y-q;F=I+O.deltaY*p,F=Math.max(0,Math.min(F,V)),F!==I&&(n.current.scrollTop=F,z=true);}else {let V=N-H;Y=B+O.deltaX*p,Y=Math.max(0,Math.min(Y,V)),Y!==B&&(n.current.scrollLeft=Y,z=true);}z&&d();};return window.addEventListener("resize",d),D.addEventListener("scroll",l,{passive:true}),D.addEventListener("wheel",k,{passive:true}),document.addEventListener("mousemove",c),document.addEventListener("mouseup",S),d(),()=>{window.removeEventListener("resize",d),D.removeEventListener("scroll",l),D.removeEventListener("wheel",k),document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",S),g.current&&cancelAnimationFrame(g.current);}},[l,c,d,p]),et(n.current,d),{rootRef:s,containerRef:n,thumbY:r,thumbX:u,scrollToTop:E,scrollToBottom:P,scrollToLeft:h,scrollToRight:T,onScrollY:a,onScrollX:i}},Ue=$e;var ze=(e,o)=>{let{lerpFactor:s=.1,x:n,y:r,xMultiplier:u=.25,yMultiplier:p=.25,scale:m,rotate:b}=o,x=useRef(0),w=useRef(0),f=useRef(0),v=useRef(0),g=useRef(performance.now()),M=useRef(null),d=useRef(false),l=useRef(0),a=.2;return useEffect(()=>{if(typeof window>"u")return;let i=()=>{let S=performance.now(),E=(S-g.current)/1e3;g.current=S;let P=v.current-f.current,h=P/E;if(f.current+=P*s,x.current=f.current,w.current=h,l.current+=(h-l.current)*s,e.current){let T=n?x.current*n*u:0,D=r?x.current*r*p:0,k=m?clamp(m.max-Math.abs(l.current)*m.factor,m.min,m.max):1,O=b?w.current*(b.multiplier??1)*(b.direction??1):0;e.current.style.transform=`
|
|
3
|
+
`));};}),b=(l,a)=>({store:r.current.transaction(l,a).objectStore(l)});return {getAll:l=>new Promise((a,i)=>{m().then(c=>{let{store:S}=b(l,"readonly"),E=S.getAll();E.onsuccess=P=>{P.target.result==null&&i("Record not found"),a(P.target.result);},E.onerror=P=>{i(`SELECT Failed. ${P.target.result}`);};}).catch(c=>{console.log("[getAll]",c),i("Database either corrupted or not initialized");});}),getByID:(l,a)=>new Promise((i,c)=>{m().then(S=>{let{store:E}=b(l,"readonly"),P=E.get(a);P.onsuccess=h=>{h.target.result==null&&c("Record not found"),i(h.target.result);},P.onerror=h=>{c(`SELECT Failed. ${h.target.result}`);};}).catch(S=>{console.log("[getByID]",S),c("Database either corrupted or not initialized");});}),getStore:(l,a)=>new Promise((i,c)=>{m().then(S=>{let{store:E}=b(l,"readonly"),P=E.getAll();P.onsuccess=h=>{h.target.result==null&&c("Record not found"),i(h.target.result);},P.onerror=h=>{c(`SELECT Failed. ${h.target.result}`);};}).catch(S=>{c(S.message||"Database either corrupted or not initialized");});}),insert:(l,a,i)=>new Promise((c,S)=>{m().then(E=>{let{store:P}=b(l,"readwrite"),h=P.add(a,i);h.onsuccess=T=>{c(T.target.result);},h.onerror=T=>{S(`INSERTION Failed. ${T.target.result}`);};}).catch(E=>{S(E.message||"Database either corrupted or not initialized");});}),update:(l,a)=>new Promise((i,c)=>{m().then(S=>{let {store:E}=b(l,"readwrite"),h=E.put(a);h.onsuccess=T=>{i();},h.onerror=T=>{c(`UPDATE Failed. ${T.target.result}`);};}).catch(S=>{c(`UPDATE Failed. ${S}`);});}),update_one:(l,a,i)=>new Promise((c,S)=>{m().then(E=>{let{store:P}=b(l,"readwrite"),h=P.get(i);h.onsuccess=()=>{let T=h.result;if(!T){S(`Record with key ${i} not found.`);return}let D=P.put({...T,...a});D.onsuccess=()=>c(),D.onerror=k=>S(`Update failed. ${k.target.error}`);},h.onerror=T=>{S(`Failed to get existing record. ${T.target.error}`);};}).catch(E=>{S("Database either corrupted or not initialized");});}),remove:(l,a)=>new Promise((i,c)=>{m().then(S=>{let{store:E}=b(l,"readwrite"),P=E.delete(a);P.onsuccess=h=>{i();};}).catch(S=>{console.log(S),c(`Delete failed from ${l} with key: ${a}`);});}),error:u}},Tt=Dt;var kt=(e,o,s={})=>{let[n,r]=useState({top:0,left:0}),[u,p]=useState(s.preferredAnchor||Q.TopLeft),{offsetX:m=0,offsetY:b=0,overflow:x=true}=s,w=useRef(null),f=useCallback(()=>{let v=0,g=0,M=s.preferredAnchor||Q.TopLeft;if(o)v=o.clientY+b,g=o.clientX+m;else if(e){let d=e.getBoundingClientRect();v=d.bottom+b,g=d.left+m;}if(x&&w.current){let d=w.current.offsetWidth,l=w.current.offsetHeight,{innerWidth:a,innerHeight:i}=window;g+d>a&&(g=o?o.clientX-d-m:(e?.getBoundingClientRect().right||0)-d,M=M.includes("Right")?M:Q.TopRight),v+l>i&&(v=o?o.clientY-l-b:(e?.getBoundingClientRect().top||0)-l-b);}r({top:v,left:g}),p(M);},[o,e,m,b,x,s.preferredAnchor]);return useEffect(()=>{let v=setTimeout(f,0);return window.addEventListener("resize",f),()=>{clearTimeout(v),window.removeEventListener("resize",f);}},[f]),{position:n,targetRef:w,calculatedAnchor:u}},It=kt;var Ot=e=>e%4===0&&e%100!==0||e%400===0,qt=(e,o)=>{switch(e){case 1:return Ot(o)?29:28;case 3:case 5:case 8:case 10:return 30;default:return 31}},rt=(e,o)=>e.toLocaleString("default",{weekday:o}),st=(e,o)=>{let s=new Date;return s.setMonth(e),s.toLocaleString("default",{month:o})},At=(e=1,o,s)=>{let[n,r]=useState(new Date),u=()=>{r(f=>{let v=new Date(f);return v.setMonth(f.getMonth()+e),v});},p=()=>{r(f=>{let v=new Date(f);return v.setMonth(v.getMonth()-e),v});},m=qt(n.getMonth(),n.getFullYear()),b=st(n.getMonth(),s||"long"),x=rt(n,o||"short"),w=Array.from({length:m},(f,v)=>{let g=new Date(n.getFullYear(),n.getMonth(),v+1);return {day:rt(g,o||"short"),date:g.getDate(),month:st(g.getMonth(),s||"long"),year:g.getFullYear()}});return {today:n,daysCount:m,month:b,day:x,days:w,next:u,prev:p}},Bt=At;var Ht=(e,o)=>{let s=useRef(null);return useCallback((...r)=>{s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{e(...r);},o);},[e,o])},Wt=Ht;var Xt=(e=100)=>{let[o,s]=useState(false);return useEffect(()=>{let n=setTimeout(()=>s(true),e);return ()=>clearTimeout(n)},[e]),o},ot=Xt;var Vt=e=>{let[o,s]=useState({width:0,height:0,top:0,left:0,bottom:0,right:0,x:0,y:0}),n=()=>{if(e){let{width:r,height:u,top:p,left:m,bottom:b,right:x,x:w,y:f}=e.getBoundingClientRect();s({width:r,height:u,top:p,left:m,bottom:b,right:x,x:w,y:f});}else s({width:window.innerWidth,height:window.innerHeight,top:0,left:0,bottom:0,right:0,x:0,y:0});};return useEffect(()=>(n(),window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)),[]),o},K=Vt;var jt=()=>{let e=navigator.userAgent,o=/Mobi|Android/i.test(e),s=/Tablet|iPad/i.test(e),n=K();return useEffect(()=>{},[]),{isMobile:o,isTablet:s,isDesktop:!o&&!s,...n}},_t=jt;var Gt=(e,o=false)=>(useEffect(()=>{if(e){if(!window.fbq){let u=document.createElement("script");u.async=true,u.src="https://connect.facebook.net/en_US/fbevents.js",document.head.appendChild(u),window._fbq=window._fbq||[],window.fbq=function(){window._fbq.push(arguments);},window.fbq("init",e),o&&window.fbq("set","debug",true);}window.fbq("track","PageView");}},[e,o]),{trackPageView:()=>{e&&window.fbq("track","PageView");},trackEvent:(u,p)=>{e&&window.fbq("track",u,p);},trackCustom:(u,p)=>{e&&window.fbq("trackCustom",u,p);}}),Zt=Gt;var Kt=e=>(useEffect(()=>{if(e){if(!window.gtag){let n=document.createElement("script");n.async=true,n.src=`https://www.googletagmanager.com/gtag/js?id=${e}`,document.head.appendChild(n),window.dataLayer=window.dataLayer||[],window.gtag=function(){window.dataLayer.push(arguments);},window.gtag("js",new Date);}window.gtag("config",e);}},[e]),{trackPageView:n=>{e&&window.gtag("config",e,{page_path:n||window.location.pathname});},trackEvent:(n,r)=>{e&&window.gtag("event",n,r);}}),te=Kt;var se=(e,o,s)=>{let[n,r]=useState({loaded:false,error:null}),u=useRef(null);return useEffect(()=>{if(e&&e!==""){var p=new Image;o&&(p.crossOrigin=o),s&&(p.referrerPolicy=s),p.onload=()=>{u.current=p,r({loaded:true,error:null});},p.onerror=()=>{r({loaded:false,error:`Failed to load image at ${e}`});},p.src=e;}},[e]),[u.current?u.current.src:"",n.loaded,n.error]},oe=se;var ie=(e,o,s="circle",n=1)=>{let[r,u]=useState(false),[p,m]=useState({x:0,y:0}),[b,x]=useState(n),w=useRef(null),f=useRef(null),v=()=>{let a=f.current,i=a?.getContext("2d"),c=w.current;!a||!i||!c||(a.width=o,a.height=o,i.clearRect(0,0,o,o),i.globalAlpha=.5,i.drawImage(c,p.x,p.y,c.width*b,c.height*b),i.globalAlpha=1,i.save(),s==="circle"&&(i.beginPath(),i.arc(o/2,o/2,o/2,0,Math.PI*2),i.closePath(),i.clip()),i.drawImage(c,p.x,p.y,c.width*b,c.height*b),i.restore());};return useEffect(v,[b]),useEffect(()=>{if(e){let a=new Image;a.onload=()=>{w.current=a,v();},a.src=e;}},[e,p]),{canvasRef:f,crop:()=>{let a=f.current;return a?a.toDataURL("image/png"):null},setScale:x,handleMouseDown:()=>u(true),handleMouseUp:()=>u(false),handleMouseMove:a=>{!r||!w.current||m(i=>({x:i.x+a.movementX,y:i.y+a.movementY}));}}},ae=ie;var le=(e,o={})=>{let[s,n]=useState(e&&e.length>0?new Array(e.length).fill(0):[]);return useEffect(()=>{if(!e||!e.length)return;let r=new IntersectionObserver(u=>{requestAnimationFrame(()=>{n(p=>{let m=[...p],b=false;return u.forEach(x=>{let w=e.findIndex(f=>f.current===x.target);w!==-1&&m[w]!==x.intersectionRatio&&(m[w]=x.intersectionRatio,b=true);}),b?m:p});});},{rootMargin:"200px",threshold:[1],...o});return e.forEach(u=>{u.current&&r.observe(u.current);}),()=>{e.forEach(u=>{u.current&&r.unobserve(u.current);});}},[e,o]),s},me=le;var ut=(e,o,s,n=20)=>{if(!e||e.length===0||o<=0||s<=0)return "";let r=Math.min(...e.map(g=>g.x)),u=Math.max(...e.map(g=>g.x)),p=Math.min(...e.map(g=>g.y)),m=Math.max(...e.map(g=>g.y)),b=(o-2*n)/(u-r),x=(s-2*n)/(m-p),w=g=>{let M=(g.x-r)*b+n,d=s-((g.y-p)*x+n);return {x:M,y:d}},f=e.map(w),v="";if(f.length>0){v=`M ${f[0].x},${f[0].y}`;for(let g=0;g<f.length-1;g++){let M=f[g],d=f[g+1],l={x:(M.x+d.x)/2,y:M.y},a={x:(M.x+d.x)/2,y:d.y};v+=` C ${l.x},${l.y} ${a.x},${a.y} ${d.x},${d.y}`;}}return v},pe=(e,o,s,n=20)=>{if(!e||e.length===0)return "";let r=ut(e,o,s,n),u=Math.min(...e.map(f=>f.x)),p=Math.max(...e.map(f=>f.x)),m=(o-2*n)/(p-u),b=(e[0].x-u)*m+n,x=(e[e.length-1].x-u)*m+n,w=s-n;return `${r} L ${x},${w} L ${b},${w} Z`},ge=(e,o={width:600,height:300},s=20)=>{let[n,r]=useState(""),[u,p]=useState("");return useEffect(()=>{let m=ut(e,o.width,o.height,s);r(m);let b=pe(e,o.width,o.height,s);p(b);},[e,o.width,o.height,s]),{pathD:n,areaPathD:u}},de=ge;var we=(e,o)=>{let[s,n]=useState(null);return useLayoutEffect(()=>{if(o&&e.current){let r=e.current.getBoundingClientRect();n({width:r.width,height:r.height,top:r.top,left:r.left});}},[o,e]),{sourceRect:s,isMeasured:!!s}},xe=we;var Se=(e,o,s={childList:true,subtree:true})=>{let n=useRef(null);useEffect(()=>{if(e)return n.current=new MutationObserver(o),n.current.observe(e,s),()=>{n.current&&n.current.disconnect();}},[e,o,s]);},et=Se;var Te=()=>{let[e,o]=useState(null),s=()=>{o(navigator.onLine);};return useEffect(()=>(setTimeout(()=>o(navigator.onLine)),window.addEventListener("online",s),window.addEventListener("offline",s),()=>{window.removeEventListener("online",s),window.removeEventListener("offline",s);}),[]),e},Pe=Te;var ke=(e=15)=>{if(e<=0)throw new Error("intervalMinutes must be greater than 0");let o=x=>{let w=new Date(x),f=w.getMinutes(),v=f%e;return v===0?w.setMinutes(f+e):w.setMinutes(f+(e-v)),w.setSeconds(0),w.setMilliseconds(0),w},[s,n]=useState(()=>o(new Date));useEffect(()=>{let x=()=>{let v=o(new Date);v.getTime()!==s.getTime()&&n(v);};x();let w=setInterval(x,1e3);return ()=>clearInterval(w)},[e,s]);let r=new Date,u=Math.max(0,s.getTime()-r.getTime()),p=Math.floor(u/6e4),m=Math.floor(u%6e4/1e3),b=`${p}m ${m.toString().padStart(2,"0")}s`;return {minutes:p,seconds:m,formatted:b,nextBoundary:s}},Ie=ke;var Oe=e=>{let{vapidPublicKey:o,serviceWorkerPath:s="/sw.js",requestPermissionOnMount:n=false}=e,[r,u]=useState("default"),[p,m]=useState(null),[b,x]=useState(null),[w,f]=useState(null),[v,g]=useState(false),[M,d]=useState(null),[l,a]=useState(false),i=useCallback(async()=>{if(!l)return null;try{let h=await navigator.serviceWorker.register(s,{scope:"/",updateViaCache:"all"});return d(h),h}catch(h){return console.error("Service Worker registration failed:",h),f("Failed to register service worker"),null}},[s,l]),c=useCallback(async h=>{try{let T=await h.pushManager.getSubscription();return m(T),x(T?T.toJSON():null),T}catch(T){return console.error("Failed to get subscription:",T),f("Failed to get subscription"),null}},[]),S=useCallback(async()=>{if(!l||!M)return f("Push not supported or service worker not registered"),null;g(true),f(null);try{let h=await Notification.requestPermission();if(u(h),h!=="granted")return f("Permission not granted for notifications"),g(!1),null;let T=urlBase64ToUint8Array(o),D=await M.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:T});return m(D),x(D.toJSON()),g(!1),D}catch(h){return console.error("Subscription failed:",h),f(h.message||"Failed to subscribe"),g(false),null}},[l,M,o]),E=useCallback(async()=>{if(!p)return true;try{let h=await p.unsubscribe();return h&&(m(null),x(null)),h}catch(h){return console.error("Failed to unsubscribe:",h),false}},[p]),P=useCallback(async()=>{let h=await Notification.requestPermission();return u(h),h},[]);return useEffect(()=>{let h="PushManager"in window&&"serviceWorker"in navigator;if(a(h),!h){f("Push notifications not supported in this browser");return}let T=true;return (async()=>{let k=await i();!k||!T||(u(Notification.permission),await c(k),n&&Notification.permission==="default"&&await P());})(),()=>{T=false;}},[l,i,c,n,P]),useEffect(()=>{if(!("permissions"in navigator))return;let h=false;(async()=>{if(h)return;let D=await navigator.permissions.query({name:"notifications"});D.onchange=()=>{u(Notification.permission),Notification.permission==="denied"&&(h=true,E());};})();},[E]),{permission:r,subscription:p,subscriptionMeta:b,isSupported:l,subscribe:S,unsubscribe:E,requestPermission:P,error:w,isLoading:v}},qe=Oe;var Ne=e=>{let[o,s]=useState({width:0,height:0,top:0,left:0});return useEffect(()=>{let n=e instanceof HTMLElement?e:e.current,r=p=>{for(let m of p){let{width:b,height:x,top:w,left:f}=m.contentRect;s({width:b,height:x,top:w,left:f});}},u=new ResizeObserver(r);return n&&u.observe(n),()=>{n&&u.unobserve(n);}},[e]),o},ye=Ne;var $e=(e,o={})=>{let s=useRef(null),n=useRef(null),r=useRef(null),u=useRef(null),p=useMemo(()=>e??1,[e]),m=useRef(false),b=useRef(false),x=useRef(0),w=useRef(0),f=useRef(0),v=useRef(0),g=useRef(null),M=useCallback(()=>{if(!n.current||!r.current||!u.current)return;let{clientHeight:D,scrollHeight:k,scrollTop:O,clientWidth:I,scrollWidth:y,scrollLeft:q}=n.current,N=Math.max(D/k*D,30),H=D-N,F=O/(k-D)*H;r.current.style.height=`${N}px`,r.current.style.transform=`translateY(${F}px)`,r.current.style.willChange="transform, height";let z=Math.max(I/y*I,30),V=I-z,dt=q/(y-I)*V;u.current.style.width=`${z}px`,u.current.style.transform=`translateX(${dt}px)`,u.current.style.willChange="transform, width",k<=D&&s.current?s.current.classList.add("--no-y"):s.current&&s.current.classList.remove("--no-y"),y<=I&&s.current?s.current.classList.add("--no-x"):s.current&&s.current.classList.remove("--no-x");},[]),d=useCallback(()=>{g.current&&cancelAnimationFrame(g.current),g.current=requestAnimationFrame(()=>{if(M(),n.current){let{scrollTop:D,scrollHeight:k,clientHeight:O,scrollLeft:I,scrollWidth:y,clientWidth:q}=n.current,B=D/(k-O)*100,N=I/(y-q)*100;Object.keys(o).forEach(H=>{let F=parseFloat(H);Math.abs(B-F)<1&&o[F]?.(),Math.abs(N-F)<1&&o[F]?.();});}});},[M,o]),l=useCallback(()=>{n.current&&(d(),window.dispatchEvent(new Event("scroll")));},[d]),a=D=>{m.current=true,w.current=D.clientY,f.current=n.current?.scrollTop||0,document.body.style.userSelect="none",s.current&&s.current?.classList.add("--scrolling");},i=D=>{b.current=true,x.current=D.clientX,v.current=n.current?.scrollLeft||0,document.body.style.userSelect="none",s.current&&s.current?.classList.add("--scrolling");},c=useCallback(D=>{if(!n.current||!m.current&&!b.current)return;let{clientHeight:k,scrollHeight:O,clientWidth:I,scrollWidth:y}=n.current;if(m.current){let q=O-k,B=r.current?.clientHeight||30,N=k-B,H=D.clientY-w.current,F=Math.min(Math.max(f.current+H/N*q,0),q);n.current.scrollTop=F;}if(b.current){let q=y-I,B=u.current?.clientWidth||30,N=I-B,H=D.clientX-x.current,F=Math.min(Math.max(v.current+H/N*q,0),q);n.current.scrollLeft=F;}},[]),S=()=>{m.current=false,b.current=false,document.body.style.userSelect="",s.current&&s.current?.classList.remove("--scrolling"),g.current&&cancelAnimationFrame(g.current);},E=()=>n.current?.scrollTo({top:0,behavior:"smooth"}),P=()=>n.current?.scrollTo({top:n.current.scrollHeight,behavior:"smooth"}),h=()=>n.current?.scrollTo({left:0,behavior:"smooth"}),T=()=>n.current?.scrollTo({left:n.current.scrollWidth,behavior:"smooth"});return useEffect(()=>{let D=n.current;if(!D)return;let k=O=>{if(!n.current)return;let{scrollTop:I,scrollHeight:y,clientHeight:q,scrollLeft:B,scrollWidth:N,clientWidth:H}=n.current,F=I,Y=B,z=false;if(Math.abs(O.deltaY)>Math.abs(O.deltaX)){let V=y-q;F=I+O.deltaY*p,F=Math.max(0,Math.min(F,V)),F!==I&&(n.current.scrollTop=F,z=true);}else {let V=N-H;Y=B+O.deltaX*p,Y=Math.max(0,Math.min(Y,V)),Y!==B&&(n.current.scrollLeft=Y,z=true);}z&&d();};return window.addEventListener("resize",d),D.addEventListener("scroll",l,{passive:true}),D.addEventListener("wheel",k,{passive:true}),document.addEventListener("mousemove",c),document.addEventListener("mouseup",S),d(),()=>{window.removeEventListener("resize",d),D.removeEventListener("scroll",l),D.removeEventListener("wheel",k),document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",S),g.current&&cancelAnimationFrame(g.current);}},[l,c,d,p]),et(n.current,d),{rootRef:s,containerRef:n,thumbY:r,thumbX:u,scrollToTop:E,scrollToBottom:P,scrollToLeft:h,scrollToRight:T,onScrollY:a,onScrollX:i}},Ue=$e;var ze=(e,o)=>{let{lerpFactor:s=.1,x:n,y:r,xMultiplier:u=.25,yMultiplier:p=.25,scale:m,rotate:b}=o,x=useRef(0),w=useRef(0),f=useRef(0),v=useRef(0),g=useRef(performance.now()),M=useRef(null),d=useRef(false),l=useRef(0),a=.2;return useEffect(()=>{if(typeof window>"u")return;let i=()=>{let S=performance.now(),E=(S-g.current)/1e3;g.current=S;let P=v.current-f.current,h=P/E;if(f.current+=P*s,x.current=f.current,w.current=h,l.current+=(h-l.current)*s,e.current){let T=n?x.current*n*u:0,D=r?x.current*r*p:0,k=m?clamp(m.max-Math.abs(l.current)*m.factor,m.min,m.max):1,O=b?w.current*(b.multiplier??1)*(b.direction??1):0;e.current.style.transform=`
|
|
4
4
|
translate3d(${T}px, ${D}px, 0)
|
|
5
5
|
scale(${k})
|
|
6
6
|
rotate(${O}deg)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zuzjs/hooks",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "ZuzJS Hooks",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"@types/md5": "^2.3.6",
|
|
41
41
|
"@types/react": "^19.2.10",
|
|
42
42
|
"@types/react-dom": "^19.2.3",
|
|
43
|
-
"@zuzjs/core": "^0.3.
|
|
43
|
+
"@zuzjs/core": "^0.3.4",
|
|
44
44
|
"chokidar": "^5.0.0",
|
|
45
45
|
"commander": "^14.0.2",
|
|
46
46
|
"date-fns": "^4.1.0",
|