@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 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",
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.2",
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",