polpo 0.1.11 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components.cjs +3654 -1
- package/dist/components.cjs.map +1 -1
- package/dist/components.css +2172 -1
- package/dist/components.css.map +1 -1
- package/dist/components.js +3575 -1
- package/dist/components.js.map +1 -1
- package/dist/helpers.cjs +310 -1
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.js +275 -1
- package/dist/helpers.js.map +1 -1
- package/dist/hooks.cjs +1064 -1
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.js +997 -1
- package/dist/hooks.js.map +1 -1
- package/dist/layouts.cjs +145 -1
- package/dist/layouts.cjs.map +1 -1
- package/dist/layouts.css +4 -1
- package/dist/layouts.css.map +1 -1
- package/dist/layouts.js +118 -1
- package/dist/layouts.js.map +1 -1
- package/dist/types.cjs +18 -1
- package/dist/types.cjs.map +1 -1
- package/package.json +4 -3
package/dist/hooks.cjs.map
CHANGED
|
@@ -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-debounce-state.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-debounce-state';\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 { 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<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 | null> | 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 | null> | 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 | null> | 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 | null> | 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 | null>, target: Node) => {\n return ref.current && !ref.current.contains(target);\n};\n\nexport const useClickOutside = <T extends HTMLElement>(\n ref: RefObject<T | null> | Array<RefObject<T | null>>,\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 { useDebounce } from './use-debounce';\n\nexport const useDebounceState = <T>(\n defaultValue: T,\n delay: number = 500,\n): [T, T, React.Dispatch<React.SetStateAction<T>>] => {\n const [value, setValue] = useState<T>(defaultValue);\n const debouncedValue = useDebounce(value, delay);\n\n return [value, debouncedValue, setValue];\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 | null> | Array<RefObject<T | null>>,\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 && process.env.NODE_ENV === 'production') {\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 '../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);\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<HTMLElement>(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 | null> | Array<RefObject<T | null>>,\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 // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n onFocus && onFocus(e);\n },\n [onFocus],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<T>) => {\n setIsFocus(false);\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n onBlur && onBlur(e);\n },\n [onBlur],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<T>) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\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 {\n getModalPositionRelativeToContainer,\n getModalPositionRelativeToScreen,\n PositionContainer,\n PositionObject,\n} from '../helpers';\n\nimport { useEventListener } from './use-event-listener';\nimport { useResizeObserver } from './use-resize-observer';\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 windowOffset?: number;\n offset?: number;\n position?: `${PositionContainer}`;\n modalRef: RefObject<Modal | null>;\n containerRef?: RefObject<Container | null>;\n isOpen: boolean;\n};\n\nexport const useModalInContainer = <\n Container extends HTMLElement = HTMLElement,\n Modal extends HTMLElement = Container,\n>({\n offset = 0,\n windowOffset = 0,\n position = PositionContainer.BOTTOM,\n modalRef,\n containerRef,\n isOpen,\n}: UseModalInContainerParams<Container, Modal>) => {\n const containerTemporalRef = useRef<Container>(null);\n\n const getPosition = useCallback(\n (modalRef: RefObject<Modal | null>, containerRef: RefObject<Container | null>) => {\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 isOpen: boolean;\n};\n\nexport const useModalTransition = ({ transitionDuration = 0, 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 }, transitionDuration);\n } else {\n setModalState(ModalState.CLOSED);\n }\n }\n }, [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","useDebounceState","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","useDebounceState","defaultValue","delay","value","setValue","debouncedValue","useDebounce","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","offset","windowOffset","position","modalRef","containerRef","isOpen","containerTemporalRef","getPosition","modal","container","modalStyle","getModalPositionRelativeToContainer","getModalPositionRelativeToScreen","key","callback","useResizeObserver","useEventListener","import_react","ModalState","useModalTransition","transitionDuration","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"]}
|
|
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-debounce-state.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-debounce-state';\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 { 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<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 | null> | 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 | null> | 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 | null> | 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 | null> | 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 | null>, target: Node) => {\n return ref.current && !ref.current.contains(target);\n};\n\nexport const useClickOutside = <T extends HTMLElement>(\n ref: RefObject<T | null> | Array<RefObject<T | null>>,\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 { useDebounce } from './use-debounce';\n\nexport const useDebounceState = <T>(\n defaultValue: T,\n delay: number = 500,\n): [T, T, React.Dispatch<React.SetStateAction<T>>] => {\n const [value, setValue] = useState<T>(defaultValue);\n const debouncedValue = useDebounce(value, delay);\n\n return [value, debouncedValue, setValue];\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 | null> | Array<RefObject<T | null>>,\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 && process.env.NODE_ENV === 'production') {\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 '../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);\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<HTMLElement>(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 | null> | Array<RefObject<T | null>>,\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 // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n onFocus && onFocus(e);\n },\n [onFocus],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<T>) => {\n setIsFocus(false);\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n onBlur && onBlur(e);\n },\n [onBlur],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<T>) => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\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 {\n getModalPositionRelativeToContainer,\n getModalPositionRelativeToScreen,\n PositionContainer,\n PositionObject,\n} from '../helpers';\n\nimport { useEventListener } from './use-event-listener';\nimport { useResizeObserver } from './use-resize-observer';\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 windowOffset?: number;\n offset?: number;\n position?: `${PositionContainer}`;\n modalRef: RefObject<Modal | null>;\n containerRef?: RefObject<Container | null>;\n isOpen: boolean;\n};\n\nexport const useModalInContainer = <\n Container extends HTMLElement = HTMLElement,\n Modal extends HTMLElement = Container,\n>({\n offset = 0,\n windowOffset = 0,\n position = PositionContainer.BOTTOM,\n modalRef,\n containerRef,\n isOpen,\n}: UseModalInContainerParams<Container, Modal>) => {\n const containerTemporalRef = useRef<Container>(null);\n\n const getPosition = useCallback(\n (modalRef: RefObject<Modal | null>, containerRef: RefObject<Container | null>) => {\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 isOpen: boolean;\n};\n\nexport const useModalTransition = ({ transitionDuration = 0, 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 }, transitionDuration);\n } else {\n setModalState(ModalState.CLOSED);\n }\n }\n }, [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":["import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_react","domContainer","import_react","FileTypeEnum","files","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_react","modalRef","containerRef","import_react","ModalState","React","import_react","import_react","import_react","import_react","import_react","import_react","import_react","index","import_react"]}
|