polpo 0.1.5 → 0.1.6

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.
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ import{a as x,h as M,i as S}from"./chunk-MAWW6AA7.js";import{useCallback as f,useMemo as z,useReducer as F}from"react";import{useCallback as j,useLayoutEffect as G,useRef as U}from"react";var R=e=>{let t=U(!1);return G(()=>(t.current=!0,()=>{t.current=!1}),[]),j((...o)=>{t.current&&e(...o)},[e])};var V=(e,t)=>{switch(t.type){case"pending":return{status:"pending",data:null,error:null};case"resolved":return{status:"resolved",data:t.data,error:null};case"rejected":return{status:"rejected",data:null,error:t.error};default:throw new Error(`Unhandled action: ${JSON.stringify(t)}`)}},Be=e=>{let[t,o]=F(V,{status:"idle",data:null,error:null,...e}),n=R(o),r=f(a=>{n({type:"pending"}),a.then(c=>{n({type:"resolved",data:c})},c=>{n({type:"rejected",error:c})})},[n]),s=f(a=>n({type:"resolved",data:a}),[n]),i=f(a=>n({type:"rejected",error:a}),[n]);return z(()=>({setData:s,setError:i,run:r,...t}),[t,r,s,i])};import{useMemo as $}from"react";var qe=e=>$(()=>Object.entries(e).reduce((t,[o,n])=>n?[...t,o]:t,[]).join(" "),[e]);import{useEffect as X,useLayoutEffect as Y,useRef as Q}from"react";function l(e,t,o,n){let r=Q(t);X(()=>{r.current=t},[t]),Y(()=>{let s=o?.current??window;if(!(s&&s.addEventListener))return;let i=a=>r.current(a);return s.addEventListener(e,i,n),()=>{s.removeEventListener(e,i,n)}},[e,o,n])}var W=(e,t)=>e.current&&!e.current.contains(t),O=(e,t)=>{l("keydown",o=>{o.key==="Escape"&&t()}),l("mousedown",o=>{let n=o.target;if(!n?.isConnected)return;(Array.isArray(e)?e:[e]).every(s=>W(s,n))&&t()})};import{useState as B}from"react";var st=e=>B(e)[0];import{useState as J,useCallback as C}from"react";var _=e=>{let t=[];if(e.expires instanceof Date)t.push(`expires=${e.expires.toUTCString()}`);else if(typeof e.days=="number"){let o=new Date;o.setTime(o.getTime()+e.days*24*60*60*1e3),t.push(`expires=${o.toUTCString()}`)}return typeof e.maxAge=="number"&&t.push(`max-age=${e.maxAge}`),t.push(`path=${e.path??"/"}`),e.domain&&t.push(`domain=${e.domain}`),e.secure&&t.push("secure"),e.sameSite&&t.push(`SameSite=${e.sameSite}`),t.length>0?`; ${t.join("; ")}`:""},h=(e,t,o={})=>{if(typeof document>"u")return;let n=encodeURIComponent(t),r=_(o);document.cookie=`${e}=${n}${r}`},q=e=>{if(typeof document>"u")return null;let t=`${e}=`,o=document.cookie?document.cookie.split(";"):[];for(let n of o){let r=n.trim();if(r.indexOf(t)===0)return decodeURIComponent(r.substring(t.length))}return null},K=(e,t={})=>{typeof document>"u"||h(e,"",{...t,days:-1})},ct=(e,t,o={})=>{let[n,r]=J(()=>{let a=q(e);if(a!==null)try{return JSON.parse(a)}catch{return t}return t}),s=C((a,c={})=>{let u={...o,...c},m=JSON.stringify(a);h(e,m,u),r(a)},[e,o]),i=C(()=>{K(e,o),r(t)},[e,t,o]);return[n,s,i]};import{useEffect as Z,useState as ee}from"react";var mt=(e,t=500)=>{let[o,n]=ee(e);return Z(()=>{let r=setTimeout(()=>n(e),t);return()=>{clearTimeout(r)}},[e,t]),o};import{useState as ne}from"react";import{useEffect as te}from"react";var d=(e,t)=>{te(()=>{let o=Array.isArray(e)?e:[e],n=new ResizeObserver(t);return o.forEach(r=>r.current&&n.observe(r.current)),()=>{n.disconnect()}},[e,t])};var yt=e=>{let[t,o]=ne({width:0,height:0});return d(e,([n])=>{if((n?.borderBoxSize??[])[0]){let{inlineSize:r,blockSize:s}=n.borderBoxSize[0];o({width:r,height:s})}else if(n.contentRect){let{width:r,height:s}=n.contentRect;o({width:r,height:s})}}),t};import{useEffect as oe,useState as re}from"react";var L=e=>{let t=document.getElementById(e);return t===null&&(t=document.createElement("div"),t.setAttribute("id",e),document.body.appendChild(t)),t},xt=e=>{let[t,o]=re(()=>L(e));return oe(()=>{let n=document.getElementById(e);if(t===null||n===null){let r=L(e);o(r)}return()=>{t&&t.parentNode}},[t,e]),t};import{useEffect as se,useState as ie}from"react";var ae=(o=>(o.PNG="image/png",o.PDF="application/pdf",o))(ae||{}),Ot=e=>{let[t,o]=ie([]);return se(()=>{let n=[],r=!1;if(!Array.isArray(e)||e.length===0)o([]);else{let s=e.map(i=>new Promise((a,c)=>{let u=new FileReader;n.push(u),u.onload=m=>{m.target?.result&&a({name:i.name,size:i.size,formatSize:x(i.size),type:i.type,url:m.target.result})},u.onabort=()=>{c(new Error("File reading aborted"))},u.onerror=()=>{c(new Error("Failed to read file"))},u.readAsDataURL(i)}));Promise.all(s).then(i=>{r||o(i)})}return()=>{r=!0,n.forEach(s=>{s.abort()})}},[e]),t};import{useEffect as ce,useRef as ue,useState as p}from"react";var Lt=()=>{let[e,t]=p(null),[o,n]=p(null),[r,s]=p(!0),i=ue(null);return ce(()=>{if(!navigator.geolocation){n({code:0,message:"Geolocation is not supported by your browser."}),s(!1);return}let a=u=>{t({...u.coords,timestamp:u.timestamp}),s(!1)},c=u=>{n({code:u.code,message:u.message}),s(!1)};return navigator.geolocation.getCurrentPosition(a,c),i.current=navigator.geolocation.watchPosition(a,c),()=>{i.current!==null&&navigator.geolocation.clearWatch(i.current)}},[]),{data:e,error:o,isLoading:r}};import{useCallback as P,useRef as le,useState as me}from"react";var wt=()=>{let[e,t]=me(!1),o=le(null),n=P(()=>t(!0),[]),r=P(()=>t(!1),[]);return l("mouseenter",n,o),l("mouseleave",r,o),e};import{useRef as fe,useState as pe}from"react";import{useEffect as de}from"react";var A=(e,t,o={})=>{de(()=>{let n=Array.isArray(e)?e:[e],r=new IntersectionObserver(t,o);return n.forEach(s=>s.current&&r.observe(s.current)),()=>{r.disconnect()}},[t,o,e])};var Ut=(e={})=>{let[t,o]=pe(!1),n=fe(null);return A(n,([r])=>{o(r.isIntersecting)},e),{ref:n,inView:t}};import{useCallback as E,useState as Ee}from"react";var $t=({onBlur:e,onFocus:t,onChange:o}={})=>{let[n,r]=Ee(!1),s=E(c=>{r(!0),t&&t(c)},[t]),i=E(c=>{r(!1),e&&e(c)},[e]),a=E(c=>{o&&o(c)},[o]);return{isFocus:n,handlers:{onFocus:s,onBlur:i,onChange:a}}};import{useEffect as ve,useState as Te}from"react";var Qt=e=>{let[t,o]=Te(!1);return ve(()=>{let n=window.matchMedia(e);n.matches!==t&&o(n.matches);let r=()=>{o(n.matches)};return n.addEventListener("change",r),()=>{n.removeEventListener("change",r)}},[t,e]),t};import{useRef as ye,useState as ge}from"react";var Jt=()=>{let e=ye(null),[t,o]=ge(!1);return{containerRef:e,isOpen:t,openModal:()=>{o(!0)},closeModal:()=>{o(!1)}}};import{useCallback as k,useLayoutEffect as be,useRef as xe}from"react";var w=e=>({x:e.x,y:e.y,w:e.width,h:e.height,top:e.top,left:e.left}),sn=({closeOnClickOutside:e=!0,offset:t=0,windowOffset:o=0,position:n="bottom",modalRef:r,containerRef:s,isOpen:i,onClose:a})=>{let c=xe(null);O(r,()=>{i&&e&&a()});let u=k((v,H)=>{let T=v.current?.getClientRects()[0],y=H.current?.getClientRects()[0];if(!T)return;let g=y?M({c:w(y),m:w(T),offset:t,windowOffset:o,position:n}):S({position:n,windowOffset:o});Object.keys(g).forEach(b=>{v.current?.style.setProperty(b,g[b])})},[n,o,t]),m=k(()=>{i&&u(r,s??c)},[u,i,s,r]);be(m,[m]),d(s??c,m),d(r,m),l("resize",m),l("scroll",m,r)};import Me,{useCallback as N,useEffect as Se,useLayoutEffect as Re,useMemo as Oe}from"react";var Ce=(r=>(r.OPENING="OPENING",r.OPEN="OPEN",r.CLOSING="CLOSING",r.CLOSED="CLOSED",r))(Ce||{}),un=({transitionDuration:e=0,onClose:t,isOpen:o})=>{let[n,r]=Me.useState("CLOSED"),s=Oe(()=>n!=="CLOSED",[n]);Se(()=>{document.documentElement.style.overflow=s?"hidden":"auto"},[s]);let i=N(()=>{["OPENING","OPEN"].includes(n)&&(e>0?(r("CLOSING"),setTimeout(()=>{r("CLOSED"),t()},e)):r("CLOSED"))},[t,n,e]),a=N(()=>{["CLOSING","CLOSED"].includes(n)&&(e>0?(r("OPENING"),setTimeout(()=>{r("OPEN")},e)):r("OPEN"))},[n,e]);return Re(()=>{n==="CLOSED"&&o?a():n==="OPEN"&&!o&&i()},[o,a,i,n]),{isVisible:s,modalState:n}};import{useRef as he,useState as Le}from"react";var D=(e,t)=>{let{left:o,top:n}=e,r=o+window.scrollX,s=n+window.scrollY,i=t.pageX-r,a=t.pageY-s;return{x:t.pageX,y:t.pageY,elementX:i,elementY:a,elementPositionX:r,elementPositionY:s}},pn=e=>{let t=he(null),[o,n]=Le({x:null,y:null,elementX:null,elementY:null,elementPositionX:null,elementPositionY:null});return l("mousemove",s=>{let{clientX:i,clientY:a}=s;if(n(c=>({...c,x:i,y:a})),e?.current instanceof Element){let c=D(e.current.getBoundingClientRect(),s);n(u=>({...u,...c}))}else if(t.current instanceof Element){let c=D(t.current.getBoundingClientRect(),s);n(u=>({...u,...c}))}}),{...o,ref:t}};import{useState as Pe}from"react";var yn=()=>{let[e,t]=Pe(navigator.onLine);return l("online",()=>t(navigator.onLine)),l("offline",()=>t(navigator.onLine)),e};import{useEffect as Ae,useRef as ke}from"react";var xn=()=>{let e=ke(1);return Ae(()=>{e.current++}),e.current};import{useEffect as we,useRef as Ne,useState as De}from"react";var Rn=()=>{let e=Ne(null),[t,o]=De([0,0]);return we(()=>{let n=e.current,r=()=>{n&&o([n.scrollLeft,n.scrollTop])};return n&&n.addEventListener("scroll",r),()=>{n&&n.removeEventListener("scroll",r)}},[]),{ref:e,position:t}};import{useEffect as Ie,useState as I}from"react";function Pn(e){let[t,o]=I(e),[n,r]=I([]);return Ie(()=>{t!==void 0&&r(s=>[...s,t])},[t]),[t,o,n]}import{useCallback as He,useState as je}from"react";var wn=(e=!1)=>{let[t,o]=je(e),n=He(()=>{o(r=>!r)},[]);return[t,n,o]};import{useCallback as Ge,useState as Ue}from"react";var In=(e,t=0)=>{let[o,n]=Ue(t),r=Ge(s=>{n(s!==void 0?s:i=>(i+1)%e.length)},[e.length]);return[e[o],r]};import{useEffect as ze,useState as Fe}from"react";var Un=()=>{let e=()=>{let{innerWidth:n,innerHeight:r}=window;return{width:n,height:r,orientation:n>r?"landscape":"portrait"}},[t,o]=Fe(e);return l("resize",()=>{o(e())}),ze(()=>{o(e())},[]),t};export{R as a,Be as b,qe as c,l as d,O as e,st as f,ct as g,mt as h,d as i,yt as j,xt as k,ae as l,Ot as m,Lt as n,wt as o,A as p,Ut as q,$t as r,Qt as s,Jt as t,sn as u,Ce as v,un as w,pn as x,yn as y,xn as z,Rn as A,Pn as B,wn as C,In as D,Un as E};
3
+ //# sourceMappingURL=chunk-LJM5NQBY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-async.ts","../src/hooks/use-safe-dispatch.ts","../src/hooks/use-classnames.ts","../src/hooks/use-event-listener.ts","../src/hooks/use-click-outside.ts","../src/hooks/use-constant.ts","../src/hooks/use-cookie.ts","../src/hooks/use-debounce.ts","../src/hooks/use-dimensions.ts","../src/hooks/use-resize-observer.ts","../src/hooks/use-dom-container.ts","../src/hooks/use-file-reader.ts","../src/hooks/use-geolocation.ts","../src/hooks/use-hover.ts","../src/hooks/use-in-view.ts","../src/hooks/use-intersection-observer.ts","../src/hooks/use-input-handlers.ts","../src/hooks/use-media-query.ts","../src/hooks/use-modal.ts","../src/hooks/use-modal-in-container.ts","../src/hooks/use-modal-transition.ts","../src/hooks/use-mouse-position.ts","../src/hooks/use-online-status.ts","../src/hooks/use-render-count.ts","../src/hooks/use-scroll.ts","../src/hooks/use-state-history.ts","../src/hooks/use-toggle.ts","../src/hooks/use-toggle-values.ts","../src/hooks/use-viewport.ts"],"sourcesContent":["import React, { useCallback, useMemo, useReducer } from 'react';\n\nimport { useSafeDispatch } from './use-safe-dispatch';\n\ntype AsyncState<T> =\n | {\n status: 'idle' | 'pending';\n data?: null;\n error?: null;\n }\n | {\n status: 'resolved';\n data: T;\n error: null;\n }\n | {\n status: 'rejected';\n data: null;\n error: Error;\n };\n\ntype AsyncAction<T> =\n | { type: 'reset' }\n | { type: 'pending' }\n | { type: 'resolved'; data: T }\n | { type: 'rejected'; error: Error };\n\nconst asyncReducer = <T>(_state: AsyncState<T>, action: AsyncAction<T>): AsyncState<T> => {\n switch (action.type) {\n case 'pending': {\n return { status: 'pending' as const, data: null, error: null };\n }\n case 'resolved': {\n return { status: 'resolved' as const, data: action.data, error: null };\n }\n case 'rejected': {\n return { status: 'rejected' as const, data: null, error: action.error };\n }\n default: {\n throw new Error(`Unhandled action: ${JSON.stringify(action)}`);\n }\n }\n};\n\nexport const useAsync = <T>(\n initialState?: AsyncState<T>,\n): AsyncState<T> & {\n setData: (data: T) => void;\n setError: (error: Error) => void;\n run: (promise: Promise<T>) => void;\n} => {\n const [asyncState, unsafeDispatch] = useReducer<React.Reducer<AsyncState<T>, AsyncAction<T>>>(asyncReducer, {\n status: 'idle',\n data: null,\n error: null,\n ...initialState,\n });\n const dispatch = useSafeDispatch(unsafeDispatch);\n\n const run = useCallback(\n (promise: Promise<T>) => {\n dispatch({ type: 'pending' });\n promise.then(\n data => {\n dispatch({ type: 'resolved', data });\n },\n (error: Error) => {\n dispatch({ type: 'rejected', error });\n },\n );\n },\n [dispatch],\n );\n\n const setData = useCallback((data: T) => dispatch({ type: 'resolved', data }), [dispatch]);\n\n const setError = useCallback((error: Error) => dispatch({ type: 'rejected', error }), [dispatch]);\n\n return useMemo(\n () => ({\n setData,\n setError,\n run,\n ...asyncState,\n }),\n [asyncState, run, setData, setError],\n );\n};\n","import React, { useCallback, useLayoutEffect, useRef } from 'react';\n\nexport const useSafeDispatch = <T>(dispatch: React.Dispatch<T>): ((action: T) => void) => {\n const mounted = useRef(false);\n\n useLayoutEffect(() => {\n mounted.current = true;\n\n return () => {\n mounted.current = false;\n };\n }, []);\n\n return useCallback(\n (...args: Parameters<React.Dispatch<T>>) => {\n if (mounted.current) {\n dispatch(...args);\n }\n },\n [dispatch],\n );\n};\n","import { useMemo } from 'react';\n\nexport const useClassNames = (classes: Record<string, boolean>): string =>\n useMemo<string>(\n () =>\n Object.entries(classes)\n .reduce<Array<string>>(\n (compiledClassNames, [classname, value]) => (value ? [...compiledClassNames, classname] : compiledClassNames),\n [],\n )\n .join(' '),\n [classes],\n );\n","import { RefObject, useEffect, useLayoutEffect, useRef } from 'react';\n\nfunction useEventListener<EventName extends keyof MediaQueryListEventMap>(\n eventName: EventName,\n callback: (event: MediaQueryListEventMap[EventName]) => void,\n element: RefObject<MediaQueryList> | undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<EventName extends keyof WindowEventMap>(\n eventName: EventName,\n callback: (event: WindowEventMap[EventName]) => void,\n element?: undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<EventName extends keyof HTMLElementEventMap, ElementRef extends HTMLElement = HTMLDivElement>(\n eventName: EventName,\n callback: (event: HTMLElementEventMap[EventName]) => void,\n element: RefObject<ElementRef> | undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<EventName extends keyof DocumentEventMap>(\n eventName: EventName,\n callback: (event: DocumentEventMap[EventName]) => void,\n element: RefObject<Document> | undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<\n MediaQueryEventName extends keyof MediaQueryListEventMap,\n WindowEventName extends keyof WindowEventMap,\n ElementEventName extends keyof HTMLElementEventMap,\n DocumentEventName extends keyof DocumentEventMap,\n ElementRef extends HTMLElement | MediaQueryList | Document | Window | void = void,\n>(\n eventName: WindowEventName | DocumentEventName | ElementEventName | MediaQueryEventName,\n callback: (\n event:\n | MediaQueryListEventMap[MediaQueryEventName]\n | WindowEventMap[WindowEventName]\n | HTMLElementEventMap[ElementEventName]\n | DocumentEventMap[DocumentEventName]\n | Event,\n ) => void,\n element?: RefObject<ElementRef> | undefined,\n options?: boolean | AddEventListenerOptions,\n) {\n const callbackRef = useRef<EventListener>(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useLayoutEffect(() => {\n const targetElement = element?.current ?? window;\n\n if (!(targetElement && targetElement.addEventListener)) return;\n\n const listener: typeof callback = event => callbackRef.current(event);\n\n targetElement.addEventListener(eventName, listener, options);\n\n return () => {\n targetElement.removeEventListener(eventName, listener, options);\n };\n }, [eventName, element, options]);\n}\n\nexport { useEventListener };\n","import { RefObject } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nconst checkIsOutside = (ref: RefObject<HTMLElement>, target: Node) => {\n return ref.current && !ref.current.contains(target);\n};\n\nexport const useClickOutside = <T extends HTMLElement>(\n ref: RefObject<T> | Array<RefObject<T>>,\n callback: () => void,\n) => {\n useEventListener('keydown', e => {\n if (e.key === 'Escape') {\n callback();\n }\n });\n\n useEventListener('mousedown', event => {\n const target = event.target as Node;\n\n if (!target?.isConnected) {\n return;\n }\n\n const isOutside = (Array.isArray(ref) ? ref : [ref]).every(r => checkIsOutside(r, target));\n\n if (isOutside) {\n callback();\n }\n });\n};\n","import { useState } from 'react';\n\nexport const useConstant = <T>(initializer: T | (() => T)): T => useState(initializer)[0];\n","import { useState, useCallback } from 'react';\n\nexport type CookieOptions = {\n days?: number;\n expires?: Date;\n maxAge?: number;\n path?: string;\n domain?: string;\n secure?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n};\n\nconst generateCookieAttributes = (options: CookieOptions): string => {\n const parts: Array<string> = [];\n\n if (options.expires instanceof Date) {\n parts.push(`expires=${options.expires.toUTCString()}`);\n } else if (typeof options.days === 'number') {\n const date = new Date();\n date.setTime(date.getTime() + options.days * 24 * 60 * 60 * 1000);\n parts.push(`expires=${date.toUTCString()}`);\n }\n\n if (typeof options.maxAge === 'number') {\n parts.push(`max-age=${options.maxAge}`);\n }\n\n parts.push(`path=${options.path ?? '/'}`);\n\n if (options.domain) {\n parts.push(`domain=${options.domain}`);\n }\n\n if (options.secure) {\n parts.push('secure');\n }\n\n if (options.sameSite) {\n parts.push(`SameSite=${options.sameSite}`);\n }\n\n return parts.length > 0 ? `; ${parts.join('; ')}` : '';\n};\n\nconst setCookie = (name: string, value: string, options: CookieOptions = {}): void => {\n if (typeof document === 'undefined') {\n return;\n }\n\n const encodedValue = encodeURIComponent(value);\n const attributes = generateCookieAttributes(options);\n document.cookie = `${name}=${encodedValue}${attributes}`;\n};\n\nconst getCookie = (name: string): string | null => {\n if (typeof document === 'undefined') {\n return null;\n }\n\n const nameEq = `${name}=`;\n const cookies = document.cookie ? document.cookie.split(';') : [];\n\n for (const cookie of cookies) {\n const cookieTrimmed = cookie.trim();\n\n if (cookieTrimmed.indexOf(nameEq) === 0) {\n return decodeURIComponent(cookieTrimmed.substring(nameEq.length));\n }\n }\n\n return null;\n};\n\nconst deleteCookie = (name: string, options: CookieOptions = {}) => {\n if (typeof document === 'undefined') {\n return;\n }\n\n // Ensure the same path/domain so that the deletion matches the existing cookie.\n setCookie(name, '', {\n ...options,\n days: -1,\n });\n};\n\ntype UpdateCookie<T> = (value: T, overrideOptions?: CookieOptions) => void;\ntype RemoveCookie = () => void;\n\nexport const useCookie = <T = unknown>(\n cookieName: string,\n defaultValue?: T,\n options: CookieOptions = {},\n): [T, UpdateCookie<T>, RemoveCookie] => {\n const [cookieValue, setCookieValue] = useState<T>(() => {\n const rawCookie = getCookie(cookieName);\n\n if (rawCookie !== null) {\n try {\n return JSON.parse(rawCookie) as T;\n } catch {\n return defaultValue as T;\n }\n }\n\n return defaultValue as T;\n });\n\n const updateCookie = useCallback<UpdateCookie<T>>(\n (value: T, overrideOptions: CookieOptions = {}) => {\n const mergedOptions = { ...options, ...overrideOptions };\n const stringValue = JSON.stringify(value);\n setCookie(cookieName, stringValue, mergedOptions);\n setCookieValue(value);\n },\n [cookieName, options],\n );\n\n const removeCookie = useCallback<RemoveCookie>(() => {\n deleteCookie(cookieName, options);\n setCookieValue(defaultValue as T);\n }, [cookieName, defaultValue, options]);\n\n return [cookieValue, updateCookie, removeCookie];\n};\n","import { useEffect, useState } from 'react';\n\nexport const useDebounce = <T>(value: T, delay: number = 500): T => {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n};\n","import { useState } from 'react';\n\nimport { useResizeObserver } from './use-resize-observer';\n\nexport const useDimensions = (ref: React.RefObject<HTMLElement>) => {\n const [dimensions, setDimensions] = useState({ width: 0, height: 0 });\n\n useResizeObserver(ref, ([entry]) => {\n if ((entry?.borderBoxSize ?? [])[0]) {\n const { inlineSize: width, blockSize: height } = entry.borderBoxSize[0];\n setDimensions({ width, height });\n } else if (entry.contentRect) {\n const { width, height } = entry.contentRect;\n setDimensions({ width, height });\n }\n });\n\n return dimensions;\n};\n","import { RefObject, useEffect } from 'react';\n\nexport const useResizeObserver = <T extends Element>(\n ref: RefObject<T> | Array<RefObject<T>>,\n callback: ResizeObserverCallback,\n) => {\n useEffect(() => {\n const refs = Array.isArray(ref) ? ref : [ref];\n\n const observer = new ResizeObserver(callback);\n\n refs.forEach(r => r.current && observer.observe(r.current));\n\n return () => {\n observer.disconnect();\n };\n }, [ref, callback]);\n};\n","import { useEffect, useState } from 'react';\n\nconst createContainer = (containerID: string) => {\n let domContainer = document.getElementById(containerID);\n\n if (domContainer === null) {\n domContainer = document.createElement('div');\n domContainer.setAttribute('id', containerID);\n document.body.appendChild(domContainer);\n }\n\n return domContainer;\n};\n\nexport const useDomContainer = (containerID: string) => {\n const [container, setContainer] = useState<HTMLElement | null>(() => createContainer(containerID));\n\n useEffect(() => {\n const domContainer = document.getElementById(containerID);\n\n if (container === null || domContainer === null) {\n const domContainer = createContainer(containerID);\n\n setContainer(domContainer);\n }\n\n return () => {\n if (container && container.parentNode) {\n //document.body.removeChild(container);\n }\n };\n }, [container, containerID]);\n\n return container;\n};\n","import { useEffect, useState } from 'react';\n\nimport { formatBytes } from '@polpo/helpers';\n\nexport enum FileTypeEnum {\n PNG = 'image/png',\n PDF = 'application/pdf',\n}\n\nexport type FileResolvedT = {\n name: string;\n size: number;\n formatSize: string;\n type: FileTypeEnum;\n url: FileReader['result'];\n};\n\nexport const useFileReader = (inputFiles: Array<File>) => {\n const [files, setFiles] = useState<Array<FileResolvedT>>([]);\n\n useEffect(() => {\n const fileReaders: Array<FileReader> = [];\n let isCancel = false;\n\n if (!Array.isArray(inputFiles) || inputFiles.length === 0) {\n setFiles([]);\n } else {\n const promises = inputFiles.map(file => {\n return new Promise<FileResolvedT>((resolve, reject) => {\n const fileReader = new FileReader();\n fileReaders.push(fileReader);\n fileReader.onload = (e: ProgressEvent<FileReader>) => {\n if (e.target?.result) {\n resolve({\n name: file.name,\n size: file.size,\n formatSize: formatBytes(file.size),\n type: file.type as FileTypeEnum,\n url: e.target.result,\n });\n }\n };\n fileReader.onabort = () => {\n reject(new Error('File reading aborted'));\n };\n fileReader.onerror = () => {\n reject(new Error('Failed to read file'));\n };\n fileReader.readAsDataURL(file);\n });\n });\n\n Promise.all(promises).then(files => {\n if (!isCancel) {\n setFiles(files);\n }\n });\n }\n\n return () => {\n isCancel = true;\n fileReaders.forEach(fileReader => {\n fileReader.abort();\n });\n };\n }, [inputFiles]);\n\n return files;\n};\n","import { useEffect, useRef, useState } from 'react';\n\ntype GeolocationData = GeolocationPosition['coords'] & {\n timestamp: GeolocationPosition['timestamp'];\n};\n\ninterface GeolocationError {\n code: number;\n message: string;\n}\n\ntype UseGeolocationReturn = {\n data: GeolocationData | null;\n error: GeolocationError | null;\n isLoading: boolean;\n};\n\nexport const useGeolocation = (): UseGeolocationReturn => {\n const [data, setData] = useState<GeolocationData | null>(null);\n const [error, setError] = useState<GeolocationError | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const watchIdRef = useRef<number | null>(null);\n\n useEffect(() => {\n if (!navigator.geolocation) {\n setError({\n code: 0,\n message: 'Geolocation is not supported by your browser.',\n });\n setIsLoading(false);\n\n return;\n }\n\n const handleSuccess = (position: GeolocationPosition) => {\n setData({\n ...position.coords,\n timestamp: position.timestamp,\n });\n setIsLoading(false);\n };\n\n const handleError = (geolocationError: GeolocationPositionError) => {\n setError({\n code: geolocationError.code,\n message: geolocationError.message,\n });\n setIsLoading(false);\n };\n\n navigator.geolocation.getCurrentPosition(handleSuccess, handleError);\n\n watchIdRef.current = navigator.geolocation.watchPosition(handleSuccess, handleError);\n\n return () => {\n if (watchIdRef.current !== null) {\n navigator.geolocation.clearWatch(watchIdRef.current);\n }\n };\n }, []);\n\n return { data, error, isLoading };\n};\n","import { useCallback, useRef, useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nexport const useHover = () => {\n const [isHovered, setIsHovered] = useState(false);\n const ref = useRef<HTMLElement>(null);\n\n const handleMouseEnter = useCallback(() => setIsHovered(true), []);\n\n const handleMouseLeave = useCallback(() => setIsHovered(false), []);\n\n useEventListener('mouseenter', handleMouseEnter, ref);\n useEventListener('mouseleave', handleMouseLeave, ref);\n\n return isHovered;\n};\n","import { useRef, useState } from 'react';\n\nimport { useIntersectionObserver } from './use-intersection-observer';\n\nexport const useInView = (initOptions: IntersectionObserverInit = {}) => {\n const [inView, setInView] = useState(false);\n const ref = useRef<Element>(null);\n\n useIntersectionObserver(\n ref,\n ([entry]) => {\n setInView(entry.isIntersecting);\n },\n initOptions,\n );\n\n return { ref, inView };\n};\n","import { RefObject, useEffect } from 'react';\n\nexport const useIntersectionObserver = <T extends Element>(\n ref: RefObject<T> | Array<RefObject<T>>,\n callback: IntersectionObserverCallback,\n initOptions: IntersectionObserverInit = {},\n) => {\n useEffect(() => {\n const refs = Array.isArray(ref) ? ref : [ref];\n\n const observer = new IntersectionObserver(callback, initOptions);\n\n refs.forEach(r => r.current && observer.observe(r.current));\n\n return () => {\n observer.disconnect();\n };\n }, [callback, initOptions, ref]);\n};\n","import React, { useCallback, useState } from 'react';\n\ntype InputTypes = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\ntype UseInputHandlersProps<T extends InputTypes> = {\n onBlur?: (e: React.FocusEvent<T>) => void;\n onFocus?: (e: React.FocusEvent<T>) => void;\n onChange?: (e: React.ChangeEvent<T>) => void;\n};\n\nexport const useInputHandlers = <T extends InputTypes>({\n onBlur,\n onFocus,\n onChange,\n}: UseInputHandlersProps<T> = {}) => {\n const [isFocus, setIsFocus] = useState(false);\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<T>) => {\n setIsFocus(true);\n onFocus && onFocus(e);\n },\n [onFocus],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<T>) => {\n setIsFocus(false);\n onBlur && onBlur(e);\n },\n [onBlur],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<T>) => {\n onChange && onChange(e);\n },\n [onChange],\n );\n\n return {\n isFocus,\n handlers: {\n onFocus: handleFocus,\n onBlur: handleBlur,\n onChange: handleChange,\n },\n };\n};\n","import { useEffect, useState } from 'react';\n\nexport const useMediaQuery = (query: string): boolean => {\n const [matches, setMatches] = useState(false);\n\n useEffect(() => {\n const media = window.matchMedia(query);\n\n if (media.matches !== matches) {\n setMatches(media.matches);\n }\n\n const listener = () => {\n setMatches(media.matches);\n };\n\n media.addEventListener('change', listener);\n\n return () => {\n media.removeEventListener('change', listener);\n };\n }, [matches, query]);\n\n return matches;\n};\n","import { useRef, useState } from 'react';\n\nexport const useModal = <T extends HTMLElement>() => {\n const containerRef = useRef<T>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n const openModal = () => {\n setIsOpen(true);\n };\n\n const closeModal = () => {\n setIsOpen(false);\n };\n\n return {\n containerRef,\n isOpen,\n openModal,\n closeModal,\n };\n};\n","import { RefObject, useCallback, useLayoutEffect, useRef } from 'react';\n\nimport { useClickOutside } from './use-click-outside';\nimport { useEventListener } from './use-event-listener';\nimport { useResizeObserver } from './use-resize-observer';\n\nimport {\n getModalPositionRelativeToContainer,\n getModalPositionRelativeToScreen,\n PositionContainer,\n PositionObject,\n} from '@polpo/helpers';\n\nconst convertDOMRectToPosition = (rect: DOMRectReadOnly): PositionObject => ({\n x: rect.x,\n y: rect.y,\n w: rect.width,\n h: rect.height,\n top: rect.top,\n left: rect.left,\n});\n\nexport type UseModalInContainerParams<\n Container extends HTMLElement = HTMLElement,\n Modal extends HTMLElement = Container,\n> = {\n closeOnClickOutside?: boolean;\n windowOffset?: number;\n offset?: number;\n position?: `${PositionContainer}`;\n modalRef: RefObject<Modal>;\n containerRef?: RefObject<Container>;\n isOpen: boolean;\n onClose: () => void;\n};\n\nexport const useModalInContainer = <\n Container extends HTMLElement = HTMLElement,\n Modal extends HTMLElement = Container,\n>({\n closeOnClickOutside = true,\n offset = 0,\n windowOffset = 0,\n position = PositionContainer.BOTTOM,\n modalRef,\n containerRef,\n isOpen,\n onClose,\n}: UseModalInContainerParams<Container, Modal>) => {\n const containerTemporalRef = useRef<Container>(null);\n\n useClickOutside<Modal>(modalRef, () => {\n if (isOpen && closeOnClickOutside) {\n onClose();\n }\n });\n\n const getPosition = useCallback(\n (modalRef: RefObject<Modal>, containerRef: RefObject<Container>) => {\n const modal = modalRef.current?.getClientRects()[0];\n const container = containerRef.current?.getClientRects()[0];\n\n if (!modal) {\n return;\n }\n\n const modalStyle: Record<string, string> = !container\n ? getModalPositionRelativeToScreen({ position: position as PositionContainer, windowOffset })\n : getModalPositionRelativeToContainer({\n c: convertDOMRectToPosition(container),\n m: convertDOMRectToPosition(modal),\n offset,\n windowOffset,\n position: position as PositionContainer,\n });\n\n Object.keys(modalStyle).forEach(key => {\n modalRef.current?.style.setProperty(key, modalStyle[key]);\n });\n },\n [position, windowOffset, offset],\n );\n\n const callback = useCallback(() => {\n if (isOpen) {\n getPosition(modalRef, containerRef ?? containerTemporalRef);\n }\n }, [getPosition, isOpen, containerRef, modalRef]);\n\n useLayoutEffect(callback, [callback]);\n\n useResizeObserver<Container>(containerRef ?? containerTemporalRef, callback);\n useResizeObserver<Modal>(modalRef, callback);\n useEventListener('resize', callback);\n useEventListener('scroll', callback, modalRef);\n};\n","import React, { useCallback, useEffect, useLayoutEffect, useMemo } from 'react';\n\nexport enum ModalState {\n OPENING = 'OPENING',\n OPEN = 'OPEN',\n CLOSING = 'CLOSING',\n CLOSED = 'CLOSED',\n}\n\nexport type UseModalTransitionParams = {\n transitionDuration?: number;\n onClose: () => void;\n isOpen: boolean;\n};\n\nexport const useModalTransition = ({ transitionDuration = 0, onClose, isOpen }: UseModalTransitionParams) => {\n const [modalState, setModalState] = React.useState<ModalState>(ModalState.CLOSED);\n\n const isVisible = useMemo(() => {\n return modalState !== ModalState.CLOSED;\n }, [modalState]);\n\n useEffect(() => {\n document.documentElement.style.overflow = isVisible ? 'hidden' : 'auto';\n }, [isVisible]);\n\n const closeModal = useCallback(() => {\n if ([ModalState.OPENING, ModalState.OPEN].includes(modalState)) {\n if (transitionDuration > 0) {\n setModalState(ModalState.CLOSING);\n setTimeout(() => {\n setModalState(ModalState.CLOSED);\n onClose();\n }, transitionDuration);\n } else {\n setModalState(ModalState.CLOSED);\n }\n }\n }, [onClose, modalState, transitionDuration]);\n\n const openModal = useCallback(() => {\n if ([ModalState.CLOSING, ModalState.CLOSED].includes(modalState)) {\n if (transitionDuration > 0) {\n setModalState(ModalState.OPENING);\n setTimeout(() => {\n setModalState(ModalState.OPEN);\n }, transitionDuration);\n } else {\n setModalState(ModalState.OPEN);\n }\n }\n }, [modalState, transitionDuration]);\n\n useLayoutEffect(() => {\n if (modalState === ModalState.CLOSED && isOpen) {\n openModal();\n } else if (modalState === ModalState.OPEN && !isOpen) {\n closeModal();\n }\n }, [isOpen, openModal, closeModal, modalState]);\n\n return {\n isVisible,\n modalState,\n };\n};\n","import React, { useRef, useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\ntype MousePosition = {\n x: null | number;\n y: null | number;\n elementX: number | null;\n elementY: number | null;\n elementPositionX: number | null;\n elementPositionY: number | null;\n};\n\nconst getMousePosition = (domRect: DOMRect, e: MouseEvent) => {\n const { left, top } = domRect;\n const containerPositionX = left + window.scrollX;\n const containerPositionY = top + window.scrollY;\n const containerX = e.pageX - containerPositionX;\n const containerY = e.pageY - containerPositionY;\n\n return {\n x: e.pageX,\n y: e.pageY,\n elementX: containerX,\n elementY: containerY,\n elementPositionX: containerPositionX,\n elementPositionY: containerPositionY,\n };\n};\n\nexport const useMousePosition = (containerRef?: React.RefObject<HTMLElement | SVGElement | null>) => {\n const ref = useRef<HTMLElement>(null);\n const [position, setPosition] = useState<MousePosition>({\n x: null,\n y: null,\n elementX: null,\n elementY: null,\n elementPositionX: null,\n elementPositionY: null,\n });\n\n const mouseMove = (e: MouseEvent) => {\n const { clientX, clientY } = e;\n setPosition(prev => ({ ...prev, x: clientX, y: clientY }));\n\n if (containerRef?.current instanceof Element) {\n const newState = getMousePosition(containerRef.current.getBoundingClientRect(), e);\n setPosition(prev => ({\n ...prev,\n ...newState,\n }));\n } else if (ref.current instanceof Element) {\n const newState = getMousePosition(ref.current.getBoundingClientRect(), e);\n setPosition(prev => ({\n ...prev,\n ...newState,\n }));\n }\n };\n\n useEventListener('mousemove', mouseMove);\n\n return { ...position, ref };\n};\n","import { useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nexport const useOnlineStatus = () => {\n const [online, setOnline] = useState(navigator.onLine);\n\n useEventListener('online', () => setOnline(navigator.onLine));\n useEventListener('offline', () => setOnline(navigator.onLine));\n\n return online;\n};\n","import { useEffect, useRef } from 'react';\n\nexport const useRenderCount = () => {\n const count = useRef(1);\n\n useEffect(() => {\n count.current++;\n });\n\n return count.current;\n};\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useScroll = () => {\n const ref = useRef<HTMLElement>(null);\n const [position, setPosition] = useState([0, 0]);\n\n useEffect(() => {\n const element = ref.current;\n\n const handleScroll = () => {\n if (!element) return;\n\n setPosition([element.scrollLeft, element.scrollTop]);\n };\n\n if (element) {\n element.addEventListener('scroll', handleScroll);\n }\n\n return () => {\n if (element) {\n element.removeEventListener('scroll', handleScroll);\n }\n };\n }, []);\n\n return {\n ref,\n position,\n };\n};\n","import { Dispatch, SetStateAction, useEffect, useState } from 'react';\n\nfunction useStateHistory<T>(initialState: T | (() => T)): [T, Dispatch<SetStateAction<T>>, Array<T>];\n\nfunction useStateHistory<T = undefined>(): [T | undefined, Dispatch<SetStateAction<T | undefined>>, Array<T>];\n\nfunction useStateHistory<T = undefined>(\n initialState?: T | (() => T) | undefined,\n): [T | undefined, Dispatch<SetStateAction<T | undefined>>, Array<T>] {\n const [state, setState] = useState<T | undefined>(initialState);\n const [history, setHistory] = useState<Array<T>>([]);\n\n useEffect(() => {\n if (state !== undefined) {\n setHistory(prevHistory => [...prevHistory, state]);\n }\n }, [state]);\n\n return [state, setState, history];\n}\n\nexport { useStateHistory };\n","import { useCallback, useState } from 'react';\n\nexport const useToggle = (defaultValue: boolean = false) => {\n const [value, setValue] = useState<boolean>(defaultValue);\n\n const toggle = useCallback(() => {\n setValue(prev => !prev);\n }, []);\n\n return [value, toggle, setValue];\n};\n","import { useCallback, useState } from 'react';\n\nexport const useToggleValues = <T>(values: Array<T>, defaultIndex: number = 0): [T, (index?: number) => void] => {\n const [index, setIndex] = useState(defaultIndex);\n\n const toggle = useCallback(\n (index?: number) => {\n setIndex(index !== undefined ? index : prev => (prev + 1) % values.length);\n },\n [values.length],\n );\n\n return [values[index], toggle];\n};\n","import { useEffect, useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nenum ScreenOrientation {\n PORTRAIT = 'portrait',\n LANDSCAPE = 'landscape',\n}\n\ntype UseViewportData = {\n width: number;\n height: number;\n orientation: ScreenOrientation;\n};\n\nexport const useViewport = (): UseViewportData => {\n const getData = (): UseViewportData => {\n const { innerWidth, innerHeight } = window;\n\n return {\n width: innerWidth,\n height: innerHeight,\n orientation: innerWidth > innerHeight ? ScreenOrientation.LANDSCAPE : ScreenOrientation.PORTRAIT,\n };\n };\n\n const [data, setData] = useState<UseViewportData>(getData);\n\n useEventListener('resize', () => {\n setData(getData());\n });\n\n useEffect(() => {\n setData(getData());\n }, []);\n\n return data;\n};\n"],"mappings":"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","names":["useCallback","useMemo","useReducer","useCallback","useLayoutEffect","useRef","useSafeDispatch","dispatch","mounted","args","asyncReducer","_state","action","useAsync","initialState","asyncState","unsafeDispatch","useReducer","dispatch","useSafeDispatch","run","useCallback","promise","data","error","setData","setError","useMemo","useMemo","useClassNames","classes","compiledClassNames","classname","value","useEffect","useLayoutEffect","useRef","useEventListener","eventName","callback","element","options","callbackRef","targetElement","listener","event","checkIsOutside","ref","target","useClickOutside","callback","useEventListener","e","event","r","useState","useConstant","initializer","useState","useCallback","generateCookieAttributes","options","parts","date","setCookie","name","value","encodedValue","attributes","getCookie","nameEq","cookies","cookie","cookieTrimmed","deleteCookie","useCookie","cookieName","defaultValue","cookieValue","setCookieValue","rawCookie","updateCookie","overrideOptions","mergedOptions","stringValue","removeCookie","useEffect","useState","useDebounce","value","delay","debouncedValue","setDebouncedValue","timer","useState","useEffect","useResizeObserver","ref","callback","refs","observer","useDimensions","ref","dimensions","setDimensions","useState","useResizeObserver","entry","width","height","useEffect","useState","createContainer","containerID","domContainer","useDomContainer","container","setContainer","useEffect","useState","FileTypeEnum","useFileReader","inputFiles","files","setFiles","useState","useEffect","fileReaders","isCancel","promises","file","resolve","reject","fileReader","e","formatBytes","useEffect","useRef","useState","useGeolocation","data","setData","error","setError","isLoading","setIsLoading","watchIdRef","handleSuccess","position","handleError","geolocationError","useCallback","useRef","useState","useHover","isHovered","setIsHovered","useState","ref","useRef","handleMouseEnter","useCallback","handleMouseLeave","useEventListener","useRef","useState","useEffect","useIntersectionObserver","ref","callback","initOptions","refs","observer","r","useInView","initOptions","inView","setInView","useState","ref","useRef","useIntersectionObserver","entry","useCallback","useState","useInputHandlers","onBlur","onFocus","onChange","isFocus","setIsFocus","handleFocus","e","handleBlur","handleChange","useEffect","useState","useMediaQuery","query","matches","setMatches","media","listener","useRef","useState","useModal","containerRef","isOpen","setIsOpen","useCallback","useLayoutEffect","useRef","convertDOMRectToPosition","rect","useModalInContainer","closeOnClickOutside","offset","windowOffset","position","modalRef","containerRef","isOpen","onClose","containerTemporalRef","useRef","useClickOutside","getPosition","useCallback","modal","container","modalStyle","getModalPositionRelativeToContainer","getModalPositionRelativeToScreen","key","callback","useLayoutEffect","useResizeObserver","useEventListener","React","useCallback","useEffect","useLayoutEffect","useMemo","ModalState","useModalTransition","transitionDuration","onClose","isOpen","modalState","setModalState","isVisible","closeModal","openModal","useRef","useState","getMousePosition","domRect","e","left","top","containerPositionX","containerPositionY","containerX","containerY","useMousePosition","containerRef","ref","useRef","position","setPosition","useState","useEventListener","clientX","clientY","prev","newState","useState","useOnlineStatus","online","setOnline","useState","useEventListener","useEffect","useRef","useRenderCount","count","useEffect","useRef","useState","useScroll","ref","position","setPosition","element","handleScroll","useEffect","useState","useStateHistory","initialState","state","setState","history","setHistory","prevHistory","useCallback","useState","useToggle","defaultValue","value","setValue","toggle","prev","useCallback","useState","useToggleValues","values","defaultIndex","index","setIndex","toggle","prev","useEffect","useState","useViewport","getData","innerWidth","innerHeight","data","setData","useState","useEventListener","useEffect"]}
package/dist/hooks.cjs CHANGED
@@ -1,3 +1,3 @@
1
1
  "use client";
