@modern-kit/react
Version:
1 lines • 2.19 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../../../src/hooks/useScrollLock/index.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\n\ninterface UseScrollLockProps {\n autoLock?: boolean;\n}\n\nexport function useScrollLock<T extends HTMLElement>({\n autoLock = true,\n}: UseScrollLockProps = {}) {\n const ref = useRef<T | null>(null);\n const originalOverflow = useRef<CSSStyleDeclaration['overflow'] | null>(null);\n\n const lock = useCallback(() => {\n const targetElement = ref.current as T;\n\n originalOverflow.current = window.getComputedStyle(targetElement).overflow;\n targetElement.style.overflow = 'hidden';\n }, []);\n\n const unlock = useCallback(() => {\n if (!originalOverflow.current) return;\n\n const targetElement = ref.current as T;\n targetElement.style.overflow = originalOverflow.current;\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n if (!ref.current) {\n ref.current = document.body as T;\n }\n\n if (autoLock) {\n lock();\n }\n\n return () => unlock();\n }, [autoLock, lock, unlock]);\n\n return { ref, lock, unlock };\n}\n"],"names":["useRef","useCallback","useIsomorphicLayoutEffect"],"mappings":";;;;;;AAOO,SAAS,aAAA,CAAqC;AAAA,EACnD,QAAA,GAAW;AACb,CAAA,GAAwB,EAAC,EAAG;AAC1B,EAAA,MAAM,GAAA,GAAMA,aAAiB,IAAI,CAAA;AACjC,EAAA,MAAM,gBAAA,GAAmBA,aAA+C,IAAI,CAAA;AAE5E,EAAA,MAAM,IAAA,GAAOC,kBAAY,MAAM;AAC7B,IAAA,MAAM,gBAAgB,GAAA,CAAI,OAAA;AAE1B,IAAA,gBAAA,CAAiB,OAAA,GAAU,MAAA,CAAO,gBAAA,CAAiB,aAAa,CAAA,CAAE,QAAA;AAClE,IAAA,aAAA,CAAc,MAAM,QAAA,GAAW,QAAA;AAAA,EACjC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,MAAA,GAASA,kBAAY,MAAM;AAC/B,IAAA,IAAI,CAAC,iBAAiB,OAAA,EAAS;AAE/B,IAAA,MAAM,gBAAgB,GAAA,CAAI,OAAA;AAC1B,IAAA,aAAA,CAAc,KAAA,CAAM,WAAW,gBAAA,CAAiB,OAAA;AAAA,EAClD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAC,wDAAA,CAA0B,MAAM;AAC9B,IAAA,IAAI,CAAC,IAAI,OAAA,EAAS;AAChB,MAAA,GAAA,CAAI,UAAU,QAAA,CAAS,IAAA;AAAA,IACzB;AAEA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAA,EAAK;AAAA,IACP;AAEA,IAAA,OAAO,MAAM,MAAA,EAAO;AAAA,EACtB,CAAA,EAAG,CAAC,QAAA,EAAU,IAAA,EAAM,MAAM,CAAC,CAAA;AAE3B,EAAA,OAAO,EAAE,GAAA,EAAK,IAAA,EAAM,MAAA,EAAO;AAC7B;;;;"}