@usels/core 0.0.1-beta.3
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/README.md +21 -0
- package/dist/browser/useEventListener/index.d.mts +56 -0
- package/dist/browser/useEventListener/index.d.ts +56 -0
- package/dist/browser/useEventListener/index.js +112 -0
- package/dist/browser/useEventListener/index.js.map +1 -0
- package/dist/browser/useEventListener/index.mjs +88 -0
- package/dist/browser/useEventListener/index.mjs.map +1 -0
- package/dist/browser/useMediaQuery/demo.d.mts +5 -0
- package/dist/browser/useMediaQuery/demo.d.ts +5 -0
- package/dist/browser/useMediaQuery/demo.js +82 -0
- package/dist/browser/useMediaQuery/demo.js.map +1 -0
- package/dist/browser/useMediaQuery/demo.mjs +62 -0
- package/dist/browser/useMediaQuery/demo.mjs.map +1 -0
- package/dist/browser/useMediaQuery/index.d.mts +11 -0
- package/dist/browser/useMediaQuery/index.d.ts +11 -0
- package/dist/browser/useMediaQuery/index.js +89 -0
- package/dist/browser/useMediaQuery/index.js.map +1 -0
- package/dist/browser/useMediaQuery/index.mjs +64 -0
- package/dist/browser/useMediaQuery/index.mjs.map +1 -0
- package/dist/components/Auto/index.d.mts +33 -0
- package/dist/components/Auto/index.d.ts +33 -0
- package/dist/components/Auto/index.js +66 -0
- package/dist/components/Auto/index.js.map +1 -0
- package/dist/components/Auto/index.mjs +34 -0
- package/dist/components/Auto/index.mjs.map +1 -0
- package/dist/elements/useDocumentVisibility/demo.d.mts +5 -0
- package/dist/elements/useDocumentVisibility/demo.d.ts +5 -0
- package/dist/elements/useDocumentVisibility/demo.js +130 -0
- package/dist/elements/useDocumentVisibility/demo.js.map +1 -0
- package/dist/elements/useDocumentVisibility/demo.mjs +114 -0
- package/dist/elements/useDocumentVisibility/demo.mjs.map +1 -0
- package/dist/elements/useDocumentVisibility/index.d.mts +5 -0
- package/dist/elements/useDocumentVisibility/index.d.ts +5 -0
- package/dist/elements/useDocumentVisibility/index.js +45 -0
- package/dist/elements/useDocumentVisibility/index.js.map +1 -0
- package/dist/elements/useDocumentVisibility/index.mjs +21 -0
- package/dist/elements/useDocumentVisibility/index.mjs.map +1 -0
- package/dist/elements/useElementBounding/demo.d.mts +5 -0
- package/dist/elements/useElementBounding/demo.d.ts +5 -0
- package/dist/elements/useElementBounding/demo.js +86 -0
- package/dist/elements/useElementBounding/demo.js.map +1 -0
- package/dist/elements/useElementBounding/demo.mjs +66 -0
- package/dist/elements/useElementBounding/demo.mjs.map +1 -0
- package/dist/elements/useElementBounding/index.d.mts +46 -0
- package/dist/elements/useElementBounding/index.d.ts +46 -0
- package/dist/elements/useElementBounding/index.js +122 -0
- package/dist/elements/useElementBounding/index.js.map +1 -0
- package/dist/elements/useElementBounding/index.mjs +98 -0
- package/dist/elements/useElementBounding/index.mjs.map +1 -0
- package/dist/elements/useElementSize/demo.d.mts +5 -0
- package/dist/elements/useElementSize/demo.d.ts +5 -0
- package/dist/elements/useElementSize/demo.js +82 -0
- package/dist/elements/useElementSize/demo.js.map +1 -0
- package/dist/elements/useElementSize/demo.mjs +62 -0
- package/dist/elements/useElementSize/demo.mjs.map +1 -0
- package/dist/elements/useElementSize/index.d.mts +34 -0
- package/dist/elements/useElementSize/index.d.ts +34 -0
- package/dist/elements/useElementSize/index.js +85 -0
- package/dist/elements/useElementSize/index.js.map +1 -0
- package/dist/elements/useElementSize/index.mjs +61 -0
- package/dist/elements/useElementSize/index.mjs.map +1 -0
- package/dist/elements/useElementVisibility/demo.d.mts +5 -0
- package/dist/elements/useElementVisibility/demo.d.ts +5 -0
- package/dist/elements/useElementVisibility/demo.js +110 -0
- package/dist/elements/useElementVisibility/demo.js.map +1 -0
- package/dist/elements/useElementVisibility/demo.mjs +90 -0
- package/dist/elements/useElementVisibility/demo.mjs.map +1 -0
- package/dist/elements/useElementVisibility/index.d.mts +43 -0
- package/dist/elements/useElementVisibility/index.d.ts +43 -0
- package/dist/elements/useElementVisibility/index.js +58 -0
- package/dist/elements/useElementVisibility/index.js.map +1 -0
- package/dist/elements/useElementVisibility/index.mjs +34 -0
- package/dist/elements/useElementVisibility/index.mjs.map +1 -0
- package/dist/elements/useIntersectionObserver/demo.d.mts +5 -0
- package/dist/elements/useIntersectionObserver/demo.d.ts +5 -0
- package/dist/elements/useIntersectionObserver/demo.js +173 -0
- package/dist/elements/useIntersectionObserver/demo.js.map +1 -0
- package/dist/elements/useIntersectionObserver/demo.mjs +153 -0
- package/dist/elements/useIntersectionObserver/demo.mjs.map +1 -0
- package/dist/elements/useIntersectionObserver/index.d.mts +47 -0
- package/dist/elements/useIntersectionObserver/index.d.ts +47 -0
- package/dist/elements/useIntersectionObserver/index.js +111 -0
- package/dist/elements/useIntersectionObserver/index.js.map +1 -0
- package/dist/elements/useIntersectionObserver/index.mjs +87 -0
- package/dist/elements/useIntersectionObserver/index.mjs.map +1 -0
- package/dist/elements/useMouseInElement/demo.d.mts +5 -0
- package/dist/elements/useMouseInElement/demo.d.ts +5 -0
- package/dist/elements/useMouseInElement/demo.js +103 -0
- package/dist/elements/useMouseInElement/demo.js.map +1 -0
- package/dist/elements/useMouseInElement/demo.mjs +83 -0
- package/dist/elements/useMouseInElement/demo.mjs.map +1 -0
- package/dist/elements/useMouseInElement/index.d.mts +56 -0
- package/dist/elements/useMouseInElement/index.d.ts +56 -0
- package/dist/elements/useMouseInElement/index.js +148 -0
- package/dist/elements/useMouseInElement/index.js.map +1 -0
- package/dist/elements/useMouseInElement/index.mjs +124 -0
- package/dist/elements/useMouseInElement/index.mjs.map +1 -0
- package/dist/elements/useMutationObserver/demo.d.mts +5 -0
- package/dist/elements/useMutationObserver/demo.d.ts +5 -0
- package/dist/elements/useMutationObserver/demo.js +240 -0
- package/dist/elements/useMutationObserver/demo.js.map +1 -0
- package/dist/elements/useMutationObserver/demo.mjs +220 -0
- package/dist/elements/useMutationObserver/demo.mjs.map +1 -0
- package/dist/elements/useMutationObserver/index.d.mts +15 -0
- package/dist/elements/useMutationObserver/index.d.ts +15 -0
- package/dist/elements/useMutationObserver/index.js +69 -0
- package/dist/elements/useMutationObserver/index.js.map +1 -0
- package/dist/elements/useMutationObserver/index.mjs +45 -0
- package/dist/elements/useMutationObserver/index.mjs.map +1 -0
- package/dist/elements/useParentElement/demo.d.mts +5 -0
- package/dist/elements/useParentElement/demo.d.ts +5 -0
- package/dist/elements/useParentElement/demo.js +132 -0
- package/dist/elements/useParentElement/demo.js.map +1 -0
- package/dist/elements/useParentElement/demo.mjs +112 -0
- package/dist/elements/useParentElement/demo.mjs.map +1 -0
- package/dist/elements/useParentElement/index.d.mts +7 -0
- package/dist/elements/useParentElement/index.d.ts +7 -0
- package/dist/elements/useParentElement/index.js +47 -0
- package/dist/elements/useParentElement/index.js.map +1 -0
- package/dist/elements/useParentElement/index.mjs +23 -0
- package/dist/elements/useParentElement/index.mjs.map +1 -0
- package/dist/elements/useRef$/index.js +89 -0
- package/dist/elements/useRef$/index.js.map +1 -0
- package/dist/elements/useRef$/index.mjs +62 -0
- package/dist/elements/useRef$/index.mjs.map +1 -0
- package/dist/elements/useRef_/index.d.mts +60 -0
- package/dist/elements/useRef_/index.d.ts +60 -0
- package/dist/elements/useResizeObserver/demo.d.mts +5 -0
- package/dist/elements/useResizeObserver/demo.d.ts +5 -0
- package/dist/elements/useResizeObserver/demo.js +90 -0
- package/dist/elements/useResizeObserver/demo.js.map +1 -0
- package/dist/elements/useResizeObserver/demo.mjs +70 -0
- package/dist/elements/useResizeObserver/demo.mjs.map +1 -0
- package/dist/elements/useResizeObserver/index.d.mts +36 -0
- package/dist/elements/useResizeObserver/index.d.ts +36 -0
- package/dist/elements/useResizeObserver/index.js +74 -0
- package/dist/elements/useResizeObserver/index.js.map +1 -0
- package/dist/elements/useResizeObserver/index.mjs +49 -0
- package/dist/elements/useResizeObserver/index.mjs.map +1 -0
- package/dist/elements/useWindowFocus/demo.d.mts +5 -0
- package/dist/elements/useWindowFocus/demo.d.ts +5 -0
- package/dist/elements/useWindowFocus/demo.js +100 -0
- package/dist/elements/useWindowFocus/demo.js.map +1 -0
- package/dist/elements/useWindowFocus/demo.mjs +80 -0
- package/dist/elements/useWindowFocus/demo.mjs.map +1 -0
- package/dist/elements/useWindowFocus/index.d.mts +5 -0
- package/dist/elements/useWindowFocus/index.d.ts +5 -0
- package/dist/elements/useWindowFocus/index.js +42 -0
- package/dist/elements/useWindowFocus/index.js.map +1 -0
- package/dist/elements/useWindowFocus/index.mjs +18 -0
- package/dist/elements/useWindowFocus/index.mjs.map +1 -0
- package/dist/elements/useWindowSize/demo.d.mts +5 -0
- package/dist/elements/useWindowSize/demo.d.ts +5 -0
- package/dist/elements/useWindowSize/demo.js +78 -0
- package/dist/elements/useWindowSize/demo.js.map +1 -0
- package/dist/elements/useWindowSize/demo.mjs +58 -0
- package/dist/elements/useWindowSize/demo.mjs.map +1 -0
- package/dist/elements/useWindowSize/index.d.mts +17 -0
- package/dist/elements/useWindowSize/index.d.ts +17 -0
- package/dist/elements/useWindowSize/index.js +96 -0
- package/dist/elements/useWindowSize/index.js.map +1 -0
- package/dist/elements/useWindowSize/index.mjs +76 -0
- package/dist/elements/useWindowSize/index.mjs.map +1 -0
- package/dist/function/get/index.d.mts +45 -0
- package/dist/function/get/index.d.ts +45 -0
- package/dist/function/get/index.js +39 -0
- package/dist/function/get/index.js.map +1 -0
- package/dist/function/get/index.mjs +15 -0
- package/dist/function/get/index.mjs.map +1 -0
- package/dist/function/peek/index.d.mts +46 -0
- package/dist/function/peek/index.d.ts +46 -0
- package/dist/function/peek/index.js +39 -0
- package/dist/function/peek/index.js.map +1 -0
- package/dist/function/peek/index.mjs +15 -0
- package/dist/function/peek/index.mjs.map +1 -0
- package/dist/function/useMayObservableOptions/index.d.mts +59 -0
- package/dist/function/useMayObservableOptions/index.d.ts +59 -0
- package/dist/function/useMayObservableOptions/index.js +109 -0
- package/dist/function/useMayObservableOptions/index.js.map +1 -0
- package/dist/function/useMayObservableOptions/index.mjs +88 -0
- package/dist/function/useMayObservableOptions/index.mjs.map +1 -0
- package/dist/function/useSupported/index.d.mts +6 -0
- package/dist/function/useSupported/index.d.ts +6 -0
- package/dist/function/useSupported/index.js +37 -0
- package/dist/function/useSupported/index.js.map +1 -0
- package/dist/function/useSupported/index.mjs +13 -0
- package/dist/function/useSupported/index.mjs.map +1 -0
- package/dist/function/useWhenMounted/index.d.mts +6 -0
- package/dist/function/useWhenMounted/index.d.ts +6 -0
- package/dist/function/useWhenMounted/index.js +37 -0
- package/dist/function/useWhenMounted/index.js.map +1 -0
- package/dist/function/useWhenMounted/index.mjs +13 -0
- package/dist/function/useWhenMounted/index.mjs.map +1 -0
- package/dist/index.d.mts +24 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +22 -0
- package/dist/index.mjs.map +1 -0
- package/dist/sensors/useScroll/demo.d.mts +5 -0
- package/dist/sensors/useScroll/demo.d.ts +5 -0
- package/dist/sensors/useScroll/demo.js +121 -0
- package/dist/sensors/useScroll/demo.js.map +1 -0
- package/dist/sensors/useScroll/demo.mjs +101 -0
- package/dist/sensors/useScroll/demo.mjs.map +1 -0
- package/dist/sensors/useScroll/index.d.mts +42 -0
- package/dist/sensors/useScroll/index.d.ts +42 -0
- package/dist/sensors/useScroll/index.js +149 -0
- package/dist/sensors/useScroll/index.js.map +1 -0
- package/dist/sensors/useScroll/index.mjs +125 -0
- package/dist/sensors/useScroll/index.mjs.map +1 -0
- package/dist/sensors/useWindowScroll/demo.d.mts +5 -0
- package/dist/sensors/useWindowScroll/demo.d.ts +5 -0
- package/dist/sensors/useWindowScroll/demo.js +84 -0
- package/dist/sensors/useWindowScroll/demo.js.map +1 -0
- package/dist/sensors/useWindowScroll/demo.mjs +64 -0
- package/dist/sensors/useWindowScroll/demo.mjs.map +1 -0
- package/dist/sensors/useWindowScroll/index.d.mts +9 -0
- package/dist/sensors/useWindowScroll/index.d.ts +9 -0
- package/dist/sensors/useWindowScroll/index.js +36 -0
- package/dist/sensors/useWindowScroll/index.js.map +1 -0
- package/dist/sensors/useWindowScroll/index.mjs +12 -0
- package/dist/sensors/useWindowScroll/index.mjs.map +1 -0
- package/dist/shared/configurable.d.mts +21 -0
- package/dist/shared/configurable.d.ts +21 -0
- package/dist/shared/configurable.js +39 -0
- package/dist/shared/configurable.js.map +1 -0
- package/dist/shared/configurable.mjs +12 -0
- package/dist/shared/configurable.mjs.map +1 -0
- package/dist/shared/index.d.mts +4 -0
- package/dist/shared/index.d.ts +4 -0
- package/dist/shared/index.js +31 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/index.mjs +7 -0
- package/dist/shared/index.mjs.map +1 -0
- package/dist/shared/normalizeTargets/index.d.mts +21 -0
- package/dist/shared/normalizeTargets/index.d.ts +21 -0
- package/dist/shared/normalizeTargets/index.js +36 -0
- package/dist/shared/normalizeTargets/index.js.map +1 -0
- package/dist/shared/normalizeTargets/index.mjs +12 -0
- package/dist/shared/normalizeTargets/index.mjs.map +1 -0
- package/dist/shared/utils.d.mts +15 -0
- package/dist/shared/utils.d.ts +15 -0
- package/dist/shared/utils.js +87 -0
- package/dist/shared/utils.js.map +1 -0
- package/dist/shared/utils.mjs +52 -0
- package/dist/shared/utils.mjs.map +1 -0
- package/dist/types.d.mts +52 -0
- package/dist/types.d.ts +52 -0
- package/dist/types.js +17 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +1 -0
- package/dist/types.mjs.map +1 -0
- package/package.json +54 -0
- package/src/browser/useEventListener/index.md +109 -0
- package/src/browser/useEventListener/index.spec.ts +611 -0
- package/src/browser/useEventListener/index.ts +242 -0
- package/src/browser/useMediaQuery/demo.tsx +58 -0
- package/src/browser/useMediaQuery/index.md +40 -0
- package/src/browser/useMediaQuery/index.spec.ts +267 -0
- package/src/browser/useMediaQuery/index.ts +96 -0
- package/src/components/Auto/index.tsx +65 -0
- package/src/elements/useDocumentVisibility/demo.tsx +111 -0
- package/src/elements/useDocumentVisibility/index.md +51 -0
- package/src/elements/useDocumentVisibility/index.spec.ts +114 -0
- package/src/elements/useDocumentVisibility/index.ts +26 -0
- package/src/elements/useElementBounding/demo.tsx +63 -0
- package/src/elements/useElementBounding/index.md +59 -0
- package/src/elements/useElementBounding/index.ts +159 -0
- package/src/elements/useElementSize/demo.tsx +48 -0
- package/src/elements/useElementSize/index.md +60 -0
- package/src/elements/useElementSize/index.spec.ts +295 -0
- package/src/elements/useElementSize/index.ts +100 -0
- package/src/elements/useElementVisibility/deep-observable-pattern.spec.ts +453 -0
- package/src/elements/useElementVisibility/demo.tsx +97 -0
- package/src/elements/useElementVisibility/index.md +98 -0
- package/src/elements/useElementVisibility/index.spec.ts +227 -0
- package/src/elements/useElementVisibility/index.ts +78 -0
- package/src/elements/useIntersectionObserver/demo.tsx +180 -0
- package/src/elements/useIntersectionObserver/index.md +99 -0
- package/src/elements/useIntersectionObserver/index.spec.ts +482 -0
- package/src/elements/useIntersectionObserver/index.ts +149 -0
- package/src/elements/useMouseInElement/demo.tsx +79 -0
- package/src/elements/useMouseInElement/index.md +71 -0
- package/src/elements/useMouseInElement/index.spec.ts +398 -0
- package/src/elements/useMouseInElement/index.ts +209 -0
- package/src/elements/useMutationObserver/demo.tsx +270 -0
- package/src/elements/useMutationObserver/index.md +99 -0
- package/src/elements/useMutationObserver/index.spec.ts +421 -0
- package/src/elements/useMutationObserver/index.ts +66 -0
- package/src/elements/useParentElement/demo.tsx +120 -0
- package/src/elements/useParentElement/index.md +67 -0
- package/src/elements/useParentElement/index.spec.ts +208 -0
- package/src/elements/useParentElement/index.ts +35 -0
- package/src/elements/useRef$/index.md +62 -0
- package/src/elements/useRef$/index.spec.ts +205 -0
- package/src/elements/useRef$/index.ts +137 -0
- package/src/elements/useRef$/useImperativeHandle.spec.ts +339 -0
- package/src/elements/useResizeObserver/demo.tsx +56 -0
- package/src/elements/useResizeObserver/index.md +51 -0
- package/src/elements/useResizeObserver/index.spec.ts +312 -0
- package/src/elements/useResizeObserver/index.ts +106 -0
- package/src/elements/useWindowFocus/demo.tsx +71 -0
- package/src/elements/useWindowFocus/index.md +35 -0
- package/src/elements/useWindowFocus/index.spec.ts +103 -0
- package/src/elements/useWindowFocus/index.ts +21 -0
- package/src/elements/useWindowSize/demo.tsx +46 -0
- package/src/elements/useWindowSize/index.md +50 -0
- package/src/elements/useWindowSize/index.spec.ts +310 -0
- package/src/elements/useWindowSize/index.ts +107 -0
- package/src/function/get/index.md +25 -0
- package/src/function/get/index.spec.ts +87 -0
- package/src/function/get/index.ts +70 -0
- package/src/function/peek/index.spec.ts +97 -0
- package/src/function/peek/index.ts +69 -0
- package/src/function/useMayObservableOptions/index.spec.ts +521 -0
- package/src/function/useMayObservableOptions/index.ts +173 -0
- package/src/function/useSupported/index.md +38 -0
- package/src/function/useSupported/index.spec.ts +116 -0
- package/src/function/useSupported/index.ts +14 -0
- package/src/function/useWhenMounted/index.md +25 -0
- package/src/function/useWhenMounted/index.spec.ts +120 -0
- package/src/function/useWhenMounted/index.ts +16 -0
- package/src/index.ts +25 -0
- package/src/sensors/useScroll/demo.tsx +98 -0
- package/src/sensors/useScroll/index.md +112 -0
- package/src/sensors/useScroll/index.spec.ts +678 -0
- package/src/sensors/useScroll/index.ts +201 -0
- package/src/sensors/useWindowScroll/demo.tsx +69 -0
- package/src/sensors/useWindowScroll/index.md +88 -0
- package/src/sensors/useWindowScroll/index.spec.ts +69 -0
- package/src/sensors/useWindowScroll/index.ts +11 -0
- package/src/shared/configurable.ts +35 -0
- package/src/shared/index.ts +4 -0
- package/src/shared/normalizeTargets/index.spec.ts +76 -0
- package/src/shared/normalizeTargets/index.ts +27 -0
- package/src/shared/utils.ts +67 -0
- package/src/types.ts +56 -0
- package/tsconfig.json +9 -0
- package/tsup.config.ts +10 -0
- package/vitest.config.ts +22 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export { AnyFn, Arrayable, Awaitable, DeepMaybeObservable, Fn, MaybeObservable, Pausable, Stoppable, TimerHandle } from './types.js';
|
|
2
|
+
export { get } from './function/get/index.js';
|
|
3
|
+
export { peek } from './function/peek/index.js';
|
|
4
|
+
export { UseSupportedReturn, useSupported } from './function/useSupported/index.js';
|
|
5
|
+
export { UseWhenMountedReturn, useWhenMounted } from './function/useWhenMounted/index.js';
|
|
6
|
+
export { MaybeElement, Ref$, getElement, isRef$, peekElement, useRef$ } from './elements/useRef_/index.js';
|
|
7
|
+
export { UseResizeObserverOptions, UseResizeObserverReturn, useResizeObserver } from './elements/useResizeObserver/index.js';
|
|
8
|
+
export { UseElementSizeOptions, UseElementSizeReturn, useElementSize } from './elements/useElementSize/index.js';
|
|
9
|
+
export { UseElementBoundingOptions, UseElementBoundingReturn, useElementBounding } from './elements/useElementBounding/index.js';
|
|
10
|
+
export { UseMutationObserverOptions, UseMutationObserverReturn, useMutationObserver } from './elements/useMutationObserver/index.js';
|
|
11
|
+
export { UseIntersectionObserverOptions, UseIntersectionObserverReturn, useIntersectionObserver } from './elements/useIntersectionObserver/index.js';
|
|
12
|
+
export { UseElementVisibilityOptions, useElementVisibility } from './elements/useElementVisibility/index.js';
|
|
13
|
+
export { useDocumentVisibility } from './elements/useDocumentVisibility/index.js';
|
|
14
|
+
export { useWindowFocus } from './elements/useWindowFocus/index.js';
|
|
15
|
+
export { UseWindowSizeOptions, UseWindowSizeReturn, useWindowSize } from './elements/useWindowSize/index.js';
|
|
16
|
+
export { useParentElement } from './elements/useParentElement/index.js';
|
|
17
|
+
export { UseMouseInElementOptions, UseMouseInElementReturn, useMouseInElement } from './elements/useMouseInElement/index.js';
|
|
18
|
+
export { ArrivedState, ScrollDirections, UseScrollOptions, UseScrollReturn, useScroll } from './sensors/useScroll/index.js';
|
|
19
|
+
export { useWindowScroll } from './sensors/useWindowScroll/index.js';
|
|
20
|
+
export { GeneralEventListener, useEventListener } from './browser/useEventListener/index.js';
|
|
21
|
+
export { UseMediaQueryOptions, UseMediaQueryReturn, evaluateSSRQuery, useMediaQuery } from './browser/useMediaQuery/index.js';
|
|
22
|
+
export { normalizeTargets } from './shared/normalizeTargets/index.js';
|
|
23
|
+
import '@legendapp/state';
|
|
24
|
+
import 'react';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
15
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
|
+
var index_exports = {};
|
|
17
|
+
module.exports = __toCommonJS(index_exports);
|
|
18
|
+
__reExport(index_exports, require("./types"), module.exports);
|
|
19
|
+
__reExport(index_exports, require("./function/get"), module.exports);
|
|
20
|
+
__reExport(index_exports, require("./function/peek"), module.exports);
|
|
21
|
+
__reExport(index_exports, require("./function/useSupported"), module.exports);
|
|
22
|
+
__reExport(index_exports, require("./function/useWhenMounted"), module.exports);
|
|
23
|
+
__reExport(index_exports, require("./elements/useRef$"), module.exports);
|
|
24
|
+
__reExport(index_exports, require("./elements/useResizeObserver"), module.exports);
|
|
25
|
+
__reExport(index_exports, require("./elements/useElementSize"), module.exports);
|
|
26
|
+
__reExport(index_exports, require("./elements/useElementBounding"), module.exports);
|
|
27
|
+
__reExport(index_exports, require("./elements/useMutationObserver"), module.exports);
|
|
28
|
+
__reExport(index_exports, require("./elements/useIntersectionObserver"), module.exports);
|
|
29
|
+
__reExport(index_exports, require("./elements/useElementVisibility"), module.exports);
|
|
30
|
+
__reExport(index_exports, require("./elements/useDocumentVisibility"), module.exports);
|
|
31
|
+
__reExport(index_exports, require("./elements/useWindowFocus"), module.exports);
|
|
32
|
+
__reExport(index_exports, require("./elements/useWindowSize"), module.exports);
|
|
33
|
+
__reExport(index_exports, require("./elements/useParentElement"), module.exports);
|
|
34
|
+
__reExport(index_exports, require("./elements/useMouseInElement"), module.exports);
|
|
35
|
+
__reExport(index_exports, require("./sensors/useScroll"), module.exports);
|
|
36
|
+
__reExport(index_exports, require("./sensors/useWindowScroll"), module.exports);
|
|
37
|
+
__reExport(index_exports, require("./browser/useEventListener"), module.exports);
|
|
38
|
+
__reExport(index_exports, require("./browser/useMediaQuery"), module.exports);
|
|
39
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
40
|
+
0 && (module.exports = {
|
|
41
|
+
...require("./types"),
|
|
42
|
+
...require("./function/get"),
|
|
43
|
+
...require("./function/peek"),
|
|
44
|
+
...require("./function/useSupported"),
|
|
45
|
+
...require("./function/useWhenMounted"),
|
|
46
|
+
...require("./elements/useRef$"),
|
|
47
|
+
...require("./elements/useResizeObserver"),
|
|
48
|
+
...require("./elements/useElementSize"),
|
|
49
|
+
...require("./elements/useElementBounding"),
|
|
50
|
+
...require("./elements/useMutationObserver"),
|
|
51
|
+
...require("./elements/useIntersectionObserver"),
|
|
52
|
+
...require("./elements/useElementVisibility"),
|
|
53
|
+
...require("./elements/useDocumentVisibility"),
|
|
54
|
+
...require("./elements/useWindowFocus"),
|
|
55
|
+
...require("./elements/useWindowSize"),
|
|
56
|
+
...require("./elements/useParentElement"),
|
|
57
|
+
...require("./elements/useMouseInElement"),
|
|
58
|
+
...require("./sensors/useScroll"),
|
|
59
|
+
...require("./sensors/useWindowScroll"),
|
|
60
|
+
...require("./browser/useEventListener"),
|
|
61
|
+
...require("./browser/useMediaQuery")
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from \"./types\";\n\nexport * from \"./function/get\";\nexport * from \"./function/peek\";\nexport * from \"./function/useSupported\";\nexport * from \"./function/useWhenMounted\";\n\nexport * from \"./elements/useRef$\";\nexport * from \"./elements/useResizeObserver\";\nexport * from \"./elements/useElementSize\";\nexport * from \"./elements/useElementBounding\";\nexport * from \"./elements/useMutationObserver\";\nexport * from \"./elements/useIntersectionObserver\";\nexport * from \"./elements/useElementVisibility\";\nexport * from \"./elements/useDocumentVisibility\";\nexport * from \"./elements/useWindowFocus\";\nexport * from \"./elements/useWindowSize\";\nexport * from \"./elements/useParentElement\";\nexport * from \"./elements/useMouseInElement\";\n\nexport * from \"./sensors/useScroll\";\nexport * from \"./sensors/useWindowScroll\";\n\nexport * from \"./browser/useEventListener\";\nexport * from \"./browser/useMediaQuery\";\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,oBAAd;AAEA,0BAAc,2BAFd;AAGA,0BAAc,4BAHd;AAIA,0BAAc,oCAJd;AAKA,0BAAc,sCALd;AAOA,0BAAc,+BAPd;AAQA,0BAAc,yCARd;AASA,0BAAc,sCATd;AAUA,0BAAc,0CAVd;AAWA,0BAAc,2CAXd;AAYA,0BAAc,+CAZd;AAaA,0BAAc,4CAbd;AAcA,0BAAc,6CAdd;AAeA,0BAAc,sCAfd;AAgBA,0BAAc,qCAhBd;AAiBA,0BAAc,wCAjBd;AAkBA,0BAAc,yCAlBd;AAoBA,0BAAc,gCApBd;AAqBA,0BAAc,sCArBd;AAuBA,0BAAc,uCAvBd;AAwBA,0BAAc,oCAxBd;","names":[]}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export * from "./types";
|
|
2
|
+
export * from "./function/get";
|
|
3
|
+
export * from "./function/peek";
|
|
4
|
+
export * from "./function/useSupported";
|
|
5
|
+
export * from "./function/useWhenMounted";
|
|
6
|
+
export * from "./elements/useRef$";
|
|
7
|
+
export * from "./elements/useResizeObserver";
|
|
8
|
+
export * from "./elements/useElementSize";
|
|
9
|
+
export * from "./elements/useElementBounding";
|
|
10
|
+
export * from "./elements/useMutationObserver";
|
|
11
|
+
export * from "./elements/useIntersectionObserver";
|
|
12
|
+
export * from "./elements/useElementVisibility";
|
|
13
|
+
export * from "./elements/useDocumentVisibility";
|
|
14
|
+
export * from "./elements/useWindowFocus";
|
|
15
|
+
export * from "./elements/useWindowSize";
|
|
16
|
+
export * from "./elements/useParentElement";
|
|
17
|
+
export * from "./elements/useMouseInElement";
|
|
18
|
+
export * from "./sensors/useScroll";
|
|
19
|
+
export * from "./sensors/useWindowScroll";
|
|
20
|
+
export * from "./browser/useEventListener";
|
|
21
|
+
export * from "./browser/useMediaQuery";
|
|
22
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from \"./types\";\n\nexport * from \"./function/get\";\nexport * from \"./function/peek\";\nexport * from \"./function/useSupported\";\nexport * from \"./function/useWhenMounted\";\n\nexport * from \"./elements/useRef$\";\nexport * from \"./elements/useResizeObserver\";\nexport * from \"./elements/useElementSize\";\nexport * from \"./elements/useElementBounding\";\nexport * from \"./elements/useMutationObserver\";\nexport * from \"./elements/useIntersectionObserver\";\nexport * from \"./elements/useElementVisibility\";\nexport * from \"./elements/useDocumentVisibility\";\nexport * from \"./elements/useWindowFocus\";\nexport * from \"./elements/useWindowSize\";\nexport * from \"./elements/useParentElement\";\nexport * from \"./elements/useMouseInElement\";\n\nexport * from \"./sensors/useScroll\";\nexport * from \"./sensors/useWindowScroll\";\n\nexport * from \"./browser/useEventListener\";\nexport * from \"./browser/useMediaQuery\";\n"],"mappings":"AAAA,cAAc;AAEd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAEd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAEd,cAAc;AACd,cAAc;AAEd,cAAc;AACd,cAAc;","names":[]}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var demo_exports = {};
|
|
20
|
+
__export(demo_exports, {
|
|
21
|
+
default: () => UseScrollDemo
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(demo_exports);
|
|
24
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
25
|
+
var import_useRef = require("../../elements/useRef$");
|
|
26
|
+
var import__ = require(".");
|
|
27
|
+
const badge = (active) => ({
|
|
28
|
+
display: "inline-flex",
|
|
29
|
+
alignItems: "center",
|
|
30
|
+
padding: "2px 8px",
|
|
31
|
+
borderRadius: "4px",
|
|
32
|
+
fontSize: "12px",
|
|
33
|
+
fontFamily: "monospace",
|
|
34
|
+
background: active ? "var(--sl-color-green-low, #f0fdf4)" : "var(--sl-color-gray-5, #f1f5f9)",
|
|
35
|
+
color: active ? "var(--sl-color-green, #16a34a)" : "var(--sl-color-gray-3, #64748b)",
|
|
36
|
+
border: `1px solid ${active ? "var(--sl-color-green, #22c55e)" : "var(--sl-color-gray-4, #e2e8f0)"}`,
|
|
37
|
+
transition: "all 0.15s"
|
|
38
|
+
});
|
|
39
|
+
function UseScrollDemo() {
|
|
40
|
+
const el$ = (0, import_useRef.useRef$)();
|
|
41
|
+
const { x$, y$, isScrolling$, arrivedState$, directions$ } = (0, import__.useScroll)(el$);
|
|
42
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "10px" }, children: [
|
|
43
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
44
|
+
"div",
|
|
45
|
+
{
|
|
46
|
+
style: {
|
|
47
|
+
display: "flex",
|
|
48
|
+
flexWrap: "wrap",
|
|
49
|
+
gap: "8px",
|
|
50
|
+
padding: "8px 12px",
|
|
51
|
+
borderRadius: "6px",
|
|
52
|
+
border: "1px solid var(--sl-color-gray-5, #e2e8f0)",
|
|
53
|
+
background: "var(--sl-color-gray-6, #f8fafc)",
|
|
54
|
+
fontFamily: "monospace",
|
|
55
|
+
fontSize: "13px"
|
|
56
|
+
},
|
|
57
|
+
children: [
|
|
58
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
|
|
59
|
+
"x: ",
|
|
60
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: x$.get() })
|
|
61
|
+
] }),
|
|
62
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
|
|
63
|
+
"y: ",
|
|
64
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: y$.get() })
|
|
65
|
+
] }),
|
|
66
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { style: badge(isScrolling$.get()), children: isScrolling$.get() ? "scrolling" : "idle" }),
|
|
67
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { style: badge(arrivedState$.top.get()), children: "top" }),
|
|
68
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { style: badge(arrivedState$.bottom.get()), children: "bottom" }),
|
|
69
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { style: { color: "var(--sl-color-gray-3, #94a3b8)" }, children: [
|
|
70
|
+
directions$.top.get() && "\u2191",
|
|
71
|
+
directions$.bottom.get() && "\u2193",
|
|
72
|
+
directions$.left.get() && "\u2190",
|
|
73
|
+
directions$.right.get() && "\u2192"
|
|
74
|
+
] })
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
),
|
|
78
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
79
|
+
"div",
|
|
80
|
+
{
|
|
81
|
+
ref: el$,
|
|
82
|
+
style: {
|
|
83
|
+
height: "200px",
|
|
84
|
+
overflowY: "auto",
|
|
85
|
+
borderRadius: "6px",
|
|
86
|
+
border: "1px solid var(--sl-color-gray-5, #e2e8f0)",
|
|
87
|
+
background: "var(--sl-color-gray-7, #fff)"
|
|
88
|
+
},
|
|
89
|
+
children: Array.from({ length: 20 }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
90
|
+
"div",
|
|
91
|
+
{
|
|
92
|
+
style: {
|
|
93
|
+
padding: "8px 14px",
|
|
94
|
+
borderBottom: "1px solid var(--sl-color-gray-6, #f1f5f9)",
|
|
95
|
+
fontSize: "13px",
|
|
96
|
+
color: "var(--sl-color-gray-2, #475569)",
|
|
97
|
+
fontFamily: "monospace"
|
|
98
|
+
},
|
|
99
|
+
children: [
|
|
100
|
+
"Item ",
|
|
101
|
+
i + 1
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
i
|
|
105
|
+
))
|
|
106
|
+
}
|
|
107
|
+
),
|
|
108
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
109
|
+
"p",
|
|
110
|
+
{
|
|
111
|
+
style: {
|
|
112
|
+
margin: 0,
|
|
113
|
+
fontSize: "11px",
|
|
114
|
+
color: "var(--sl-color-gray-3, #94a3b8)"
|
|
115
|
+
},
|
|
116
|
+
children: "Scroll inside the box to see x, y, arrivedState, and directions update."
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
] });
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/sensors/useScroll/demo.tsx"],"sourcesContent":["import { useRef$ } from \"../../elements/useRef$\";\nimport { useScroll } from \".\";\n\nconst badge = (active: boolean): React.CSSProperties => ({\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"2px 8px\",\n borderRadius: \"4px\",\n fontSize: \"12px\",\n fontFamily: \"monospace\",\n background: active\n ? \"var(--sl-color-green-low, #f0fdf4)\"\n : \"var(--sl-color-gray-5, #f1f5f9)\",\n color: active\n ? \"var(--sl-color-green, #16a34a)\"\n : \"var(--sl-color-gray-3, #64748b)\",\n border: `1px solid ${active ? \"var(--sl-color-green, #22c55e)\" : \"var(--sl-color-gray-4, #e2e8f0)\"}`,\n transition: \"all 0.15s\",\n});\n\nexport default function UseScrollDemo() {\n const el$ = useRef$<HTMLDivElement>();\n const { x$, y$, isScrolling$, arrivedState$, directions$ } = useScroll(el$);\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"10px\" }}>\n {/* Stats */}\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: \"8px\",\n padding: \"8px 12px\",\n borderRadius: \"6px\",\n border: \"1px solid var(--sl-color-gray-5, #e2e8f0)\",\n background: \"var(--sl-color-gray-6, #f8fafc)\",\n fontFamily: \"monospace\",\n fontSize: \"13px\",\n }}\n >\n <span>\n x: <strong>{x$.get()}</strong>\n </span>\n <span>\n y: <strong>{y$.get()}</strong>\n </span>\n <span style={badge(isScrolling$.get())}>\n {isScrolling$.get() ? \"scrolling\" : \"idle\"}\n </span>\n <span style={badge(arrivedState$.top.get())}>top</span>\n <span style={badge(arrivedState$.bottom.get())}>bottom</span>\n <span style={{ color: \"var(--sl-color-gray-3, #94a3b8)\" }}>\n {directions$.top.get() && \"↑\"}\n {directions$.bottom.get() && \"↓\"}\n {directions$.left.get() && \"←\"}\n {directions$.right.get() && \"→\"}\n </span>\n </div>\n\n {/* Scrollable container */}\n <div\n ref={el$}\n style={{\n height: \"200px\",\n overflowY: \"auto\",\n borderRadius: \"6px\",\n border: \"1px solid var(--sl-color-gray-5, #e2e8f0)\",\n background: \"var(--sl-color-gray-7, #fff)\",\n }}\n >\n {Array.from({ length: 20 }, (_, i) => (\n <div\n key={i}\n style={{\n padding: \"8px 14px\",\n borderBottom: \"1px solid var(--sl-color-gray-6, #f1f5f9)\",\n fontSize: \"13px\",\n color: \"var(--sl-color-gray-2, #475569)\",\n fontFamily: \"monospace\",\n }}\n >\n Item {i + 1}\n </div>\n ))}\n </div>\n\n <p\n style={{\n margin: 0,\n fontSize: \"11px\",\n color: \"var(--sl-color-gray-3, #94a3b8)\",\n }}\n >\n Scroll inside the box to see x, y, arrivedState, and directions update.\n </p>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAwCQ;AAxCR,oBAAwB;AACxB,eAA0B;AAE1B,MAAM,QAAQ,CAAC,YAA0C;AAAA,EACvD,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,cAAc;AAAA,EACd,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,YAAY,SACR,uCACA;AAAA,EACJ,OAAO,SACH,mCACA;AAAA,EACJ,QAAQ,aAAa,SAAS,mCAAmC,iCAAiC;AAAA,EAClG,YAAY;AACd;AAEe,SAAR,gBAAiC;AACtC,QAAM,UAAM,uBAAwB;AACpC,QAAM,EAAE,IAAI,IAAI,cAAc,eAAe,YAAY,QAAI,oBAAU,GAAG;AAE1E,SACE,6CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,OAAO,GAElE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,UAAU;AAAA,UACV,KAAK;AAAA,UACL,SAAS;AAAA,UACT,cAAc;AAAA,UACd,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,UAAU;AAAA,QACZ;AAAA,QAEA;AAAA,uDAAC,UAAK;AAAA;AAAA,YACD,4CAAC,YAAQ,aAAG,IAAI,GAAE;AAAA,aACvB;AAAA,UACA,6CAAC,UAAK;AAAA;AAAA,YACD,4CAAC,YAAQ,aAAG,IAAI,GAAE;AAAA,aACvB;AAAA,UACA,4CAAC,UAAK,OAAO,MAAM,aAAa,IAAI,CAAC,GAClC,uBAAa,IAAI,IAAI,cAAc,QACtC;AAAA,UACA,4CAAC,UAAK,OAAO,MAAM,cAAc,IAAI,IAAI,CAAC,GAAG,iBAAG;AAAA,UAChD,4CAAC,UAAK,OAAO,MAAM,cAAc,OAAO,IAAI,CAAC,GAAG,oBAAM;AAAA,UACtD,6CAAC,UAAK,OAAO,EAAE,OAAO,kCAAkC,GACrD;AAAA,wBAAY,IAAI,IAAI,KAAK;AAAA,YACzB,YAAY,OAAO,IAAI,KAAK;AAAA,YAC5B,YAAY,KAAK,IAAI,KAAK;AAAA,YAC1B,YAAY,MAAM,IAAI,KAAK;AAAA,aAC9B;AAAA;AAAA;AAAA,IACF;AAAA,IAGA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,cAAc;AAAA,UACd,QAAQ;AAAA,UACR,YAAY;AAAA,QACd;AAAA,QAEC,gBAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,MAC9B;AAAA,UAAC;AAAA;AAAA,YAEC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,cAAc;AAAA,cACd,UAAU;AAAA,cACV,OAAO;AAAA,cACP,YAAY;AAAA,YACd;AAAA,YACD;AAAA;AAAA,cACO,IAAI;AAAA;AAAA;AAAA,UATL;AAAA,QAUP,CACD;AAAA;AAAA,IACH;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,OAAO;AAAA,QACT;AAAA,QACD;AAAA;AAAA,IAED;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useRef$ } from "../../elements/useRef$";
|
|
3
|
+
import { useScroll } from ".";
|
|
4
|
+
const badge = (active) => ({
|
|
5
|
+
display: "inline-flex",
|
|
6
|
+
alignItems: "center",
|
|
7
|
+
padding: "2px 8px",
|
|
8
|
+
borderRadius: "4px",
|
|
9
|
+
fontSize: "12px",
|
|
10
|
+
fontFamily: "monospace",
|
|
11
|
+
background: active ? "var(--sl-color-green-low, #f0fdf4)" : "var(--sl-color-gray-5, #f1f5f9)",
|
|
12
|
+
color: active ? "var(--sl-color-green, #16a34a)" : "var(--sl-color-gray-3, #64748b)",
|
|
13
|
+
border: `1px solid ${active ? "var(--sl-color-green, #22c55e)" : "var(--sl-color-gray-4, #e2e8f0)"}`,
|
|
14
|
+
transition: "all 0.15s"
|
|
15
|
+
});
|
|
16
|
+
function UseScrollDemo() {
|
|
17
|
+
const el$ = useRef$();
|
|
18
|
+
const { x$, y$, isScrolling$, arrivedState$, directions$ } = useScroll(el$);
|
|
19
|
+
return /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "10px" }, children: [
|
|
20
|
+
/* @__PURE__ */ jsxs(
|
|
21
|
+
"div",
|
|
22
|
+
{
|
|
23
|
+
style: {
|
|
24
|
+
display: "flex",
|
|
25
|
+
flexWrap: "wrap",
|
|
26
|
+
gap: "8px",
|
|
27
|
+
padding: "8px 12px",
|
|
28
|
+
borderRadius: "6px",
|
|
29
|
+
border: "1px solid var(--sl-color-gray-5, #e2e8f0)",
|
|
30
|
+
background: "var(--sl-color-gray-6, #f8fafc)",
|
|
31
|
+
fontFamily: "monospace",
|
|
32
|
+
fontSize: "13px"
|
|
33
|
+
},
|
|
34
|
+
children: [
|
|
35
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
36
|
+
"x: ",
|
|
37
|
+
/* @__PURE__ */ jsx("strong", { children: x$.get() })
|
|
38
|
+
] }),
|
|
39
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
40
|
+
"y: ",
|
|
41
|
+
/* @__PURE__ */ jsx("strong", { children: y$.get() })
|
|
42
|
+
] }),
|
|
43
|
+
/* @__PURE__ */ jsx("span", { style: badge(isScrolling$.get()), children: isScrolling$.get() ? "scrolling" : "idle" }),
|
|
44
|
+
/* @__PURE__ */ jsx("span", { style: badge(arrivedState$.top.get()), children: "top" }),
|
|
45
|
+
/* @__PURE__ */ jsx("span", { style: badge(arrivedState$.bottom.get()), children: "bottom" }),
|
|
46
|
+
/* @__PURE__ */ jsxs("span", { style: { color: "var(--sl-color-gray-3, #94a3b8)" }, children: [
|
|
47
|
+
directions$.top.get() && "\u2191",
|
|
48
|
+
directions$.bottom.get() && "\u2193",
|
|
49
|
+
directions$.left.get() && "\u2190",
|
|
50
|
+
directions$.right.get() && "\u2192"
|
|
51
|
+
] })
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
),
|
|
55
|
+
/* @__PURE__ */ jsx(
|
|
56
|
+
"div",
|
|
57
|
+
{
|
|
58
|
+
ref: el$,
|
|
59
|
+
style: {
|
|
60
|
+
height: "200px",
|
|
61
|
+
overflowY: "auto",
|
|
62
|
+
borderRadius: "6px",
|
|
63
|
+
border: "1px solid var(--sl-color-gray-5, #e2e8f0)",
|
|
64
|
+
background: "var(--sl-color-gray-7, #fff)"
|
|
65
|
+
},
|
|
66
|
+
children: Array.from({ length: 20 }, (_, i) => /* @__PURE__ */ jsxs(
|
|
67
|
+
"div",
|
|
68
|
+
{
|
|
69
|
+
style: {
|
|
70
|
+
padding: "8px 14px",
|
|
71
|
+
borderBottom: "1px solid var(--sl-color-gray-6, #f1f5f9)",
|
|
72
|
+
fontSize: "13px",
|
|
73
|
+
color: "var(--sl-color-gray-2, #475569)",
|
|
74
|
+
fontFamily: "monospace"
|
|
75
|
+
},
|
|
76
|
+
children: [
|
|
77
|
+
"Item ",
|
|
78
|
+
i + 1
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
i
|
|
82
|
+
))
|
|
83
|
+
}
|
|
84
|
+
),
|
|
85
|
+
/* @__PURE__ */ jsx(
|
|
86
|
+
"p",
|
|
87
|
+
{
|
|
88
|
+
style: {
|
|
89
|
+
margin: 0,
|
|
90
|
+
fontSize: "11px",
|
|
91
|
+
color: "var(--sl-color-gray-3, #94a3b8)"
|
|
92
|
+
},
|
|
93
|
+
children: "Scroll inside the box to see x, y, arrivedState, and directions update."
|
|
94
|
+
}
|
|
95
|
+
)
|
|
96
|
+
] });
|
|
97
|
+
}
|
|
98
|
+
export {
|
|
99
|
+
UseScrollDemo as default
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=demo.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/sensors/useScroll/demo.tsx"],"sourcesContent":["import { useRef$ } from \"../../elements/useRef$\";\nimport { useScroll } from \".\";\n\nconst badge = (active: boolean): React.CSSProperties => ({\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"2px 8px\",\n borderRadius: \"4px\",\n fontSize: \"12px\",\n fontFamily: \"monospace\",\n background: active\n ? \"var(--sl-color-green-low, #f0fdf4)\"\n : \"var(--sl-color-gray-5, #f1f5f9)\",\n color: active\n ? \"var(--sl-color-green, #16a34a)\"\n : \"var(--sl-color-gray-3, #64748b)\",\n border: `1px solid ${active ? \"var(--sl-color-green, #22c55e)\" : \"var(--sl-color-gray-4, #e2e8f0)\"}`,\n transition: \"all 0.15s\",\n});\n\nexport default function UseScrollDemo() {\n const el$ = useRef$<HTMLDivElement>();\n const { x$, y$, isScrolling$, arrivedState$, directions$ } = useScroll(el$);\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"10px\" }}>\n {/* Stats */}\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: \"8px\",\n padding: \"8px 12px\",\n borderRadius: \"6px\",\n border: \"1px solid var(--sl-color-gray-5, #e2e8f0)\",\n background: \"var(--sl-color-gray-6, #f8fafc)\",\n fontFamily: \"monospace\",\n fontSize: \"13px\",\n }}\n >\n <span>\n x: <strong>{x$.get()}</strong>\n </span>\n <span>\n y: <strong>{y$.get()}</strong>\n </span>\n <span style={badge(isScrolling$.get())}>\n {isScrolling$.get() ? \"scrolling\" : \"idle\"}\n </span>\n <span style={badge(arrivedState$.top.get())}>top</span>\n <span style={badge(arrivedState$.bottom.get())}>bottom</span>\n <span style={{ color: \"var(--sl-color-gray-3, #94a3b8)\" }}>\n {directions$.top.get() && \"↑\"}\n {directions$.bottom.get() && \"↓\"}\n {directions$.left.get() && \"←\"}\n {directions$.right.get() && \"→\"}\n </span>\n </div>\n\n {/* Scrollable container */}\n <div\n ref={el$}\n style={{\n height: \"200px\",\n overflowY: \"auto\",\n borderRadius: \"6px\",\n border: \"1px solid var(--sl-color-gray-5, #e2e8f0)\",\n background: \"var(--sl-color-gray-7, #fff)\",\n }}\n >\n {Array.from({ length: 20 }, (_, i) => (\n <div\n key={i}\n style={{\n padding: \"8px 14px\",\n borderBottom: \"1px solid var(--sl-color-gray-6, #f1f5f9)\",\n fontSize: \"13px\",\n color: \"var(--sl-color-gray-2, #475569)\",\n fontFamily: \"monospace\",\n }}\n >\n Item {i + 1}\n </div>\n ))}\n </div>\n\n <p\n style={{\n margin: 0,\n fontSize: \"11px\",\n color: \"var(--sl-color-gray-3, #94a3b8)\",\n }}\n >\n Scroll inside the box to see x, y, arrivedState, and directions update.\n </p>\n </div>\n );\n}\n"],"mappings":"AAwCQ,SACK,KADL;AAxCR,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAE1B,MAAM,QAAQ,CAAC,YAA0C;AAAA,EACvD,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,cAAc;AAAA,EACd,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,YAAY,SACR,uCACA;AAAA,EACJ,OAAO,SACH,mCACA;AAAA,EACJ,QAAQ,aAAa,SAAS,mCAAmC,iCAAiC;AAAA,EAClG,YAAY;AACd;AAEe,SAAR,gBAAiC;AACtC,QAAM,MAAM,QAAwB;AACpC,QAAM,EAAE,IAAI,IAAI,cAAc,eAAe,YAAY,IAAI,UAAU,GAAG;AAE1E,SACE,qBAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,OAAO,GAElE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,UAAU;AAAA,UACV,KAAK;AAAA,UACL,SAAS;AAAA,UACT,cAAc;AAAA,UACd,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,UAAU;AAAA,QACZ;AAAA,QAEA;AAAA,+BAAC,UAAK;AAAA;AAAA,YACD,oBAAC,YAAQ,aAAG,IAAI,GAAE;AAAA,aACvB;AAAA,UACA,qBAAC,UAAK;AAAA;AAAA,YACD,oBAAC,YAAQ,aAAG,IAAI,GAAE;AAAA,aACvB;AAAA,UACA,oBAAC,UAAK,OAAO,MAAM,aAAa,IAAI,CAAC,GAClC,uBAAa,IAAI,IAAI,cAAc,QACtC;AAAA,UACA,oBAAC,UAAK,OAAO,MAAM,cAAc,IAAI,IAAI,CAAC,GAAG,iBAAG;AAAA,UAChD,oBAAC,UAAK,OAAO,MAAM,cAAc,OAAO,IAAI,CAAC,GAAG,oBAAM;AAAA,UACtD,qBAAC,UAAK,OAAO,EAAE,OAAO,kCAAkC,GACrD;AAAA,wBAAY,IAAI,IAAI,KAAK;AAAA,YACzB,YAAY,OAAO,IAAI,KAAK;AAAA,YAC5B,YAAY,KAAK,IAAI,KAAK;AAAA,YAC1B,YAAY,MAAM,IAAI,KAAK;AAAA,aAC9B;AAAA;AAAA;AAAA,IACF;AAAA,IAGA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,cAAc;AAAA,UACd,QAAQ;AAAA,UACR,YAAY;AAAA,QACd;AAAA,QAEC,gBAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,MAC9B;AAAA,UAAC;AAAA;AAAA,YAEC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,cAAc;AAAA,cACd,UAAU;AAAA,cACV,OAAO;AAAA,cACP,YAAY;AAAA,YACd;AAAA,YACD;AAAA;AAAA,cACO,IAAI;AAAA;AAAA;AAAA,UATL;AAAA,QAUP,CACD;AAAA;AAAA,IACH;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,OAAO;AAAA,QACT;AAAA,QACD;AAAA;AAAA,IAED;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Observable } from '@legendapp/state';
|
|
2
|
+
import { MaybeElement } from '../../elements/useRef_/index.mjs';
|
|
3
|
+
import { MaybeObservable } from '../../types.mjs';
|
|
4
|
+
import 'react';
|
|
5
|
+
|
|
6
|
+
interface UseScrollOptions {
|
|
7
|
+
throttle?: number;
|
|
8
|
+
idle?: number;
|
|
9
|
+
onStop?: () => void;
|
|
10
|
+
onError?: (error: unknown) => void;
|
|
11
|
+
offset?: {
|
|
12
|
+
left?: number;
|
|
13
|
+
right?: number;
|
|
14
|
+
top?: number;
|
|
15
|
+
bottom?: number;
|
|
16
|
+
};
|
|
17
|
+
behavior?: ScrollBehavior;
|
|
18
|
+
eventListenerOptions?: MaybeObservable<AddEventListenerOptions>;
|
|
19
|
+
}
|
|
20
|
+
interface ArrivedState {
|
|
21
|
+
left: boolean;
|
|
22
|
+
right: boolean;
|
|
23
|
+
top: boolean;
|
|
24
|
+
bottom: boolean;
|
|
25
|
+
}
|
|
26
|
+
interface ScrollDirections {
|
|
27
|
+
left: boolean;
|
|
28
|
+
right: boolean;
|
|
29
|
+
top: boolean;
|
|
30
|
+
bottom: boolean;
|
|
31
|
+
}
|
|
32
|
+
interface UseScrollReturn {
|
|
33
|
+
x$: Observable<number>;
|
|
34
|
+
y$: Observable<number>;
|
|
35
|
+
isScrolling$: Observable<boolean>;
|
|
36
|
+
arrivedState$: Observable<ArrivedState>;
|
|
37
|
+
directions$: Observable<ScrollDirections>;
|
|
38
|
+
measure: () => void;
|
|
39
|
+
}
|
|
40
|
+
declare function useScroll(element: MaybeElement, options?: UseScrollOptions): UseScrollReturn;
|
|
41
|
+
|
|
42
|
+
export { type ArrivedState, type ScrollDirections, type UseScrollOptions, type UseScrollReturn, useScroll };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Observable } from '@legendapp/state';
|
|
2
|
+
import { MaybeElement } from '../../elements/useRef_/index.js';
|
|
3
|
+
import { MaybeObservable } from '../../types.js';
|
|
4
|
+
import 'react';
|
|
5
|
+
|
|
6
|
+
interface UseScrollOptions {
|
|
7
|
+
throttle?: number;
|
|
8
|
+
idle?: number;
|
|
9
|
+
onStop?: () => void;
|
|
10
|
+
onError?: (error: unknown) => void;
|
|
11
|
+
offset?: {
|
|
12
|
+
left?: number;
|
|
13
|
+
right?: number;
|
|
14
|
+
top?: number;
|
|
15
|
+
bottom?: number;
|
|
16
|
+
};
|
|
17
|
+
behavior?: ScrollBehavior;
|
|
18
|
+
eventListenerOptions?: MaybeObservable<AddEventListenerOptions>;
|
|
19
|
+
}
|
|
20
|
+
interface ArrivedState {
|
|
21
|
+
left: boolean;
|
|
22
|
+
right: boolean;
|
|
23
|
+
top: boolean;
|
|
24
|
+
bottom: boolean;
|
|
25
|
+
}
|
|
26
|
+
interface ScrollDirections {
|
|
27
|
+
left: boolean;
|
|
28
|
+
right: boolean;
|
|
29
|
+
top: boolean;
|
|
30
|
+
bottom: boolean;
|
|
31
|
+
}
|
|
32
|
+
interface UseScrollReturn {
|
|
33
|
+
x$: Observable<number>;
|
|
34
|
+
y$: Observable<number>;
|
|
35
|
+
isScrolling$: Observable<boolean>;
|
|
36
|
+
arrivedState$: Observable<ArrivedState>;
|
|
37
|
+
directions$: Observable<ScrollDirections>;
|
|
38
|
+
measure: () => void;
|
|
39
|
+
}
|
|
40
|
+
declare function useScroll(element: MaybeElement, options?: UseScrollOptions): UseScrollReturn;
|
|
41
|
+
|
|
42
|
+
export { type ArrivedState, type ScrollDirections, type UseScrollOptions, type UseScrollReturn, useScroll };
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var useScroll_exports = {};
|
|
21
|
+
__export(useScroll_exports, {
|
|
22
|
+
useScroll: () => useScroll
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(useScroll_exports);
|
|
25
|
+
var import_react = require("@legendapp/state/react");
|
|
26
|
+
var import_react2 = require("react");
|
|
27
|
+
var import_es_toolkit = require("es-toolkit");
|
|
28
|
+
var import_useRef = require("../../elements/useRef$");
|
|
29
|
+
var import_shared = require("../../shared");
|
|
30
|
+
var import_useEventListener = require("../../browser/useEventListener");
|
|
31
|
+
function getScrollValues(el) {
|
|
32
|
+
if (!el) return { x: 0, y: 0 };
|
|
33
|
+
if ((0, import_shared.isWindow)(el)) return { x: el.scrollX, y: el.scrollY };
|
|
34
|
+
if (el instanceof Document)
|
|
35
|
+
return {
|
|
36
|
+
x: el.documentElement.scrollLeft,
|
|
37
|
+
y: el.documentElement.scrollTop
|
|
38
|
+
};
|
|
39
|
+
return { x: el.scrollLeft, y: el.scrollTop };
|
|
40
|
+
}
|
|
41
|
+
function getScrollDimensions(el) {
|
|
42
|
+
if (!el || (0, import_shared.isWindow)(el)) {
|
|
43
|
+
return {
|
|
44
|
+
scrollW: document.documentElement.scrollWidth,
|
|
45
|
+
scrollH: document.documentElement.scrollHeight,
|
|
46
|
+
clientW: window.innerWidth,
|
|
47
|
+
clientH: window.innerHeight
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (el instanceof Document) {
|
|
51
|
+
const root = el.documentElement;
|
|
52
|
+
return {
|
|
53
|
+
scrollW: root.scrollWidth,
|
|
54
|
+
scrollH: root.scrollHeight,
|
|
55
|
+
clientW: root.clientWidth,
|
|
56
|
+
clientH: root.clientHeight
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
scrollW: el.scrollWidth,
|
|
61
|
+
scrollH: el.scrollHeight,
|
|
62
|
+
clientW: el.clientWidth,
|
|
63
|
+
clientH: el.clientHeight
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function useScroll(element, options) {
|
|
67
|
+
const initial = getScrollValues((0, import_useRef.peekElement)(element));
|
|
68
|
+
const x$ = (0, import_react.useObservable)(initial.x);
|
|
69
|
+
const y$ = (0, import_react.useObservable)(initial.y);
|
|
70
|
+
const isScrolling$ = (0, import_react.useObservable)(false);
|
|
71
|
+
const arrivedState$ = (0, import_react.useObservable)({
|
|
72
|
+
left: true,
|
|
73
|
+
right: false,
|
|
74
|
+
top: true,
|
|
75
|
+
bottom: false
|
|
76
|
+
});
|
|
77
|
+
const directions$ = (0, import_react.useObservable)({
|
|
78
|
+
left: false,
|
|
79
|
+
right: false,
|
|
80
|
+
top: false,
|
|
81
|
+
bottom: false
|
|
82
|
+
});
|
|
83
|
+
const idleTimer = (0, import_react2.useRef)(null);
|
|
84
|
+
const resetIdle = () => {
|
|
85
|
+
if (idleTimer.current) clearTimeout(idleTimer.current);
|
|
86
|
+
isScrolling$.set(true);
|
|
87
|
+
idleTimer.current = setTimeout(() => {
|
|
88
|
+
isScrolling$.set(false);
|
|
89
|
+
options?.onStop?.();
|
|
90
|
+
}, options?.idle ?? 200);
|
|
91
|
+
};
|
|
92
|
+
const measure = () => {
|
|
93
|
+
const el = (0, import_useRef.peekElement)(element);
|
|
94
|
+
if (!el) return;
|
|
95
|
+
const prevX = x$.peek();
|
|
96
|
+
const prevY = y$.peek();
|
|
97
|
+
const { x: newX, y: newY } = getScrollValues(el);
|
|
98
|
+
directions$.assign({
|
|
99
|
+
left: newX < prevX,
|
|
100
|
+
right: newX > prevX,
|
|
101
|
+
top: newY < prevY,
|
|
102
|
+
bottom: newY > prevY
|
|
103
|
+
});
|
|
104
|
+
x$.set(newX);
|
|
105
|
+
y$.set(newY);
|
|
106
|
+
const { scrollW, scrollH, clientW, clientH } = getScrollDimensions(el);
|
|
107
|
+
const maxX = scrollW - clientW;
|
|
108
|
+
const maxY = scrollH - clientH;
|
|
109
|
+
const offset = options?.offset ?? {};
|
|
110
|
+
arrivedState$.assign({
|
|
111
|
+
left: newX <= (offset.left ?? 0),
|
|
112
|
+
right: newX >= maxX - (offset.right ?? 0),
|
|
113
|
+
top: newY <= (offset.top ?? 0),
|
|
114
|
+
bottom: newY >= maxY - (offset.bottom ?? 0)
|
|
115
|
+
});
|
|
116
|
+
resetIdle();
|
|
117
|
+
};
|
|
118
|
+
const measureRef = (0, import_react2.useRef)(measure);
|
|
119
|
+
measureRef.current = measure;
|
|
120
|
+
const handler = (0, import_react2.useMemo)(() => {
|
|
121
|
+
const ms = options?.throttle ?? 0;
|
|
122
|
+
return ms > 0 ? (0, import_es_toolkit.throttle)(() => measureRef.current(), ms) : () => measureRef.current();
|
|
123
|
+
}, []);
|
|
124
|
+
(0, import_useEventListener.useEventListener)(
|
|
125
|
+
element,
|
|
126
|
+
"scroll",
|
|
127
|
+
handler,
|
|
128
|
+
options?.eventListenerOptions ?? { capture: false, passive: true }
|
|
129
|
+
);
|
|
130
|
+
(0, import_react.useMount)(() => {
|
|
131
|
+
measure();
|
|
132
|
+
return () => {
|
|
133
|
+
if (idleTimer.current) clearTimeout(idleTimer.current);
|
|
134
|
+
};
|
|
135
|
+
});
|
|
136
|
+
return {
|
|
137
|
+
x$,
|
|
138
|
+
y$,
|
|
139
|
+
isScrolling$,
|
|
140
|
+
arrivedState$,
|
|
141
|
+
directions$,
|
|
142
|
+
measure
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
146
|
+
0 && (module.exports = {
|
|
147
|
+
useScroll
|
|
148
|
+
});
|
|
149
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/sensors/useScroll/index.ts"],"sourcesContent":["\"use client\";\nimport type { Observable } from \"@legendapp/state\";\nimport { useMount, useObservable } from \"@legendapp/state/react\";\nimport { useMemo, useRef } from \"react\";\nimport { throttle } from \"es-toolkit\";\nimport { type MaybeElement, peekElement } from \"../../elements/useRef$\";\nimport { isWindow } from \"../../shared\";\nimport type { MaybeObservable } from \"../../types\";\nimport { useEventListener } from \"../../browser/useEventListener\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface UseScrollOptions {\n throttle?: number;\n idle?: number;\n onStop?: () => void;\n onError?: (error: unknown) => void;\n offset?: {\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n };\n behavior?: ScrollBehavior;\n eventListenerOptions?: MaybeObservable<AddEventListenerOptions>;\n}\n\nexport interface ArrivedState {\n left: boolean;\n right: boolean;\n top: boolean;\n bottom: boolean;\n}\n\nexport interface ScrollDirections {\n left: boolean;\n right: boolean;\n top: boolean;\n bottom: boolean;\n}\n\nexport interface UseScrollReturn {\n x$: Observable<number>;\n y$: Observable<number>;\n isScrolling$: Observable<boolean>;\n arrivedState$: Observable<ArrivedState>;\n directions$: Observable<ScrollDirections>;\n measure: () => void;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction getScrollValues(el: HTMLElement | Document | Window | null): {\n x: number;\n y: number;\n} {\n if (!el) return { x: 0, y: 0 };\n if (isWindow(el)) return { x: el.scrollX, y: el.scrollY };\n if (el instanceof Document)\n return {\n x: el.documentElement.scrollLeft,\n y: el.documentElement.scrollTop,\n };\n return { x: el.scrollLeft, y: el.scrollTop };\n}\n\nfunction getScrollDimensions(el: HTMLElement | Document | Window | null): {\n scrollW: number;\n scrollH: number;\n clientW: number;\n clientH: number;\n} {\n if (!el || isWindow(el)) {\n return {\n scrollW: document.documentElement.scrollWidth,\n scrollH: document.documentElement.scrollHeight,\n clientW: window.innerWidth,\n clientH: window.innerHeight,\n };\n }\n if (el instanceof Document) {\n const root = el.documentElement;\n return {\n scrollW: root.scrollWidth,\n scrollH: root.scrollHeight,\n clientW: root.clientWidth,\n clientH: root.clientHeight,\n };\n }\n return {\n scrollW: el.scrollWidth,\n scrollH: el.scrollHeight,\n clientW: el.clientWidth,\n clientH: el.clientHeight,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n\nexport function useScroll(\n element: MaybeElement,\n options?: UseScrollOptions,\n): UseScrollReturn {\n const initial = getScrollValues(peekElement(element));\n\n const x$ = useObservable<number>(initial.x);\n const y$ = useObservable<number>(initial.y);\n const isScrolling$ = useObservable<boolean>(false);\n const arrivedState$ = useObservable<ArrivedState>({\n left: true,\n right: false,\n top: true,\n bottom: false,\n });\n const directions$ = useObservable<ScrollDirections>({\n left: false,\n right: false,\n top: false,\n bottom: false,\n });\n\n const idleTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const resetIdle = () => {\n if (idleTimer.current) clearTimeout(idleTimer.current);\n isScrolling$.set(true);\n idleTimer.current = setTimeout(() => {\n isScrolling$.set(false);\n options?.onStop?.();\n }, options?.idle ?? 200);\n };\n\n const measure = () => {\n const el = peekElement(element);\n if (!el) return;\n\n const prevX = x$.peek();\n const prevY = y$.peek();\n const { x: newX, y: newY } = getScrollValues(el);\n\n directions$.assign({\n left: newX < prevX,\n right: newX > prevX,\n top: newY < prevY,\n bottom: newY > prevY,\n });\n\n x$.set(newX);\n y$.set(newY);\n\n const { scrollW, scrollH, clientW, clientH } = getScrollDimensions(el);\n const maxX = scrollW - clientW;\n const maxY = scrollH - clientH;\n const offset = options?.offset ?? {};\n\n arrivedState$.assign({\n left: newX <= (offset.left ?? 0),\n right: newX >= maxX - (offset.right ?? 0),\n top: newY <= (offset.top ?? 0),\n bottom: newY >= maxY - (offset.bottom ?? 0),\n });\n\n resetIdle();\n };\n\n const measureRef = useRef(measure);\n measureRef.current = measure;\n\n const handler = useMemo(() => {\n const ms = options?.throttle ?? 0;\n return ms > 0\n ? throttle(() => measureRef.current(), ms)\n : () => measureRef.current();\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEventListener(element as any, \"scroll\", handler,\n options?.eventListenerOptions ?? { capture: false, passive: true },\n );\n\n useMount(() => {\n measure();\n return () => {\n if (idleTimer.current) clearTimeout(idleTimer.current);\n };\n });\n\n return {\n x$,\n y$,\n isScrolling$,\n arrivedState$,\n directions$,\n measure,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAwC;AACxC,IAAAA,gBAAgC;AAChC,wBAAyB;AACzB,oBAA+C;AAC/C,oBAAyB;AAEzB,8BAAiC;AAgDjC,SAAS,gBAAgB,IAGvB;AACA,MAAI,CAAC,GAAI,QAAO,EAAE,GAAG,GAAG,GAAG,EAAE;AAC7B,UAAI,wBAAS,EAAE,EAAG,QAAO,EAAE,GAAG,GAAG,SAAS,GAAG,GAAG,QAAQ;AACxD,MAAI,cAAc;AAChB,WAAO;AAAA,MACL,GAAG,GAAG,gBAAgB;AAAA,MACtB,GAAG,GAAG,gBAAgB;AAAA,IACxB;AACF,SAAO,EAAE,GAAG,GAAG,YAAY,GAAG,GAAG,UAAU;AAC7C;AAEA,SAAS,oBAAoB,IAK3B;AACA,MAAI,CAAC,UAAM,wBAAS,EAAE,GAAG;AACvB,WAAO;AAAA,MACL,SAAS,SAAS,gBAAgB;AAAA,MAClC,SAAS,SAAS,gBAAgB;AAAA,MAClC,SAAS,OAAO;AAAA,MAChB,SAAS,OAAO;AAAA,IAClB;AAAA,EACF;AACA,MAAI,cAAc,UAAU;AAC1B,UAAM,OAAO,GAAG;AAChB,WAAO;AAAA,MACL,SAAS,KAAK;AAAA,MACd,SAAS,KAAK;AAAA,MACd,SAAS,KAAK;AAAA,MACd,SAAS,KAAK;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AAAA,IACL,SAAS,GAAG;AAAA,IACZ,SAAS,GAAG;AAAA,IACZ,SAAS,GAAG;AAAA,IACZ,SAAS,GAAG;AAAA,EACd;AACF;AAMO,SAAS,UACd,SACA,SACiB;AACjB,QAAM,UAAU,oBAAgB,2BAAY,OAAO,CAAC;AAEpD,QAAM,SAAK,4BAAsB,QAAQ,CAAC;AAC1C,QAAM,SAAK,4BAAsB,QAAQ,CAAC;AAC1C,QAAM,mBAAe,4BAAuB,KAAK;AACjD,QAAM,oBAAgB,4BAA4B;AAAA,IAChD,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ;AAAA,EACV,CAAC;AACD,QAAM,kBAAc,4BAAgC;AAAA,IAClD,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,QAAQ;AAAA,EACV,CAAC;AAED,QAAM,gBAAY,sBAA6C,IAAI;AAEnE,QAAM,YAAY,MAAM;AACtB,QAAI,UAAU,QAAS,cAAa,UAAU,OAAO;AACrD,iBAAa,IAAI,IAAI;AACrB,cAAU,UAAU,WAAW,MAAM;AACnC,mBAAa,IAAI,KAAK;AACtB,eAAS,SAAS;AAAA,IACpB,GAAG,SAAS,QAAQ,GAAG;AAAA,EACzB;AAEA,QAAM,UAAU,MAAM;AACpB,UAAM,SAAK,2BAAY,OAAO;AAC9B,QAAI,CAAC,GAAI;AAET,UAAM,QAAQ,GAAG,KAAK;AACtB,UAAM,QAAQ,GAAG,KAAK;AACtB,UAAM,EAAE,GAAG,MAAM,GAAG,KAAK,IAAI,gBAAgB,EAAE;AAE/C,gBAAY,OAAO;AAAA,MACjB,MAAM,OAAO;AAAA,MACb,OAAO,OAAO;AAAA,MACd,KAAK,OAAO;AAAA,MACZ,QAAQ,OAAO;AAAA,IACjB,CAAC;AAED,OAAG,IAAI,IAAI;AACX,OAAG,IAAI,IAAI;AAEX,UAAM,EAAE,SAAS,SAAS,SAAS,QAAQ,IAAI,oBAAoB,EAAE;AACrE,UAAM,OAAO,UAAU;AACvB,UAAM,OAAO,UAAU;AACvB,UAAM,SAAS,SAAS,UAAU,CAAC;AAEnC,kBAAc,OAAO;AAAA,MACnB,MAAM,SAAS,OAAO,QAAQ;AAAA,MAC9B,OAAO,QAAQ,QAAQ,OAAO,SAAS;AAAA,MACvC,KAAK,SAAS,OAAO,OAAO;AAAA,MAC5B,QAAQ,QAAQ,QAAQ,OAAO,UAAU;AAAA,IAC3C,CAAC;AAED,cAAU;AAAA,EACZ;AAEA,QAAM,iBAAa,sBAAO,OAAO;AACjC,aAAW,UAAU;AAErB,QAAM,cAAU,uBAAQ,MAAM;AAC5B,UAAM,KAAK,SAAS,YAAY;AAChC,WAAO,KAAK,QACR,4BAAS,MAAM,WAAW,QAAQ,GAAG,EAAE,IACvC,MAAM,WAAW,QAAQ;AAAA,EAC/B,GAAG,CAAC,CAAC;AAEL;AAAA,IAAiB;AAAA,IAAgB;AAAA,IAAU;AAAA,IACzC,SAAS,wBAAwB,EAAE,SAAS,OAAO,SAAS,KAAK;AAAA,EACnE;AAEA,6BAAS,MAAM;AACb,YAAQ;AACR,WAAO,MAAM;AACX,UAAI,UAAU,QAAS,cAAa,UAAU,OAAO;AAAA,IACvD;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":["import_react"]}
|