{"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"}