UNPKG

koval-ui

Version:

React components collection with minimalistic design. Supports theming, layout, and input validation.

1 lines 3 kB
{"version":3,"file":"useIsOverflow.cjs","sources":["../../../../src/internal/hooks/useIsOverflow.ts"],"sourcesContent":["import type {MutableRefObject} from 'react';\nimport {useCallback} from 'react';\nimport {useState, useEffect} from 'react';\nimport {useDebouncedCallback} from 'use-debounce';\n\nimport {useEventListener} from '@/internal/hooks/useEventListener.ts';\n\n/**\n * Utility hook. Tracks provided element overflow state. Subscribes to window resize events.\n */\nexport const useIsOverflow = <TElement extends HTMLElement | null>(\n ref: MutableRefObject<TElement>\n) => {\n const [scrollWidth, setScrollWidth] = useState(0);\n const [scrollHeight, setScrollHeight] = useState(0);\n const [overflowY, setOverflowY] = useState<boolean | undefined>(undefined);\n const [overflowX, setOverflowX] = useState<boolean | undefined>(undefined);\n\n const handleResize = useCallback(() => {\n const {current} = ref;\n\n if (current) {\n const hasOverflowY = scrollHeight > current.offsetHeight;\n const hasOverflowX = scrollWidth > current.offsetWidth;\n setOverflowY(hasOverflowY);\n setOverflowX(hasOverflowX);\n }\n }, [ref, scrollHeight, scrollWidth]);\n\n const handleResizeDebounced = useDebouncedCallback(handleResize, 666, {trailing: true});\n\n useEventListener('resize', handleResizeDebounced);\n\n useEffect(() => {\n const {current} = ref;\n\n if (current) {\n setScrollWidth(current.scrollWidth);\n setScrollHeight(current.scrollHeight);\n const hasOverflowY = current.scrollHeight > current.offsetHeight;\n const hasOverflowX = current.scrollWidth > current.offsetWidth;\n\n setOverflowY(hasOverflowY);\n setOverflowX(hasOverflowX);\n }\n }, [ref]);\n\n return {overflowY, overflowX};\n};\n"],"names":["useIsOverflow","ref","scrollWidth","setScrollWidth","useState","scrollHeight","setScrollHeight","overflowY","setOverflowY","overflowX","setOverflowX","handleResize","useCallback","current","hasOverflowY","hasOverflowX","handleResizeDebounced","useDebouncedCallback","useEventListener","useEffect"],"mappings":"oLAUaA,EACTC,GACC,CACD,KAAM,CAACC,EAAaC,CAAc,EAAIC,EAAAA,SAAS,CAAC,EAC1C,CAACC,EAAcC,CAAe,EAAIF,EAAAA,SAAS,CAAC,EAC5C,CAACG,EAAWC,CAAY,EAAIJ,EAAAA,SAA8B,MAAS,EACnE,CAACK,EAAWC,CAAY,EAAIN,EAAAA,SAA8B,MAAS,EAEnEO,EAAeC,EAAAA,YAAY,IAAM,CAC7B,KAAA,CAAC,QAAAC,GAAWZ,EAElB,GAAIY,EAAS,CACH,MAAAC,EAAeT,EAAeQ,EAAQ,aACtCE,EAAeb,EAAcW,EAAQ,YAC3CL,EAAaM,CAAY,EACzBJ,EAAaK,CAAY,CAAA,CAE9B,EAAA,CAACd,EAAKI,EAAcH,CAAW,CAAC,EAE7Bc,EAAwBC,EAAAA,qBAAqBN,EAAc,IAAK,CAAC,SAAU,GAAK,EAEtFO,OAAAA,EAAA,iBAAiB,SAAUF,CAAqB,EAEhDG,EAAAA,UAAU,IAAM,CACN,KAAA,CAAC,QAAAN,GAAWZ,EAElB,GAAIY,EAAS,CACTV,EAAeU,EAAQ,WAAW,EAClCP,EAAgBO,EAAQ,YAAY,EAC9B,MAAAC,EAAeD,EAAQ,aAAeA,EAAQ,aAC9CE,EAAeF,EAAQ,YAAcA,EAAQ,YAEnDL,EAAaM,CAAY,EACzBJ,EAAaK,CAAY,CAAA,CAC7B,EACD,CAACd,CAAG,CAAC,EAED,CAAC,UAAAM,EAAW,UAAAE,CAAS,CAChC"}