@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
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Observable } from '@legendapp/state';
|
|
2
|
+
import { DeepMaybeObservable } from '../../types.js';
|
|
3
|
+
import { MaybeElement } from '../useRef_/index.js';
|
|
4
|
+
import 'react';
|
|
5
|
+
|
|
6
|
+
interface UseIntersectionObserverOptions {
|
|
7
|
+
/** Whether to start observing immediately on mount. Default: true */
|
|
8
|
+
immediate?: boolean;
|
|
9
|
+
/** The element or document used as the viewport. Default: browser viewport */
|
|
10
|
+
root?: MaybeElement;
|
|
11
|
+
/** Margin around the root. Accepts CSS-style values. Default: "0px" */
|
|
12
|
+
rootMargin?: string;
|
|
13
|
+
/** Threshold(s) at which to trigger the callback. Default: 0 */
|
|
14
|
+
threshold?: number | number[];
|
|
15
|
+
}
|
|
16
|
+
interface UseIntersectionObserverReturn {
|
|
17
|
+
isSupported$: Observable<boolean>;
|
|
18
|
+
isActive$: Observable<boolean>;
|
|
19
|
+
stop: () => void;
|
|
20
|
+
pause: () => void;
|
|
21
|
+
resume: () => void;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Reactive wrapper around the IntersectionObserver API.
|
|
25
|
+
* Observes one or more elements for intersection changes with pause/resume/stop support.
|
|
26
|
+
*
|
|
27
|
+
* @param target - Element(s) to observe: Ref$, Observable, raw Element, or array of these
|
|
28
|
+
* @param callback - Called when intersection state changes
|
|
29
|
+
* @param options - IntersectionObserver options plus an `immediate` flag
|
|
30
|
+
* @returns `{ isSupported$, isActive$, pause, resume, stop }`
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```tsx
|
|
34
|
+
* const el$ = useRef$<HTMLDivElement>();
|
|
35
|
+
* const { isActive$, pause, resume } = useIntersectionObserver(
|
|
36
|
+
* el$,
|
|
37
|
+
* (entries) => {
|
|
38
|
+
* entries.forEach(entry => console.log(entry.isIntersecting));
|
|
39
|
+
* },
|
|
40
|
+
* { threshold: 0.5 },
|
|
41
|
+
* );
|
|
42
|
+
* return <div ref={el$} />;
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
declare function useIntersectionObserver(target: MaybeElement | MaybeElement[], callback: IntersectionObserverCallback, options?: DeepMaybeObservable<UseIntersectionObserverOptions>): UseIntersectionObserverReturn;
|
|
46
|
+
|
|
47
|
+
export { type UseIntersectionObserverOptions, type UseIntersectionObserverReturn, useIntersectionObserver };
|
|
@@ -0,0 +1,111 @@
|
|
|
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 useIntersectionObserver_exports = {};
|
|
20
|
+
__export(useIntersectionObserver_exports, {
|
|
21
|
+
useIntersectionObserver: () => useIntersectionObserver
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(useIntersectionObserver_exports);
|
|
24
|
+
var import_react = require("@legendapp/state/react");
|
|
25
|
+
var import_react2 = require("react");
|
|
26
|
+
var import_useMayObservableOptions = require("../../function/useMayObservableOptions");
|
|
27
|
+
var import_shared = require("../../shared");
|
|
28
|
+
var import_useResizeObserver = require("../useResizeObserver");
|
|
29
|
+
var import_get = require("../../function/get");
|
|
30
|
+
function useIntersectionObserver(target, callback, options) {
|
|
31
|
+
const opts$ = (0, import_useMayObservableOptions.useMayObservableOptions)(
|
|
32
|
+
options,
|
|
33
|
+
{
|
|
34
|
+
immediate: "peek",
|
|
35
|
+
threshold: "peek",
|
|
36
|
+
root: "get.element",
|
|
37
|
+
rootMargin: (value) => (0, import_get.get)(value)
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
const isSupported$ = (0, import_react.useObservable)(
|
|
41
|
+
typeof IntersectionObserver !== "undefined"
|
|
42
|
+
);
|
|
43
|
+
const isActive$ = (0, import_react.useObservable)(opts$.immediate.peek() !== false);
|
|
44
|
+
const observerRef = (0, import_react2.useRef)(null);
|
|
45
|
+
const stoppedRef = (0, import_react2.useRef)(false);
|
|
46
|
+
const mountedRef = (0, import_react2.useRef)(false);
|
|
47
|
+
const cleanup = () => {
|
|
48
|
+
observerRef.current?.disconnect();
|
|
49
|
+
observerRef.current = null;
|
|
50
|
+
};
|
|
51
|
+
const setup = () => {
|
|
52
|
+
if (!isSupported$.peek() || !isActive$.peek()) return;
|
|
53
|
+
cleanup();
|
|
54
|
+
const rawRoot = opts$.root.peek();
|
|
55
|
+
const root = rawRoot == null ? rawRoot : (() => {
|
|
56
|
+
const el = rawRoot.valueOf();
|
|
57
|
+
return (0, import_shared.isWindow)(el) ? null : el;
|
|
58
|
+
})();
|
|
59
|
+
observerRef.current = new IntersectionObserver(callback, {
|
|
60
|
+
root: root ?? void 0,
|
|
61
|
+
rootMargin: opts$.rootMargin.peek(),
|
|
62
|
+
threshold: opts$.threshold.peek() ?? 0
|
|
63
|
+
});
|
|
64
|
+
const targets = (0, import_useResizeObserver.normalizeTargets)(target);
|
|
65
|
+
targets.forEach((el) => observerRef.current?.observe(el));
|
|
66
|
+
};
|
|
67
|
+
(0, import_react2.useEffect)(() => {
|
|
68
|
+
mountedRef.current = true;
|
|
69
|
+
return () => {
|
|
70
|
+
mountedRef.current = false;
|
|
71
|
+
cleanup();
|
|
72
|
+
};
|
|
73
|
+
}, []);
|
|
74
|
+
(0, import_react.useObserveEffect)((e) => {
|
|
75
|
+
e.onCleanup = cleanup;
|
|
76
|
+
const root = opts$.root.get();
|
|
77
|
+
opts$.rootMargin.get();
|
|
78
|
+
isActive$.get();
|
|
79
|
+
(0, import_useResizeObserver.normalizeTargets)(target);
|
|
80
|
+
if (stoppedRef.current) return;
|
|
81
|
+
if (root === null) return;
|
|
82
|
+
setup();
|
|
83
|
+
});
|
|
84
|
+
const pause = () => {
|
|
85
|
+
if (!mountedRef.current) return;
|
|
86
|
+
cleanup();
|
|
87
|
+
isActive$.set(false);
|
|
88
|
+
};
|
|
89
|
+
const resume = () => {
|
|
90
|
+
if (stoppedRef.current || !mountedRef.current) return;
|
|
91
|
+
isActive$.set(true);
|
|
92
|
+
};
|
|
93
|
+
const stop = () => {
|
|
94
|
+
if (!mountedRef.current) return;
|
|
95
|
+
stoppedRef.current = true;
|
|
96
|
+
cleanup();
|
|
97
|
+
isActive$.set(false);
|
|
98
|
+
};
|
|
99
|
+
return {
|
|
100
|
+
isSupported$,
|
|
101
|
+
isActive$,
|
|
102
|
+
stop,
|
|
103
|
+
pause,
|
|
104
|
+
resume
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
108
|
+
0 && (module.exports = {
|
|
109
|
+
useIntersectionObserver
|
|
110
|
+
});
|
|
111
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/useIntersectionObserver/index.ts"],"sourcesContent":["import type { Observable } from \"@legendapp/state\";\nimport { useObservable, useObserveEffect } from \"@legendapp/state/react\";\nimport { useEffect, useRef } from \"react\";\nimport { useMayObservableOptions } from \"../../function/useMayObservableOptions\";\nimport type { DeepMaybeObservable, MaybeObservable } from \"../../types\";\nimport { isWindow } from \"../../shared\";\nimport type { MaybeElement } from \"../useRef$\";\nimport { normalizeTargets } from \"../useResizeObserver\";\nimport { get } from \"../../function/get\";\n\nexport interface UseIntersectionObserverOptions {\n /** Whether to start observing immediately on mount. Default: true */\n immediate?: boolean;\n /** The element or document used as the viewport. Default: browser viewport */\n root?: MaybeElement;\n /** Margin around the root. Accepts CSS-style values. Default: \"0px\" */\n rootMargin?: string;\n /** Threshold(s) at which to trigger the callback. Default: 0 */\n threshold?: number | number[];\n}\n\nexport interface UseIntersectionObserverReturn {\n isSupported$: Observable<boolean>;\n isActive$: Observable<boolean>;\n stop: () => void;\n pause: () => void;\n resume: () => void;\n}\n\n/**\n * Reactive wrapper around the IntersectionObserver API.\n * Observes one or more elements for intersection changes with pause/resume/stop support.\n *\n * @param target - Element(s) to observe: Ref$, Observable, raw Element, or array of these\n * @param callback - Called when intersection state changes\n * @param options - IntersectionObserver options plus an `immediate` flag\n * @returns `{ isSupported$, isActive$, pause, resume, stop }`\n *\n * @example\n * ```tsx\n * const el$ = useRef$<HTMLDivElement>();\n * const { isActive$, pause, resume } = useIntersectionObserver(\n * el$,\n * (entries) => {\n * entries.forEach(entry => console.log(entry.isIntersecting));\n * },\n * { threshold: 0.5 },\n * );\n * return <div ref={el$} />;\n * ```\n */\nexport function useIntersectionObserver(\n target: MaybeElement | MaybeElement[],\n callback: IntersectionObserverCallback,\n options?: DeepMaybeObservable<UseIntersectionObserverOptions>,\n): UseIntersectionObserverReturn {\n const opts$ = useMayObservableOptions<UseIntersectionObserverOptions>(\n options,\n {\n immediate: \"peek\",\n threshold: \"peek\",\n root: \"get.element\",\n rootMargin: (value) => get(value as MaybeObservable<string | undefined>),\n },\n );\n const isSupported$ = useObservable<boolean>(\n typeof IntersectionObserver !== \"undefined\",\n );\n const isActive$ = useObservable<boolean>(opts$.immediate.peek() !== false);\n const observerRef = useRef<IntersectionObserver | null>(null);\n const stoppedRef = useRef(false);\n const mountedRef = useRef(false);\n\n const cleanup = () => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n };\n\n const setup = () => {\n if (!isSupported$.peek() || !isActive$.peek()) return;\n cleanup();\n\n const rawRoot = opts$.root.peek();\n const root =\n rawRoot == null\n ? (rawRoot as null | undefined)\n : (() => {\n const el = (\n rawRoot as unknown as { valueOf(): HTMLElement | Document }\n ).valueOf();\n return isWindow(el as unknown) ? null : el;\n })();\n\n observerRef.current = new IntersectionObserver(callback, {\n root: root ?? undefined,\n rootMargin: opts$.rootMargin.peek() as string | undefined,\n threshold: (opts$.threshold.peek() as number | number[] | undefined) ?? 0,\n });\n\n const targets = normalizeTargets(target);\n targets.forEach((el) => observerRef.current?.observe(el));\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n cleanup();\n };\n }, []);\n\n useObserveEffect((e) => {\n e.onCleanup = cleanup;\n const root = opts$.root.get();\n opts$.rootMargin.get();\n isActive$.get();\n normalizeTargets(target);\n if (stoppedRef.current) return;\n if (root === null) return;\n setup();\n });\n\n const pause = () => {\n if (!mountedRef.current) return;\n cleanup();\n isActive$.set(false);\n };\n\n const resume = () => {\n if (stoppedRef.current || !mountedRef.current) return;\n isActive$.set(true);\n };\n\n const stop = () => {\n if (!mountedRef.current) return;\n stoppedRef.current = true;\n cleanup();\n isActive$.set(false);\n };\n\n return {\n isSupported$,\n isActive$,\n stop,\n pause,\n resume,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAgD;AAChD,IAAAA,gBAAkC;AAClC,qCAAwC;AAExC,oBAAyB;AAEzB,+BAAiC;AACjC,iBAAoB;AA2Cb,SAAS,wBACd,QACA,UACA,SAC+B;AAC/B,QAAM,YAAQ;AAAA,IACZ;AAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,MACN,YAAY,CAAC,cAAU,gBAAI,KAA4C;AAAA,IACzE;AAAA,EACF;AACA,QAAM,mBAAe;AAAA,IACnB,OAAO,yBAAyB;AAAA,EAClC;AACA,QAAM,gBAAY,4BAAuB,MAAM,UAAU,KAAK,MAAM,KAAK;AACzE,QAAM,kBAAc,sBAAoC,IAAI;AAC5D,QAAM,iBAAa,sBAAO,KAAK;AAC/B,QAAM,iBAAa,sBAAO,KAAK;AAE/B,QAAM,UAAU,MAAM;AACpB,gBAAY,SAAS,WAAW;AAChC,gBAAY,UAAU;AAAA,EACxB;AAEA,QAAM,QAAQ,MAAM;AAClB,QAAI,CAAC,aAAa,KAAK,KAAK,CAAC,UAAU,KAAK,EAAG;AAC/C,YAAQ;AAER,UAAM,UAAU,MAAM,KAAK,KAAK;AAChC,UAAM,OACJ,WAAW,OACN,WACA,MAAM;AACL,YAAM,KACJ,QACA,QAAQ;AACV,iBAAO,wBAAS,EAAa,IAAI,OAAO;AAAA,IAC1C,GAAG;AAET,gBAAY,UAAU,IAAI,qBAAqB,UAAU;AAAA,MACvD,MAAM,QAAQ;AAAA,MACd,YAAY,MAAM,WAAW,KAAK;AAAA,MAClC,WAAY,MAAM,UAAU,KAAK,KAAuC;AAAA,IAC1E,CAAC;AAED,UAAM,cAAU,2CAAiB,MAAM;AACvC,YAAQ,QAAQ,CAAC,OAAO,YAAY,SAAS,QAAQ,EAAE,CAAC;AAAA,EAC1D;AAGA,+BAAU,MAAM;AACd,eAAW,UAAU;AACrB,WAAO,MAAM;AACX,iBAAW,UAAU;AACrB,cAAQ;AAAA,IACV;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,qCAAiB,CAAC,MAAM;AACtB,MAAE,YAAY;AACd,UAAM,OAAO,MAAM,KAAK,IAAI;AAC5B,UAAM,WAAW,IAAI;AACrB,cAAU,IAAI;AACd,mDAAiB,MAAM;AACvB,QAAI,WAAW,QAAS;AACxB,QAAI,SAAS,KAAM;AACnB,UAAM;AAAA,EACR,CAAC;AAED,QAAM,QAAQ,MAAM;AAClB,QAAI,CAAC,WAAW,QAAS;AACzB,YAAQ;AACR,cAAU,IAAI,KAAK;AAAA,EACrB;AAEA,QAAM,SAAS,MAAM;AACnB,QAAI,WAAW,WAAW,CAAC,WAAW,QAAS;AAC/C,cAAU,IAAI,IAAI;AAAA,EACpB;AAEA,QAAM,OAAO,MAAM;AACjB,QAAI,CAAC,WAAW,QAAS;AACzB,eAAW,UAAU;AACrB,YAAQ;AACR,cAAU,IAAI,KAAK;AAAA,EACrB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":["import_react"]}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { useObservable, useObserveEffect } from "@legendapp/state/react";
|
|
2
|
+
import { useEffect, useRef } from "react";
|
|
3
|
+
import { useMayObservableOptions } from "../../function/useMayObservableOptions";
|
|
4
|
+
import { isWindow } from "../../shared";
|
|
5
|
+
import { normalizeTargets } from "../useResizeObserver";
|
|
6
|
+
import { get } from "../../function/get";
|
|
7
|
+
function useIntersectionObserver(target, callback, options) {
|
|
8
|
+
const opts$ = useMayObservableOptions(
|
|
9
|
+
options,
|
|
10
|
+
{
|
|
11
|
+
immediate: "peek",
|
|
12
|
+
threshold: "peek",
|
|
13
|
+
root: "get.element",
|
|
14
|
+
rootMargin: (value) => get(value)
|
|
15
|
+
}
|
|
16
|
+
);
|
|
17
|
+
const isSupported$ = useObservable(
|
|
18
|
+
typeof IntersectionObserver !== "undefined"
|
|
19
|
+
);
|
|
20
|
+
const isActive$ = useObservable(opts$.immediate.peek() !== false);
|
|
21
|
+
const observerRef = useRef(null);
|
|
22
|
+
const stoppedRef = useRef(false);
|
|
23
|
+
const mountedRef = useRef(false);
|
|
24
|
+
const cleanup = () => {
|
|
25
|
+
observerRef.current?.disconnect();
|
|
26
|
+
observerRef.current = null;
|
|
27
|
+
};
|
|
28
|
+
const setup = () => {
|
|
29
|
+
if (!isSupported$.peek() || !isActive$.peek()) return;
|
|
30
|
+
cleanup();
|
|
31
|
+
const rawRoot = opts$.root.peek();
|
|
32
|
+
const root = rawRoot == null ? rawRoot : (() => {
|
|
33
|
+
const el = rawRoot.valueOf();
|
|
34
|
+
return isWindow(el) ? null : el;
|
|
35
|
+
})();
|
|
36
|
+
observerRef.current = new IntersectionObserver(callback, {
|
|
37
|
+
root: root ?? void 0,
|
|
38
|
+
rootMargin: opts$.rootMargin.peek(),
|
|
39
|
+
threshold: opts$.threshold.peek() ?? 0
|
|
40
|
+
});
|
|
41
|
+
const targets = normalizeTargets(target);
|
|
42
|
+
targets.forEach((el) => observerRef.current?.observe(el));
|
|
43
|
+
};
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
mountedRef.current = true;
|
|
46
|
+
return () => {
|
|
47
|
+
mountedRef.current = false;
|
|
48
|
+
cleanup();
|
|
49
|
+
};
|
|
50
|
+
}, []);
|
|
51
|
+
useObserveEffect((e) => {
|
|
52
|
+
e.onCleanup = cleanup;
|
|
53
|
+
const root = opts$.root.get();
|
|
54
|
+
opts$.rootMargin.get();
|
|
55
|
+
isActive$.get();
|
|
56
|
+
normalizeTargets(target);
|
|
57
|
+
if (stoppedRef.current) return;
|
|
58
|
+
if (root === null) return;
|
|
59
|
+
setup();
|
|
60
|
+
});
|
|
61
|
+
const pause = () => {
|
|
62
|
+
if (!mountedRef.current) return;
|
|
63
|
+
cleanup();
|
|
64
|
+
isActive$.set(false);
|
|
65
|
+
};
|
|
66
|
+
const resume = () => {
|
|
67
|
+
if (stoppedRef.current || !mountedRef.current) return;
|
|
68
|
+
isActive$.set(true);
|
|
69
|
+
};
|
|
70
|
+
const stop = () => {
|
|
71
|
+
if (!mountedRef.current) return;
|
|
72
|
+
stoppedRef.current = true;
|
|
73
|
+
cleanup();
|
|
74
|
+
isActive$.set(false);
|
|
75
|
+
};
|
|
76
|
+
return {
|
|
77
|
+
isSupported$,
|
|
78
|
+
isActive$,
|
|
79
|
+
stop,
|
|
80
|
+
pause,
|
|
81
|
+
resume
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export {
|
|
85
|
+
useIntersectionObserver
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/useIntersectionObserver/index.ts"],"sourcesContent":["import type { Observable } from \"@legendapp/state\";\nimport { useObservable, useObserveEffect } from \"@legendapp/state/react\";\nimport { useEffect, useRef } from \"react\";\nimport { useMayObservableOptions } from \"../../function/useMayObservableOptions\";\nimport type { DeepMaybeObservable, MaybeObservable } from \"../../types\";\nimport { isWindow } from \"../../shared\";\nimport type { MaybeElement } from \"../useRef$\";\nimport { normalizeTargets } from \"../useResizeObserver\";\nimport { get } from \"../../function/get\";\n\nexport interface UseIntersectionObserverOptions {\n /** Whether to start observing immediately on mount. Default: true */\n immediate?: boolean;\n /** The element or document used as the viewport. Default: browser viewport */\n root?: MaybeElement;\n /** Margin around the root. Accepts CSS-style values. Default: \"0px\" */\n rootMargin?: string;\n /** Threshold(s) at which to trigger the callback. Default: 0 */\n threshold?: number | number[];\n}\n\nexport interface UseIntersectionObserverReturn {\n isSupported$: Observable<boolean>;\n isActive$: Observable<boolean>;\n stop: () => void;\n pause: () => void;\n resume: () => void;\n}\n\n/**\n * Reactive wrapper around the IntersectionObserver API.\n * Observes one or more elements for intersection changes with pause/resume/stop support.\n *\n * @param target - Element(s) to observe: Ref$, Observable, raw Element, or array of these\n * @param callback - Called when intersection state changes\n * @param options - IntersectionObserver options plus an `immediate` flag\n * @returns `{ isSupported$, isActive$, pause, resume, stop }`\n *\n * @example\n * ```tsx\n * const el$ = useRef$<HTMLDivElement>();\n * const { isActive$, pause, resume } = useIntersectionObserver(\n * el$,\n * (entries) => {\n * entries.forEach(entry => console.log(entry.isIntersecting));\n * },\n * { threshold: 0.5 },\n * );\n * return <div ref={el$} />;\n * ```\n */\nexport function useIntersectionObserver(\n target: MaybeElement | MaybeElement[],\n callback: IntersectionObserverCallback,\n options?: DeepMaybeObservable<UseIntersectionObserverOptions>,\n): UseIntersectionObserverReturn {\n const opts$ = useMayObservableOptions<UseIntersectionObserverOptions>(\n options,\n {\n immediate: \"peek\",\n threshold: \"peek\",\n root: \"get.element\",\n rootMargin: (value) => get(value as MaybeObservable<string | undefined>),\n },\n );\n const isSupported$ = useObservable<boolean>(\n typeof IntersectionObserver !== \"undefined\",\n );\n const isActive$ = useObservable<boolean>(opts$.immediate.peek() !== false);\n const observerRef = useRef<IntersectionObserver | null>(null);\n const stoppedRef = useRef(false);\n const mountedRef = useRef(false);\n\n const cleanup = () => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n };\n\n const setup = () => {\n if (!isSupported$.peek() || !isActive$.peek()) return;\n cleanup();\n\n const rawRoot = opts$.root.peek();\n const root =\n rawRoot == null\n ? (rawRoot as null | undefined)\n : (() => {\n const el = (\n rawRoot as unknown as { valueOf(): HTMLElement | Document }\n ).valueOf();\n return isWindow(el as unknown) ? null : el;\n })();\n\n observerRef.current = new IntersectionObserver(callback, {\n root: root ?? undefined,\n rootMargin: opts$.rootMargin.peek() as string | undefined,\n threshold: (opts$.threshold.peek() as number | number[] | undefined) ?? 0,\n });\n\n const targets = normalizeTargets(target);\n targets.forEach((el) => observerRef.current?.observe(el));\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => {\n mountedRef.current = true;\n return () => {\n mountedRef.current = false;\n cleanup();\n };\n }, []);\n\n useObserveEffect((e) => {\n e.onCleanup = cleanup;\n const root = opts$.root.get();\n opts$.rootMargin.get();\n isActive$.get();\n normalizeTargets(target);\n if (stoppedRef.current) return;\n if (root === null) return;\n setup();\n });\n\n const pause = () => {\n if (!mountedRef.current) return;\n cleanup();\n isActive$.set(false);\n };\n\n const resume = () => {\n if (stoppedRef.current || !mountedRef.current) return;\n isActive$.set(true);\n };\n\n const stop = () => {\n if (!mountedRef.current) return;\n stoppedRef.current = true;\n cleanup();\n isActive$.set(false);\n };\n\n return {\n isSupported$,\n isActive$,\n stop,\n pause,\n resume,\n };\n}\n"],"mappings":"AACA,SAAS,eAAe,wBAAwB;AAChD,SAAS,WAAW,cAAc;AAClC,SAAS,+BAA+B;AAExC,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AACjC,SAAS,WAAW;AA2Cb,SAAS,wBACd,QACA,UACA,SAC+B;AAC/B,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,MACE,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,MACN,YAAY,CAAC,UAAU,IAAI,KAA4C;AAAA,IACzE;AAAA,EACF;AACA,QAAM,eAAe;AAAA,IACnB,OAAO,yBAAyB;AAAA,EAClC;AACA,QAAM,YAAY,cAAuB,MAAM,UAAU,KAAK,MAAM,KAAK;AACzE,QAAM,cAAc,OAAoC,IAAI;AAC5D,QAAM,aAAa,OAAO,KAAK;AAC/B,QAAM,aAAa,OAAO,KAAK;AAE/B,QAAM,UAAU,MAAM;AACpB,gBAAY,SAAS,WAAW;AAChC,gBAAY,UAAU;AAAA,EACxB;AAEA,QAAM,QAAQ,MAAM;AAClB,QAAI,CAAC,aAAa,KAAK,KAAK,CAAC,UAAU,KAAK,EAAG;AAC/C,YAAQ;AAER,UAAM,UAAU,MAAM,KAAK,KAAK;AAChC,UAAM,OACJ,WAAW,OACN,WACA,MAAM;AACL,YAAM,KACJ,QACA,QAAQ;AACV,aAAO,SAAS,EAAa,IAAI,OAAO;AAAA,IAC1C,GAAG;AAET,gBAAY,UAAU,IAAI,qBAAqB,UAAU;AAAA,MACvD,MAAM,QAAQ;AAAA,MACd,YAAY,MAAM,WAAW,KAAK;AAAA,MAClC,WAAY,MAAM,UAAU,KAAK,KAAuC;AAAA,IAC1E,CAAC;AAED,UAAM,UAAU,iBAAiB,MAAM;AACvC,YAAQ,QAAQ,CAAC,OAAO,YAAY,SAAS,QAAQ,EAAE,CAAC;AAAA,EAC1D;AAGA,YAAU,MAAM;AACd,eAAW,UAAU;AACrB,WAAO,MAAM;AACX,iBAAW,UAAU;AACrB,cAAQ;AAAA,IACV;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,mBAAiB,CAAC,MAAM;AACtB,MAAE,YAAY;AACd,UAAM,OAAO,MAAM,KAAK,IAAI;AAC5B,UAAM,WAAW,IAAI;AACrB,cAAU,IAAI;AACd,qBAAiB,MAAM;AACvB,QAAI,WAAW,QAAS;AACxB,QAAI,SAAS,KAAM;AACnB,UAAM;AAAA,EACR,CAAC;AAED,QAAM,QAAQ,MAAM;AAClB,QAAI,CAAC,WAAW,QAAS;AACzB,YAAQ;AACR,cAAU,IAAI,KAAK;AAAA,EACrB;AAEA,QAAM,SAAS,MAAM;AACnB,QAAI,WAAW,WAAW,CAAC,WAAW,QAAS;AAC/C,cAAU,IAAI,IAAI;AAAA,EACpB;AAEA,QAAM,OAAO,MAAM;AACjB,QAAI,CAAC,WAAW,QAAS;AACzB,eAAW,UAAU;AACrB,YAAQ;AACR,cAAU,IAAI,KAAK;AAAA,EACrB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,103 @@
|
|
|
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: () => UseMouseInElementDemo
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(demo_exports);
|
|
24
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
25
|
+
var import_useRef = require("../useRef$");
|
|
26
|
+
var import__ = require(".");
|
|
27
|
+
function UseMouseInElementDemo() {
|
|
28
|
+
const el$ = (0, import_useRef.useRef$)();
|
|
29
|
+
const { elementX$, elementY$, isOutside$, elementWidth$, elementHeight$, x$, y$: _y$ } = (0, import__.useMouseInElement)(el$);
|
|
30
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "12px" }, children: [
|
|
31
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
32
|
+
"div",
|
|
33
|
+
{
|
|
34
|
+
style: {
|
|
35
|
+
display: "grid",
|
|
36
|
+
gridTemplateColumns: "repeat(3, 1fr)",
|
|
37
|
+
gap: "6px",
|
|
38
|
+
fontFamily: "monospace",
|
|
39
|
+
fontSize: "13px",
|
|
40
|
+
padding: "10px 14px",
|
|
41
|
+
background: "var(--sl-color-gray-6, #f1f5f9)",
|
|
42
|
+
borderRadius: "6px"
|
|
43
|
+
},
|
|
44
|
+
children: [
|
|
45
|
+
["elementX", `${Math.round(elementX$.get())}px`],
|
|
46
|
+
["elementY", `${Math.round(elementY$.get())}px`],
|
|
47
|
+
["isOutside", String(isOutside$.get())],
|
|
48
|
+
["width", `${Math.round(elementWidth$.get())}px`],
|
|
49
|
+
["height", `${Math.round(elementHeight$.get())}px`],
|
|
50
|
+
["x (global)", `${Math.round(x$.get())}px`]
|
|
51
|
+
].map(([label, val]) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
|
|
52
|
+
label,
|
|
53
|
+
": ",
|
|
54
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", { children: val })
|
|
55
|
+
] }, label))
|
|
56
|
+
}
|
|
57
|
+
),
|
|
58
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
59
|
+
"div",
|
|
60
|
+
{
|
|
61
|
+
ref: el$,
|
|
62
|
+
style: {
|
|
63
|
+
position: "relative",
|
|
64
|
+
width: "100%",
|
|
65
|
+
height: "160px",
|
|
66
|
+
border: "1px solid var(--sl-color-gray-5, #cbd5e1)",
|
|
67
|
+
borderRadius: "6px",
|
|
68
|
+
overflow: "hidden",
|
|
69
|
+
display: "flex",
|
|
70
|
+
alignItems: "center",
|
|
71
|
+
justifyContent: "center",
|
|
72
|
+
userSelect: "none",
|
|
73
|
+
fontFamily: "monospace",
|
|
74
|
+
fontSize: "13px",
|
|
75
|
+
color: "var(--sl-color-gray-3, #94a3b8)",
|
|
76
|
+
cursor: "crosshair"
|
|
77
|
+
},
|
|
78
|
+
children: [
|
|
79
|
+
"move your mouse here",
|
|
80
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
81
|
+
"div",
|
|
82
|
+
{
|
|
83
|
+
style: {
|
|
84
|
+
position: "absolute",
|
|
85
|
+
left: elementX$.get(),
|
|
86
|
+
top: elementY$.get(),
|
|
87
|
+
width: "10px",
|
|
88
|
+
height: "10px",
|
|
89
|
+
borderRadius: "50%",
|
|
90
|
+
background: "var(--sl-color-accent, #818cf8)",
|
|
91
|
+
transform: "translate(-50%, -50%)",
|
|
92
|
+
pointerEvents: "none",
|
|
93
|
+
opacity: isOutside$.get() ? 0 : 1,
|
|
94
|
+
transition: "opacity 0.15s"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
)
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
)
|
|
101
|
+
] });
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/useMouseInElement/demo.tsx"],"sourcesContent":["import { useRef$ } from \"../useRef$\";\nimport { useMouseInElement } from \".\";\n\nexport default function UseMouseInElementDemo() {\n const el$ = useRef$<HTMLDivElement>();\n const { elementX$, elementY$, isOutside$, elementWidth$, elementHeight$, x$, y$: _y$ } =\n useMouseInElement(el$);\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"12px\" }}>\n {/* Stats readout */}\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(3, 1fr)\",\n gap: \"6px\",\n fontFamily: \"monospace\",\n fontSize: \"13px\",\n padding: \"10px 14px\",\n background: \"var(--sl-color-gray-6, #f1f5f9)\",\n borderRadius: \"6px\",\n }}\n >\n {(\n [\n [\"elementX\", `${Math.round(elementX$.get())}px`],\n [\"elementY\", `${Math.round(elementY$.get())}px`],\n [\"isOutside\", String(isOutside$.get())],\n [\"width\", `${Math.round(elementWidth$.get())}px`],\n [\"height\", `${Math.round(elementHeight$.get())}px`],\n [\"x (global)\", `${Math.round(x$.get())}px`],\n ] as [string, string][]\n ).map(([label, val]) => (\n <span key={label}>\n {label}: <strong>{val}</strong>\n </span>\n ))}\n </div>\n\n {/* Hover target with tracking dot */}\n <div\n ref={el$}\n style={{\n position: \"relative\",\n width: \"100%\",\n height: \"160px\",\n border: \"1px solid var(--sl-color-gray-5, #cbd5e1)\",\n borderRadius: \"6px\",\n overflow: \"hidden\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n userSelect: \"none\",\n fontFamily: \"monospace\",\n fontSize: \"13px\",\n color: \"var(--sl-color-gray-3, #94a3b8)\",\n cursor: \"crosshair\",\n }}\n >\n move your mouse here\n <div\n style={{\n position: \"absolute\",\n left: elementX$.get(),\n top: elementY$.get(),\n width: \"10px\",\n height: \"10px\",\n borderRadius: \"50%\",\n background: \"var(--sl-color-accent, #818cf8)\",\n transform: \"translate(-50%, -50%)\",\n pointerEvents: \"none\",\n opacity: isOutside$.get() ? 0 : 1,\n transition: \"opacity 0.15s\",\n }}\n />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCU;AAjCV,oBAAwB;AACxB,eAAkC;AAEnB,SAAR,wBAAyC;AAC9C,QAAM,UAAM,uBAAwB;AACpC,QAAM,EAAE,WAAW,WAAW,YAAY,eAAe,gBAAgB,IAAI,IAAI,IAAI,QACnF,4BAAkB,GAAG;AAEvB,SACE,6CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,OAAO,GAElE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,qBAAqB;AAAA,UACrB,KAAK;AAAA,UACL,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,cAAc;AAAA,QAChB;AAAA,QAGE;AAAA,UACE,CAAC,YAAY,GAAG,KAAK,MAAM,UAAU,IAAI,CAAC,CAAC,IAAI;AAAA,UAC/C,CAAC,YAAY,GAAG,KAAK,MAAM,UAAU,IAAI,CAAC,CAAC,IAAI;AAAA,UAC/C,CAAC,aAAa,OAAO,WAAW,IAAI,CAAC,CAAC;AAAA,UACtC,CAAC,SAAS,GAAG,KAAK,MAAM,cAAc,IAAI,CAAC,CAAC,IAAI;AAAA,UAChD,CAAC,UAAU,GAAG,KAAK,MAAM,eAAe,IAAI,CAAC,CAAC,IAAI;AAAA,UAClD,CAAC,cAAc,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,IAAI;AAAA,QAC5C,EACA,IAAI,CAAC,CAAC,OAAO,GAAG,MAChB,6CAAC,UACE;AAAA;AAAA,UAAM;AAAA,UAAE,4CAAC,YAAQ,eAAI;AAAA,aADb,KAEX,CACD;AAAA;AAAA,IACH;AAAA,IAGA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,OAAO;AAAA,UACL,UAAU;AAAA,UACV,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,UAAU;AAAA,UACV,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,OAAO;AAAA,UACP,QAAQ;AAAA,QACV;AAAA,QACD;AAAA;AAAA,UAEC;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,gBACL,UAAU;AAAA,gBACV,MAAM,UAAU,IAAI;AAAA,gBACpB,KAAK,UAAU,IAAI;AAAA,gBACnB,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,cAAc;AAAA,gBACd,YAAY;AAAA,gBACZ,WAAW;AAAA,gBACX,eAAe;AAAA,gBACf,SAAS,WAAW,IAAI,IAAI,IAAI;AAAA,gBAChC,YAAY;AAAA,cACd;AAAA;AAAA,UACF;AAAA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useRef$ } from "../useRef$";
|
|
3
|
+
import { useMouseInElement } from ".";
|
|
4
|
+
function UseMouseInElementDemo() {
|
|
5
|
+
const el$ = useRef$();
|
|
6
|
+
const { elementX$, elementY$, isOutside$, elementWidth$, elementHeight$, x$, y$: _y$ } = useMouseInElement(el$);
|
|
7
|
+
return /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "12px" }, children: [
|
|
8
|
+
/* @__PURE__ */ jsx(
|
|
9
|
+
"div",
|
|
10
|
+
{
|
|
11
|
+
style: {
|
|
12
|
+
display: "grid",
|
|
13
|
+
gridTemplateColumns: "repeat(3, 1fr)",
|
|
14
|
+
gap: "6px",
|
|
15
|
+
fontFamily: "monospace",
|
|
16
|
+
fontSize: "13px",
|
|
17
|
+
padding: "10px 14px",
|
|
18
|
+
background: "var(--sl-color-gray-6, #f1f5f9)",
|
|
19
|
+
borderRadius: "6px"
|
|
20
|
+
},
|
|
21
|
+
children: [
|
|
22
|
+
["elementX", `${Math.round(elementX$.get())}px`],
|
|
23
|
+
["elementY", `${Math.round(elementY$.get())}px`],
|
|
24
|
+
["isOutside", String(isOutside$.get())],
|
|
25
|
+
["width", `${Math.round(elementWidth$.get())}px`],
|
|
26
|
+
["height", `${Math.round(elementHeight$.get())}px`],
|
|
27
|
+
["x (global)", `${Math.round(x$.get())}px`]
|
|
28
|
+
].map(([label, val]) => /* @__PURE__ */ jsxs("span", { children: [
|
|
29
|
+
label,
|
|
30
|
+
": ",
|
|
31
|
+
/* @__PURE__ */ jsx("strong", { children: val })
|
|
32
|
+
] }, label))
|
|
33
|
+
}
|
|
34
|
+
),
|
|
35
|
+
/* @__PURE__ */ jsxs(
|
|
36
|
+
"div",
|
|
37
|
+
{
|
|
38
|
+
ref: el$,
|
|
39
|
+
style: {
|
|
40
|
+
position: "relative",
|
|
41
|
+
width: "100%",
|
|
42
|
+
height: "160px",
|
|
43
|
+
border: "1px solid var(--sl-color-gray-5, #cbd5e1)",
|
|
44
|
+
borderRadius: "6px",
|
|
45
|
+
overflow: "hidden",
|
|
46
|
+
display: "flex",
|
|
47
|
+
alignItems: "center",
|
|
48
|
+
justifyContent: "center",
|
|
49
|
+
userSelect: "none",
|
|
50
|
+
fontFamily: "monospace",
|
|
51
|
+
fontSize: "13px",
|
|
52
|
+
color: "var(--sl-color-gray-3, #94a3b8)",
|
|
53
|
+
cursor: "crosshair"
|
|
54
|
+
},
|
|
55
|
+
children: [
|
|
56
|
+
"move your mouse here",
|
|
57
|
+
/* @__PURE__ */ jsx(
|
|
58
|
+
"div",
|
|
59
|
+
{
|
|
60
|
+
style: {
|
|
61
|
+
position: "absolute",
|
|
62
|
+
left: elementX$.get(),
|
|
63
|
+
top: elementY$.get(),
|
|
64
|
+
width: "10px",
|
|
65
|
+
height: "10px",
|
|
66
|
+
borderRadius: "50%",
|
|
67
|
+
background: "var(--sl-color-accent, #818cf8)",
|
|
68
|
+
transform: "translate(-50%, -50%)",
|
|
69
|
+
pointerEvents: "none",
|
|
70
|
+
opacity: isOutside$.get() ? 0 : 1,
|
|
71
|
+
transition: "opacity 0.15s"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
)
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
)
|
|
78
|
+
] });
|
|
79
|
+
}
|
|
80
|
+
export {
|
|
81
|
+
UseMouseInElementDemo as default
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=demo.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/useMouseInElement/demo.tsx"],"sourcesContent":["import { useRef$ } from \"../useRef$\";\nimport { useMouseInElement } from \".\";\n\nexport default function UseMouseInElementDemo() {\n const el$ = useRef$<HTMLDivElement>();\n const { elementX$, elementY$, isOutside$, elementWidth$, elementHeight$, x$, y$: _y$ } =\n useMouseInElement(el$);\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"12px\" }}>\n {/* Stats readout */}\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"repeat(3, 1fr)\",\n gap: \"6px\",\n fontFamily: \"monospace\",\n fontSize: \"13px\",\n padding: \"10px 14px\",\n background: \"var(--sl-color-gray-6, #f1f5f9)\",\n borderRadius: \"6px\",\n }}\n >\n {(\n [\n [\"elementX\", `${Math.round(elementX$.get())}px`],\n [\"elementY\", `${Math.round(elementY$.get())}px`],\n [\"isOutside\", String(isOutside$.get())],\n [\"width\", `${Math.round(elementWidth$.get())}px`],\n [\"height\", `${Math.round(elementHeight$.get())}px`],\n [\"x (global)\", `${Math.round(x$.get())}px`],\n ] as [string, string][]\n ).map(([label, val]) => (\n <span key={label}>\n {label}: <strong>{val}</strong>\n </span>\n ))}\n </div>\n\n {/* Hover target with tracking dot */}\n <div\n ref={el$}\n style={{\n position: \"relative\",\n width: \"100%\",\n height: \"160px\",\n border: \"1px solid var(--sl-color-gray-5, #cbd5e1)\",\n borderRadius: \"6px\",\n overflow: \"hidden\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n userSelect: \"none\",\n fontFamily: \"monospace\",\n fontSize: \"13px\",\n color: \"var(--sl-color-gray-3, #94a3b8)\",\n cursor: \"crosshair\",\n }}\n >\n move your mouse here\n <div\n style={{\n position: \"absolute\",\n left: elementX$.get(),\n top: elementY$.get(),\n width: \"10px\",\n height: \"10px\",\n borderRadius: \"50%\",\n background: \"var(--sl-color-accent, #818cf8)\",\n transform: \"translate(-50%, -50%)\",\n pointerEvents: \"none\",\n opacity: isOutside$.get() ? 0 : 1,\n transition: \"opacity 0.15s\",\n }}\n />\n </div>\n </div>\n );\n}\n"],"mappings":"AAiCU,SACW,KADX;AAjCV,SAAS,eAAe;AACxB,SAAS,yBAAyB;AAEnB,SAAR,wBAAyC;AAC9C,QAAM,MAAM,QAAwB;AACpC,QAAM,EAAE,WAAW,WAAW,YAAY,eAAe,gBAAgB,IAAI,IAAI,IAAI,IACnF,kBAAkB,GAAG;AAEvB,SACE,qBAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,OAAO,GAElE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,qBAAqB;AAAA,UACrB,KAAK;AAAA,UACL,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,cAAc;AAAA,QAChB;AAAA,QAGE;AAAA,UACE,CAAC,YAAY,GAAG,KAAK,MAAM,UAAU,IAAI,CAAC,CAAC,IAAI;AAAA,UAC/C,CAAC,YAAY,GAAG,KAAK,MAAM,UAAU,IAAI,CAAC,CAAC,IAAI;AAAA,UAC/C,CAAC,aAAa,OAAO,WAAW,IAAI,CAAC,CAAC;AAAA,UACtC,CAAC,SAAS,GAAG,KAAK,MAAM,cAAc,IAAI,CAAC,CAAC,IAAI;AAAA,UAChD,CAAC,UAAU,GAAG,KAAK,MAAM,eAAe,IAAI,CAAC,CAAC,IAAI;AAAA,UAClD,CAAC,cAAc,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,IAAI;AAAA,QAC5C,EACA,IAAI,CAAC,CAAC,OAAO,GAAG,MAChB,qBAAC,UACE;AAAA;AAAA,UAAM;AAAA,UAAE,oBAAC,YAAQ,eAAI;AAAA,aADb,KAEX,CACD;AAAA;AAAA,IACH;AAAA,IAGA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,OAAO;AAAA,UACL,UAAU;AAAA,UACV,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,UAAU;AAAA,UACV,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,OAAO;AAAA,UACP,QAAQ;AAAA,QACV;AAAA,QACD;AAAA;AAAA,UAEC;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,gBACL,UAAU;AAAA,gBACV,MAAM,UAAU,IAAI;AAAA,gBACpB,KAAK,UAAU,IAAI;AAAA,gBACnB,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,cAAc;AAAA,gBACd,YAAY;AAAA,gBACZ,WAAW;AAAA,gBACX,eAAe;AAAA,gBACf,SAAS,WAAW,IAAI,IAAI,IAAI;AAAA,gBAChC,YAAY;AAAA,cACd;AAAA;AAAA,UACF;AAAA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Observable } from '@legendapp/state';
|
|
2
|
+
import { DeepMaybeObservable } from '../../types.mjs';
|
|
3
|
+
import { MaybeElement } from '../useRef_/index.mjs';
|
|
4
|
+
import 'react';
|
|
5
|
+
|
|
6
|
+
interface UseMouseInElementOptions {
|
|
7
|
+
/** Also update elementX/Y when mouse is outside the element. Default: true */
|
|
8
|
+
handleOutside?: boolean;
|
|
9
|
+
/** Re-calculate on window scroll. Default: true */
|
|
10
|
+
windowScroll?: boolean;
|
|
11
|
+
/** Re-calculate on window resize. Default: true */
|
|
12
|
+
windowResize?: boolean;
|
|
13
|
+
}
|
|
14
|
+
interface UseMouseInElementReturn {
|
|
15
|
+
/** Mouse X position relative to the element */
|
|
16
|
+
elementX$: Observable<number>;
|
|
17
|
+
/** Mouse Y position relative to the element */
|
|
18
|
+
elementY$: Observable<number>;
|
|
19
|
+
/** Element's absolute X position on the page */
|
|
20
|
+
elementPositionX$: Observable<number>;
|
|
21
|
+
/** Element's absolute Y position on the page */
|
|
22
|
+
elementPositionY$: Observable<number>;
|
|
23
|
+
/** Element width */
|
|
24
|
+
elementWidth$: Observable<number>;
|
|
25
|
+
/** Element height */
|
|
26
|
+
elementHeight$: Observable<number>;
|
|
27
|
+
/** Whether the mouse is outside the element */
|
|
28
|
+
isOutside$: Observable<boolean>;
|
|
29
|
+
/** Global mouse X (clientX) */
|
|
30
|
+
x$: Observable<number>;
|
|
31
|
+
/** Global mouse Y (clientY) */
|
|
32
|
+
y$: Observable<number>;
|
|
33
|
+
/** Stop all observers and event listeners */
|
|
34
|
+
stop: () => void;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Tracks whether the mouse cursor is inside a DOM element and calculates
|
|
38
|
+
* the cursor position relative to that element.
|
|
39
|
+
*
|
|
40
|
+
* Observes mousemove, document mouseleave, ResizeObserver, MutationObserver
|
|
41
|
+
* (style/class changes), window scroll, and resize.
|
|
42
|
+
*
|
|
43
|
+
* @param target - Element to observe: Ref$, Observable<OpaqueObject<Element>|null>, Document, Window, or null
|
|
44
|
+
* @param options - Configuration options
|
|
45
|
+
* @returns Reactive mouse position values relative to the element, plus a manual `stop()` function
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```tsx
|
|
49
|
+
* const el$ = useRef$<HTMLDivElement>();
|
|
50
|
+
* const { elementX$, elementY$, isOutside$ } = useMouseInElement(el$);
|
|
51
|
+
* return <div ref={el$} />;
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
declare function useMouseInElement(target: MaybeElement, options?: DeepMaybeObservable<UseMouseInElementOptions>): UseMouseInElementReturn;
|
|
55
|
+
|
|
56
|
+
export { type UseMouseInElementOptions, type UseMouseInElementReturn, useMouseInElement };
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Observable } from '@legendapp/state';
|
|
2
|
+
import { DeepMaybeObservable } from '../../types.js';
|
|
3
|
+
import { MaybeElement } from '../useRef_/index.js';
|
|
4
|
+
import 'react';
|
|
5
|
+
|
|
6
|
+
interface UseMouseInElementOptions {
|
|
7
|
+
/** Also update elementX/Y when mouse is outside the element. Default: true */
|
|
8
|
+
handleOutside?: boolean;
|
|
9
|
+
/** Re-calculate on window scroll. Default: true */
|
|
10
|
+
windowScroll?: boolean;
|
|
11
|
+
/** Re-calculate on window resize. Default: true */
|
|
12
|
+
windowResize?: boolean;
|
|
13
|
+
}
|
|
14
|
+
interface UseMouseInElementReturn {
|
|
15
|
+
/** Mouse X position relative to the element */
|
|
16
|
+
elementX$: Observable<number>;
|
|
17
|
+
/** Mouse Y position relative to the element */
|
|
18
|
+
elementY$: Observable<number>;
|
|
19
|
+
/** Element's absolute X position on the page */
|
|
20
|
+
elementPositionX$: Observable<number>;
|
|
21
|
+
/** Element's absolute Y position on the page */
|
|
22
|
+
elementPositionY$: Observable<number>;
|
|
23
|
+
/** Element width */
|
|
24
|
+
elementWidth$: Observable<number>;
|
|
25
|
+
/** Element height */
|
|
26
|
+
elementHeight$: Observable<number>;
|
|
27
|
+
/** Whether the mouse is outside the element */
|
|
28
|
+
isOutside$: Observable<boolean>;
|
|
29
|
+
/** Global mouse X (clientX) */
|
|
30
|
+
x$: Observable<number>;
|
|
31
|
+
/** Global mouse Y (clientY) */
|
|
32
|
+
y$: Observable<number>;
|
|
33
|
+
/** Stop all observers and event listeners */
|
|
34
|
+
stop: () => void;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Tracks whether the mouse cursor is inside a DOM element and calculates
|
|
38
|
+
* the cursor position relative to that element.
|
|
39
|
+
*
|
|
40
|
+
* Observes mousemove, document mouseleave, ResizeObserver, MutationObserver
|
|
41
|
+
* (style/class changes), window scroll, and resize.
|
|
42
|
+
*
|
|
43
|
+
* @param target - Element to observe: Ref$, Observable<OpaqueObject<Element>|null>, Document, Window, or null
|
|
44
|
+
* @param options - Configuration options
|
|
45
|
+
* @returns Reactive mouse position values relative to the element, plus a manual `stop()` function
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```tsx
|
|
49
|
+
* const el$ = useRef$<HTMLDivElement>();
|
|
50
|
+
* const { elementX$, elementY$, isOutside$ } = useMouseInElement(el$);
|
|
51
|
+
* return <div ref={el$} />;
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
declare function useMouseInElement(target: MaybeElement, options?: DeepMaybeObservable<UseMouseInElementOptions>): UseMouseInElementReturn;
|
|
55
|
+
|
|
56
|
+
export { type UseMouseInElementOptions, type UseMouseInElementReturn, useMouseInElement };
|