{"version":3,"file":"index.mjs","names":[],"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"],"mappings":";;;AAGA,MAAM,eAAe;CAAE,OAAO;CAAG,QAAQ;CAAG;AAE5C,MAAM,aAAa,eAA2B,SAAkB;CAC9D,MAAM,oBAAoB,SAAS,eAAe,QAAQ,EAAE;CAC5D,MAAM,oBAAoB,SAAS,KAAK,GAAG,oBAAoB;CAE/D,OAAO,iBAAiB,UAAU,kBAAkB;CAEpD,aAAa;EACX,OAAO,oBAAoB,UAAU,kBAAkB;;;AAI3D,MAAM,oBAAoB;CACxB,OAAO,KAAK,UAAU;EACpB,OAAO,OAAO;EACd,QAAQ,OAAO;EAChB,CAAC;;AAGJ,MAAM,0BAA0B;CAC9B,OAAO,KAAK,UAAU,aAAa;;;;;;;;;;;;;;;;AAiBrC,SAAgB,cAAc,cAG5B;CACA,MAAM,aAAa,sBAChB,kBAAkB,UAAU,eAAe,aAAa,EACzD,aACA,kBACD;CAED,OAAO,KAAK,MAAM,WAAW"}