UNPKG

@modern-kit/react

Version:
1 lines 2.89 kB
{"version":3,"file":"index.cjs","sources":["../../../src/hooks/useWindowSize/index.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\nimport { isNumber, debounce } from '@modern-kit/utils';\n\nconst DEFAULT_SIZE = { width: 0, height: 0 }; // SSR 환경에서 사용할 기본 크기\n\nconst subscribe = (onStoreChange: () => void, wait?: number) => {\n const debouncedCallback = debounce(onStoreChange, wait ?? 0);\n const handleStoreChange = isNumber(wait) ? debouncedCallback : onStoreChange;\n\n window.addEventListener('resize', handleStoreChange);\n\n return () => {\n window.removeEventListener('resize', handleStoreChange);\n };\n};\n\nconst getSnapshot = () => {\n return JSON.stringify({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n};\n\nconst getServerSnapshot = () => {\n return JSON.stringify(DEFAULT_SIZE);\n};\n\n/**\n * @description 현재 브라우저 창의 너비와 높이 정보를 추적하고, 반환하는 커스텀 훅입니다.\n *\n * SSR 환경에서 hydration 불일치를 방지하며, resize 이벤트가 발생할 때 불 필요한 호출을 방지하기위한 `debounce` 기능을 제공합니다.\n *\n * 디바운스 대기 시간(debounceWait)을 설정하면 debounce로 동작하며, 설정하지 않으면 즉시 업데이트됩니다.\n *\n * @param {number} debounceWait - 이벤트를 디바운싱 대기 시간(ms), 값이 없다면 디바운스가 적용되지 않습니다.\n * @returns {WindowSize} 현재 브라우저 창의 `width`와 `height`를 포함한 객체를 반환합니다.\n *\n * @example const { width, height } = useWindowSize();\n *\n * @example const { width, height } = useWindowSize(300);\n */\nexport function useWindowSize(debounceWait?: number): {\n width: number;\n height: number;\n} {\n const windowSize = useSyncExternalStore(\n (onStoreChange) => subscribe(onStoreChange, debounceWait),\n getSnapshot,\n getServerSnapshot\n );\n\n return JSON.parse(windowSize);\n}\n"],"names":["debounce","isNumber","useSyncExternalStore"],"mappings":";;;;;AAGA,MAAM,YAAA,GAAe,EAAE,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAE;AAE3C,MAAM,SAAA,GAAY,CAAC,aAAA,EAA2B,IAAA,KAAkB;AAC9D,EAAA,MAAM,iBAAA,GAAoBA,cAAA,CAAS,aAAA,EAAe,IAAA,IAAQ,CAAC,CAAA;AAC3D,EAAA,MAAM,iBAAA,GAAoBC,cAAA,CAAS,IAAI,CAAA,GAAI,iBAAA,GAAoB,aAAA;AAE/D,EAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,iBAAiB,CAAA;AAEnD,EAAA,OAAO,MAAM;AACX,IAAA,MAAA,CAAO,mBAAA,CAAoB,UAAU,iBAAiB,CAAA;AAAA,EACxD,CAAA;AACF,CAAA;AAEA,MAAM,cAAc,MAAM;AACxB,EAAA,OAAO,KAAK,SAAA,CAAU;AAAA,IACpB,OAAO,MAAA,CAAO,UAAA;AAAA,IACd,QAAQ,MAAA,CAAO;AAAA,GAChB,CAAA;AACH,CAAA;AAEA,MAAM,oBAAoB,MAAM;AAC9B,EAAA,OAAO,IAAA,CAAK,UAAU,YAAY,CAAA;AACpC,CAAA;AAgBO,SAAS,cAAc,YAAA,EAG5B;AACA,EAAA,MAAM,UAAA,GAAaC,0BAAA;AAAA,IACjB,CAAC,aAAA,KAAkB,SAAA,CAAU,aAAA,EAAe,YAAY,CAAA;AAAA,IACxD,WAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO,IAAA,CAAK,MAAM,UAAU,CAAA;AAC9B;;;;"}