2
- "use strict";var me=Object.create;var h=Object.defineProperty;var de=Object.getOwnPropertyDescriptor;var pe=Object.getOwnPropertyNames;var Te=Object.getPrototypeOf,fe=Object.prototype.hasOwnProperty;var Ee=(e,t)=>{for(var o in t)h(e,o,{get:t[o],enumerable:!0})},X=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of pe(t))!fe.call(e,r)&&r!==o&&h(e,r,{get:()=>t[r],enumerable:!(n=de(t,r))||n.enumerable});return e};var ve=(e,t,o)=>(o=e!=null?me(Te(e)):{},X(t||!e||!e.__esModule?h(o,"default",{value:e,enumerable:!0}):o,e)),be=e=>X(h({},"__esModule",{value:!0}),e);var Qe={};Ee(Qe,{FileTypeEnum:()=>ne,ModalState:()=>se,useAsync:()=>Oe,useClassNames:()=>Me,useClickOutside:()=>B,useConstant:()=>Re,useCookie:()=>Ce,useDebounce:()=>Le,useDimensions:()=>Se,useDomContainer:()=>ke,useEventListener:()=>l,useFileReader:()=>He,useGeolocation:()=>Ae,useHover:()=>Ge,useInView:()=>we,useInputHandlers:()=>De,useIntersectionObserver:()=>j,useMediaQuery:()=>Be,useModal:()=>je,useModalInContainer:()=>Fe,useModalTransition:()=>F,useMousePosition:()=>_e,useOnlineStatus:()=>$e,useRenderCount:()=>Ue,useResizeObserver:()=>O,useSafeDispatch:()=>D,useScroll:()=>ze,useStateHistory:()=>Ve,useToggle:()=>Ye,useToggleValues:()=>Xe,useViewport:()=>We});module.exports=be(Qe);var p=require("react");var b=require("react"),D=e=>{let t=(0,b.useRef)(!1);return(0,b.useLayoutEffect)(()=>(t.current=!0,()=>{t.current=!1}),[]),(0,b.useCallback)((...o)=>{t.current&&e(...o)},[e])};var xe=(e,t)=>{switch(t.type){case"pending":return{status:"pending",data:null,error:null};case"resolved":return{status:"resolved",data:t.data,error:null};case"rejected":return{status:"rejected",data:null,error:t.error};default:throw new Error(`Unhandled action: ${JSON.stringify(t)}`)}},Oe=e=>{let[t,o]=(0,p.useReducer)(xe,{status:"idle",data:null,error:null,...e}),n=D(o),r=(0,p.useCallback)(a=>{n({type:"pending"}),a.then(c=>{n({type:"resolved",data:c})},c=>{n({type:"rejected",error:c})})},[n]),s=(0,p.useCallback)(a=>n({type:"resolved",data:a}),[n]),i=(0,p.useCallback)(a=>n({type:"rejected",error:a}),[n]);return(0,p.useMemo)(()=>({setData:s,setError:i,run:r,...t}),[t,r,s,i])};var W=require("react"),Me=e=>(0,W.useMemo)(()=>Object.entries(e).reduce((t,[o,n])=>n?[...t,o]:t,[]).join(" "),[e]);var x=require("react");function l(e,t,o,n){let r=(0,x.useRef)(t);(0,x.useEffect)(()=>{r.current=t},[t]),(0,x.useLayoutEffect)(()=>{let s=o?.current??window;if(!(s&&s.addEventListener))return;let i=a=>r.current(a);return s.addEventListener(e,i,n),()=>{s.removeEventListener(e,i,n)}},[e,o,n])}var ye=(e,t)=>e.current&&!e.current.contains(t),B=(e,t)=>{l("keydown",o=>{o.key==="Escape"&&t()}),l("mousedown",o=>{let n=o.target;if(!n?.isConnected)return;(Array.isArray(e)?e:[e]).every(s=>ye(s,n))&&t()})};var Q=require("react"),Re=e=>(0,Q.useState)(e)[0];var R=require("react"),ge=e=>{let t=[];if(e.expires instanceof Date)t.push(`expires=${e.expires.toUTCString()}`);else if(typeof e.days=="number"){let o=new Date;o.setTime(o.getTime()+e.days*24*60*60*1e3),t.push(`expires=${o.toUTCString()}`)}return typeof e.maxAge=="number"&&t.push(`max-age=${e.maxAge}`),t.push(`path=${e.path??"/"}`),e.domain&&t.push(`domain=${e.domain}`),e.secure&&t.push("secure"),e.sameSite&&t.push(`SameSite=${e.sameSite}`),t.length>0?`; ${t.join("; ")}`:""},J=(e,t,o={})=>{if(typeof document>"u")return;let n=encodeURIComponent(t),r=ge(o);document.cookie=`${e}=${n}${r}`},he=e=>{if(typeof document>"u")return null;let t=`${e}=`,o=document.cookie?document.cookie.split(";"):[];for(let n of o){let r=n.trim();if(r.indexOf(t)===0)return decodeURIComponent(r.substring(t.length))}return null},Pe=(e,t={})=>{typeof document>"u"||J(e,"",{...t,days:-1})},Ce=(e,t,o={})=>{let[n,r]=(0,R.useState)(()=>{let a=he(e);if(a!==null)try{return JSON.parse(a)}catch{return t}return t}),s=(0,R.useCallback)((a,c={})=>{let u={...o,...c},d=JSON.stringify(a);J(e,d,u),r(a)},[e,o]),i=(0,R.useCallback)(()=>{Pe(e,o),r(t)},[e,t,o]);return[n,s,i]};var P=require("react"),Le=(e,t=500)=>{let[o,n]=(0,P.useState)(e);return(0,P.useEffect)(()=>{let r=setTimeout(()=>n(e),t);return()=>{clearTimeout(r)}},[e,t]),o};var Z=require("react");var K=require("react"),O=(e,t)=>{(0,K.useEffect)(()=>{let o=Array.isArray(e)?e:[e],n=new ResizeObserver(t);return o.forEach(r=>r.current&&n.observe(r.current)),()=>{n.disconnect()}},[e,t])};var Se=e=>{let[t,o]=(0,Z.useState)({width:0,height:0});return O(e,([n])=>{if((n?.borderBoxSize??[])[0]){let{inlineSize:r,blockSize:s}=n.borderBoxSize[0];o({width:r,height:s})}else if(n.contentRect){let{width:r,height:s}=n.contentRect;o({width:r,height:s})}}),t};var C=require("react"),ke=e=>((0,C.useEffect)(()=>{let t=document.getElementById(e);if(t!==null)return()=>{t&&document.body.removeChild(t)}},[e]),(0,C.useMemo)(()=>{let t=document.getElementById(e);return t===null&&(t=document.createElement("div"),t.setAttribute("id",e),document.body.appendChild(t)),t},[e]));var L=require("react");var q=(e,t=2)=>{if(e===0)return"0 Bytes";let o=1e3,n=t<0?0:t,r=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"],s=Math.floor(Math.log(e)/Math.log(o));return parseFloat((e/Math.pow(o,s)).toFixed(n))+" "+r[s]};var ee=({c:e,m:t,offset:o,position:n})=>{let r=e.y+e.h+o,s=e.x-(t.w-e.w)*(50/100);switch(n){case"top":case"top center":r=e.y-t.h-o,s=e.x-(t.w-e.w)/2;break;case"top left":r=e.y-t.h-o,s=e.x-t.w+e.w;break;case"top right":r=e.y-t.h-o,s=e.x;break;case"bottom":case"bottom center":r=e.y+e.h+o,s=e.x-(t.w-e.w)/2;break;case"bottom left":r=e.y+e.h+o,s=e.x-t.w+e.w;break;case"bottom right":r=e.y+e.h+o,s=e.x;break;case"left":case"left center":r=e.y-(t.h-e.h)/2,s=e.x-t.w-o;break;case"left top":r=e.y-t.h+e.h,s=e.x-t.w-o;break;case"left bottom":r=e.y,s=e.x-t.w-o;break;case"right":case"right center":r=e.y-(t.h-e.h)/2,s=e.x+e.w+o;break;case"right top":r=e.y-t.h+e.h,s=e.x+e.w+o;break;case"right bottom":r=e.y,s=e.x+e.w+o;break}return{left:Math.round(s),top:Math.round(r)}},Ne=({top:e,left:t},o,n,r)=>{let s=o.split(" "),i=[],a=t+r.w+n-window.innerWidth,c=e+r.h+n-window.innerHeight;for(let u of s)u==="top"&&e<n?i.push("bottom"):u==="left"&&t<n?i.push("right"):u==="bottom"&&c>0?i.push("top"):u==="right"&&a>0?i.push("left"):i.push(u);return i.join(" ")},Ie=({top:e,left:t},o,n)=>{let r=t+o.w+n-window.innerWidth,s=e+o.h+n-window.innerHeight;return t=r>0?t-r:t,e=s>0?e-s:e,t=t<n?n:t,e=e<n?n:e,{top:e,left:t}},te=({c:e,m:t,offset:o,windowOffset:n,position:r})=>{let s={c:e,m:t,offset:o,position:r},i=ee(s),a=Ne(i,r,n,t);a!==r&&(i=ee({...s,position:a}));let c=Ie(i,t,n);return{left:`${c.left}px`,top:`${c.top}px`}};var oe=({position:e,windowOffset:t})=>{switch(e){case"center":return{top:"50%",left:"50%",transform:"translate(-50%, -50%)"};case"top":case"top center":return{top:`${t}px`,left:"50%",transform:"translateX(-50%)"};case"top left":case"left top":return{top:`${t}px`,left:`${t}px`};case"top right":case"right top":return{top:`${t}px`,right:`${t}px`};case"bottom":case"bottom center":return{bottom:`${t}px`,left:"50%",transform:"translateX(-50%)"};case"left bottom":case"bottom left":return{bottom:`${t}px`,left:`${t}px`};case"right bottom":case"bottom right":return{bottom:`${t}px`,right:`${t}px`};case"left":case"left center":return{top:"50%",left:`${t}px`,transform:"translateY(-50%)"};case"right":case"right center":return{top:"50%",right:`${t}px`,transform:"translateY(-50%)"}}return{top:"50%",left:"50%",transform:"translate(-50%, -50%)"}};var ne=(o=>(o.PNG="image/png",o.PDF="application/pdf",o))(ne||{}),He=e=>{let[t,o]=(0,L.useState)([]);return(0,L.useEffect)(()=>{let n=[],r=!1;if(!Array.isArray(e)||e.length===0)o([]);else{let s=e.map(i=>new Promise((a,c)=>{let u=new FileReader;n.push(u),u.onload=d=>{d.target?.result&&a({name:i.name,size:i.size,formatSize:q(i.size),type:i.type,url:d.target.result})},u.onabort=()=>{c(new Error("File reading aborted"))},u.onerror=()=>{c(new Error("Failed to read file"))},u.readAsDataURL(i)}));Promise.all(s).then(i=>{r||o(i)})}return()=>{r=!0,n.forEach(s=>{s.abort()})}},[e]),t};var T=require("react"),Ae=()=>{let[e,t]=(0,T.useState)(null),[o,n]=(0,T.useState)(null),[r,s]=(0,T.useState)(!0),i=(0,T.useRef)(null);return(0,T.useEffect)(()=>{if(!navigator.geolocation){n({code:0,message:"Geolocation is not supported by your browser."}),s(!1);return}let a=u=>{t({...u.coords,timestamp:u.timestamp}),s(!1)},c=u=>{n({code:u.code,message:u.message}),s(!1)};return navigator.geolocation.getCurrentPosition(a,c),i.current=navigator.geolocation.watchPosition(a,c),()=>{i.current!==null&&navigator.geolocation.clearWatch(i.current)}},[]),{data:e,error:o,isLoading:r}};var f=require("react");var Ge=()=>{let[e,t]=(0,f.useState)(!1),o=(0,f.useRef)(null),n=(0,f.useCallback)(()=>t(!0),[]),r=(0,f.useCallback)(()=>t(!1),[]);return l("mouseenter",n,o),l("mouseleave",r,o),e};var S=require("react");var re=require("react"),j=(e,t,o={})=>{(0,re.useEffect)(()=>{let n=Array.isArray(e)?e:[e],r=new IntersectionObserver(t,o);return n.forEach(s=>s.current&&r.observe(s.current)),()=>{r.disconnect()}},[t,o,e])};var we=(e={})=>{let[t,o]=(0,S.useState)(!1),n=(0,S.useRef)(null);return j(n,([r])=>{o(r.isIntersecting)},e),{ref:n,inView:t}};var M=require("react"),De=({onBlur:e,onFocus:t,onChange:o}={})=>{let[n,r]=(0,M.useState)(!1),s=(0,M.useCallback)(c=>{r(!0),t&&t(c)},[t]),i=(0,M.useCallback)(c=>{r(!1),e&&e(c)},[e]),a=(0,M.useCallback)(c=>{o&&o(c)},[o]);return{isFocus:n,handlers:{onFocus:s,onBlur:i,onChange:a}}};var k=require("react"),Be=e=>{let[t,o]=(0,k.useState)(!1);return(0,k.useEffect)(()=>{let n=window.matchMedia(e);n.matches!==t&&o(n.matches);let r=()=>{o(n.matches)};return n.addEventListener("change",r),()=>{n.removeEventListener("change",r)}},[t,e]),t};var N=require("react"),je=()=>{let e=(0,N.useRef)(null),[t,o]=(0,N.useState)(!1);return{containerRef:e,isOpen:t,openModal:()=>{o(!0)},closeModal:()=>{o(!1)}}};var E=require("react");var m=ve(require("react"),1),se=(r=>(r.OPENING="OPENING",r.OPEN="OPEN",r.CLOSING="CLOSING",r.CLOSED="CLOSED",r))(se||{}),F=(e=0,t=()=>null)=>{let[o,n]=m.default.useState("CLOSED"),r=(0,m.useMemo)(()=>o!=="CLOSED",[o]);(0,m.useEffect)(()=>{document.documentElement.style.overflow=r?"hidden":"auto"},[r]);let s=(0,m.useCallback)(()=>{["OPENING","OPEN"].includes(o)&&(e>0?(n("CLOSING"),setTimeout(()=>{n("CLOSED"),t()},e)):n("CLOSED"))},[t,o,e]),i=(0,m.useCallback)(()=>{["CLOSING","CLOSED"].includes(o)&&(e>0?(n("OPENING"),setTimeout(()=>{n("OPEN")},e)):n("OPEN"))},[o,e]);return{isVisible:r,closeModal:s,openModal:i,modalState:o}};var ie=e=>({x:e.x,y:e.y,w:e.width,h:e.height,top:e.top,left:e.left}),Fe=({closeOnClickOutside:e=!0,offset:t=0,windowOffset:o=0,position:n="bottom",transitionDuration:r=0,modalRef:s,containerRef:i,onClose:a})=>{let c=(0,E.useRef)(null),u=F(r,a),{isVisible:d,closeModal:ue}=u;B(s,()=>{d&&e&&ue()});let _=(0,E.useCallback)(($,le)=>{let U=$.current?.getClientRects()[0],z=le.current?.getClientRects()[0];if(!U)return;let V=z?te({c:ie(z),m:ie(U),offset:t,windowOffset:o,position:n}):oe({position:n,windowOffset:o});Object.keys(V).forEach(Y=>{$.current?.style.setProperty(Y,V[Y])})},[n,o,t]),v=(0,E.useCallback)(()=>{d&&_(s,i??c)},[_,d,i,s]);return(0,E.useLayoutEffect)(v,[v]),O(i??c,v),O(s,v),l("resize",v),l("scroll",v,s),u};var I=require("react");var ae=(e,t)=>{let{left:o,top:n}=e,r=o+window.scrollX,s=n+window.scrollY,i=t.pageX-r,a=t.pageY-s;return{x:t.pageX,y:t.pageY,elementX:i,elementY:a,elementPositionX:r,elementPositionY:s}},_e=e=>{let t=(0,I.useRef)(null),[o,n]=(0,I.useState)({x:null,y:null,elementX:null,elementY:null,elementPositionX:null,elementPositionY:null});return l("mousemove",s=>{let{clientX:i,clientY:a}=s;if(n(c=>({...c,x:i,y:a})),e?.current instanceof Element){let c=ae(e.current.getBoundingClientRect(),s);n(u=>({...u,...c}))}else if(t.current instanceof Element){let c=ae(t.current.getBoundingClientRect(),s);n(u=>({...u,...c}))}}),{...o,ref:t}};var ce=require("react");var $e=()=>{let[e,t]=(0,ce.useState)(navigator.onLine);return l("online",()=>t(navigator.onLine)),l("offline",()=>t(navigator.onLine)),e};var H=require("react"),Ue=()=>{let e=(0,H.useRef)(1);return(0,H.useEffect)(()=>{e.current++}),e.current};var y=require("react"),ze=()=>{let e=(0,y.useRef)(null),[t,o]=(0,y.useState)([0,0]);return(0,y.useEffect)(()=>{let n=e.current,r=()=>{n&&o([n.scrollLeft,n.scrollTop])};return n&&n.addEventListener("scroll",r),()=>{n&&n.removeEventListener("scroll",r)}},[]),{ref:e,position:t}};var g=require("react");function Ve(e){let[t,o]=(0,g.useState)(e),[n,r]=(0,g.useState)([]);return(0,g.useEffect)(()=>{t!==void 0&&r(s=>[...s,t])},[t]),[t,o,n]}var A=require("react"),Ye=(e=!1)=>{let[t,o]=(0,A.useState)(e),n=(0,A.useCallback)(()=>{o(r=>!r)},[]);return[t,n,o]};var G=require("react"),Xe=(e,t=0)=>{let[o,n]=(0,G.useState)(t),r=(0,G.useCallback)(s=>{n(s!==void 0?s:i=>(i+1)%e.length)},[e.length]);return[e[o],r]};var w=require("react");var We=()=>{let e=()=>{let{innerWidth:n,innerHeight:r}=window;return{width:n,height:r,orientation:n>r?"landscape":"portrait"}},[t,o]=(0,w.useState)(e);return l("resize",()=>{o(e())}),(0,w.useEffect)(()=>{o(e())},[]),t};0&&(module.exports={FileTypeEnum,ModalState,useAsync,useClassNames,useClickOutside,useConstant,useCookie,useDebounce,useDimensions,useDomContainer,useEventListener,useFileReader,useGeolocation,useHover,useInView,useInputHandlers,useIntersectionObserver,useMediaQuery,useModal,useModalInContainer,useModalTransition,useMousePosition,useOnlineStatus,useRenderCount,useResizeObserver,useSafeDispatch,useScroll,useStateHistory,useToggle,useToggleValues,useViewport});
2
+ "use strict";var ce=Object.create;var g=Object.defineProperty;var ue=Object.getOwnPropertyDescriptor;var le=Object.getOwnPropertyNames;var me=Object.getPrototypeOf,de=Object.prototype.hasOwnProperty;var pe=(e,t)=>{for(var o in t)g(e,o,{get:t[o],enumerable:!0})},z=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of le(t))!de.call(e,r)&&r!==o&&g(e,r,{get:()=>t[r],enumerable:!(n=ue(t,r))||n.enumerable});return e};var Te=(e,t,o)=>(o=e!=null?ce(me(e)):{},z(t||!e||!e.__esModule?g(o,"default",{value:e,enumerable:!0}):o,e)),fe=e=>z(g({},"__esModule",{value:!0}),e);var Xe={};pe(Xe,{FileTypeEnum:()=>te,ModalState:()=>re,useAsync:()=>ve,useClassNames:()=>be,useClickOutside:()=>D,useConstant:()=>Me,useCookie:()=>ge,useDebounce:()=>he,useDimensions:()=>Pe,useDomContainer:()=>Ce,useEventListener:()=>l,useFileReader:()=>ke,useGeolocation:()=>Ne,useHover:()=>He,useInView:()=>Ie,useInputHandlers:()=>Ae,useIntersectionObserver:()=>B,useMediaQuery:()=>Ge,useModal:()=>we,useModalInContainer:()=>De,useModalTransition:()=>Be,useMousePosition:()=>je,useOnlineStatus:()=>Fe,useRenderCount:()=>_e,useResizeObserver:()=>x,useSafeDispatch:()=>w,useScroll:()=>$e,useStateHistory:()=>Ue,useToggle:()=>ze,useToggleValues:()=>Ve,useViewport:()=>Ye});module.exports=fe(Xe);var p=require("react");var v=require("react"),w=e=>{let t=(0,v.useRef)(!1);return(0,v.useLayoutEffect)(()=>(t.current=!0,()=>{t.current=!1}),[]),(0,v.useCallback)((...o)=>{t.current&&e(...o)},[e])};var Ee=(e,t)=>{switch(t.type){case"pending":return{status:"pending",data:null,error:null};case"resolved":return{status:"resolved",data:t.data,error:null};case"rejected":return{status:"rejected",data:null,error:t.error};default:throw new Error(`Unhandled action: ${JSON.stringify(t)}`)}},ve=e=>{let[t,o]=(0,p.useReducer)(Ee,{status:"idle",data:null,error:null,...e}),n=w(o),r=(0,p.useCallback)(a=>{n({type:"pending"}),a.then(c=>{n({type:"resolved",data:c})},c=>{n({type:"rejected",error:c})})},[n]),s=(0,p.useCallback)(a=>n({type:"resolved",data:a}),[n]),i=(0,p.useCallback)(a=>n({type:"rejected",error:a}),[n]);return(0,p.useMemo)(()=>({setData:s,setError:i,run:r,...t}),[t,r,s,i])};var V=require("react"),be=e=>(0,V.useMemo)(()=>Object.entries(e).reduce((t,[o,n])=>n?[...t,o]:t,[]).join(" "),[e]);var b=require("react");function l(e,t,o,n){let r=(0,b.useRef)(t);(0,b.useEffect)(()=>{r.current=t},[t]),(0,b.useLayoutEffect)(()=>{let s=o?.current??window;if(!(s&&s.addEventListener))return;let i=a=>r.current(a);return s.addEventListener(e,i,n),()=>{s.removeEventListener(e,i,n)}},[e,o,n])}var xe=(e,t)=>e.current&&!e.current.contains(t),D=(e,t)=>{l("keydown",o=>{o.key==="Escape"&&t()}),l("mousedown",o=>{let n=o.target;if(!n?.isConnected)return;(Array.isArray(e)?e:[e]).every(s=>xe(s,n))&&t()})};var Y=require("react"),Me=e=>(0,Y.useState)(e)[0];var y=require("react"),Oe=e=>{let t=[];if(e.expires instanceof Date)t.push(`expires=${e.expires.toUTCString()}`);else if(typeof e.days=="number"){let o=new Date;o.setTime(o.getTime()+e.days*24*60*60*1e3),t.push(`expires=${o.toUTCString()}`)}return typeof e.maxAge=="number"&&t.push(`max-age=${e.maxAge}`),t.push(`path=${e.path??"/"}`),e.domain&&t.push(`domain=${e.domain}`),e.secure&&t.push("secure"),e.sameSite&&t.push(`SameSite=${e.sameSite}`),t.length>0?`; ${t.join("; ")}`:""},X=(e,t,o={})=>{if(typeof document>"u")return;let n=encodeURIComponent(t),r=Oe(o);document.cookie=`${e}=${n}${r}`},ye=e=>{if(typeof document>"u")return null;let t=`${e}=`,o=document.cookie?document.cookie.split(";"):[];for(let n of o){let r=n.trim();if(r.indexOf(t)===0)return decodeURIComponent(r.substring(t.length))}return null},Re=(e,t={})=>{typeof document>"u"||X(e,"",{...t,days:-1})},ge=(e,t,o={})=>{let[n,r]=(0,y.useState)(()=>{let a=ye(e);if(a!==null)try{return JSON.parse(a)}catch{return t}return t}),s=(0,y.useCallback)((a,c={})=>{let u={...o,...c},m=JSON.stringify(a);X(e,m,u),r(a)},[e,o]),i=(0,y.useCallback)(()=>{Re(e,o),r(t)},[e,t,o]);return[n,s,i]};var h=require("react"),he=(e,t=500)=>{let[o,n]=(0,h.useState)(e);return(0,h.useEffect)(()=>{let r=setTimeout(()=>n(e),t);return()=>{clearTimeout(r)}},[e,t]),o};var Q=require("react");var W=require("react"),x=(e,t)=>{(0,W.useEffect)(()=>{let o=Array.isArray(e)?e:[e],n=new ResizeObserver(t);return o.forEach(r=>r.current&&n.observe(r.current)),()=>{n.disconnect()}},[e,t])};var Pe=e=>{let[t,o]=(0,Q.useState)({width:0,height:0});return x(e,([n])=>{if((n?.borderBoxSize??[])[0]){let{inlineSize:r,blockSize:s}=n.borderBoxSize[0];o({width:r,height:s})}else if(n.contentRect){let{width:r,height:s}=n.contentRect;o({width:r,height:s})}}),t};var P=require("react"),J=e=>{let t=document.getElementById(e);return t===null&&(t=document.createElement("div"),t.setAttribute("id",e),document.body.appendChild(t)),t},Ce=e=>{let[t,o]=(0,P.useState)(()=>J(e));return(0,P.useEffect)(()=>{let n=document.getElementById(e);if(t===null||n===null){let r=J(e);o(r)}return()=>{t&&t.parentNode}},[t,e]),t};var C=require("react");var K=(e,t=2)=>{if(e===0)return"0 Bytes";let o=1e3,n=t<0?0:t,r=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"],s=Math.floor(Math.log(e)/Math.log(o));return parseFloat((e/Math.pow(o,s)).toFixed(n))+" "+r[s]};var Z=({c:e,m:t,offset:o,position:n})=>{let r=e.y+e.h+o,s=e.x-(t.w-e.w)*(50/100);switch(n){case"top":case"top center":r=e.y-t.h-o,s=e.x-(t.w-e.w)/2;break;case"top left":r=e.y-t.h-o,s=e.x-t.w+e.w;break;case"top right":r=e.y-t.h-o,s=e.x;break;case"bottom":case"bottom center":r=e.y+e.h+o,s=e.x-(t.w-e.w)/2;break;case"bottom left":r=e.y+e.h+o,s=e.x-t.w+e.w;break;case"bottom right":r=e.y+e.h+o,s=e.x;break;case"left":case"left center":r=e.y-(t.h-e.h)/2,s=e.x-t.w-o;break;case"left top":r=e.y-t.h+e.h,s=e.x-t.w-o;break;case"left bottom":r=e.y,s=e.x-t.w-o;break;case"right":case"right center":r=e.y-(t.h-e.h)/2,s=e.x+e.w+o;break;case"right top":r=e.y-t.h+e.h,s=e.x+e.w+o;break;case"right bottom":r=e.y,s=e.x+e.w+o;break}return{left:Math.round(s),top:Math.round(r)}},Le=({top:e,left:t},o,n,r)=>{let s=o.split(" "),i=[],a=t+r.w+n-window.innerWidth,c=e+r.h+n-window.innerHeight;for(let u of s)u==="top"&&e<n?i.push("bottom"):u==="left"&&t<n?i.push("right"):u==="bottom"&&c>0?i.push("top"):u==="right"&&a>0?i.push("left"):i.push(u);return i.join(" ")},Se=({top:e,left:t},o,n)=>{let r=t+o.w+n-window.innerWidth,s=e+o.h+n-window.innerHeight;return t=r>0?t-r:t,e=s>0?e-s:e,t=t<n?n:t,e=e<n?n:e,{top:e,left:t}},q=({c:e,m:t,offset:o,windowOffset:n,position:r})=>{let s={c:e,m:t,offset:o,position:r},i=Z(s),a=Le(i,r,n,t);a!==r&&(i=Z({...s,position:a}));let c=Se(i,t,n);return{left:`${c.left}px`,top:`${c.top}px`}};var ee=({position:e,windowOffset:t})=>{switch(e){case"center":return{top:"50%",left:"50%",transform:"translate(-50%, -50%)"};case"top":case"top center":return{top:`${t}px`,left:"50%",transform:"translateX(-50%)"};case"top left":case"left top":return{top:`${t}px`,left:`${t}px`};case"top right":case"right top":return{top:`${t}px`,right:`${t}px`};case"bottom":case"bottom center":return{bottom:`${t}px`,left:"50%",transform:"translateX(-50%)"};case"left bottom":case"bottom left":return{bottom:`${t}px`,left:`${t}px`};case"right bottom":case"bottom right":return{bottom:`${t}px`,right:`${t}px`};case"left":case"left center":return{top:"50%",left:`${t}px`,transform:"translateY(-50%)"};case"right":case"right center":return{top:"50%",right:`${t}px`,transform:"translateY(-50%)"}}return{top:"50%",left:"50%",transform:"translate(-50%, -50%)"}};var te=(o=>(o.PNG="image/png",o.PDF="application/pdf",o))(te||{}),ke=e=>{let[t,o]=(0,C.useState)([]);return(0,C.useEffect)(()=>{let n=[],r=!1;if(!Array.isArray(e)||e.length===0)o([]);else{let s=e.map(i=>new Promise((a,c)=>{let u=new FileReader;n.push(u),u.onload=m=>{m.target?.result&&a({name:i.name,size:i.size,formatSize:K(i.size),type:i.type,url:m.target.result})},u.onabort=()=>{c(new Error("File reading aborted"))},u.onerror=()=>{c(new Error("Failed to read file"))},u.readAsDataURL(i)}));Promise.all(s).then(i=>{r||o(i)})}return()=>{r=!0,n.forEach(s=>{s.abort()})}},[e]),t};var T=require("react"),Ne=()=>{let[e,t]=(0,T.useState)(null),[o,n]=(0,T.useState)(null),[r,s]=(0,T.useState)(!0),i=(0,T.useRef)(null);return(0,T.useEffect)(()=>{if(!navigator.geolocation){n({code:0,message:"Geolocation is not supported by your browser."}),s(!1);return}let a=u=>{t({...u.coords,timestamp:u.timestamp}),s(!1)},c=u=>{n({code:u.code,message:u.message}),s(!1)};return navigator.geolocation.getCurrentPosition(a,c),i.current=navigator.geolocation.watchPosition(a,c),()=>{i.current!==null&&navigator.geolocation.clearWatch(i.current)}},[]),{data:e,error:o,isLoading:r}};var f=require("react");var He=()=>{let[e,t]=(0,f.useState)(!1),o=(0,f.useRef)(null),n=(0,f.useCallback)(()=>t(!0),[]),r=(0,f.useCallback)(()=>t(!1),[]);return l("mouseenter",n,o),l("mouseleave",r,o),e};var L=require("react");var oe=require("react"),B=(e,t,o={})=>{(0,oe.useEffect)(()=>{let n=Array.isArray(e)?e:[e],r=new IntersectionObserver(t,o);return n.forEach(s=>s.current&&r.observe(s.current)),()=>{r.disconnect()}},[t,o,e])};var Ie=(e={})=>{let[t,o]=(0,L.useState)(!1),n=(0,L.useRef)(null);return B(n,([r])=>{o(r.isIntersecting)},e),{ref:n,inView:t}};var M=require("react"),Ae=({onBlur:e,onFocus:t,onChange:o}={})=>{let[n,r]=(0,M.useState)(!1),s=(0,M.useCallback)(c=>{r(!0),t&&t(c)},[t]),i=(0,M.useCallback)(c=>{r(!1),e&&e(c)},[e]),a=(0,M.useCallback)(c=>{o&&o(c)},[o]);return{isFocus:n,handlers:{onFocus:s,onBlur:i,onChange:a}}};var S=require("react"),Ge=e=>{let[t,o]=(0,S.useState)(!1);return(0,S.useEffect)(()=>{let n=window.matchMedia(e);n.matches!==t&&o(n.matches);let r=()=>{o(n.matches)};return n.addEventListener("change",r),()=>{n.removeEventListener("change",r)}},[t,e]),t};var k=require("react"),we=()=>{let e=(0,k.useRef)(null),[t,o]=(0,k.useState)(!1);return{containerRef:e,isOpen:t,openModal:()=>{o(!0)},closeModal:()=>{o(!1)}}};var E=require("react");var ne=e=>({x:e.x,y:e.y,w:e.width,h:e.height,top:e.top,left:e.left}),De=({closeOnClickOutside:e=!0,offset:t=0,windowOffset:o=0,position:n="bottom",modalRef:r,containerRef:s,isOpen:i,onClose:a})=>{let c=(0,E.useRef)(null);D(r,()=>{i&&e&&a()});let u=(0,E.useCallback)((j,ae)=>{let F=j.current?.getClientRects()[0],_=ae.current?.getClientRects()[0];if(!F)return;let $=_?q({c:ne(_),m:ne(F),offset:t,windowOffset:o,position:n}):ee({position:n,windowOffset:o});Object.keys($).forEach(U=>{j.current?.style.setProperty(U,$[U])})},[n,o,t]),m=(0,E.useCallback)(()=>{i&&u(r,s??c)},[u,i,s,r]);(0,E.useLayoutEffect)(m,[m]),x(s??c,m),x(r,m),l("resize",m),l("scroll",m,r)};var d=Te(require("react"),1),re=(r=>(r.OPENING="OPENING",r.OPEN="OPEN",r.CLOSING="CLOSING",r.CLOSED="CLOSED",r))(re||{}),Be=({transitionDuration:e=0,onClose:t,isOpen:o})=>{let[n,r]=d.default.useState("CLOSED"),s=(0,d.useMemo)(()=>n!=="CLOSED",[n]);(0,d.useEffect)(()=>{document.documentElement.style.overflow=s?"hidden":"auto"},[s]);let i=(0,d.useCallback)(()=>{["OPENING","OPEN"].includes(n)&&(e>0?(r("CLOSING"),setTimeout(()=>{r("CLOSED"),t()},e)):r("CLOSED"))},[t,n,e]),a=(0,d.useCallback)(()=>{["CLOSING","CLOSED"].includes(n)&&(e>0?(r("OPENING"),setTimeout(()=>{r("OPEN")},e)):r("OPEN"))},[n,e]);return(0,d.useLayoutEffect)(()=>{n==="CLOSED"&&o?a():n==="OPEN"&&!o&&i()},[o,a,i,n]),{isVisible:s,modalState:n}};var N=require("react");var se=(e,t)=>{let{left:o,top:n}=e,r=o+window.scrollX,s=n+window.scrollY,i=t.pageX-r,a=t.pageY-s;return{x:t.pageX,y:t.pageY,elementX:i,elementY:a,elementPositionX:r,elementPositionY:s}},je=e=>{let t=(0,N.useRef)(null),[o,n]=(0,N.useState)({x:null,y:null,elementX:null,elementY:null,elementPositionX:null,elementPositionY:null});return l("mousemove",s=>{let{clientX:i,clientY:a}=s;if(n(c=>({...c,x:i,y:a})),e?.current instanceof Element){let c=se(e.current.getBoundingClientRect(),s);n(u=>({...u,...c}))}else if(t.current instanceof Element){let c=se(t.current.getBoundingClientRect(),s);n(u=>({...u,...c}))}}),{...o,ref:t}};var ie=require("react");var Fe=()=>{let[e,t]=(0,ie.useState)(navigator.onLine);return l("online",()=>t(navigator.onLine)),l("offline",()=>t(navigator.onLine)),e};var H=require("react"),_e=()=>{let e=(0,H.useRef)(1);return(0,H.useEffect)(()=>{e.current++}),e.current};var O=require("react"),$e=()=>{let e=(0,O.useRef)(null),[t,o]=(0,O.useState)([0,0]);return(0,O.useEffect)(()=>{let n=e.current,r=()=>{n&&o([n.scrollLeft,n.scrollTop])};return n&&n.addEventListener("scroll",r),()=>{n&&n.removeEventListener("scroll",r)}},[]),{ref:e,position:t}};var R=require("react");function Ue(e){let[t,o]=(0,R.useState)(e),[n,r]=(0,R.useState)([]);return(0,R.useEffect)(()=>{t!==void 0&&r(s=>[...s,t])},[t]),[t,o,n]}var I=require("react"),ze=(e=!1)=>{let[t,o]=(0,I.useState)(e),n=(0,I.useCallback)(()=>{o(r=>!r)},[]);return[t,n,o]};var A=require("react"),Ve=(e,t=0)=>{let[o,n]=(0,A.useState)(t),r=(0,A.useCallback)(s=>{n(s!==void 0?s:i=>(i+1)%e.length)},[e.length]);return[e[o],r]};var G=require("react");var Ye=()=>{let e=()=>{let{innerWidth:n,innerHeight:r}=window;return{width:n,height:r,orientation:n>r?"landscape":"portrait"}},[t,o]=(0,G.useState)(e);return l("resize",()=>{o(e())}),(0,G.useEffect)(()=>{o(e())},[]),t};0&&(module.exports={FileTypeEnum,ModalState,useAsync,useClassNames,useClickOutside,useConstant,useCookie,useDebounce,useDimensions,useDomContainer,useEventListener,useFileReader,useGeolocation,useHover,useInView,useInputHandlers,useIntersectionObserver,useMediaQuery,useModal,useModalInContainer,useModalTransition,useMousePosition,useOnlineStatus,useRenderCount,useResizeObserver,useSafeDispatch,useScroll,useStateHistory,useToggle,useToggleValues,useViewport});
3
3
  //# sourceMappingURL=hooks.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/index.ts","../src/hooks/use-async.ts","../src/hooks/use-safe-dispatch.ts","../src/hooks/use-classnames.ts","../src/hooks/use-event-listener.ts","../src/hooks/use-click-outside.ts","../src/hooks/use-constant.ts","../src/hooks/use-cookie.ts","../src/hooks/use-debounce.ts","../src/hooks/use-dimensions.ts","../src/hooks/use-resize-observer.ts","../src/hooks/use-dom-container.ts","../src/hooks/use-file-reader.ts","../src/helpers/format-bytes.ts","../src/helpers/get-modal-position.ts","../src/helpers/get-modal-position-relative-to-screen.ts","../src/hooks/use-geolocation.ts","../src/hooks/use-hover.ts","../src/hooks/use-in-view.ts","../src/hooks/use-intersection-observer.ts","../src/hooks/use-input-handlers.ts","../src/hooks/use-media-query.ts","../src/hooks/use-modal.ts","../src/hooks/use-modal-in-container.ts","../src/hooks/use-modal-transition.ts","../src/hooks/use-mouse-position.ts","../src/hooks/use-online-status.ts","../src/hooks/use-render-count.ts","../src/hooks/use-scroll.ts","../src/hooks/use-state-history.ts","../src/hooks/use-toggle.ts","../src/hooks/use-toggle-values.ts","../src/hooks/use-viewport.ts"],"sourcesContent":["export * from './use-async';\nexport * from './use-classnames';\nexport * from './use-click-outside';\nexport * from './use-constant';\nexport * from './use-cookie';\nexport * from './use-debounce';\nexport * from './use-dimensions';\nexport * from './use-dom-container';\nexport * from './use-event-listener';\nexport * from './use-file-reader';\nexport * from './use-geolocation';\nexport * from './use-hover';\nexport * from './use-in-view';\nexport * from './use-input-handlers';\nexport * from './use-intersection-observer';\nexport * from './use-media-query';\nexport * from './use-modal';\nexport * from './use-modal-in-container';\nexport * from './use-modal-transition';\nexport * from './use-mouse-position';\nexport * from './use-online-status';\nexport * from './use-render-count';\nexport * from './use-resize-observer';\nexport * from './use-safe-dispatch';\nexport * from './use-scroll';\nexport * from './use-state-history';\nexport * from './use-toggle';\nexport * from './use-toggle-values';\nexport * from './use-viewport';\n","import React, { useCallback, useMemo, useReducer } from 'react';\n\nimport { useSafeDispatch } from './use-safe-dispatch';\n\ntype AsyncState<T> =\n | {\n status: 'idle' | 'pending';\n data?: null;\n error?: null;\n }\n | {\n status: 'resolved';\n data: T;\n error: null;\n }\n | {\n status: 'rejected';\n data: null;\n error: Error;\n };\n\ntype AsyncAction<T> =\n | { type: 'reset' }\n | { type: 'pending' }\n | { type: 'resolved'; data: T }\n | { type: 'rejected'; error: Error };\n\nconst asyncReducer = <T>(_state: AsyncState<T>, action: AsyncAction<T>): AsyncState<T> => {\n switch (action.type) {\n case 'pending': {\n return { status: 'pending' as const, data: null, error: null };\n }\n case 'resolved': {\n return { status: 'resolved' as const, data: action.data, error: null };\n }\n case 'rejected': {\n return { status: 'rejected' as const, data: null, error: action.error };\n }\n default: {\n throw new Error(`Unhandled action: ${JSON.stringify(action)}`);\n }\n }\n};\n\nexport const useAsync = <T>(\n initialState?: AsyncState<T>,\n): AsyncState<T> & {\n setData: (data: T) => void;\n setError: (error: Error) => void;\n run: (promise: Promise<T>) => void;\n} => {\n const [asyncState, unsafeDispatch] = useReducer<React.Reducer<AsyncState<T>, AsyncAction<T>>>(asyncReducer, {\n status: 'idle',\n data: null,\n error: null,\n ...initialState,\n });\n const dispatch = useSafeDispatch(unsafeDispatch);\n\n const run = useCallback(\n (promise: Promise<T>) => {\n dispatch({ type: 'pending' });\n promise.then(\n data => {\n dispatch({ type: 'resolved', data });\n },\n (error: Error) => {\n dispatch({ type: 'rejected', error });\n },\n );\n },\n [dispatch],\n );\n\n const setData = useCallback((data: T) => dispatch({ type: 'resolved', data }), [dispatch]);\n\n const setError = useCallback((error: Error) => dispatch({ type: 'rejected', error }), [dispatch]);\n\n return useMemo(\n () => ({\n setData,\n setError,\n run,\n ...asyncState,\n }),\n [asyncState, run, setData, setError],\n );\n};\n","import React, { useCallback, useLayoutEffect, useRef } from 'react';\n\nexport const useSafeDispatch = <T>(dispatch: React.Dispatch<T>): ((action: T) => void) => {\n const mounted = useRef(false);\n\n useLayoutEffect(() => {\n mounted.current = true;\n\n return () => {\n mounted.current = false;\n };\n }, []);\n\n return useCallback(\n (...args: Parameters<React.Dispatch<T>>) => {\n if (mounted.current) {\n dispatch(...args);\n }\n },\n [dispatch],\n );\n};\n","import { useMemo } from 'react';\n\nexport const useClassNames = (classes: Record<string, boolean>): string =>\n useMemo<string>(\n () =>\n Object.entries(classes)\n .reduce<Array<string>>(\n (compiledClassNames, [classname, value]) => (value ? [...compiledClassNames, classname] : compiledClassNames),\n [],\n )\n .join(' '),\n [classes],\n );\n","import { RefObject, useEffect, useLayoutEffect, useRef } from 'react';\n\nfunction useEventListener<EventName extends keyof MediaQueryListEventMap>(\n eventName: EventName,\n callback: (event: MediaQueryListEventMap[EventName]) => void,\n element: RefObject<MediaQueryList> | undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<EventName extends keyof WindowEventMap>(\n eventName: EventName,\n callback: (event: WindowEventMap[EventName]) => void,\n element?: undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<EventName extends keyof HTMLElementEventMap, ElementRef extends HTMLElement = HTMLDivElement>(\n eventName: EventName,\n callback: (event: HTMLElementEventMap[EventName]) => void,\n element: RefObject<ElementRef> | undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<EventName extends keyof DocumentEventMap>(\n eventName: EventName,\n callback: (event: DocumentEventMap[EventName]) => void,\n element: RefObject<Document> | undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<\n MediaQueryEventName extends keyof MediaQueryListEventMap,\n WindowEventName extends keyof WindowEventMap,\n ElementEventName extends keyof HTMLElementEventMap,\n DocumentEventName extends keyof DocumentEventMap,\n ElementRef extends HTMLElement | MediaQueryList | Document | Window | void = void,\n>(\n eventName: WindowEventName | DocumentEventName | ElementEventName | MediaQueryEventName,\n callback: (\n event:\n | MediaQueryListEventMap[MediaQueryEventName]\n | WindowEventMap[WindowEventName]\n | HTMLElementEventMap[ElementEventName]\n | DocumentEventMap[DocumentEventName]\n | Event,\n ) => void,\n element?: RefObject<ElementRef> | undefined,\n options?: boolean | AddEventListenerOptions,\n) {\n const callbackRef = useRef<EventListener>(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useLayoutEffect(() => {\n const targetElement = element?.current ?? window;\n\n if (!(targetElement && targetElement.addEventListener)) return;\n\n const listener: typeof callback = event => callbackRef.current(event);\n\n targetElement.addEventListener(eventName, listener, options);\n\n return () => {\n targetElement.removeEventListener(eventName, listener, options);\n };\n }, [eventName, element, options]);\n}\n\nexport { useEventListener };\n","import { RefObject } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nconst checkIsOutside = (ref: RefObject<HTMLElement>, target: Node) => {\n return ref.current && !ref.current.contains(target);\n};\n\nexport const useClickOutside = <T extends HTMLElement>(\n ref: RefObject<T> | Array<RefObject<T>>,\n callback: () => void,\n) => {\n useEventListener('keydown', e => {\n if (e.key === 'Escape') {\n callback();\n }\n });\n\n useEventListener('mousedown', event => {\n const target = event.target as Node;\n\n if (!target?.isConnected) {\n return;\n }\n\n const isOutside = (Array.isArray(ref) ? ref : [ref]).every(r => checkIsOutside(r, target));\n\n if (isOutside) {\n callback();\n }\n });\n};\n","import { useState } from 'react';\n\nexport const useConstant = <T>(initializer: T | (() => T)): T => useState(initializer)[0];\n","import { useState, useCallback } from 'react';\n\nexport type CookieOptions = {\n days?: number;\n expires?: Date;\n maxAge?: number;\n path?: string;\n domain?: string;\n secure?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n};\n\nconst generateCookieAttributes = (options: CookieOptions): string => {\n const parts: Array<string> = [];\n\n if (options.expires instanceof Date) {\n parts.push(`expires=${options.expires.toUTCString()}`);\n } else if (typeof options.days === 'number') {\n const date = new Date();\n date.setTime(date.getTime() + options.days * 24 * 60 * 60 * 1000);\n parts.push(`expires=${date.toUTCString()}`);\n }\n\n if (typeof options.maxAge === 'number') {\n parts.push(`max-age=${options.maxAge}`);\n }\n\n parts.push(`path=${options.path ?? '/'}`);\n\n if (options.domain) {\n parts.push(`domain=${options.domain}`);\n }\n\n if (options.secure) {\n parts.push('secure');\n }\n\n if (options.sameSite) {\n parts.push(`SameSite=${options.sameSite}`);\n }\n\n return parts.length > 0 ? `; ${parts.join('; ')}` : '';\n};\n\nconst setCookie = (name: string, value: string, options: CookieOptions = {}): void => {\n if (typeof document === 'undefined') {\n return;\n }\n\n const encodedValue = encodeURIComponent(value);\n const attributes = generateCookieAttributes(options);\n document.cookie = `${name}=${encodedValue}${attributes}`;\n};\n\nconst getCookie = (name: string): string | null => {\n if (typeof document === 'undefined') {\n return null;\n }\n\n const nameEq = `${name}=`;\n const cookies = document.cookie ? document.cookie.split(';') : [];\n\n for (const cookie of cookies) {\n const cookieTrimmed = cookie.trim();\n\n if (cookieTrimmed.indexOf(nameEq) === 0) {\n return decodeURIComponent(cookieTrimmed.substring(nameEq.length));\n }\n }\n\n return null;\n};\n\nconst deleteCookie = (name: string, options: CookieOptions = {}) => {\n if (typeof document === 'undefined') {\n return;\n }\n\n // Ensure the same path/domain so that the deletion matches the existing cookie.\n setCookie(name, '', {\n ...options,\n days: -1,\n });\n};\n\ntype UpdateCookie<T> = (value: T, overrideOptions?: CookieOptions) => void;\ntype RemoveCookie = () => void;\n\nexport const useCookie = <T = unknown>(\n cookieName: string,\n defaultValue?: T,\n options: CookieOptions = {},\n): [T, UpdateCookie<T>, RemoveCookie] => {\n const [cookieValue, setCookieValue] = useState<T>(() => {\n const rawCookie = getCookie(cookieName);\n\n if (rawCookie !== null) {\n try {\n return JSON.parse(rawCookie) as T;\n } catch {\n return defaultValue as T;\n }\n }\n\n return defaultValue as T;\n });\n\n const updateCookie = useCallback<UpdateCookie<T>>(\n (value: T, overrideOptions: CookieOptions = {}) => {\n const mergedOptions = { ...options, ...overrideOptions };\n const stringValue = JSON.stringify(value);\n setCookie(cookieName, stringValue, mergedOptions);\n setCookieValue(value);\n },\n [cookieName, options],\n );\n\n const removeCookie = useCallback<RemoveCookie>(() => {\n deleteCookie(cookieName, options);\n setCookieValue(defaultValue as T);\n }, [cookieName, defaultValue, options]);\n\n return [cookieValue, updateCookie, removeCookie];\n};\n","import { useEffect, useState } from 'react';\n\nexport const useDebounce = <T>(value: T, delay: number = 500): T => {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n};\n","import { useState } from 'react';\n\nimport { useResizeObserver } from './use-resize-observer';\n\nexport const useDimensions = (ref: React.RefObject<HTMLElement>) => {\n const [dimensions, setDimensions] = useState({ width: 0, height: 0 });\n\n useResizeObserver(ref, ([entry]) => {\n if ((entry?.borderBoxSize ?? [])[0]) {\n const { inlineSize: width, blockSize: height } = entry.borderBoxSize[0];\n setDimensions({ width, height });\n } else if (entry.contentRect) {\n const { width, height } = entry.contentRect;\n setDimensions({ width, height });\n }\n });\n\n return dimensions;\n};\n","import { RefObject, useEffect } from 'react';\n\nexport const useResizeObserver = <T extends Element>(\n ref: RefObject<T> | Array<RefObject<T>>,\n callback: ResizeObserverCallback,\n) => {\n useEffect(() => {\n const refs = Array.isArray(ref) ? ref : [ref];\n\n const observer = new ResizeObserver(callback);\n\n refs.forEach(r => r.current && observer.observe(r.current));\n\n return () => {\n observer.disconnect();\n };\n }, [ref, callback]);\n};\n","import { useEffect, useMemo } from 'react';\n\nexport const useDomContainer = (containerID: string) => {\n useEffect(() => {\n const domContainer = document.getElementById(containerID);\n\n if (domContainer !== null) {\n return () => {\n if (domContainer) {\n document.body.removeChild(domContainer);\n }\n };\n }\n }, [containerID]);\n\n return useMemo(() => {\n let domContainer = document.getElementById(containerID);\n\n if (domContainer === null) {\n domContainer = document.createElement('div');\n domContainer.setAttribute('id', containerID);\n\n document.body.appendChild(domContainer);\n }\n\n return domContainer;\n }, [containerID]);\n};\n","import { useEffect, useState } from 'react';\n\nimport { formatBytes } from '@polpo/helpers';\n\nexport enum FileTypeEnum {\n PNG = 'image/png',\n PDF = 'application/pdf',\n}\n\nexport type FileResolvedT = {\n name: string;\n size: number;\n formatSize: string;\n type: FileTypeEnum;\n url: FileReader['result'];\n};\n\nexport const useFileReader = (inputFiles: Array<File>) => {\n const [files, setFiles] = useState<Array<FileResolvedT>>([]);\n\n useEffect(() => {\n const fileReaders: Array<FileReader> = [];\n let isCancel = false;\n\n if (!Array.isArray(inputFiles) || inputFiles.length === 0) {\n setFiles([]);\n } else {\n const promises = inputFiles.map(file => {\n return new Promise<FileResolvedT>((resolve, reject) => {\n const fileReader = new FileReader();\n fileReaders.push(fileReader);\n fileReader.onload = (e: ProgressEvent<FileReader>) => {\n if (e.target?.result) {\n resolve({\n name: file.name,\n size: file.size,\n formatSize: formatBytes(file.size),\n type: file.type as FileTypeEnum,\n url: e.target.result,\n });\n }\n };\n fileReader.onabort = () => {\n reject(new Error('File reading aborted'));\n };\n fileReader.onerror = () => {\n reject(new Error('Failed to read file'));\n };\n fileReader.readAsDataURL(file);\n });\n });\n\n Promise.all(promises).then(files => {\n if (!isCancel) {\n setFiles(files);\n }\n });\n }\n\n return () => {\n isCancel = true;\n fileReaders.forEach(fileReader => {\n fileReader.abort();\n });\n };\n }, [inputFiles]);\n\n return files;\n};\n","export const formatBytes = (bytes: number, decimals = 2) => {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1000;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n};\n","export enum PositionContainer {\n CENTER = 'center',\n TOP = 'top',\n TOP_LEFT = 'top left',\n TOP_RIGHT = 'top right',\n TOP_CENTER = 'top center',\n LEFT = 'left',\n LEFT_TOP = 'left top',\n LEFT_BOTTOM = 'left bottom',\n LEFT_CENTER = 'left center',\n RIGHT = 'right',\n RIGHT_TOP = 'right top',\n RIGHT_BOTTOM = 'right bottom',\n RIGHT_CENTER = 'right center',\n BOTTOM = 'bottom',\n BOTTOM_LEFT = 'bottom left',\n BOTTOM_RIGHT = 'bottom right',\n BOTTOM_CENTER = 'bottom center',\n}\n\nexport type PositionObject = {\n x: number;\n y: number;\n top: number;\n left: number;\n w: number;\n h: number;\n};\n\nexport type ModalPosition = {\n left: number;\n top: number;\n};\n\nexport type GetModalPositionParams = {\n c: PositionObject;\n m: PositionObject;\n offset: number;\n position: PositionContainer;\n};\n\n/*\n * @description Calculates the position of the modal relative to the container\n *\n * @param c - The container's position object\n * @param m - The modal's position object\n * @param offset - The offset between the container and the modal\n * @param position - The position of the modal\n *\n * -----------------------------------------------------------------------------\n * @returns The position of the modal relative to the container\n */\nexport const getModalPosition = ({ c, m, offset, position }: GetModalPositionParams): ModalPosition => {\n // Default bottom\n let top = c.y + c.h + offset;\n let left = c.x - (m.w - c.w) * (50 / 100);\n\n switch (position) {\n case PositionContainer.TOP:\n case PositionContainer.TOP_CENTER:\n top = c.y - m.h - offset;\n left = c.x - (m.w - c.w) / 2;\n\n break;\n case PositionContainer.TOP_LEFT:\n top = c.y - m.h - offset;\n left = c.x - m.w + c.w;\n\n break;\n\n case PositionContainer.TOP_RIGHT:\n top = c.y - m.h - offset;\n left = c.x;\n\n break;\n\n case PositionContainer.BOTTOM:\n case PositionContainer.BOTTOM_CENTER:\n top = c.y + c.h + offset;\n left = c.x - (m.w - c.w) / 2;\n\n break;\n\n case PositionContainer.BOTTOM_LEFT:\n top = c.y + c.h + offset;\n left = c.x - m.w + c.w;\n\n break;\n\n case PositionContainer.BOTTOM_RIGHT:\n top = c.y + c.h + offset;\n left = c.x;\n\n break;\n\n case PositionContainer.LEFT:\n case PositionContainer.LEFT_CENTER:\n top = c.y - (m.h - c.h) / 2;\n left = c.x - m.w - offset;\n\n break;\n\n case PositionContainer.LEFT_TOP:\n top = c.y - m.h + c.h;\n left = c.x - m.w - offset;\n\n break;\n\n case PositionContainer.LEFT_BOTTOM:\n top = c.y;\n left = c.x - m.w - offset;\n\n break;\n\n case PositionContainer.RIGHT:\n case PositionContainer.RIGHT_CENTER:\n top = c.y - (m.h - c.h) / 2;\n left = c.x + c.w + offset;\n\n break;\n\n case PositionContainer.RIGHT_TOP:\n top = c.y - m.h + c.h;\n left = c.x + c.w + offset;\n\n break;\n\n case PositionContainer.RIGHT_BOTTOM:\n top = c.y;\n left = c.x + c.w + offset;\n\n break;\n }\n\n return {\n left: Math.round(left),\n top: Math.round(top),\n };\n};\n\nexport const getOppositePosition = (\n { top, left }: ModalPosition,\n position: PositionContainer,\n windowOffset: number,\n m: PositionObject,\n) => {\n const positions = position.split(' ');\n const newPosition = [];\n const rightOffset = left + m.w + windowOffset - window.innerWidth;\n const bottomOffset = top + m.h + windowOffset - window.innerHeight;\n\n for (const p of positions) {\n if (p === PositionContainer.TOP && top < windowOffset) {\n newPosition.push(PositionContainer.BOTTOM);\n } else if (p === PositionContainer.LEFT && left < windowOffset) {\n newPosition.push(PositionContainer.RIGHT);\n } else if (p === PositionContainer.BOTTOM && bottomOffset > 0) {\n newPosition.push(PositionContainer.TOP);\n } else if (p === PositionContainer.RIGHT && rightOffset > 0) {\n newPosition.push(PositionContainer.LEFT);\n } else {\n newPosition.push(p);\n }\n }\n\n return newPosition.join(' ') as PositionContainer;\n};\n\nexport const fixModalPosition = ({ top, left }: ModalPosition, m: PositionObject, windowOffset: number) => {\n const rightOffset = left + m.w + windowOffset - window.innerWidth;\n const bottomOffset = top + m.h + windowOffset - window.innerHeight;\n\n left = rightOffset > 0 ? left - rightOffset : left;\n top = bottomOffset > 0 ? top - bottomOffset : top;\n\n left = left < windowOffset ? windowOffset : left;\n top = top < windowOffset ? windowOffset : top;\n\n return { top, left };\n};\n\ntype getModalPositionRelativeToContainerParams = GetModalPositionParams & {\n windowOffset: number;\n};\n\nexport const getModalPositionRelativeToContainer = ({\n c,\n m,\n offset,\n windowOffset,\n position,\n}: getModalPositionRelativeToContainerParams): Record<string, string> => {\n const params = { c, m, offset, position };\n let modalContainerStyle = getModalPosition(params);\n\n const oppositePosition = getOppositePosition(modalContainerStyle, position, windowOffset, m);\n\n if (oppositePosition !== position) {\n modalContainerStyle = getModalPosition({\n ...params,\n position: oppositePosition,\n });\n }\n\n const fixedPosition = fixModalPosition(modalContainerStyle, m, windowOffset);\n\n return {\n left: `${fixedPosition.left}px`,\n top: `${fixedPosition.top}px`,\n };\n};\n","import { PositionContainer } from './get-modal-position';\n\nexport type GetModalPositionRelativeToScreenParams = {\n position: PositionContainer;\n windowOffset: number;\n};\n\nexport const getModalPositionRelativeToScreen = ({\n position,\n windowOffset,\n}: GetModalPositionRelativeToScreenParams): Record<string, string> => {\n switch (position) {\n case PositionContainer.CENTER:\n return {\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n };\n\n case PositionContainer.TOP:\n case PositionContainer.TOP_CENTER:\n return {\n top: `${windowOffset}px`,\n left: '50%',\n transform: 'translateX(-50%)',\n };\n\n case PositionContainer.TOP_LEFT:\n case PositionContainer.LEFT_TOP:\n return {\n top: `${windowOffset}px`,\n left: `${windowOffset}px`,\n };\n\n case PositionContainer.TOP_RIGHT:\n case PositionContainer.RIGHT_TOP:\n return {\n top: `${windowOffset}px`,\n right: `${windowOffset}px`,\n };\n\n case PositionContainer.BOTTOM:\n case PositionContainer.BOTTOM_CENTER:\n return {\n bottom: `${windowOffset}px`,\n left: '50%',\n transform: 'translateX(-50%)',\n };\n\n case PositionContainer.LEFT_BOTTOM:\n case PositionContainer.BOTTOM_LEFT:\n return {\n bottom: `${windowOffset}px`,\n left: `${windowOffset}px`,\n };\n\n case PositionContainer.RIGHT_BOTTOM:\n case PositionContainer.BOTTOM_RIGHT:\n return {\n bottom: `${windowOffset}px`,\n right: `${windowOffset}px`,\n };\n\n case PositionContainer.LEFT:\n case PositionContainer.LEFT_CENTER:\n return {\n top: '50%',\n left: `${windowOffset}px`,\n transform: 'translateY(-50%)',\n };\n\n case PositionContainer.RIGHT:\n case PositionContainer.RIGHT_CENTER:\n return {\n top: '50%',\n right: `${windowOffset}px`,\n transform: 'translateY(-50%)',\n };\n }\n\n return {\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n };\n};\n","import { useEffect, useRef, useState } from 'react';\n\ntype GeolocationData = GeolocationPosition['coords'] & {\n timestamp: GeolocationPosition['timestamp'];\n};\n\ninterface GeolocationError {\n code: number;\n message: string;\n}\n\ntype UseGeolocationReturn = {\n data: GeolocationData | null;\n error: GeolocationError | null;\n isLoading: boolean;\n};\n\nexport const useGeolocation = (): UseGeolocationReturn => {\n const [data, setData] = useState<GeolocationData | null>(null);\n const [error, setError] = useState<GeolocationError | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const watchIdRef = useRef<number | null>(null);\n\n useEffect(() => {\n if (!navigator.geolocation) {\n setError({\n code: 0,\n message: 'Geolocation is not supported by your browser.',\n });\n setIsLoading(false);\n\n return;\n }\n\n const handleSuccess = (position: GeolocationPosition) => {\n setData({\n ...position.coords,\n timestamp: position.timestamp,\n });\n setIsLoading(false);\n };\n\n const handleError = (geolocationError: GeolocationPositionError) => {\n setError({\n code: geolocationError.code,\n message: geolocationError.message,\n });\n setIsLoading(false);\n };\n\n navigator.geolocation.getCurrentPosition(handleSuccess, handleError);\n\n watchIdRef.current = navigator.geolocation.watchPosition(handleSuccess, handleError);\n\n return () => {\n if (watchIdRef.current !== null) {\n navigator.geolocation.clearWatch(watchIdRef.current);\n }\n };\n }, []);\n\n return { data, error, isLoading };\n};\n","import { useCallback, useRef, useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nexport const useHover = () => {\n const [isHovered, setIsHovered] = useState(false);\n const ref = useRef<HTMLElement>(null);\n\n const handleMouseEnter = useCallback(() => setIsHovered(true), []);\n\n const handleMouseLeave = useCallback(() => setIsHovered(false), []);\n\n useEventListener('mouseenter', handleMouseEnter, ref);\n useEventListener('mouseleave', handleMouseLeave, ref);\n\n return isHovered;\n};\n","import { useRef, useState } from 'react';\n\nimport { useIntersectionObserver } from './use-intersection-observer';\n\nexport const useInView = (initOptions: IntersectionObserverInit = {}) => {\n const [inView, setInView] = useState(false);\n const ref = useRef<Element>(null);\n\n useIntersectionObserver(\n ref,\n ([entry]) => {\n setInView(entry.isIntersecting);\n },\n initOptions,\n );\n\n return { ref, inView };\n};\n","import { RefObject, useEffect } from 'react';\n\nexport const useIntersectionObserver = <T extends Element>(\n ref: RefObject<T> | Array<RefObject<T>>,\n callback: IntersectionObserverCallback,\n initOptions: IntersectionObserverInit = {},\n) => {\n useEffect(() => {\n const refs = Array.isArray(ref) ? ref : [ref];\n\n const observer = new IntersectionObserver(callback, initOptions);\n\n refs.forEach(r => r.current && observer.observe(r.current));\n\n return () => {\n observer.disconnect();\n };\n }, [callback, initOptions, ref]);\n};\n","import React, { useCallback, useState } from 'react';\n\ntype InputTypes = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\ntype UseInputHandlersProps<T extends InputTypes> = {\n onBlur?: (e: React.FocusEvent<T>) => void;\n onFocus?: (e: React.FocusEvent<T>) => void;\n onChange?: (e: React.ChangeEvent<T>) => void;\n};\n\nexport const useInputHandlers = <T extends InputTypes>({\n onBlur,\n onFocus,\n onChange,\n}: UseInputHandlersProps<T> = {}) => {\n const [isFocus, setIsFocus] = useState(false);\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<T>) => {\n setIsFocus(true);\n onFocus && onFocus(e);\n },\n [onFocus],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<T>) => {\n setIsFocus(false);\n onBlur && onBlur(e);\n },\n [onBlur],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<T>) => {\n onChange && onChange(e);\n },\n [onChange],\n );\n\n return {\n isFocus,\n handlers: {\n onFocus: handleFocus,\n onBlur: handleBlur,\n onChange: handleChange,\n },\n };\n};\n","import { useEffect, useState } from 'react';\n\nexport const useMediaQuery = (query: string): boolean => {\n const [matches, setMatches] = useState(false);\n\n useEffect(() => {\n const media = window.matchMedia(query);\n\n if (media.matches !== matches) {\n setMatches(media.matches);\n }\n\n const listener = () => {\n setMatches(media.matches);\n };\n\n media.addEventListener('change', listener);\n\n return () => {\n media.removeEventListener('change', listener);\n };\n }, [matches, query]);\n\n return matches;\n};\n","import { useRef, useState } from 'react';\n\nexport const useModal = <T extends HTMLElement>() => {\n const containerRef = useRef<T>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n const openModal = () => {\n setIsOpen(true);\n };\n\n const closeModal = () => {\n setIsOpen(false);\n };\n\n return {\n containerRef,\n isOpen,\n openModal,\n closeModal,\n };\n};\n","import { RefObject, useCallback, useLayoutEffect, useRef } from 'react';\n\nimport { useClickOutside } from './use-click-outside';\nimport { useEventListener } from './use-event-listener';\nimport { useModalTransition } from './use-modal-transition';\nimport { useResizeObserver } from './use-resize-observer';\n\nimport {\n getModalPositionRelativeToContainer,\n getModalPositionRelativeToScreen,\n PositionContainer,\n PositionObject,\n} from '@polpo/helpers';\n\nconst convertDOMRectToPosition = (rect: DOMRectReadOnly): PositionObject => ({\n x: rect.x,\n y: rect.y,\n w: rect.width,\n h: rect.height,\n top: rect.top,\n left: rect.left,\n});\n\nexport type UseModalInContainerParams<\n Container extends HTMLElement = HTMLElement,\n Modal extends HTMLElement = Container,\n> = {\n closeOnClickOutside?: boolean;\n transitionDuration?: number;\n windowOffset?: number;\n offset?: number;\n position?: `${PositionContainer}`;\n modalRef: RefObject<Modal>;\n containerRef?: RefObject<Container>;\n onClose?: () => void;\n};\n\nexport const useModalInContainer = <\n Container extends HTMLElement = HTMLElement,\n Modal extends HTMLElement = Container,\n>({\n closeOnClickOutside = true,\n offset = 0,\n windowOffset = 0,\n position = PositionContainer.BOTTOM,\n transitionDuration = 0,\n modalRef,\n containerRef,\n onClose,\n}: UseModalInContainerParams<Container, Modal>) => {\n const containerTemporalRef = useRef<Container>(null);\n const modalState = useModalTransition(transitionDuration, onClose);\n\n const { isVisible, closeModal } = modalState;\n\n useClickOutside<Modal>(modalRef, () => {\n if (isVisible && closeOnClickOutside) {\n closeModal();\n }\n });\n\n const getPosition = useCallback(\n (modalRef: RefObject<Modal>, containerRef: RefObject<Container>) => {\n const modal = modalRef.current?.getClientRects()[0];\n const container = containerRef.current?.getClientRects()[0];\n\n if (!modal) {\n return;\n }\n\n const modalStyle: Record<string, string> = !container\n ? getModalPositionRelativeToScreen({ position: position as PositionContainer, windowOffset })\n : getModalPositionRelativeToContainer({\n c: convertDOMRectToPosition(container),\n m: convertDOMRectToPosition(modal),\n offset,\n windowOffset,\n position: position as PositionContainer,\n });\n\n Object.keys(modalStyle).forEach(key => {\n modalRef.current?.style.setProperty(key, modalStyle[key]);\n });\n },\n [position, windowOffset, offset],\n );\n\n const callback = useCallback(() => {\n if (isVisible) {\n getPosition(modalRef, containerRef ?? containerTemporalRef);\n }\n }, [getPosition, isVisible, containerRef, modalRef]);\n\n useLayoutEffect(callback, [callback]);\n\n useResizeObserver<Container>(containerRef ?? containerTemporalRef, callback);\n useResizeObserver<Modal>(modalRef, callback);\n useEventListener('resize', callback);\n useEventListener('scroll', callback, modalRef);\n\n return modalState;\n};\n","import React, { useCallback, useEffect, useMemo } from 'react';\n\nexport enum ModalState {\n OPENING = 'OPENING',\n OPEN = 'OPEN',\n CLOSING = 'CLOSING',\n CLOSED = 'CLOSED',\n}\n\nexport const useModalTransition = (transitionDuration: number = 0, onClose: () => void = () => null) => {\n const [modalState, setModalState] = React.useState<ModalState>(ModalState.CLOSED);\n\n const isVisible = useMemo(() => {\n return modalState !== ModalState.CLOSED;\n }, [modalState]);\n\n useEffect(() => {\n document.documentElement.style.overflow = isVisible ? 'hidden' : 'auto';\n }, [isVisible]);\n\n const closeModal = useCallback(() => {\n if ([ModalState.OPENING, ModalState.OPEN].includes(modalState)) {\n if (transitionDuration > 0) {\n setModalState(ModalState.CLOSING);\n setTimeout(() => {\n setModalState(ModalState.CLOSED);\n onClose();\n }, transitionDuration);\n } else {\n setModalState(ModalState.CLOSED);\n }\n }\n }, [onClose, modalState, transitionDuration]);\n\n const openModal = useCallback(() => {\n if ([ModalState.CLOSING, ModalState.CLOSED].includes(modalState)) {\n if (transitionDuration > 0) {\n setModalState(ModalState.OPENING);\n setTimeout(() => {\n setModalState(ModalState.OPEN);\n }, transitionDuration);\n } else {\n setModalState(ModalState.OPEN);\n }\n }\n }, [modalState, transitionDuration]);\n\n return {\n isVisible,\n closeModal,\n openModal,\n modalState,\n };\n};\n","import React, { useRef, useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\ntype MousePosition = {\n x: null | number;\n y: null | number;\n elementX: number | null;\n elementY: number | null;\n elementPositionX: number | null;\n elementPositionY: number | null;\n};\n\nconst getMousePosition = (domRect: DOMRect, e: MouseEvent) => {\n const { left, top } = domRect;\n const containerPositionX = left + window.scrollX;\n const containerPositionY = top + window.scrollY;\n const containerX = e.pageX - containerPositionX;\n const containerY = e.pageY - containerPositionY;\n\n return {\n x: e.pageX,\n y: e.pageY,\n elementX: containerX,\n elementY: containerY,\n elementPositionX: containerPositionX,\n elementPositionY: containerPositionY,\n };\n};\n\nexport const useMousePosition = (containerRef?: React.RefObject<HTMLElement | SVGElement | null>) => {\n const ref = useRef<HTMLElement>(null);\n const [position, setPosition] = useState<MousePosition>({\n x: null,\n y: null,\n elementX: null,\n elementY: null,\n elementPositionX: null,\n elementPositionY: null,\n });\n\n const mouseMove = (e: MouseEvent) => {\n const { clientX, clientY } = e;\n setPosition(prev => ({ ...prev, x: clientX, y: clientY }));\n\n if (containerRef?.current instanceof Element) {\n const newState = getMousePosition(containerRef.current.getBoundingClientRect(), e);\n setPosition(prev => ({\n ...prev,\n ...newState,\n }));\n } else if (ref.current instanceof Element) {\n const newState = getMousePosition(ref.current.getBoundingClientRect(), e);\n setPosition(prev => ({\n ...prev,\n ...newState,\n }));\n }\n };\n\n useEventListener('mousemove', mouseMove);\n\n return { ...position, ref };\n};\n","import { useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nexport const useOnlineStatus = () => {\n const [online, setOnline] = useState(navigator.onLine);\n\n useEventListener('online', () => setOnline(navigator.onLine));\n useEventListener('offline', () => setOnline(navigator.onLine));\n\n return online;\n};\n","import { useEffect, useRef } from 'react';\n\nexport const useRenderCount = () => {\n const count = useRef(1);\n\n useEffect(() => {\n count.current++;\n });\n\n return count.current;\n};\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useScroll = () => {\n const ref = useRef<HTMLElement>(null);\n const [position, setPosition] = useState([0, 0]);\n\n useEffect(() => {\n const element = ref.current;\n\n const handleScroll = () => {\n if (!element) return;\n\n setPosition([element.scrollLeft, element.scrollTop]);\n };\n\n if (element) {\n element.addEventListener('scroll', handleScroll);\n }\n\n return () => {\n if (element) {\n element.removeEventListener('scroll', handleScroll);\n }\n };\n }, []);\n\n return {\n ref,\n position,\n };\n};\n","import { Dispatch, SetStateAction, useEffect, useState } from 'react';\n\nfunction useStateHistory<T>(initialState: T | (() => T)): [T, Dispatch<SetStateAction<T>>, Array<T>];\n\nfunction useStateHistory<T = undefined>(): [T | undefined, Dispatch<SetStateAction<T | undefined>>, Array<T>];\n\nfunction useStateHistory<T = undefined>(\n initialState?: T | (() => T) | undefined,\n): [T | undefined, Dispatch<SetStateAction<T | undefined>>, Array<T>] {\n const [state, setState] = useState<T | undefined>(initialState);\n const [history, setHistory] = useState<Array<T>>([]);\n\n useEffect(() => {\n if (state !== undefined) {\n setHistory(prevHistory => [...prevHistory, state]);\n }\n }, [state]);\n\n return [state, setState, history];\n}\n\nexport { useStateHistory };\n","import { useCallback, useState } from 'react';\n\nexport const useToggle = (defaultValue: boolean = false) => {\n const [value, setValue] = useState<boolean>(defaultValue);\n\n const toggle = useCallback(() => {\n setValue(prev => !prev);\n }, []);\n\n return [value, toggle, setValue];\n};\n","import { useCallback, useState } from 'react';\n\nexport const useToggleValues = <T>(values: Array<T>, defaultIndex: number = 0): [T, (index?: number) => void] => {\n const [index, setIndex] = useState(defaultIndex);\n\n const toggle = useCallback(\n (index?: number) => {\n setIndex(index !== undefined ? index : prev => (prev + 1) % values.length);\n },\n [values.length],\n );\n\n return [values[index], toggle];\n};\n","import { useEffect, useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nenum ScreenOrientation {\n PORTRAIT = 'portrait',\n LANDSCAPE = 'landscape',\n}\n\ntype UseViewportData = {\n width: number;\n height: number;\n orientation: ScreenOrientation;\n};\n\nexport const useViewport = (): UseViewportData => {\n const getData = (): UseViewportData => {\n const { innerWidth, innerHeight } = window;\n\n return {\n width: innerWidth,\n height: innerHeight,\n orientation: innerWidth > innerHeight ? ScreenOrientation.LANDSCAPE : ScreenOrientation.PORTRAIT,\n };\n };\n\n const [data, setData] = useState<UseViewportData>(getData);\n\n useEventListener('resize', () => {\n setData(getData());\n });\n\n useEffect(() => {\n setData(getData());\n }, []);\n\n return data;\n};\n"],"mappings":"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","names":["hooks_exports","__export","FileTypeEnum","ModalState","useAsync","useClassNames","useClickOutside","useConstant","useCookie","useDebounce","useDimensions","useDomContainer","useEventListener","useFileReader","useGeolocation","useHover","useInView","useInputHandlers","useIntersectionObserver","useMediaQuery","useModal","useModalInContainer","useModalTransition","useMousePosition","useOnlineStatus","useRenderCount","useResizeObserver","useSafeDispatch","useScroll","useStateHistory","useToggle","useToggleValues","useViewport","__toCommonJS","import_react","import_react","useSafeDispatch","dispatch","mounted","args","asyncReducer","_state","action","useAsync","initialState","asyncState","unsafeDispatch","dispatch","useSafeDispatch","run","promise","data","error","setData","setError","import_react","useClassNames","classes","compiledClassNames","classname","value","import_react","useEventListener","eventName","callback","element","options","callbackRef","targetElement","listener","event","checkIsOutside","ref","target","useClickOutside","callback","useEventListener","e","event","r","import_react","useConstant","initializer","import_react","generateCookieAttributes","options","parts","date","setCookie","name","value","encodedValue","attributes","getCookie","nameEq","cookies","cookie","cookieTrimmed","deleteCookie","useCookie","cookieName","defaultValue","cookieValue","setCookieValue","rawCookie","updateCookie","overrideOptions","mergedOptions","stringValue","removeCookie","import_react","useDebounce","value","delay","debouncedValue","setDebouncedValue","timer","import_react","import_react","useResizeObserver","ref","callback","refs","observer","useDimensions","ref","dimensions","setDimensions","useResizeObserver","entry","width","height","import_react","useDomContainer","containerID","domContainer","import_react","formatBytes","bytes","decimals","k","dm","sizes","i","getModalPosition","c","m","offset","position","top","left","getOppositePosition","windowOffset","positions","newPosition","rightOffset","bottomOffset","p","fixModalPosition","getModalPositionRelativeToContainer","params","modalContainerStyle","oppositePosition","fixedPosition","getModalPositionRelativeToScreen","position","windowOffset","FileTypeEnum","useFileReader","inputFiles","files","setFiles","fileReaders","isCancel","promises","file","resolve","reject","fileReader","e","formatBytes","import_react","useGeolocation","data","setData","error","setError","isLoading","setIsLoading","watchIdRef","handleSuccess","position","handleError","geolocationError","import_react","useHover","isHovered","setIsHovered","ref","handleMouseEnter","handleMouseLeave","useEventListener","import_react","import_react","useIntersectionObserver","ref","callback","initOptions","refs","observer","r","useInView","initOptions","inView","setInView","ref","useIntersectionObserver","entry","import_react","useInputHandlers","onBlur","onFocus","onChange","isFocus","setIsFocus","handleFocus","e","handleBlur","handleChange","import_react","useMediaQuery","query","matches","setMatches","media","listener","import_react","useModal","containerRef","isOpen","setIsOpen","import_react","import_react","ModalState","useModalTransition","transitionDuration","onClose","modalState","setModalState","React","isVisible","closeModal","openModal","convertDOMRectToPosition","rect","useModalInContainer","closeOnClickOutside","offset","windowOffset","position","transitionDuration","modalRef","containerRef","onClose","containerTemporalRef","modalState","useModalTransition","isVisible","closeModal","useClickOutside","getPosition","modal","container","modalStyle","getModalPositionRelativeToContainer","getModalPositionRelativeToScreen","key","callback","useResizeObserver","useEventListener","import_react","getMousePosition","domRect","e","left","top","containerPositionX","containerPositionY","containerX","containerY","useMousePosition","containerRef","ref","position","setPosition","useEventListener","clientX","clientY","prev","newState","import_react","useOnlineStatus","online","setOnline","useEventListener","import_react","useRenderCount","count","import_react","useScroll","ref","position","setPosition","element","handleScroll","import_react","useStateHistory","initialState","state","setState","history","setHistory","prevHistory","import_react","useToggle","defaultValue","value","setValue","toggle","prev","import_react","useToggleValues","values","defaultIndex","index","setIndex","toggle","prev","import_react","useViewport","getData","innerWidth","innerHeight","data","setData","useEventListener"]}
1
+ {"version":3,"sources":["../src/hooks/index.ts","../src/hooks/use-async.ts","../src/hooks/use-safe-dispatch.ts","../src/hooks/use-classnames.ts","../src/hooks/use-event-listener.ts","../src/hooks/use-click-outside.ts","../src/hooks/use-constant.ts","../src/hooks/use-cookie.ts","../src/hooks/use-debounce.ts","../src/hooks/use-dimensions.ts","../src/hooks/use-resize-observer.ts","../src/hooks/use-dom-container.ts","../src/hooks/use-file-reader.ts","../src/helpers/format-bytes.ts","../src/helpers/get-modal-position.ts","../src/helpers/get-modal-position-relative-to-screen.ts","../src/hooks/use-geolocation.ts","../src/hooks/use-hover.ts","../src/hooks/use-in-view.ts","../src/hooks/use-intersection-observer.ts","../src/hooks/use-input-handlers.ts","../src/hooks/use-media-query.ts","../src/hooks/use-modal.ts","../src/hooks/use-modal-in-container.ts","../src/hooks/use-modal-transition.ts","../src/hooks/use-mouse-position.ts","../src/hooks/use-online-status.ts","../src/hooks/use-render-count.ts","../src/hooks/use-scroll.ts","../src/hooks/use-state-history.ts","../src/hooks/use-toggle.ts","../src/hooks/use-toggle-values.ts","../src/hooks/use-viewport.ts"],"sourcesContent":["export * from './use-async';\nexport * from './use-classnames';\nexport * from './use-click-outside';\nexport * from './use-constant';\nexport * from './use-cookie';\nexport * from './use-debounce';\nexport * from './use-dimensions';\nexport * from './use-dom-container';\nexport * from './use-event-listener';\nexport * from './use-file-reader';\nexport * from './use-geolocation';\nexport * from './use-hover';\nexport * from './use-in-view';\nexport * from './use-input-handlers';\nexport * from './use-intersection-observer';\nexport * from './use-media-query';\nexport * from './use-modal';\nexport * from './use-modal-in-container';\nexport * from './use-modal-transition';\nexport * from './use-mouse-position';\nexport * from './use-online-status';\nexport * from './use-render-count';\nexport * from './use-resize-observer';\nexport * from './use-safe-dispatch';\nexport * from './use-scroll';\nexport * from './use-state-history';\nexport * from './use-toggle';\nexport * from './use-toggle-values';\nexport * from './use-viewport';\n","import React, { useCallback, useMemo, useReducer } from 'react';\n\nimport { useSafeDispatch } from './use-safe-dispatch';\n\ntype AsyncState<T> =\n | {\n status: 'idle' | 'pending';\n data?: null;\n error?: null;\n }\n | {\n status: 'resolved';\n data: T;\n error: null;\n }\n | {\n status: 'rejected';\n data: null;\n error: Error;\n };\n\ntype AsyncAction<T> =\n | { type: 'reset' }\n | { type: 'pending' }\n | { type: 'resolved'; data: T }\n | { type: 'rejected'; error: Error };\n\nconst asyncReducer = <T>(_state: AsyncState<T>, action: AsyncAction<T>): AsyncState<T> => {\n switch (action.type) {\n case 'pending': {\n return { status: 'pending' as const, data: null, error: null };\n }\n case 'resolved': {\n return { status: 'resolved' as const, data: action.data, error: null };\n }\n case 'rejected': {\n return { status: 'rejected' as const, data: null, error: action.error };\n }\n default: {\n throw new Error(`Unhandled action: ${JSON.stringify(action)}`);\n }\n }\n};\n\nexport const useAsync = <T>(\n initialState?: AsyncState<T>,\n): AsyncState<T> & {\n setData: (data: T) => void;\n setError: (error: Error) => void;\n run: (promise: Promise<T>) => void;\n} => {\n const [asyncState, unsafeDispatch] = useReducer<React.Reducer<AsyncState<T>, AsyncAction<T>>>(asyncReducer, {\n status: 'idle',\n data: null,\n error: null,\n ...initialState,\n });\n const dispatch = useSafeDispatch(unsafeDispatch);\n\n const run = useCallback(\n (promise: Promise<T>) => {\n dispatch({ type: 'pending' });\n promise.then(\n data => {\n dispatch({ type: 'resolved', data });\n },\n (error: Error) => {\n dispatch({ type: 'rejected', error });\n },\n );\n },\n [dispatch],\n );\n\n const setData = useCallback((data: T) => dispatch({ type: 'resolved', data }), [dispatch]);\n\n const setError = useCallback((error: Error) => dispatch({ type: 'rejected', error }), [dispatch]);\n\n return useMemo(\n () => ({\n setData,\n setError,\n run,\n ...asyncState,\n }),\n [asyncState, run, setData, setError],\n );\n};\n","import React, { useCallback, useLayoutEffect, useRef } from 'react';\n\nexport const useSafeDispatch = <T>(dispatch: React.Dispatch<T>): ((action: T) => void) => {\n const mounted = useRef(false);\n\n useLayoutEffect(() => {\n mounted.current = true;\n\n return () => {\n mounted.current = false;\n };\n }, []);\n\n return useCallback(\n (...args: Parameters<React.Dispatch<T>>) => {\n if (mounted.current) {\n dispatch(...args);\n }\n },\n [dispatch],\n );\n};\n","import { useMemo } from 'react';\n\nexport const useClassNames = (classes: Record<string, boolean>): string =>\n useMemo<string>(\n () =>\n Object.entries(classes)\n .reduce<Array<string>>(\n (compiledClassNames, [classname, value]) => (value ? [...compiledClassNames, classname] : compiledClassNames),\n [],\n )\n .join(' '),\n [classes],\n );\n","import { RefObject, useEffect, useLayoutEffect, useRef } from 'react';\n\nfunction useEventListener<EventName extends keyof MediaQueryListEventMap>(\n eventName: EventName,\n callback: (event: MediaQueryListEventMap[EventName]) => void,\n element: RefObject<MediaQueryList> | undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<EventName extends keyof WindowEventMap>(\n eventName: EventName,\n callback: (event: WindowEventMap[EventName]) => void,\n element?: undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<EventName extends keyof HTMLElementEventMap, ElementRef extends HTMLElement = HTMLDivElement>(\n eventName: EventName,\n callback: (event: HTMLElementEventMap[EventName]) => void,\n element: RefObject<ElementRef> | undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<EventName extends keyof DocumentEventMap>(\n eventName: EventName,\n callback: (event: DocumentEventMap[EventName]) => void,\n element: RefObject<Document> | undefined,\n options?: boolean | AddEventListenerOptions,\n): void;\n\nfunction useEventListener<\n MediaQueryEventName extends keyof MediaQueryListEventMap,\n WindowEventName extends keyof WindowEventMap,\n ElementEventName extends keyof HTMLElementEventMap,\n DocumentEventName extends keyof DocumentEventMap,\n ElementRef extends HTMLElement | MediaQueryList | Document | Window | void = void,\n>(\n eventName: WindowEventName | DocumentEventName | ElementEventName | MediaQueryEventName,\n callback: (\n event:\n | MediaQueryListEventMap[MediaQueryEventName]\n | WindowEventMap[WindowEventName]\n | HTMLElementEventMap[ElementEventName]\n | DocumentEventMap[DocumentEventName]\n | Event,\n ) => void,\n element?: RefObject<ElementRef> | undefined,\n options?: boolean | AddEventListenerOptions,\n) {\n const callbackRef = useRef<EventListener>(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useLayoutEffect(() => {\n const targetElement = element?.current ?? window;\n\n if (!(targetElement && targetElement.addEventListener)) return;\n\n const listener: typeof callback = event => callbackRef.current(event);\n\n targetElement.addEventListener(eventName, listener, options);\n\n return () => {\n targetElement.removeEventListener(eventName, listener, options);\n };\n }, [eventName, element, options]);\n}\n\nexport { useEventListener };\n","import { RefObject } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nconst checkIsOutside = (ref: RefObject<HTMLElement>, target: Node) => {\n return ref.current && !ref.current.contains(target);\n};\n\nexport const useClickOutside = <T extends HTMLElement>(\n ref: RefObject<T> | Array<RefObject<T>>,\n callback: () => void,\n) => {\n useEventListener('keydown', e => {\n if (e.key === 'Escape') {\n callback();\n }\n });\n\n useEventListener('mousedown', event => {\n const target = event.target as Node;\n\n if (!target?.isConnected) {\n return;\n }\n\n const isOutside = (Array.isArray(ref) ? ref : [ref]).every(r => checkIsOutside(r, target));\n\n if (isOutside) {\n callback();\n }\n });\n};\n","import { useState } from 'react';\n\nexport const useConstant = <T>(initializer: T | (() => T)): T => useState(initializer)[0];\n","import { useState, useCallback } from 'react';\n\nexport type CookieOptions = {\n days?: number;\n expires?: Date;\n maxAge?: number;\n path?: string;\n domain?: string;\n secure?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n};\n\nconst generateCookieAttributes = (options: CookieOptions): string => {\n const parts: Array<string> = [];\n\n if (options.expires instanceof Date) {\n parts.push(`expires=${options.expires.toUTCString()}`);\n } else if (typeof options.days === 'number') {\n const date = new Date();\n date.setTime(date.getTime() + options.days * 24 * 60 * 60 * 1000);\n parts.push(`expires=${date.toUTCString()}`);\n }\n\n if (typeof options.maxAge === 'number') {\n parts.push(`max-age=${options.maxAge}`);\n }\n\n parts.push(`path=${options.path ?? '/'}`);\n\n if (options.domain) {\n parts.push(`domain=${options.domain}`);\n }\n\n if (options.secure) {\n parts.push('secure');\n }\n\n if (options.sameSite) {\n parts.push(`SameSite=${options.sameSite}`);\n }\n\n return parts.length > 0 ? `; ${parts.join('; ')}` : '';\n};\n\nconst setCookie = (name: string, value: string, options: CookieOptions = {}): void => {\n if (typeof document === 'undefined') {\n return;\n }\n\n const encodedValue = encodeURIComponent(value);\n const attributes = generateCookieAttributes(options);\n document.cookie = `${name}=${encodedValue}${attributes}`;\n};\n\nconst getCookie = (name: string): string | null => {\n if (typeof document === 'undefined') {\n return null;\n }\n\n const nameEq = `${name}=`;\n const cookies = document.cookie ? document.cookie.split(';') : [];\n\n for (const cookie of cookies) {\n const cookieTrimmed = cookie.trim();\n\n if (cookieTrimmed.indexOf(nameEq) === 0) {\n return decodeURIComponent(cookieTrimmed.substring(nameEq.length));\n }\n }\n\n return null;\n};\n\nconst deleteCookie = (name: string, options: CookieOptions = {}) => {\n if (typeof document === 'undefined') {\n return;\n }\n\n // Ensure the same path/domain so that the deletion matches the existing cookie.\n setCookie(name, '', {\n ...options,\n days: -1,\n });\n};\n\ntype UpdateCookie<T> = (value: T, overrideOptions?: CookieOptions) => void;\ntype RemoveCookie = () => void;\n\nexport const useCookie = <T = unknown>(\n cookieName: string,\n defaultValue?: T,\n options: CookieOptions = {},\n): [T, UpdateCookie<T>, RemoveCookie] => {\n const [cookieValue, setCookieValue] = useState<T>(() => {\n const rawCookie = getCookie(cookieName);\n\n if (rawCookie !== null) {\n try {\n return JSON.parse(rawCookie) as T;\n } catch {\n return defaultValue as T;\n }\n }\n\n return defaultValue as T;\n });\n\n const updateCookie = useCallback<UpdateCookie<T>>(\n (value: T, overrideOptions: CookieOptions = {}) => {\n const mergedOptions = { ...options, ...overrideOptions };\n const stringValue = JSON.stringify(value);\n setCookie(cookieName, stringValue, mergedOptions);\n setCookieValue(value);\n },\n [cookieName, options],\n );\n\n const removeCookie = useCallback<RemoveCookie>(() => {\n deleteCookie(cookieName, options);\n setCookieValue(defaultValue as T);\n }, [cookieName, defaultValue, options]);\n\n return [cookieValue, updateCookie, removeCookie];\n};\n","import { useEffect, useState } from 'react';\n\nexport const useDebounce = <T>(value: T, delay: number = 500): T => {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n};\n","import { useState } from 'react';\n\nimport { useResizeObserver } from './use-resize-observer';\n\nexport const useDimensions = (ref: React.RefObject<HTMLElement>) => {\n const [dimensions, setDimensions] = useState({ width: 0, height: 0 });\n\n useResizeObserver(ref, ([entry]) => {\n if ((entry?.borderBoxSize ?? [])[0]) {\n const { inlineSize: width, blockSize: height } = entry.borderBoxSize[0];\n setDimensions({ width, height });\n } else if (entry.contentRect) {\n const { width, height } = entry.contentRect;\n setDimensions({ width, height });\n }\n });\n\n return dimensions;\n};\n","import { RefObject, useEffect } from 'react';\n\nexport const useResizeObserver = <T extends Element>(\n ref: RefObject<T> | Array<RefObject<T>>,\n callback: ResizeObserverCallback,\n) => {\n useEffect(() => {\n const refs = Array.isArray(ref) ? ref : [ref];\n\n const observer = new ResizeObserver(callback);\n\n refs.forEach(r => r.current && observer.observe(r.current));\n\n return () => {\n observer.disconnect();\n };\n }, [ref, callback]);\n};\n","import { useEffect, useState } from 'react';\n\nconst createContainer = (containerID: string) => {\n let domContainer = document.getElementById(containerID);\n\n if (domContainer === null) {\n domContainer = document.createElement('div');\n domContainer.setAttribute('id', containerID);\n document.body.appendChild(domContainer);\n }\n\n return domContainer;\n};\n\nexport const useDomContainer = (containerID: string) => {\n const [container, setContainer] = useState<HTMLElement | null>(() => createContainer(containerID));\n\n useEffect(() => {\n const domContainer = document.getElementById(containerID);\n\n if (container === null || domContainer === null) {\n const domContainer = createContainer(containerID);\n\n setContainer(domContainer);\n }\n\n return () => {\n if (container && container.parentNode) {\n //document.body.removeChild(container);\n }\n };\n }, [container, containerID]);\n\n return container;\n};\n","import { useEffect, useState } from 'react';\n\nimport { formatBytes } from '@polpo/helpers';\n\nexport enum FileTypeEnum {\n PNG = 'image/png',\n PDF = 'application/pdf',\n}\n\nexport type FileResolvedT = {\n name: string;\n size: number;\n formatSize: string;\n type: FileTypeEnum;\n url: FileReader['result'];\n};\n\nexport const useFileReader = (inputFiles: Array<File>) => {\n const [files, setFiles] = useState<Array<FileResolvedT>>([]);\n\n useEffect(() => {\n const fileReaders: Array<FileReader> = [];\n let isCancel = false;\n\n if (!Array.isArray(inputFiles) || inputFiles.length === 0) {\n setFiles([]);\n } else {\n const promises = inputFiles.map(file => {\n return new Promise<FileResolvedT>((resolve, reject) => {\n const fileReader = new FileReader();\n fileReaders.push(fileReader);\n fileReader.onload = (e: ProgressEvent<FileReader>) => {\n if (e.target?.result) {\n resolve({\n name: file.name,\n size: file.size,\n formatSize: formatBytes(file.size),\n type: file.type as FileTypeEnum,\n url: e.target.result,\n });\n }\n };\n fileReader.onabort = () => {\n reject(new Error('File reading aborted'));\n };\n fileReader.onerror = () => {\n reject(new Error('Failed to read file'));\n };\n fileReader.readAsDataURL(file);\n });\n });\n\n Promise.all(promises).then(files => {\n if (!isCancel) {\n setFiles(files);\n }\n });\n }\n\n return () => {\n isCancel = true;\n fileReaders.forEach(fileReader => {\n fileReader.abort();\n });\n };\n }, [inputFiles]);\n\n return files;\n};\n","export const formatBytes = (bytes: number, decimals = 2) => {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1000;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n};\n","export enum PositionContainer {\n CENTER = 'center',\n TOP = 'top',\n TOP_LEFT = 'top left',\n TOP_RIGHT = 'top right',\n TOP_CENTER = 'top center',\n LEFT = 'left',\n LEFT_TOP = 'left top',\n LEFT_BOTTOM = 'left bottom',\n LEFT_CENTER = 'left center',\n RIGHT = 'right',\n RIGHT_TOP = 'right top',\n RIGHT_BOTTOM = 'right bottom',\n RIGHT_CENTER = 'right center',\n BOTTOM = 'bottom',\n BOTTOM_LEFT = 'bottom left',\n BOTTOM_RIGHT = 'bottom right',\n BOTTOM_CENTER = 'bottom center',\n}\n\nexport type PositionObject = {\n x: number;\n y: number;\n top: number;\n left: number;\n w: number;\n h: number;\n};\n\nexport type ModalPosition = {\n left: number;\n top: number;\n};\n\nexport type GetModalPositionParams = {\n c: PositionObject;\n m: PositionObject;\n offset: number;\n position: PositionContainer;\n};\n\n/*\n * @description Calculates the position of the modal relative to the container\n *\n * @param c - The container's position object\n * @param m - The modal's position object\n * @param offset - The offset between the container and the modal\n * @param position - The position of the modal\n *\n * -----------------------------------------------------------------------------\n * @returns The position of the modal relative to the container\n */\nexport const getModalPosition = ({ c, m, offset, position }: GetModalPositionParams): ModalPosition => {\n // Default bottom\n let top = c.y + c.h + offset;\n let left = c.x - (m.w - c.w) * (50 / 100);\n\n switch (position) {\n case PositionContainer.TOP:\n case PositionContainer.TOP_CENTER:\n top = c.y - m.h - offset;\n left = c.x - (m.w - c.w) / 2;\n\n break;\n case PositionContainer.TOP_LEFT:\n top = c.y - m.h - offset;\n left = c.x - m.w + c.w;\n\n break;\n\n case PositionContainer.TOP_RIGHT:\n top = c.y - m.h - offset;\n left = c.x;\n\n break;\n\n case PositionContainer.BOTTOM:\n case PositionContainer.BOTTOM_CENTER:\n top = c.y + c.h + offset;\n left = c.x - (m.w - c.w) / 2;\n\n break;\n\n case PositionContainer.BOTTOM_LEFT:\n top = c.y + c.h + offset;\n left = c.x - m.w + c.w;\n\n break;\n\n case PositionContainer.BOTTOM_RIGHT:\n top = c.y + c.h + offset;\n left = c.x;\n\n break;\n\n case PositionContainer.LEFT:\n case PositionContainer.LEFT_CENTER:\n top = c.y - (m.h - c.h) / 2;\n left = c.x - m.w - offset;\n\n break;\n\n case PositionContainer.LEFT_TOP:\n top = c.y - m.h + c.h;\n left = c.x - m.w - offset;\n\n break;\n\n case PositionContainer.LEFT_BOTTOM:\n top = c.y;\n left = c.x - m.w - offset;\n\n break;\n\n case PositionContainer.RIGHT:\n case PositionContainer.RIGHT_CENTER:\n top = c.y - (m.h - c.h) / 2;\n left = c.x + c.w + offset;\n\n break;\n\n case PositionContainer.RIGHT_TOP:\n top = c.y - m.h + c.h;\n left = c.x + c.w + offset;\n\n break;\n\n case PositionContainer.RIGHT_BOTTOM:\n top = c.y;\n left = c.x + c.w + offset;\n\n break;\n }\n\n return {\n left: Math.round(left),\n top: Math.round(top),\n };\n};\n\nexport const getOppositePosition = (\n { top, left }: ModalPosition,\n position: PositionContainer,\n windowOffset: number,\n m: PositionObject,\n) => {\n const positions = position.split(' ');\n const newPosition = [];\n const rightOffset = left + m.w + windowOffset - window.innerWidth;\n const bottomOffset = top + m.h + windowOffset - window.innerHeight;\n\n for (const p of positions) {\n if (p === PositionContainer.TOP && top < windowOffset) {\n newPosition.push(PositionContainer.BOTTOM);\n } else if (p === PositionContainer.LEFT && left < windowOffset) {\n newPosition.push(PositionContainer.RIGHT);\n } else if (p === PositionContainer.BOTTOM && bottomOffset > 0) {\n newPosition.push(PositionContainer.TOP);\n } else if (p === PositionContainer.RIGHT && rightOffset > 0) {\n newPosition.push(PositionContainer.LEFT);\n } else {\n newPosition.push(p);\n }\n }\n\n return newPosition.join(' ') as PositionContainer;\n};\n\nexport const fixModalPosition = ({ top, left }: ModalPosition, m: PositionObject, windowOffset: number) => {\n const rightOffset = left + m.w + windowOffset - window.innerWidth;\n const bottomOffset = top + m.h + windowOffset - window.innerHeight;\n\n left = rightOffset > 0 ? left - rightOffset : left;\n top = bottomOffset > 0 ? top - bottomOffset : top;\n\n left = left < windowOffset ? windowOffset : left;\n top = top < windowOffset ? windowOffset : top;\n\n return { top, left };\n};\n\ntype getModalPositionRelativeToContainerParams = GetModalPositionParams & {\n windowOffset: number;\n};\n\nexport const getModalPositionRelativeToContainer = ({\n c,\n m,\n offset,\n windowOffset,\n position,\n}: getModalPositionRelativeToContainerParams): Record<string, string> => {\n const params = { c, m, offset, position };\n let modalContainerStyle = getModalPosition(params);\n\n const oppositePosition = getOppositePosition(modalContainerStyle, position, windowOffset, m);\n\n if (oppositePosition !== position) {\n modalContainerStyle = getModalPosition({\n ...params,\n position: oppositePosition,\n });\n }\n\n const fixedPosition = fixModalPosition(modalContainerStyle, m, windowOffset);\n\n return {\n left: `${fixedPosition.left}px`,\n top: `${fixedPosition.top}px`,\n };\n};\n","import { PositionContainer } from './get-modal-position';\n\nexport type GetModalPositionRelativeToScreenParams = {\n position: PositionContainer;\n windowOffset: number;\n};\n\nexport const getModalPositionRelativeToScreen = ({\n position,\n windowOffset,\n}: GetModalPositionRelativeToScreenParams): Record<string, string> => {\n switch (position) {\n case PositionContainer.CENTER:\n return {\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n };\n\n case PositionContainer.TOP:\n case PositionContainer.TOP_CENTER:\n return {\n top: `${windowOffset}px`,\n left: '50%',\n transform: 'translateX(-50%)',\n };\n\n case PositionContainer.TOP_LEFT:\n case PositionContainer.LEFT_TOP:\n return {\n top: `${windowOffset}px`,\n left: `${windowOffset}px`,\n };\n\n case PositionContainer.TOP_RIGHT:\n case PositionContainer.RIGHT_TOP:\n return {\n top: `${windowOffset}px`,\n right: `${windowOffset}px`,\n };\n\n case PositionContainer.BOTTOM:\n case PositionContainer.BOTTOM_CENTER:\n return {\n bottom: `${windowOffset}px`,\n left: '50%',\n transform: 'translateX(-50%)',\n };\n\n case PositionContainer.LEFT_BOTTOM:\n case PositionContainer.BOTTOM_LEFT:\n return {\n bottom: `${windowOffset}px`,\n left: `${windowOffset}px`,\n };\n\n case PositionContainer.RIGHT_BOTTOM:\n case PositionContainer.BOTTOM_RIGHT:\n return {\n bottom: `${windowOffset}px`,\n right: `${windowOffset}px`,\n };\n\n case PositionContainer.LEFT:\n case PositionContainer.LEFT_CENTER:\n return {\n top: '50%',\n left: `${windowOffset}px`,\n transform: 'translateY(-50%)',\n };\n\n case PositionContainer.RIGHT:\n case PositionContainer.RIGHT_CENTER:\n return {\n top: '50%',\n right: `${windowOffset}px`,\n transform: 'translateY(-50%)',\n };\n }\n\n return {\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n };\n};\n","import { useEffect, useRef, useState } from 'react';\n\ntype GeolocationData = GeolocationPosition['coords'] & {\n timestamp: GeolocationPosition['timestamp'];\n};\n\ninterface GeolocationError {\n code: number;\n message: string;\n}\n\ntype UseGeolocationReturn = {\n data: GeolocationData | null;\n error: GeolocationError | null;\n isLoading: boolean;\n};\n\nexport const useGeolocation = (): UseGeolocationReturn => {\n const [data, setData] = useState<GeolocationData | null>(null);\n const [error, setError] = useState<GeolocationError | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const watchIdRef = useRef<number | null>(null);\n\n useEffect(() => {\n if (!navigator.geolocation) {\n setError({\n code: 0,\n message: 'Geolocation is not supported by your browser.',\n });\n setIsLoading(false);\n\n return;\n }\n\n const handleSuccess = (position: GeolocationPosition) => {\n setData({\n ...position.coords,\n timestamp: position.timestamp,\n });\n setIsLoading(false);\n };\n\n const handleError = (geolocationError: GeolocationPositionError) => {\n setError({\n code: geolocationError.code,\n message: geolocationError.message,\n });\n setIsLoading(false);\n };\n\n navigator.geolocation.getCurrentPosition(handleSuccess, handleError);\n\n watchIdRef.current = navigator.geolocation.watchPosition(handleSuccess, handleError);\n\n return () => {\n if (watchIdRef.current !== null) {\n navigator.geolocation.clearWatch(watchIdRef.current);\n }\n };\n }, []);\n\n return { data, error, isLoading };\n};\n","import { useCallback, useRef, useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nexport const useHover = () => {\n const [isHovered, setIsHovered] = useState(false);\n const ref = useRef<HTMLElement>(null);\n\n const handleMouseEnter = useCallback(() => setIsHovered(true), []);\n\n const handleMouseLeave = useCallback(() => setIsHovered(false), []);\n\n useEventListener('mouseenter', handleMouseEnter, ref);\n useEventListener('mouseleave', handleMouseLeave, ref);\n\n return isHovered;\n};\n","import { useRef, useState } from 'react';\n\nimport { useIntersectionObserver } from './use-intersection-observer';\n\nexport const useInView = (initOptions: IntersectionObserverInit = {}) => {\n const [inView, setInView] = useState(false);\n const ref = useRef<Element>(null);\n\n useIntersectionObserver(\n ref,\n ([entry]) => {\n setInView(entry.isIntersecting);\n },\n initOptions,\n );\n\n return { ref, inView };\n};\n","import { RefObject, useEffect } from 'react';\n\nexport const useIntersectionObserver = <T extends Element>(\n ref: RefObject<T> | Array<RefObject<T>>,\n callback: IntersectionObserverCallback,\n initOptions: IntersectionObserverInit = {},\n) => {\n useEffect(() => {\n const refs = Array.isArray(ref) ? ref : [ref];\n\n const observer = new IntersectionObserver(callback, initOptions);\n\n refs.forEach(r => r.current && observer.observe(r.current));\n\n return () => {\n observer.disconnect();\n };\n }, [callback, initOptions, ref]);\n};\n","import React, { useCallback, useState } from 'react';\n\ntype InputTypes = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\ntype UseInputHandlersProps<T extends InputTypes> = {\n onBlur?: (e: React.FocusEvent<T>) => void;\n onFocus?: (e: React.FocusEvent<T>) => void;\n onChange?: (e: React.ChangeEvent<T>) => void;\n};\n\nexport const useInputHandlers = <T extends InputTypes>({\n onBlur,\n onFocus,\n onChange,\n}: UseInputHandlersProps<T> = {}) => {\n const [isFocus, setIsFocus] = useState(false);\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<T>) => {\n setIsFocus(true);\n onFocus && onFocus(e);\n },\n [onFocus],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<T>) => {\n setIsFocus(false);\n onBlur && onBlur(e);\n },\n [onBlur],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<T>) => {\n onChange && onChange(e);\n },\n [onChange],\n );\n\n return {\n isFocus,\n handlers: {\n onFocus: handleFocus,\n onBlur: handleBlur,\n onChange: handleChange,\n },\n };\n};\n","import { useEffect, useState } from 'react';\n\nexport const useMediaQuery = (query: string): boolean => {\n const [matches, setMatches] = useState(false);\n\n useEffect(() => {\n const media = window.matchMedia(query);\n\n if (media.matches !== matches) {\n setMatches(media.matches);\n }\n\n const listener = () => {\n setMatches(media.matches);\n };\n\n media.addEventListener('change', listener);\n\n return () => {\n media.removeEventListener('change', listener);\n };\n }, [matches, query]);\n\n return matches;\n};\n","import { useRef, useState } from 'react';\n\nexport const useModal = <T extends HTMLElement>() => {\n const containerRef = useRef<T>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n const openModal = () => {\n setIsOpen(true);\n };\n\n const closeModal = () => {\n setIsOpen(false);\n };\n\n return {\n containerRef,\n isOpen,\n openModal,\n closeModal,\n };\n};\n","import { RefObject, useCallback, useLayoutEffect, useRef } from 'react';\n\nimport { useClickOutside } from './use-click-outside';\nimport { useEventListener } from './use-event-listener';\nimport { useResizeObserver } from './use-resize-observer';\n\nimport {\n getModalPositionRelativeToContainer,\n getModalPositionRelativeToScreen,\n PositionContainer,\n PositionObject,\n} from '@polpo/helpers';\n\nconst convertDOMRectToPosition = (rect: DOMRectReadOnly): PositionObject => ({\n x: rect.x,\n y: rect.y,\n w: rect.width,\n h: rect.height,\n top: rect.top,\n left: rect.left,\n});\n\nexport type UseModalInContainerParams<\n Container extends HTMLElement = HTMLElement,\n Modal extends HTMLElement = Container,\n> = {\n closeOnClickOutside?: boolean;\n windowOffset?: number;\n offset?: number;\n position?: `${PositionContainer}`;\n modalRef: RefObject<Modal>;\n containerRef?: RefObject<Container>;\n isOpen: boolean;\n onClose: () => void;\n};\n\nexport const useModalInContainer = <\n Container extends HTMLElement = HTMLElement,\n Modal extends HTMLElement = Container,\n>({\n closeOnClickOutside = true,\n offset = 0,\n windowOffset = 0,\n position = PositionContainer.BOTTOM,\n modalRef,\n containerRef,\n isOpen,\n onClose,\n}: UseModalInContainerParams<Container, Modal>) => {\n const containerTemporalRef = useRef<Container>(null);\n\n useClickOutside<Modal>(modalRef, () => {\n if (isOpen && closeOnClickOutside) {\n onClose();\n }\n });\n\n const getPosition = useCallback(\n (modalRef: RefObject<Modal>, containerRef: RefObject<Container>) => {\n const modal = modalRef.current?.getClientRects()[0];\n const container = containerRef.current?.getClientRects()[0];\n\n if (!modal) {\n return;\n }\n\n const modalStyle: Record<string, string> = !container\n ? getModalPositionRelativeToScreen({ position: position as PositionContainer, windowOffset })\n : getModalPositionRelativeToContainer({\n c: convertDOMRectToPosition(container),\n m: convertDOMRectToPosition(modal),\n offset,\n windowOffset,\n position: position as PositionContainer,\n });\n\n Object.keys(modalStyle).forEach(key => {\n modalRef.current?.style.setProperty(key, modalStyle[key]);\n });\n },\n [position, windowOffset, offset],\n );\n\n const callback = useCallback(() => {\n if (isOpen) {\n getPosition(modalRef, containerRef ?? containerTemporalRef);\n }\n }, [getPosition, isOpen, containerRef, modalRef]);\n\n useLayoutEffect(callback, [callback]);\n\n useResizeObserver<Container>(containerRef ?? containerTemporalRef, callback);\n useResizeObserver<Modal>(modalRef, callback);\n useEventListener('resize', callback);\n useEventListener('scroll', callback, modalRef);\n};\n","import React, { useCallback, useEffect, useLayoutEffect, useMemo } from 'react';\n\nexport enum ModalState {\n OPENING = 'OPENING',\n OPEN = 'OPEN',\n CLOSING = 'CLOSING',\n CLOSED = 'CLOSED',\n}\n\nexport type UseModalTransitionParams = {\n transitionDuration?: number;\n onClose: () => void;\n isOpen: boolean;\n};\n\nexport const useModalTransition = ({ transitionDuration = 0, onClose, isOpen }: UseModalTransitionParams) => {\n const [modalState, setModalState] = React.useState<ModalState>(ModalState.CLOSED);\n\n const isVisible = useMemo(() => {\n return modalState !== ModalState.CLOSED;\n }, [modalState]);\n\n useEffect(() => {\n document.documentElement.style.overflow = isVisible ? 'hidden' : 'auto';\n }, [isVisible]);\n\n const closeModal = useCallback(() => {\n if ([ModalState.OPENING, ModalState.OPEN].includes(modalState)) {\n if (transitionDuration > 0) {\n setModalState(ModalState.CLOSING);\n setTimeout(() => {\n setModalState(ModalState.CLOSED);\n onClose();\n }, transitionDuration);\n } else {\n setModalState(ModalState.CLOSED);\n }\n }\n }, [onClose, modalState, transitionDuration]);\n\n const openModal = useCallback(() => {\n if ([ModalState.CLOSING, ModalState.CLOSED].includes(modalState)) {\n if (transitionDuration > 0) {\n setModalState(ModalState.OPENING);\n setTimeout(() => {\n setModalState(ModalState.OPEN);\n }, transitionDuration);\n } else {\n setModalState(ModalState.OPEN);\n }\n }\n }, [modalState, transitionDuration]);\n\n useLayoutEffect(() => {\n if (modalState === ModalState.CLOSED && isOpen) {\n openModal();\n } else if (modalState === ModalState.OPEN && !isOpen) {\n closeModal();\n }\n }, [isOpen, openModal, closeModal, modalState]);\n\n return {\n isVisible,\n modalState,\n };\n};\n","import React, { useRef, useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\ntype MousePosition = {\n x: null | number;\n y: null | number;\n elementX: number | null;\n elementY: number | null;\n elementPositionX: number | null;\n elementPositionY: number | null;\n};\n\nconst getMousePosition = (domRect: DOMRect, e: MouseEvent) => {\n const { left, top } = domRect;\n const containerPositionX = left + window.scrollX;\n const containerPositionY = top + window.scrollY;\n const containerX = e.pageX - containerPositionX;\n const containerY = e.pageY - containerPositionY;\n\n return {\n x: e.pageX,\n y: e.pageY,\n elementX: containerX,\n elementY: containerY,\n elementPositionX: containerPositionX,\n elementPositionY: containerPositionY,\n };\n};\n\nexport const useMousePosition = (containerRef?: React.RefObject<HTMLElement | SVGElement | null>) => {\n const ref = useRef<HTMLElement>(null);\n const [position, setPosition] = useState<MousePosition>({\n x: null,\n y: null,\n elementX: null,\n elementY: null,\n elementPositionX: null,\n elementPositionY: null,\n });\n\n const mouseMove = (e: MouseEvent) => {\n const { clientX, clientY } = e;\n setPosition(prev => ({ ...prev, x: clientX, y: clientY }));\n\n if (containerRef?.current instanceof Element) {\n const newState = getMousePosition(containerRef.current.getBoundingClientRect(), e);\n setPosition(prev => ({\n ...prev,\n ...newState,\n }));\n } else if (ref.current instanceof Element) {\n const newState = getMousePosition(ref.current.getBoundingClientRect(), e);\n setPosition(prev => ({\n ...prev,\n ...newState,\n }));\n }\n };\n\n useEventListener('mousemove', mouseMove);\n\n return { ...position, ref };\n};\n","import { useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nexport const useOnlineStatus = () => {\n const [online, setOnline] = useState(navigator.onLine);\n\n useEventListener('online', () => setOnline(navigator.onLine));\n useEventListener('offline', () => setOnline(navigator.onLine));\n\n return online;\n};\n","import { useEffect, useRef } from 'react';\n\nexport const useRenderCount = () => {\n const count = useRef(1);\n\n useEffect(() => {\n count.current++;\n });\n\n return count.current;\n};\n","import { useEffect, useRef, useState } from 'react';\n\nexport const useScroll = () => {\n const ref = useRef<HTMLElement>(null);\n const [position, setPosition] = useState([0, 0]);\n\n useEffect(() => {\n const element = ref.current;\n\n const handleScroll = () => {\n if (!element) return;\n\n setPosition([element.scrollLeft, element.scrollTop]);\n };\n\n if (element) {\n element.addEventListener('scroll', handleScroll);\n }\n\n return () => {\n if (element) {\n element.removeEventListener('scroll', handleScroll);\n }\n };\n }, []);\n\n return {\n ref,\n position,\n };\n};\n","import { Dispatch, SetStateAction, useEffect, useState } from 'react';\n\nfunction useStateHistory<T>(initialState: T | (() => T)): [T, Dispatch<SetStateAction<T>>, Array<T>];\n\nfunction useStateHistory<T = undefined>(): [T | undefined, Dispatch<SetStateAction<T | undefined>>, Array<T>];\n\nfunction useStateHistory<T = undefined>(\n initialState?: T | (() => T) | undefined,\n): [T | undefined, Dispatch<SetStateAction<T | undefined>>, Array<T>] {\n const [state, setState] = useState<T | undefined>(initialState);\n const [history, setHistory] = useState<Array<T>>([]);\n\n useEffect(() => {\n if (state !== undefined) {\n setHistory(prevHistory => [...prevHistory, state]);\n }\n }, [state]);\n\n return [state, setState, history];\n}\n\nexport { useStateHistory };\n","import { useCallback, useState } from 'react';\n\nexport const useToggle = (defaultValue: boolean = false) => {\n const [value, setValue] = useState<boolean>(defaultValue);\n\n const toggle = useCallback(() => {\n setValue(prev => !prev);\n }, []);\n\n return [value, toggle, setValue];\n};\n","import { useCallback, useState } from 'react';\n\nexport const useToggleValues = <T>(values: Array<T>, defaultIndex: number = 0): [T, (index?: number) => void] => {\n const [index, setIndex] = useState(defaultIndex);\n\n const toggle = useCallback(\n (index?: number) => {\n setIndex(index !== undefined ? index : prev => (prev + 1) % values.length);\n },\n [values.length],\n );\n\n return [values[index], toggle];\n};\n","import { useEffect, useState } from 'react';\n\nimport { useEventListener } from './use-event-listener';\n\nenum ScreenOrientation {\n PORTRAIT = 'portrait',\n LANDSCAPE = 'landscape',\n}\n\ntype UseViewportData = {\n width: number;\n height: number;\n orientation: ScreenOrientation;\n};\n\nexport const useViewport = (): UseViewportData => {\n const getData = (): UseViewportData => {\n const { innerWidth, innerHeight } = window;\n\n return {\n width: innerWidth,\n height: innerHeight,\n orientation: innerWidth > innerHeight ? ScreenOrientation.LANDSCAPE : ScreenOrientation.PORTRAIT,\n };\n };\n\n const [data, setData] = useState<UseViewportData>(getData);\n\n useEventListener('resize', () => {\n setData(getData());\n });\n\n useEffect(() => {\n setData(getData());\n }, []);\n\n return data;\n};\n"],"mappings":"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","names":["hooks_exports","__export","FileTypeEnum","ModalState","useAsync","useClassNames","useClickOutside","useConstant","useCookie","useDebounce","useDimensions","useDomContainer","useEventListener","useFileReader","useGeolocation","useHover","useInView","useInputHandlers","useIntersectionObserver","useMediaQuery","useModal","useModalInContainer","useModalTransition","useMousePosition","useOnlineStatus","useRenderCount","useResizeObserver","useSafeDispatch","useScroll","useStateHistory","useToggle","useToggleValues","useViewport","__toCommonJS","import_react","import_react","useSafeDispatch","dispatch","mounted","args","asyncReducer","_state","action","useAsync","initialState","asyncState","unsafeDispatch","dispatch","useSafeDispatch","run","promise","data","error","setData","setError","import_react","useClassNames","classes","compiledClassNames","classname","value","import_react","useEventListener","eventName","callback","element","options","callbackRef","targetElement","listener","event","checkIsOutside","ref","target","useClickOutside","callback","useEventListener","e","event","r","import_react","useConstant","initializer","import_react","generateCookieAttributes","options","parts","date","setCookie","name","value","encodedValue","attributes","getCookie","nameEq","cookies","cookie","cookieTrimmed","deleteCookie","useCookie","cookieName","defaultValue","cookieValue","setCookieValue","rawCookie","updateCookie","overrideOptions","mergedOptions","stringValue","removeCookie","import_react","useDebounce","value","delay","debouncedValue","setDebouncedValue","timer","import_react","import_react","useResizeObserver","ref","callback","refs","observer","useDimensions","ref","dimensions","setDimensions","useResizeObserver","entry","width","height","import_react","createContainer","containerID","domContainer","useDomContainer","container","setContainer","import_react","formatBytes","bytes","decimals","k","dm","sizes","i","getModalPosition","c","m","offset","position","top","left","getOppositePosition","windowOffset","positions","newPosition","rightOffset","bottomOffset","p","fixModalPosition","getModalPositionRelativeToContainer","params","modalContainerStyle","oppositePosition","fixedPosition","getModalPositionRelativeToScreen","position","windowOffset","FileTypeEnum","useFileReader","inputFiles","files","setFiles","fileReaders","isCancel","promises","file","resolve","reject","fileReader","e","formatBytes","import_react","useGeolocation","data","setData","error","setError","isLoading","setIsLoading","watchIdRef","handleSuccess","position","handleError","geolocationError","import_react","useHover","isHovered","setIsHovered","ref","handleMouseEnter","handleMouseLeave","useEventListener","import_react","import_react","useIntersectionObserver","ref","callback","initOptions","refs","observer","r","useInView","initOptions","inView","setInView","ref","useIntersectionObserver","entry","import_react","useInputHandlers","onBlur","onFocus","onChange","isFocus","setIsFocus","handleFocus","e","handleBlur","handleChange","import_react","useMediaQuery","query","matches","setMatches","media","listener","import_react","useModal","containerRef","isOpen","setIsOpen","import_react","convertDOMRectToPosition","rect","useModalInContainer","closeOnClickOutside","offset","windowOffset","position","modalRef","containerRef","isOpen","onClose","containerTemporalRef","useClickOutside","getPosition","modal","container","modalStyle","getModalPositionRelativeToContainer","getModalPositionRelativeToScreen","key","callback","useResizeObserver","useEventListener","import_react","ModalState","useModalTransition","transitionDuration","onClose","isOpen","modalState","setModalState","React","isVisible","closeModal","openModal","import_react","getMousePosition","domRect","e","left","top","containerPositionX","containerPositionY","containerX","containerY","useMousePosition","containerRef","ref","position","setPosition","useEventListener","clientX","clientY","prev","newState","import_react","useOnlineStatus","online","setOnline","useEventListener","import_react","useRenderCount","count","import_react","useScroll","ref","position","setPosition","element","handleScroll","import_react","useStateHistory","initialState","state","setState","history","setHistory","prevHistory","import_react","useToggle","defaultValue","value","setValue","toggle","prev","import_react","useToggleValues","values","defaultIndex","index","setIndex","toggle","prev","import_react","useViewport","getData","innerWidth","innerHeight","data","setData","useEventListener"]}
package/dist/hooks.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as React$1 from 'react';
2
2
  import React__default, { RefObject, Dispatch, SetStateAction } from 'react';
3
- export { M as ModalState, U as UseModalInContainerParams, u as useModalInContainer, a as useModalTransition } from './use-modal-in-container-DiNW1PE_.cjs';
3
+ export { M as ModalState, a as UseModalInContainerParams, U as UseModalTransitionParams, u as useModalInContainer, b as useModalTransition } from './use-modal-transition-C6mR_NZh.cjs';
4
4
  import './get-modal-position-drle0OjP.cjs';
5
5
 
6
6
  type AsyncState<T> = {
@@ -48,7 +48,7 @@ declare const useDimensions: (ref: React.RefObject<HTMLElement>) => {
48
48
  height: number;
49
49
  };
50
50
 
51
- declare const useDomContainer: (containerID: string) => HTMLElement;
51
+ declare const useDomContainer: (containerID: string) => HTMLElement | null;
52
52
 
53
53
  declare function useEventListener<EventName extends keyof MediaQueryListEventMap>(eventName: EventName, callback: (event: MediaQueryListEventMap[EventName]) => void, element: RefObject<MediaQueryList> | undefined, options?: boolean | AddEventListenerOptions): void;
54
54
  declare function useEventListener<EventName extends keyof WindowEventMap>(eventName: EventName, callback: (event: WindowEventMap[EventName]) => void, element?: undefined, options?: boolean | AddEventListenerOptions): void;