{"version":3,"file":"useElementDimensions.cjs","sources":["../../../../src/hooks/useElementDimensions/useElementDimensions.ts"],"sourcesContent":["import { type RefObject, useEffect, useMemo, useRef, useState } from \"react\";\n\n// TODO: Denne er sikkert nyttig flere steder enn her!\n// eslint-disable-next-line\nfunction throttle<R, A extends any[]>(fn: (...args: A) => R, delay: number) {\n    let wait = false;\n\n    return (...args: A) => {\n        if (wait) return undefined;\n\n        const result = fn(...args);\n\n        if (delay !== 0) {\n            wait = true;\n            window.setTimeout(() => {\n                wait = false;\n            }, delay);\n        }\n\n        return result;\n    };\n}\n\nexport type Dimensions = {\n    height: number;\n    width: number;\n};\n\n/**\n * Lar deg måle størrelsen på et element, og oppdatere målene når vinduet endrer størrelse.\n * @param throttleDelay Antall milisekunder som skal gå mellom hver gang dimensjonene oppdateres.\n * @returns Ref til elementet som skal måles, og dimensjonene til elementet.\n */\nexport function useElementDimensions<T extends HTMLElement>(\n    throttleDelay = 200,\n): [RefObject<T>, Dimensions] {\n    const elementRef = useRef<T>(null);\n    const [dimensions, setDimensions] = useState<Dimensions>({\n        height: 0,\n        width: 0,\n    });\n\n    const throttledSetDimensions = useMemo(\n        () =>\n            throttle(\n                () =>\n                    setDimensions({\n                        height: elementRef.current?.scrollHeight || 0,\n                        width: elementRef.current?.scrollWidth || 0,\n                    }),\n                throttleDelay,\n            ),\n        [throttleDelay],\n    );\n\n    useEffect(() => {\n        setDimensions({\n            height: elementRef.current?.scrollHeight || 0,\n            width: elementRef.current?.scrollWidth || 0,\n        });\n\n        typeof window !== \"undefined\" &&\n            window.addEventListener(\"resize\", throttledSetDimensions);\n\n        return () => {\n            typeof window !== \"undefined\" &&\n                window.removeEventListener(\"resize\", throttledSetDimensions);\n        };\n    }, [throttledSetDimensions]);\n\n    return [elementRef, dimensions];\n}\n"],"names":["throttleDelay","elementRef","useRef","dimensions","setDimensions","useState","height","width","throttledSetDimensions","useMemo","fn","delay","wait","args","result","window","setTimeout","throttle","current","scrollHeight","scrollWidth","useEffect","addEventListener","removeEventListener"],"mappings":"sIAiCO,SACHA,EAAgB,KAEhB,MAAMC,EAAaC,EAAAA,OAAU,OACtBC,EAAYC,GAAiBC,WAAqB,CACrDC,OAAQ,EACRC,MAAO,IAGLC,EAAyBC,EAAAA,QAC3B,IAvCR,SAAsCC,EAAuBC,GACzD,IAAIC,GAAO,EAEX,MAAO,IAAIC,KACP,GAAID,EAAM,OAEV,MAAME,EAASJ,KAAMG,GAErB,OAAc,IAAVF,IACAC,GAAO,EACPG,OAAOC,WAAW,KACdJ,GAAO,GACRD,IAGAG,EAEf,CAuBYG,CACI,IACIb,EAAc,CACVE,OAAQL,EAAWiB,SAASC,cAAgB,EAC5CZ,MAAON,EAAWiB,SAASE,aAAe,IAElDpB,GAER,CAACA,IAGLqB,OAAAA,EAAAA,UAAU,KACNjB,EAAc,CACVE,OAAQL,EAAWiB,SAASC,cAAgB,EAC5CZ,MAAON,EAAWiB,SAASE,aAAe,WAGvCL,OAAW,KACdA,OAAOO,iBAAiB,SAAUd,GAE/B,YACIO,OAAW,KACdA,OAAOQ,oBAAoB,SAAUf,KAE9C,CAACA,IAEG,CAACP,EAAYE,EACxB"}