{"version":3,"file":"Position-SHFM7sHs.js","sources":["../../Client/shared/Hooks/DocumentClick.tsx","../../Client/shared/Hooks/Position.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\r\n\r\nimport { generateRandomString } from '@shared/Common';\r\n\r\ninterface Options {\r\n    exceptionClassNames: string[];\r\n    generateUniqueClassName: boolean | number;\r\n}\r\n\r\nexport const useDocumentClick = (callback: () => void, options?: Options | boolean | string | number) => {\r\n    if (!options || typeof options === 'boolean') options = { exceptionClassNames: [], generateUniqueClassName: true };\r\n    if (typeof options === 'string') options = { exceptionClassNames: [options], generateUniqueClassName: false };\r\n    if (typeof options === 'number') options = { exceptionClassNames: [], generateUniqueClassName: options };\r\n\r\n    const classNames = options.exceptionClassNames;\r\n    if (options.generateUniqueClassName === true) classNames.unshift(generateRandomString());\r\n    else if (typeof options.generateUniqueClassName === 'number') {\r\n        for (let i = 0; i < options.generateUniqueClassName; i++) classNames.unshift(generateRandomString());\r\n    }\r\n\r\n    useEffect(() => {\r\n        document.addEventListener('click', handler, true);\r\n        return () => document.removeEventListener('click', handler, true);\r\n\r\n        function handler(e) {\r\n            if (classNames.length > 0) {\r\n                let target = e.target as HTMLElement | null | undefined,\r\n                    found = false;\r\n\r\n                do {\r\n                    found = classNames.some(c => target?.classList.contains(c));\r\n                    target = target?.parentElement;\r\n                } while (target && !found);\r\n                if (found) return;\r\n            }\r\n\r\n            callback();\r\n        }\r\n    }, []);\r\n\r\n    return {\r\n        className: useRef(classNames[0]),\r\n        classNames: classNames.map(c => useRef(c)),\r\n    };\r\n};\r\n","import { Position } from '@shared/Models';\r\nimport { MutableRefObject, RefObject, useEffect, useState } from 'react';\r\n\r\nexport function usePosition(\r\n    trigger?: RefObject<HTMLElement> | MutableRefObject<HTMLElement>,\r\n    modifier?: (position: Position) => void\r\n) {\r\n    const [position, setPosition] = useState<Position>({ left: 0, top: 0, width: 0 });\r\n\r\n    useEffect(calculatePosition, [trigger?.current]);\r\n\r\n    useEffect(() => {\r\n        if (!trigger?.current) return;\r\n\r\n        window.addEventListener('resize', calculatePosition);\r\n        return () => window.removeEventListener('resize', calculatePosition);\r\n    }, [trigger?.current]);\r\n\r\n    function calculatePosition() {\r\n        if (!trigger?.current) return;\r\n\r\n        const rect = trigger.current.getBoundingClientRect(),\r\n            p = {\r\n                top: (rect?.top || 0) + (rect?.height || 0) + window.scrollY,\r\n                left: rect?.left || 0,\r\n                width: rect?.width || 0,\r\n            } as Position;\r\n\r\n        if (modifier) modifier(p);\r\n\r\n        setPosition(p);\r\n    }\r\n\r\n    return position;\r\n}\r\n"],"names":["useDocumentClick","callback","options","classNames","generateRandomString","i","useEffect","handler","e","target","found","c","useRef","usePosition","trigger","modifier","position","setPosition","useState","calculatePosition","rect","p"],"mappings":"iFASa,MAAAA,EAAmB,CAACC,EAAsBC,IAAkD,EACjG,CAACA,GAAW,OAAOA,GAAY,aAAqBA,EAAA,CAAE,oBAAqB,CAAA,EAAI,wBAAyB,EAAK,GAC7G,OAAOA,GAAY,WAAoBA,EAAA,CAAE,oBAAqB,CAACA,CAAO,EAAG,wBAAyB,EAAM,GACxG,OAAOA,GAAY,WAAUA,EAAU,CAAE,oBAAqB,CAAI,EAAA,wBAAyBA,CAAQ,GAEvG,MAAMC,EAAaD,EAAQ,oBAC3B,GAAIA,EAAQ,0BAA4B,GAAiBC,EAAA,QAAQC,GAAsB,UAC9E,OAAOF,EAAQ,yBAA4B,SACvC,QAAAG,EAAI,EAAGA,EAAIH,EAAQ,wBAAyBG,IAAKF,EAAW,QAAQC,EAAA,CAAsB,EAGvGE,OAAAA,EAAAA,UAAU,IAAM,CACH,gBAAA,iBAAiB,QAASC,EAAS,EAAI,EACzC,IAAM,SAAS,oBAAoB,QAASA,EAAS,EAAI,EAEhE,SAASA,EAAQC,EAAG,CACZ,GAAAL,EAAW,OAAS,EAAG,CACnB,IAAAM,EAASD,EAAE,OACXE,EAAQ,GAET,GACCA,EAAQP,EAAW,KAAKQ,GAAKF,GAAA,YAAAA,EAAQ,UAAU,SAASE,EAAE,EAC1DF,EAASA,GAAA,YAAAA,EAAQ,oBACZA,GAAU,CAACC,GACpB,GAAIA,EAAO,MAAA,CAGNT,EAAA,CAAA,CAEjB,EAAG,EAAE,EAEE,CACH,UAAWW,EAAA,OAAOT,EAAW,CAAC,CAAC,EAC/B,WAAYA,EAAW,IAASQ,GAAAC,EAAAA,OAAOD,CAAC,CAAC,CAC7C,CACJ,ECzCgB,SAAAE,EACZC,EACAC,EACF,CACE,KAAM,CAACC,EAAUC,CAAW,EAAIC,EAAmB,SAAA,CAAE,KAAM,EAAG,IAAK,EAAG,MAAO,CAAA,CAAG,EAEhFZ,EAAAA,UAAUa,EAAmB,CAACL,GAAA,YAAAA,EAAS,OAAO,CAAC,EAE/CR,EAAAA,UAAU,IAAM,CACR,GAACQ,GAAA,MAAAA,EAAS,QAEP,cAAA,iBAAiB,SAAUK,CAAiB,EAC5C,IAAM,OAAO,oBAAoB,SAAUA,CAAiB,CAAA,EACpE,CAACL,GAAA,YAAAA,EAAS,OAAO,CAAC,EAErB,SAASK,GAAoB,CACrB,GAAA,EAACL,GAAA,MAAAA,EAAS,SAAS,OAEvB,MAAMM,EAAON,EAAQ,QAAQ,sBAAA,EACzBO,EAAI,CACA,MAAMD,GAAA,YAAAA,EAAM,MAAO,KAAMA,GAAA,YAAAA,EAAM,SAAU,GAAK,OAAO,QACrD,MAAMA,GAAA,YAAAA,EAAM,OAAQ,EACpB,OAAOA,GAAA,YAAAA,EAAM,QAAS,CAC1B,EAEAL,KAAmBM,CAAC,EAExBJ,EAAYI,CAAC,CAAA,CAGV,OAAAL,CACX"}