@oneplatformdev/hooks 0.1.0-8 → 0.1.0-81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +284 -0
- package/package.json +14 -19
- package/{dist/useEventListener → useEventListener}/useEventListener.d.ts +4 -2
- package/{dist/useEventListener → useEventListener}/useEventListener.d.ts.map +1 -1
- package/{dist/useHover → useHover}/useHover.d.ts +1 -1
- package/{dist/useHover → useHover}/useHover.d.ts.map +1 -1
- package/{dist/useOnClickOutside → useOnClickOutside}/useOnClickOutside.d.ts +1 -1
- package/{dist/useOnClickOutside → useOnClickOutside}/useOnClickOutside.d.ts.map +1 -1
- package/{dist/useResizeObserver → useResizeObserver}/useResizeObserver.d.ts +1 -1
- package/{dist/useResizeObserver → useResizeObserver}/useResizeObserver.d.ts.map +1 -1
- package/.babelrc +0 -12
- package/dist/CHANGELOG.md +0 -15
- package/dist/LICENSE +0 -21
- package/dist/README.md +0 -7
- package/dist/package.json +0 -68
- package/node_modules/@types/lodash.debounce/LICENSE +0 -21
- package/node_modules/@types/lodash.debounce/README.md +0 -23
- package/node_modules/@types/lodash.debounce/index.d.ts +0 -4
- package/node_modules/@types/lodash.debounce/package.json +0 -32
- package/node_modules/@types/react/LICENSE +0 -21
- package/node_modules/@types/react/README.md +0 -15
- package/node_modules/@types/react/canary.d.ts +0 -35
- package/node_modules/@types/react/compiler-runtime.d.ts +0 -4
- package/node_modules/@types/react/experimental.d.ts +0 -125
- package/node_modules/@types/react/global.d.ts +0 -160
- package/node_modules/@types/react/index.d.ts +0 -4206
- package/node_modules/@types/react/jsx-dev-runtime.d.ts +0 -45
- package/node_modules/@types/react/jsx-runtime.d.ts +0 -36
- package/node_modules/@types/react/package.json +0 -210
- package/node_modules/@types/react/ts5.0/canary.d.ts +0 -35
- package/node_modules/@types/react/ts5.0/experimental.d.ts +0 -125
- package/node_modules/@types/react/ts5.0/global.d.ts +0 -160
- package/node_modules/@types/react/ts5.0/index.d.ts +0 -4193
- package/node_modules/@types/react/ts5.0/jsx-dev-runtime.d.ts +0 -44
- package/node_modules/@types/react/ts5.0/jsx-runtime.d.ts +0 -35
- package/node_modules/@types/react/ts5.0/v18/global.d.ts +0 -160
- package/node_modules/@types/react/ts5.0/v18/index.d.ts +0 -4543
- package/node_modules/@types/react/ts5.0/v18/jsx-dev-runtime.d.ts +0 -45
- package/node_modules/@types/react/ts5.0/v18/jsx-runtime.d.ts +0 -36
- package/node_modules/@types/react/ts5.0/v18/ts5.0/global.d.ts +0 -160
- package/node_modules/@types/react/ts5.0/v18/ts5.0/index.d.ts +0 -4530
- package/node_modules/@types/react/ts5.0/v18/ts5.0/jsx-dev-runtime.d.ts +0 -44
- package/node_modules/@types/react/ts5.0/v18/ts5.0/jsx-runtime.d.ts +0 -35
- package/src/index.ts +0 -36
- package/src/useBoolean/index.ts +0 -1
- package/src/useBoolean/useBoolean.ts +0 -50
- package/src/useClickAnyWhere/index.ts +0 -1
- package/src/useClickAnyWhere/useClickAnyWhere.ts +0 -22
- package/src/useCopyToClipboard/index.ts +0 -1
- package/src/useCopyToClipboard/useCopyToClipboard.ts +0 -58
- package/src/useCountdown/index.ts +0 -1
- package/src/useCountdown/useCountdown.ts +0 -102
- package/src/useCounter/index.ts +0 -1
- package/src/useCounter/useCounter.ts +0 -52
- package/src/useDarkMode/index.ts +0 -1
- package/src/useDarkMode/useDarkMode.ts +0 -92
- package/src/useDebounceCallback/index.ts +0 -2
- package/src/useDebounceCallback/useDebounceCallback.ts +0 -115
- package/src/useDebounceValue/index.ts +0 -1
- package/src/useDebounceValue/useDebounceValue.ts +0 -67
- package/src/useDocumentTitle/index.ts +0 -1
- package/src/useDocumentTitle/useDocumentTitle.ts +0 -43
- package/src/useEventCallback/index.ts +0 -1
- package/src/useEventCallback/useEventCallback.ts +0 -40
- package/src/useEventListener/index.ts +0 -1
- package/src/useEventListener/useEventListener.ts +0 -121
- package/src/useHover/index.ts +0 -1
- package/src/useHover/useHover.ts +0 -37
- package/src/useIntersectionObserver/index.ts +0 -1
- package/src/useIntersectionObserver/useIntersectionObserver.ts +0 -186
- package/src/useInterval/index.ts +0 -1
- package/src/useInterval/useInterval.ts +0 -43
- package/src/useIsClient/index.ts +0 -1
- package/src/useIsClient/useIsClient.ts +0 -22
- package/src/useIsMobile/index.ts +0 -2
- package/src/useIsMobile/types.ts +0 -3
- package/src/useIsMobile/useIsMobile.tsx +0 -23
- package/src/useIsMounted/index.ts +0 -1
- package/src/useIsMounted/useIsMounted.ts +0 -15
- package/src/useIsomorphicLayoutEffect/index.ts +0 -1
- package/src/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.ts +0 -17
- package/src/useLocalStorage/index.ts +0 -1
- package/src/useLocalStorage/useLocalStorage.ts +0 -191
- package/src/useLockBody/index.ts +0 -1
- package/src/useLockBody/useLockBody.tsx +0 -12
- package/src/useMap/index.ts +0 -1
- package/src/useMap/useMap.ts +0 -83
- package/src/useMediaQuery/index.ts +0 -1
- package/src/useMediaQuery/useMediaQuery.ts +0 -83
- package/src/useOnClickOutside/index.ts +0 -1
- package/src/useOnClickOutside/useOnClickOutside.ts +0 -61
- package/src/useQueryString/index.ts +0 -1
- package/src/useQueryString/useQueryString.ts +0 -26
- package/src/useReadLocalStorage/index.ts +0 -1
- package/src/useReadLocalStorage/useReadLocalStorage.ts +0 -122
- package/src/useResizeObserver/index.ts +0 -1
- package/src/useResizeObserver/useResizeObserver.ts +0 -131
- package/src/useScreen/index.ts +0 -1
- package/src/useScreen/useScreen.ts +0 -106
- package/src/useScript/index.ts +0 -1
- package/src/useScript/useScript.ts +0 -142
- package/src/useScrollLock/index.ts +0 -1
- package/src/useScrollLock/useScrollLock.ts +0 -141
- package/src/useSessionStorage/index.ts +0 -1
- package/src/useSessionStorage/useSessionStorage.ts +0 -191
- package/src/useStep/index.ts +0 -1
- package/src/useStep/useStep.ts +0 -83
- package/src/useTernaryDarkMode/index.ts +0 -1
- package/src/useTernaryDarkMode/useTernaryDarkMode.ts +0 -81
- package/src/useTimeout/index.ts +0 -1
- package/src/useTimeout/useTimeout.ts +0 -44
- package/src/useToggle/index.ts +0 -1
- package/src/useToggle/useToggle.ts +0 -30
- package/src/useUnmount/index.ts +0 -1
- package/src/useUnmount/useUnmount.ts +0 -26
- package/src/useWindowSize/index.ts +0 -1
- package/src/useWindowSize/useWindowSize.ts +0 -100
- package/tsconfig.json +0 -10
- package/tsconfig.lib.json +0 -33
- package/vite.config.ts +0 -62
- /package/{dist/index.d.ts → index.d.ts} +0 -0
- /package/{dist/index.d.ts.map → index.d.ts.map} +0 -0
- /package/{dist/index.js → index.js} +0 -0
- /package/{dist/useBoolean → useBoolean}/index.d.ts +0 -0
- /package/{dist/useBoolean → useBoolean}/index.d.ts.map +0 -0
- /package/{dist/useBoolean → useBoolean}/index.js +0 -0
- /package/{dist/useBoolean → useBoolean}/useBoolean.d.ts +0 -0
- /package/{dist/useBoolean → useBoolean}/useBoolean.d.ts.map +0 -0
- /package/{dist/useBoolean → useBoolean}/useBoolean.js +0 -0
- /package/{dist/useClickAnyWhere → useClickAnyWhere}/index.d.ts +0 -0
- /package/{dist/useClickAnyWhere → useClickAnyWhere}/index.d.ts.map +0 -0
- /package/{dist/useClickAnyWhere → useClickAnyWhere}/index.js +0 -0
- /package/{dist/useClickAnyWhere → useClickAnyWhere}/useClickAnyWhere.d.ts +0 -0
- /package/{dist/useClickAnyWhere → useClickAnyWhere}/useClickAnyWhere.d.ts.map +0 -0
- /package/{dist/useClickAnyWhere → useClickAnyWhere}/useClickAnyWhere.js +0 -0
- /package/{dist/useCopyToClipboard → useCopyToClipboard}/index.d.ts +0 -0
- /package/{dist/useCopyToClipboard → useCopyToClipboard}/index.d.ts.map +0 -0
- /package/{dist/useCopyToClipboard → useCopyToClipboard}/index.js +0 -0
- /package/{dist/useCopyToClipboard → useCopyToClipboard}/useCopyToClipboard.d.ts +0 -0
- /package/{dist/useCopyToClipboard → useCopyToClipboard}/useCopyToClipboard.d.ts.map +0 -0
- /package/{dist/useCopyToClipboard → useCopyToClipboard}/useCopyToClipboard.js +0 -0
- /package/{dist/useCountdown → useCountdown}/index.d.ts +0 -0
- /package/{dist/useCountdown → useCountdown}/index.d.ts.map +0 -0
- /package/{dist/useCountdown → useCountdown}/index.js +0 -0
- /package/{dist/useCountdown → useCountdown}/useCountdown.d.ts +0 -0
- /package/{dist/useCountdown → useCountdown}/useCountdown.d.ts.map +0 -0
- /package/{dist/useCountdown → useCountdown}/useCountdown.js +0 -0
- /package/{dist/useCounter → useCounter}/index.d.ts +0 -0
- /package/{dist/useCounter → useCounter}/index.d.ts.map +0 -0
- /package/{dist/useCounter → useCounter}/index.js +0 -0
- /package/{dist/useCounter → useCounter}/useCounter.d.ts +0 -0
- /package/{dist/useCounter → useCounter}/useCounter.d.ts.map +0 -0
- /package/{dist/useCounter → useCounter}/useCounter.js +0 -0
- /package/{dist/useDarkMode → useDarkMode}/index.d.ts +0 -0
- /package/{dist/useDarkMode → useDarkMode}/index.d.ts.map +0 -0
- /package/{dist/useDarkMode → useDarkMode}/index.js +0 -0
- /package/{dist/useDarkMode → useDarkMode}/useDarkMode.d.ts +0 -0
- /package/{dist/useDarkMode → useDarkMode}/useDarkMode.d.ts.map +0 -0
- /package/{dist/useDarkMode → useDarkMode}/useDarkMode.js +0 -0
- /package/{dist/useDebounceCallback → useDebounceCallback}/index.d.ts +0 -0
- /package/{dist/useDebounceCallback → useDebounceCallback}/index.d.ts.map +0 -0
- /package/{dist/useDebounceCallback → useDebounceCallback}/index.js +0 -0
- /package/{dist/useDebounceCallback → useDebounceCallback}/useDebounceCallback.d.ts +0 -0
- /package/{dist/useDebounceCallback → useDebounceCallback}/useDebounceCallback.d.ts.map +0 -0
- /package/{dist/useDebounceCallback → useDebounceCallback}/useDebounceCallback.js +0 -0
- /package/{dist/useDebounceValue → useDebounceValue}/index.d.ts +0 -0
- /package/{dist/useDebounceValue → useDebounceValue}/index.d.ts.map +0 -0
- /package/{dist/useDebounceValue → useDebounceValue}/index.js +0 -0
- /package/{dist/useDebounceValue → useDebounceValue}/useDebounceValue.d.ts +0 -0
- /package/{dist/useDebounceValue → useDebounceValue}/useDebounceValue.d.ts.map +0 -0
- /package/{dist/useDebounceValue → useDebounceValue}/useDebounceValue.js +0 -0
- /package/{dist/useDocumentTitle → useDocumentTitle}/index.d.ts +0 -0
- /package/{dist/useDocumentTitle → useDocumentTitle}/index.d.ts.map +0 -0
- /package/{dist/useDocumentTitle → useDocumentTitle}/index.js +0 -0
- /package/{dist/useDocumentTitle → useDocumentTitle}/useDocumentTitle.d.ts +0 -0
- /package/{dist/useDocumentTitle → useDocumentTitle}/useDocumentTitle.d.ts.map +0 -0
- /package/{dist/useDocumentTitle → useDocumentTitle}/useDocumentTitle.js +0 -0
- /package/{dist/useEventCallback → useEventCallback}/index.d.ts +0 -0
- /package/{dist/useEventCallback → useEventCallback}/index.d.ts.map +0 -0
- /package/{dist/useEventCallback → useEventCallback}/index.js +0 -0
- /package/{dist/useEventCallback → useEventCallback}/useEventCallback.d.ts +0 -0
- /package/{dist/useEventCallback → useEventCallback}/useEventCallback.d.ts.map +0 -0
- /package/{dist/useEventCallback → useEventCallback}/useEventCallback.js +0 -0
- /package/{dist/useEventListener → useEventListener}/index.d.ts +0 -0
- /package/{dist/useEventListener → useEventListener}/index.d.ts.map +0 -0
- /package/{dist/useEventListener → useEventListener}/index.js +0 -0
- /package/{dist/useEventListener → useEventListener}/useEventListener.js +0 -0
- /package/{dist/useHover → useHover}/index.d.ts +0 -0
- /package/{dist/useHover → useHover}/index.d.ts.map +0 -0
- /package/{dist/useHover → useHover}/index.js +0 -0
- /package/{dist/useHover → useHover}/useHover.js +0 -0
- /package/{dist/useIntersectionObserver → useIntersectionObserver}/index.d.ts +0 -0
- /package/{dist/useIntersectionObserver → useIntersectionObserver}/index.d.ts.map +0 -0
- /package/{dist/useIntersectionObserver → useIntersectionObserver}/index.js +0 -0
- /package/{dist/useIntersectionObserver → useIntersectionObserver}/useIntersectionObserver.d.ts +0 -0
- /package/{dist/useIntersectionObserver → useIntersectionObserver}/useIntersectionObserver.d.ts.map +0 -0
- /package/{dist/useIntersectionObserver → useIntersectionObserver}/useIntersectionObserver.js +0 -0
- /package/{dist/useInterval → useInterval}/index.d.ts +0 -0
- /package/{dist/useInterval → useInterval}/index.d.ts.map +0 -0
- /package/{dist/useInterval → useInterval}/index.js +0 -0
- /package/{dist/useInterval → useInterval}/useInterval.d.ts +0 -0
- /package/{dist/useInterval → useInterval}/useInterval.d.ts.map +0 -0
- /package/{dist/useInterval → useInterval}/useInterval.js +0 -0
- /package/{dist/useIsClient → useIsClient}/index.d.ts +0 -0
- /package/{dist/useIsClient → useIsClient}/index.d.ts.map +0 -0
- /package/{dist/useIsClient → useIsClient}/index.js +0 -0
- /package/{dist/useIsClient → useIsClient}/useIsClient.d.ts +0 -0
- /package/{dist/useIsClient → useIsClient}/useIsClient.d.ts.map +0 -0
- /package/{dist/useIsClient → useIsClient}/useIsClient.js +0 -0
- /package/{dist/useIsMobile → useIsMobile}/index.d.ts +0 -0
- /package/{dist/useIsMobile → useIsMobile}/index.d.ts.map +0 -0
- /package/{dist/useIsMobile → useIsMobile}/index.js +0 -0
- /package/{dist/useIsMobile → useIsMobile}/types.d.ts +0 -0
- /package/{dist/useIsMobile → useIsMobile}/types.d.ts.map +0 -0
- /package/{dist/useIsMobile → useIsMobile}/types.js +0 -0
- /package/{dist/useIsMobile → useIsMobile}/useIsMobile.d.ts +0 -0
- /package/{dist/useIsMobile → useIsMobile}/useIsMobile.d.ts.map +0 -0
- /package/{dist/useIsMobile → useIsMobile}/useIsMobile.js +0 -0
- /package/{dist/useIsMounted → useIsMounted}/index.d.ts +0 -0
- /package/{dist/useIsMounted → useIsMounted}/index.d.ts.map +0 -0
- /package/{dist/useIsMounted → useIsMounted}/index.js +0 -0
- /package/{dist/useIsMounted → useIsMounted}/useIsMounted.d.ts +0 -0
- /package/{dist/useIsMounted → useIsMounted}/useIsMounted.d.ts.map +0 -0
- /package/{dist/useIsMounted → useIsMounted}/useIsMounted.js +0 -0
- /package/{dist/useIsomorphicLayoutEffect → useIsomorphicLayoutEffect}/index.d.ts +0 -0
- /package/{dist/useIsomorphicLayoutEffect → useIsomorphicLayoutEffect}/index.d.ts.map +0 -0
- /package/{dist/useIsomorphicLayoutEffect → useIsomorphicLayoutEffect}/index.js +0 -0
- /package/{dist/useIsomorphicLayoutEffect → useIsomorphicLayoutEffect}/useIsomorphicLayoutEffect.d.ts +0 -0
- /package/{dist/useIsomorphicLayoutEffect → useIsomorphicLayoutEffect}/useIsomorphicLayoutEffect.d.ts.map +0 -0
- /package/{dist/useIsomorphicLayoutEffect → useIsomorphicLayoutEffect}/useIsomorphicLayoutEffect.js +0 -0
- /package/{dist/useLocalStorage → useLocalStorage}/index.d.ts +0 -0
- /package/{dist/useLocalStorage → useLocalStorage}/index.d.ts.map +0 -0
- /package/{dist/useLocalStorage → useLocalStorage}/index.js +0 -0
- /package/{dist/useLocalStorage → useLocalStorage}/useLocalStorage.d.ts +0 -0
- /package/{dist/useLocalStorage → useLocalStorage}/useLocalStorage.d.ts.map +0 -0
- /package/{dist/useLocalStorage → useLocalStorage}/useLocalStorage.js +0 -0
- /package/{dist/useLockBody → useLockBody}/index.d.ts +0 -0
- /package/{dist/useLockBody → useLockBody}/index.d.ts.map +0 -0
- /package/{dist/useLockBody → useLockBody}/index.js +0 -0
- /package/{dist/useLockBody → useLockBody}/useLockBody.d.ts +0 -0
- /package/{dist/useLockBody → useLockBody}/useLockBody.d.ts.map +0 -0
- /package/{dist/useLockBody → useLockBody}/useLockBody.js +0 -0
- /package/{dist/useMap → useMap}/index.d.ts +0 -0
- /package/{dist/useMap → useMap}/index.d.ts.map +0 -0
- /package/{dist/useMap → useMap}/index.js +0 -0
- /package/{dist/useMap → useMap}/useMap.d.ts +0 -0
- /package/{dist/useMap → useMap}/useMap.d.ts.map +0 -0
- /package/{dist/useMap → useMap}/useMap.js +0 -0
- /package/{dist/useMediaQuery → useMediaQuery}/index.d.ts +0 -0
- /package/{dist/useMediaQuery → useMediaQuery}/index.d.ts.map +0 -0
- /package/{dist/useMediaQuery → useMediaQuery}/index.js +0 -0
- /package/{dist/useMediaQuery → useMediaQuery}/useMediaQuery.d.ts +0 -0
- /package/{dist/useMediaQuery → useMediaQuery}/useMediaQuery.d.ts.map +0 -0
- /package/{dist/useMediaQuery → useMediaQuery}/useMediaQuery.js +0 -0
- /package/{dist/useOnClickOutside → useOnClickOutside}/index.d.ts +0 -0
- /package/{dist/useOnClickOutside → useOnClickOutside}/index.d.ts.map +0 -0
- /package/{dist/useOnClickOutside → useOnClickOutside}/index.js +0 -0
- /package/{dist/useOnClickOutside → useOnClickOutside}/useOnClickOutside.js +0 -0
- /package/{dist/useQueryString → useQueryString}/index.d.ts +0 -0
- /package/{dist/useQueryString → useQueryString}/index.d.ts.map +0 -0
- /package/{dist/useQueryString → useQueryString}/index.js +0 -0
- /package/{dist/useQueryString → useQueryString}/useQueryString.d.ts +0 -0
- /package/{dist/useQueryString → useQueryString}/useQueryString.d.ts.map +0 -0
- /package/{dist/useQueryString → useQueryString}/useQueryString.js +0 -0
- /package/{dist/useReadLocalStorage → useReadLocalStorage}/index.d.ts +0 -0
- /package/{dist/useReadLocalStorage → useReadLocalStorage}/index.d.ts.map +0 -0
- /package/{dist/useReadLocalStorage → useReadLocalStorage}/index.js +0 -0
- /package/{dist/useReadLocalStorage → useReadLocalStorage}/useReadLocalStorage.d.ts +0 -0
- /package/{dist/useReadLocalStorage → useReadLocalStorage}/useReadLocalStorage.d.ts.map +0 -0
- /package/{dist/useReadLocalStorage → useReadLocalStorage}/useReadLocalStorage.js +0 -0
- /package/{dist/useResizeObserver → useResizeObserver}/index.d.ts +0 -0
- /package/{dist/useResizeObserver → useResizeObserver}/index.d.ts.map +0 -0
- /package/{dist/useResizeObserver → useResizeObserver}/index.js +0 -0
- /package/{dist/useResizeObserver → useResizeObserver}/useResizeObserver.js +0 -0
- /package/{dist/useScreen → useScreen}/index.d.ts +0 -0
- /package/{dist/useScreen → useScreen}/index.d.ts.map +0 -0
- /package/{dist/useScreen → useScreen}/index.js +0 -0
- /package/{dist/useScreen → useScreen}/useScreen.d.ts +0 -0
- /package/{dist/useScreen → useScreen}/useScreen.d.ts.map +0 -0
- /package/{dist/useScreen → useScreen}/useScreen.js +0 -0
- /package/{dist/useScript → useScript}/index.d.ts +0 -0
- /package/{dist/useScript → useScript}/index.d.ts.map +0 -0
- /package/{dist/useScript → useScript}/index.js +0 -0
- /package/{dist/useScript → useScript}/useScript.d.ts +0 -0
- /package/{dist/useScript → useScript}/useScript.d.ts.map +0 -0
- /package/{dist/useScript → useScript}/useScript.js +0 -0
- /package/{dist/useScrollLock → useScrollLock}/index.d.ts +0 -0
- /package/{dist/useScrollLock → useScrollLock}/index.d.ts.map +0 -0
- /package/{dist/useScrollLock → useScrollLock}/index.js +0 -0
- /package/{dist/useScrollLock → useScrollLock}/useScrollLock.d.ts +0 -0
- /package/{dist/useScrollLock → useScrollLock}/useScrollLock.d.ts.map +0 -0
- /package/{dist/useScrollLock → useScrollLock}/useScrollLock.js +0 -0
- /package/{dist/useSessionStorage → useSessionStorage}/index.d.ts +0 -0
- /package/{dist/useSessionStorage → useSessionStorage}/index.d.ts.map +0 -0
- /package/{dist/useSessionStorage → useSessionStorage}/index.js +0 -0
- /package/{dist/useSessionStorage → useSessionStorage}/useSessionStorage.d.ts +0 -0
- /package/{dist/useSessionStorage → useSessionStorage}/useSessionStorage.d.ts.map +0 -0
- /package/{dist/useSessionStorage → useSessionStorage}/useSessionStorage.js +0 -0
- /package/{dist/useStep → useStep}/index.d.ts +0 -0
- /package/{dist/useStep → useStep}/index.d.ts.map +0 -0
- /package/{dist/useStep → useStep}/index.js +0 -0
- /package/{dist/useStep → useStep}/useStep.d.ts +0 -0
- /package/{dist/useStep → useStep}/useStep.d.ts.map +0 -0
- /package/{dist/useStep → useStep}/useStep.js +0 -0
- /package/{dist/useTernaryDarkMode → useTernaryDarkMode}/index.d.ts +0 -0
- /package/{dist/useTernaryDarkMode → useTernaryDarkMode}/index.d.ts.map +0 -0
- /package/{dist/useTernaryDarkMode → useTernaryDarkMode}/index.js +0 -0
- /package/{dist/useTernaryDarkMode → useTernaryDarkMode}/useTernaryDarkMode.d.ts +0 -0
- /package/{dist/useTernaryDarkMode → useTernaryDarkMode}/useTernaryDarkMode.d.ts.map +0 -0
- /package/{dist/useTernaryDarkMode → useTernaryDarkMode}/useTernaryDarkMode.js +0 -0
- /package/{dist/useTimeout → useTimeout}/index.d.ts +0 -0
- /package/{dist/useTimeout → useTimeout}/index.d.ts.map +0 -0
- /package/{dist/useTimeout → useTimeout}/index.js +0 -0
- /package/{dist/useTimeout → useTimeout}/useTimeout.d.ts +0 -0
- /package/{dist/useTimeout → useTimeout}/useTimeout.d.ts.map +0 -0
- /package/{dist/useTimeout → useTimeout}/useTimeout.js +0 -0
- /package/{dist/useToggle → useToggle}/index.d.ts +0 -0
- /package/{dist/useToggle → useToggle}/index.d.ts.map +0 -0
- /package/{dist/useToggle → useToggle}/index.js +0 -0
- /package/{dist/useToggle → useToggle}/useToggle.d.ts +0 -0
- /package/{dist/useToggle → useToggle}/useToggle.d.ts.map +0 -0
- /package/{dist/useToggle → useToggle}/useToggle.js +0 -0
- /package/{dist/useUnmount → useUnmount}/index.d.ts +0 -0
- /package/{dist/useUnmount → useUnmount}/index.d.ts.map +0 -0
- /package/{dist/useUnmount → useUnmount}/index.js +0 -0
- /package/{dist/useUnmount → useUnmount}/useUnmount.d.ts +0 -0
- /package/{dist/useUnmount → useUnmount}/useUnmount.d.ts.map +0 -0
- /package/{dist/useUnmount → useUnmount}/useUnmount.js +0 -0
- /package/{dist/useWindowSize → useWindowSize}/index.d.ts +0 -0
- /package/{dist/useWindowSize → useWindowSize}/index.d.ts.map +0 -0
- /package/{dist/useWindowSize → useWindowSize}/index.js +0 -0
- /package/{dist/useWindowSize → useWindowSize}/useWindowSize.d.ts +0 -0
- /package/{dist/useWindowSize → useWindowSize}/useWindowSize.d.ts.map +0 -0
- /package/{dist/useWindowSize → useWindowSize}/useWindowSize.js +0 -0
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import { useEffect, useRef, useState } from 'react'
|
|
2
|
-
|
|
3
|
-
import type { RefObject } from 'react'
|
|
4
|
-
|
|
5
|
-
import { useIsMounted } from '../useIsMounted'
|
|
6
|
-
|
|
7
|
-
/** The size of the observed element. */
|
|
8
|
-
type Size = {
|
|
9
|
-
/** The width of the observed element. */
|
|
10
|
-
width: number | undefined
|
|
11
|
-
/** The height of the observed element. */
|
|
12
|
-
height: number | undefined
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/** The options for the ResizeObserver. */
|
|
16
|
-
type UseResizeObserverOptions<T extends HTMLElement = HTMLElement> = {
|
|
17
|
-
/** The ref of the element to observe. */
|
|
18
|
-
ref: RefObject<T>
|
|
19
|
-
/**
|
|
20
|
-
* When using `onResize`, the hook doesn't re-render on element size changes; it delegates handling to the provided callback.
|
|
21
|
-
* @default undefined
|
|
22
|
-
*/
|
|
23
|
-
onResize?: (size: Size) => void
|
|
24
|
-
/**
|
|
25
|
-
* The box model to use for the ResizeObserver.
|
|
26
|
-
* @default 'content-box'
|
|
27
|
-
*/
|
|
28
|
-
box?: 'border-box' | 'content-box' | 'device-pixel-content-box'
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const initialSize: Size = {
|
|
32
|
-
width: undefined,
|
|
33
|
-
height: undefined,
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Custom hook that observes the size of an element using the [`ResizeObserver API`](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver).
|
|
38
|
-
* @template T - The type of the element to observe.
|
|
39
|
-
* @param {UseResizeObserverOptions<T>} options - The options for the ResizeObserver.
|
|
40
|
-
* @returns {Size} - The size of the observed element.
|
|
41
|
-
* @public
|
|
42
|
-
* @see [Documentation](https://usehooks-ts.com/react-hook/use-resize-observer)
|
|
43
|
-
* @example
|
|
44
|
-
* ```tsx
|
|
45
|
-
* const myRef = useRef(null);
|
|
46
|
-
* const { width = 0, height = 0 } = useResizeObserver({
|
|
47
|
-
* ref: myRef,
|
|
48
|
-
* box: 'content-box',
|
|
49
|
-
* });
|
|
50
|
-
*
|
|
51
|
-
* <div ref={myRef}>Hello, world!</div>
|
|
52
|
-
* ```
|
|
53
|
-
*/
|
|
54
|
-
export function useResizeObserver<T extends HTMLElement = HTMLElement>(
|
|
55
|
-
options: UseResizeObserverOptions<T>,
|
|
56
|
-
): Size {
|
|
57
|
-
const { ref, box = 'content-box' } = options
|
|
58
|
-
const [{ width, height }, setSize] = useState<Size>(initialSize)
|
|
59
|
-
const isMounted = useIsMounted()
|
|
60
|
-
const previousSize = useRef<Size>({ ...initialSize })
|
|
61
|
-
const onResize = useRef<((size: Size) => void) | undefined>(undefined)
|
|
62
|
-
onResize.current = options.onResize
|
|
63
|
-
|
|
64
|
-
useEffect(() => {
|
|
65
|
-
if (!ref.current) return
|
|
66
|
-
|
|
67
|
-
if (typeof window === 'undefined' || !('ResizeObserver' in window)) return
|
|
68
|
-
|
|
69
|
-
const observer = new ResizeObserver(([entry]) => {
|
|
70
|
-
const boxProp =
|
|
71
|
-
box === 'border-box'
|
|
72
|
-
? 'borderBoxSize'
|
|
73
|
-
: box === 'device-pixel-content-box'
|
|
74
|
-
? 'devicePixelContentBoxSize'
|
|
75
|
-
: 'contentBoxSize'
|
|
76
|
-
|
|
77
|
-
const newWidth = extractSize(entry, boxProp, 'inlineSize')
|
|
78
|
-
const newHeight = extractSize(entry, boxProp, 'blockSize')
|
|
79
|
-
|
|
80
|
-
const hasChanged =
|
|
81
|
-
previousSize.current.width !== newWidth ||
|
|
82
|
-
previousSize.current.height !== newHeight
|
|
83
|
-
|
|
84
|
-
if (hasChanged) {
|
|
85
|
-
const newSize: Size = { width: newWidth, height: newHeight }
|
|
86
|
-
previousSize.current.width = newWidth
|
|
87
|
-
previousSize.current.height = newHeight
|
|
88
|
-
|
|
89
|
-
if (onResize.current) {
|
|
90
|
-
onResize.current(newSize)
|
|
91
|
-
} else {
|
|
92
|
-
if (isMounted()) {
|
|
93
|
-
setSize(newSize)
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
observer.observe(ref.current, { box })
|
|
100
|
-
|
|
101
|
-
return () => {
|
|
102
|
-
observer.disconnect()
|
|
103
|
-
}
|
|
104
|
-
}, [box, ref, isMounted])
|
|
105
|
-
|
|
106
|
-
return { width, height }
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/** @private */
|
|
110
|
-
type BoxSizesKey = keyof Pick<
|
|
111
|
-
ResizeObserverEntry,
|
|
112
|
-
'borderBoxSize' | 'contentBoxSize' | 'devicePixelContentBoxSize'
|
|
113
|
-
>
|
|
114
|
-
|
|
115
|
-
function extractSize(
|
|
116
|
-
entry: ResizeObserverEntry,
|
|
117
|
-
box: BoxSizesKey,
|
|
118
|
-
sizeType: keyof ResizeObserverSize,
|
|
119
|
-
): number | undefined {
|
|
120
|
-
if (!entry[box]) {
|
|
121
|
-
if (box === 'contentBoxSize') {
|
|
122
|
-
return entry.contentRect[sizeType === 'inlineSize' ? 'width' : 'height']
|
|
123
|
-
}
|
|
124
|
-
return undefined
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
return Array.isArray(entry[box])
|
|
128
|
-
? entry[box][0][sizeType]
|
|
129
|
-
: // @ts-ignore Support Firefox's non-standard behavior
|
|
130
|
-
(entry[box][sizeType] as number)
|
|
131
|
-
}
|
package/src/useScreen/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './useScreen'
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { useState } from 'react'
|
|
2
|
-
|
|
3
|
-
import { useDebounceCallback } from '../useDebounceCallback'
|
|
4
|
-
import { useEventListener } from '../useEventListener'
|
|
5
|
-
import { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect'
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* The hooks options.
|
|
9
|
-
* @template InitializeWithValue - If `true` (default), the hook will initialize reading the screen dimensions. In SSR, you should set it to `false`, returning `undefined` initially.
|
|
10
|
-
*/
|
|
11
|
-
type UseScreenOptions<InitializeWithValue extends boolean | undefined> = {
|
|
12
|
-
/**
|
|
13
|
-
* If `true` (default), the hook will initialize reading the screen dimensions. In SSR, you should set it to `false`, returning `undefined` initially.
|
|
14
|
-
* @default true
|
|
15
|
-
*/
|
|
16
|
-
initializeWithValue: InitializeWithValue
|
|
17
|
-
/**
|
|
18
|
-
* The delay in milliseconds before the state is updated (disabled by default for retro-compatibility).
|
|
19
|
-
* @default undefined
|
|
20
|
-
*/
|
|
21
|
-
debounceDelay?: number
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const IS_SERVER = typeof window === 'undefined'
|
|
25
|
-
|
|
26
|
-
// SSR version of useScreen.
|
|
27
|
-
export function useScreen(options: UseScreenOptions<false>): Screen | undefined
|
|
28
|
-
// CSR version of useScreen.
|
|
29
|
-
export function useScreen(options?: Partial<UseScreenOptions<true>>): Screen
|
|
30
|
-
/**
|
|
31
|
-
* Custom hook that tracks the [`screen`](https://developer.mozilla.org/en-US/docs/Web/API/Window/screen) dimensions and properties.
|
|
32
|
-
* @param {?UseScreenOptions} [options] - The options for customizing the behavior of the hook (optional).
|
|
33
|
-
* @returns {Screen | undefined} The current `Screen` object representing the screen dimensions and properties, or `undefined` if not available.
|
|
34
|
-
* @public
|
|
35
|
-
* @see [Documentation](https://usehooks-ts.com/react-hook/use-screen)
|
|
36
|
-
* @example
|
|
37
|
-
* ```tsx
|
|
38
|
-
* const currentScreen = useScreen();
|
|
39
|
-
* // Access properties of the current screen, such as width and height.
|
|
40
|
-
* ```
|
|
41
|
-
*/
|
|
42
|
-
export function useScreen(
|
|
43
|
-
options: Partial<UseScreenOptions<boolean>> = {},
|
|
44
|
-
): Screen | undefined {
|
|
45
|
-
let { initializeWithValue = true } = options
|
|
46
|
-
if (IS_SERVER) {
|
|
47
|
-
initializeWithValue = false
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const readScreen = () => {
|
|
51
|
-
if (IS_SERVER) {
|
|
52
|
-
return undefined
|
|
53
|
-
}
|
|
54
|
-
return window.screen
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
const [screen, setScreen] = useState<Screen | undefined>(() => {
|
|
58
|
-
if (initializeWithValue) {
|
|
59
|
-
return readScreen()
|
|
60
|
-
}
|
|
61
|
-
return undefined
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
const debouncedSetScreen = useDebounceCallback(
|
|
65
|
-
setScreen,
|
|
66
|
-
options.debounceDelay,
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
// Handles the resize event of the window.
|
|
70
|
-
function handleSize() {
|
|
71
|
-
const newScreen = readScreen()
|
|
72
|
-
const setSize = options.debounceDelay ? debouncedSetScreen : setScreen
|
|
73
|
-
|
|
74
|
-
if (newScreen) {
|
|
75
|
-
// Create a shallow clone to trigger a re-render (#280).
|
|
76
|
-
const {
|
|
77
|
-
width,
|
|
78
|
-
height,
|
|
79
|
-
availHeight,
|
|
80
|
-
availWidth,
|
|
81
|
-
colorDepth,
|
|
82
|
-
orientation,
|
|
83
|
-
pixelDepth,
|
|
84
|
-
} = newScreen
|
|
85
|
-
|
|
86
|
-
setSize({
|
|
87
|
-
width,
|
|
88
|
-
height,
|
|
89
|
-
availHeight,
|
|
90
|
-
availWidth,
|
|
91
|
-
colorDepth,
|
|
92
|
-
orientation,
|
|
93
|
-
pixelDepth,
|
|
94
|
-
})
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
useEventListener('resize', handleSize)
|
|
99
|
-
|
|
100
|
-
// Set size at the first client-side load
|
|
101
|
-
useIsomorphicLayoutEffect(() => {
|
|
102
|
-
handleSize()
|
|
103
|
-
}, [])
|
|
104
|
-
|
|
105
|
-
return screen
|
|
106
|
-
}
|
package/src/useScript/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './useScript'
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { useEffect, useState } from 'react'
|
|
2
|
-
|
|
3
|
-
/** Script loading status. */
|
|
4
|
-
type UseScriptStatus = 'idle' | 'loading' | 'ready' | 'error'
|
|
5
|
-
|
|
6
|
-
/** Hook options. */
|
|
7
|
-
type UseScriptOptions = {
|
|
8
|
-
/** If `true`, prevents the script from being loaded (optional). */
|
|
9
|
-
shouldPreventLoad?: boolean
|
|
10
|
-
/** If `true`, removes the script from the DOM when the component unmounts (optional). */
|
|
11
|
-
removeOnUnmount?: boolean
|
|
12
|
-
/** Script's `id` (optional). */
|
|
13
|
-
id?: string
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// Cached script statuses
|
|
17
|
-
const cachedScriptStatuses = new Map<string, UseScriptStatus | undefined>()
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Gets the script element with the specified source URL.
|
|
21
|
-
* @param {string} src - The source URL of the script to get.
|
|
22
|
-
* @returns {{ node: HTMLScriptElement | null, status: UseScriptStatus | undefined }} The script element and its loading status.
|
|
23
|
-
* @public
|
|
24
|
-
* @example
|
|
25
|
-
* ```tsx
|
|
26
|
-
* const script = getScriptNode(src);
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
function getScriptNode(src: string) {
|
|
30
|
-
const node: HTMLScriptElement | null = document.querySelector(
|
|
31
|
-
`script[src="${src}"]`,
|
|
32
|
-
)
|
|
33
|
-
const status = node?.getAttribute('data-status') as
|
|
34
|
-
| UseScriptStatus
|
|
35
|
-
| undefined
|
|
36
|
-
|
|
37
|
-
return {
|
|
38
|
-
node,
|
|
39
|
-
status,
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Custom hook that dynamically loads scripts and tracking their loading status.
|
|
45
|
-
* @param {string | null} src - The source URL of the script to load. Set to `null` or omit to prevent loading (optional).
|
|
46
|
-
* @param {UseScriptOptions} [options] - Additional options for controlling script loading (optional).
|
|
47
|
-
* @returns {UseScriptStatus} The status of the script loading, which can be one of 'idle', 'loading', 'ready', or 'error'.
|
|
48
|
-
* @see [Documentation](https://usehooks-ts.com/react-hook/use-script)
|
|
49
|
-
* @example
|
|
50
|
-
* const scriptStatus = useScript('https://example.com/script.js', { removeOnUnmount: true });
|
|
51
|
-
* // Access the status of the script loading (e.g., 'loading', 'ready', 'error').
|
|
52
|
-
*/
|
|
53
|
-
export function useScript(
|
|
54
|
-
src: string | null,
|
|
55
|
-
options?: UseScriptOptions,
|
|
56
|
-
): UseScriptStatus {
|
|
57
|
-
const [status, setStatus] = useState<UseScriptStatus>(() => {
|
|
58
|
-
if (!src || options?.shouldPreventLoad) {
|
|
59
|
-
return 'idle'
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
if (typeof window === 'undefined') {
|
|
63
|
-
// SSR Handling - always return 'loading'
|
|
64
|
-
return 'loading'
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return cachedScriptStatuses.get(src) ?? 'loading'
|
|
68
|
-
})
|
|
69
|
-
|
|
70
|
-
useEffect(() => {
|
|
71
|
-
if (!src || options?.shouldPreventLoad) {
|
|
72
|
-
return
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const cachedScriptStatus = cachedScriptStatuses.get(src)
|
|
76
|
-
if (cachedScriptStatus === 'ready' || cachedScriptStatus === 'error') {
|
|
77
|
-
// If the script is already cached, set its status immediately
|
|
78
|
-
setStatus(cachedScriptStatus)
|
|
79
|
-
return
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// Fetch existing script element by src
|
|
83
|
-
// It may have been added by another instance of this hook
|
|
84
|
-
const script = getScriptNode(src)
|
|
85
|
-
let scriptNode = script.node
|
|
86
|
-
|
|
87
|
-
if (!scriptNode) {
|
|
88
|
-
// Create script element and add it to document body
|
|
89
|
-
scriptNode = document.createElement('script')
|
|
90
|
-
scriptNode.src = src
|
|
91
|
-
scriptNode.async = true
|
|
92
|
-
if (options?.id) {
|
|
93
|
-
scriptNode.id = options.id
|
|
94
|
-
}
|
|
95
|
-
scriptNode.setAttribute('data-status', 'loading')
|
|
96
|
-
document.body.appendChild(scriptNode)
|
|
97
|
-
|
|
98
|
-
// Store status in attribute on script
|
|
99
|
-
// This can be read by other instances of this hook
|
|
100
|
-
const setAttributeFromEvent = (event: Event) => {
|
|
101
|
-
const scriptStatus: UseScriptStatus =
|
|
102
|
-
event.type === 'load' ? 'ready' : 'error'
|
|
103
|
-
|
|
104
|
-
scriptNode?.setAttribute('data-status', scriptStatus)
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
scriptNode.addEventListener('load', setAttributeFromEvent)
|
|
108
|
-
scriptNode.addEventListener('error', setAttributeFromEvent)
|
|
109
|
-
} else {
|
|
110
|
-
// Grab existing script status from attribute and set to state.
|
|
111
|
-
setStatus(script.status ?? cachedScriptStatus ?? 'loading')
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// Script event handler to update status in state
|
|
115
|
-
// Note: Even if the script already exists we still need to add
|
|
116
|
-
// event handlers to update the state for *this* hook instance.
|
|
117
|
-
const setStateFromEvent = (event: Event) => {
|
|
118
|
-
const newStatus = event.type === 'load' ? 'ready' : 'error'
|
|
119
|
-
setStatus(newStatus)
|
|
120
|
-
cachedScriptStatuses.set(src, newStatus)
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// Add event listeners
|
|
124
|
-
scriptNode.addEventListener('load', setStateFromEvent)
|
|
125
|
-
scriptNode.addEventListener('error', setStateFromEvent)
|
|
126
|
-
|
|
127
|
-
// Remove event listeners on cleanup
|
|
128
|
-
return () => {
|
|
129
|
-
if (scriptNode) {
|
|
130
|
-
scriptNode.removeEventListener('load', setStateFromEvent)
|
|
131
|
-
scriptNode.removeEventListener('error', setStateFromEvent)
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
if (scriptNode && options?.removeOnUnmount) {
|
|
135
|
-
scriptNode.remove()
|
|
136
|
-
cachedScriptStatuses.delete(src)
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}, [src, options?.shouldPreventLoad, options?.removeOnUnmount, options?.id])
|
|
140
|
-
|
|
141
|
-
return status
|
|
142
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './useScrollLock'
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { useRef, useState } from 'react'
|
|
2
|
-
|
|
3
|
-
import { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect'
|
|
4
|
-
|
|
5
|
-
/** Hook options. */
|
|
6
|
-
type UseScrollLockOptions = {
|
|
7
|
-
/**
|
|
8
|
-
* Whether to lock the scroll initially.
|
|
9
|
-
* @default true
|
|
10
|
-
*/
|
|
11
|
-
autoLock?: boolean
|
|
12
|
-
/**
|
|
13
|
-
* The target element to lock the scroll (default is the body element).
|
|
14
|
-
* @default document.body
|
|
15
|
-
*/
|
|
16
|
-
lockTarget?: HTMLElement | string
|
|
17
|
-
/**
|
|
18
|
-
* Whether to prevent width reflow when locking the scroll.
|
|
19
|
-
* @default true
|
|
20
|
-
*/
|
|
21
|
-
widthReflow?: boolean
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/** Hook return type. */
|
|
25
|
-
type UseScrollLockReturn = {
|
|
26
|
-
/** Whether the scroll is locked. */
|
|
27
|
-
isLocked: boolean
|
|
28
|
-
/** Lock the scroll. */
|
|
29
|
-
lock: () => void
|
|
30
|
-
/** Unlock the scroll. */
|
|
31
|
-
unlock: () => void
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
type OriginalStyle = {
|
|
35
|
-
overflow: CSSStyleDeclaration['overflow']
|
|
36
|
-
paddingRight: CSSStyleDeclaration['paddingRight']
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const IS_SERVER = typeof window === 'undefined'
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* A custom hook that locks and unlocks scroll.
|
|
43
|
-
* @param {UseScrollLockOptions} [options] - Options to configure the hook, by default it will lock the scroll automatically.
|
|
44
|
-
* @returns {UseScrollLockReturn} - An object containing the lock and unlock functions.
|
|
45
|
-
* @public
|
|
46
|
-
* @see [Documentation](https://usehooks-ts.com/react-hook/use-scroll-lock)
|
|
47
|
-
* @example
|
|
48
|
-
* ```tsx
|
|
49
|
-
* // Lock the scroll when the modal is mounted, and unlock it when it's unmounted
|
|
50
|
-
* useScrollLock()
|
|
51
|
-
* ```
|
|
52
|
-
* @example
|
|
53
|
-
* ```tsx
|
|
54
|
-
* // Manually lock and unlock the scroll
|
|
55
|
-
* const { lock, unlock } = useScrollLock({ autoLock: false })
|
|
56
|
-
*
|
|
57
|
-
* return (
|
|
58
|
-
* <div>
|
|
59
|
-
* <button onClick={lock}>Lock</button>
|
|
60
|
-
* <button onClick={unlock}>Unlock</button>
|
|
61
|
-
* </div>
|
|
62
|
-
* )
|
|
63
|
-
* ```
|
|
64
|
-
*/
|
|
65
|
-
export function useScrollLock(
|
|
66
|
-
options: UseScrollLockOptions = {},
|
|
67
|
-
): UseScrollLockReturn {
|
|
68
|
-
const { autoLock = true, lockTarget, widthReflow = true } = options
|
|
69
|
-
const [isLocked, setIsLocked] = useState(false)
|
|
70
|
-
const target = useRef<HTMLElement | null>(null)
|
|
71
|
-
const originalStyle = useRef<OriginalStyle | null>(null)
|
|
72
|
-
|
|
73
|
-
const lock = () => {
|
|
74
|
-
if (target.current) {
|
|
75
|
-
const { overflow, paddingRight } = target.current.style
|
|
76
|
-
|
|
77
|
-
// Save the original styles
|
|
78
|
-
originalStyle.current = { overflow, paddingRight }
|
|
79
|
-
|
|
80
|
-
// Prevent width reflow
|
|
81
|
-
if (widthReflow) {
|
|
82
|
-
// Use window inner width if body is the target as global scrollbar isn't part of the document
|
|
83
|
-
const offsetWidth =
|
|
84
|
-
target.current === document.body
|
|
85
|
-
? window.innerWidth
|
|
86
|
-
: target.current.offsetWidth
|
|
87
|
-
// Get current computed padding right in pixels
|
|
88
|
-
const currentPaddingRight =
|
|
89
|
-
parseInt(window.getComputedStyle(target.current).paddingRight, 10) ||
|
|
90
|
-
0
|
|
91
|
-
|
|
92
|
-
const scrollbarWidth = offsetWidth - target.current.scrollWidth
|
|
93
|
-
target.current.style.paddingRight = `${scrollbarWidth + currentPaddingRight}px`
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// Lock the scroll
|
|
97
|
-
target.current.style.overflow = 'hidden'
|
|
98
|
-
|
|
99
|
-
setIsLocked(true)
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const unlock = () => {
|
|
104
|
-
if (target.current && originalStyle.current) {
|
|
105
|
-
target.current.style.overflow = originalStyle.current.overflow
|
|
106
|
-
|
|
107
|
-
// Only reset padding right if we changed it
|
|
108
|
-
if (widthReflow) {
|
|
109
|
-
target.current.style.paddingRight = originalStyle.current.paddingRight
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
setIsLocked(false)
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
useIsomorphicLayoutEffect(() => {
|
|
117
|
-
if (IS_SERVER) return
|
|
118
|
-
|
|
119
|
-
if (lockTarget) {
|
|
120
|
-
target.current =
|
|
121
|
-
typeof lockTarget === 'string'
|
|
122
|
-
? document.querySelector(lockTarget)
|
|
123
|
-
: lockTarget
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (!target.current) {
|
|
127
|
-
target.current = document.body
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
if (autoLock) {
|
|
131
|
-
lock()
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
return () => {
|
|
135
|
-
unlock()
|
|
136
|
-
}
|
|
137
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
138
|
-
}, [autoLock, lockTarget, widthReflow])
|
|
139
|
-
|
|
140
|
-
return { isLocked, lock, unlock }
|
|
141
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './useSessionStorage'
|