react-atom-trigger 1.0.9 → 1.0.15
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/lib/AtomTrigger.d.ts +1 -25
- package/lib/AtomTrigger.types.d.ts +25 -0
- package/lib/index.es.js +1 -1
- package/lib/index.js +1 -1
- package/lib/utils.d.ts +2 -2
- package/package.json +19 -18
package/lib/AtomTrigger.d.ts
CHANGED
|
@@ -1,28 +1,4 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
scrollX: number;
|
|
4
|
-
scrollY: number;
|
|
5
|
-
};
|
|
6
|
-
export type Dimensions = {
|
|
7
|
-
width: number;
|
|
8
|
-
height: number;
|
|
9
|
-
};
|
|
10
|
-
export type DebugInfo = {
|
|
11
|
-
timesTriggered: {
|
|
12
|
-
leftViewport: number;
|
|
13
|
-
enteredViewport: number;
|
|
14
|
-
};
|
|
15
|
-
trigger: 'entered' | 'left';
|
|
16
|
-
};
|
|
17
|
-
export interface IAtomTriggerProps {
|
|
18
|
-
scrollEvent: ScrollEvent;
|
|
19
|
-
behavior?: 'default' | 'enter' | 'leave';
|
|
20
|
-
callback: () => unknown;
|
|
21
|
-
getDebugInfo?: (data: DebugInfo) => void;
|
|
22
|
-
triggerOnce?: boolean;
|
|
23
|
-
className?: string;
|
|
24
|
-
dimensions: Dimensions | null;
|
|
25
|
-
offset?: [number, number, number, number];
|
|
26
|
-
}
|
|
2
|
+
import { IAtomTriggerProps } from './AtomTrigger.types';
|
|
27
3
|
declare const AtomTrigger: React.FC<IAtomTriggerProps>;
|
|
28
4
|
export default AtomTrigger;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type ScrollEvent = {
|
|
2
|
+
scrollX: number;
|
|
3
|
+
scrollY: number;
|
|
4
|
+
};
|
|
5
|
+
export type Dimensions = {
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
};
|
|
9
|
+
export type DebugInfo = {
|
|
10
|
+
timesTriggered: {
|
|
11
|
+
leftViewport: number;
|
|
12
|
+
enteredViewport: number;
|
|
13
|
+
};
|
|
14
|
+
trigger: 'entered' | 'left';
|
|
15
|
+
};
|
|
16
|
+
export interface IAtomTriggerProps {
|
|
17
|
+
scrollEvent: ScrollEvent;
|
|
18
|
+
behavior?: 'default' | 'enter' | 'leave';
|
|
19
|
+
callback: () => unknown;
|
|
20
|
+
getDebugInfo?: (data: DebugInfo) => void;
|
|
21
|
+
triggerOnce?: boolean;
|
|
22
|
+
className?: string;
|
|
23
|
+
dimensions: Dimensions;
|
|
24
|
+
offset?: [number, number, number, number];
|
|
25
|
+
}
|
package/lib/index.es.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"react";const t=({scrollEvent:t,callback:r,getDebugInfo:n,triggerOnce:o=!1,className:s,behavior:i="default",dimensions:c,offset:u=[0,0,0,0]})=>{const l=e.useRef(null),[f,
|
|
1
|
+
import e from"react";const t=({scrollEvent:t,callback:r,getDebugInfo:n,triggerOnce:o=!1,className:s,behavior:i="default",dimensions:c,offset:u=[0,0,0,0]})=>{const l=e.useRef(null),[f,d]=e.useState(void 0),a=e.useRef(void 0),[p,v]=e.useState({leftViewport:0,enteredViewport:0});return e.useLayoutEffect((()=>{if(l.current){const e=l.current.getBoundingClientRect(),[t,r,n,o]=u;e.top>t&&e.bottom<c.height-n&&e.left>o&&e.right<c.width-r?d("inViewport"):e.top>c.height-n?d("bottom"):d("top")}}),[l,t,c,u]),e.useLayoutEffect((()=>{if(void 0===a.current&&void 0!==f&&(a.current=f),"inViewport"===f&&("bottom"===a.current||"top"===a.current)){if("enter"===i&&(!o||o&&p.enteredViewport)||"default"===i&&(!o||o&&(p.enteredViewport<1||p.leftViewport<1))){r&&r();const e={...p,enteredViewport:p.enteredViewport+1};n&&n({timesTriggered:e,trigger:"entered"}),v(e)}a.current=f}if(("top"===f||"bottom"===f)&&"inViewport"===a.current&&(a.current=f,"leave"===i&&(!o||o&&0===p.leftViewport)||"default"===i&&(!o||o&&(p.leftViewport<1||p.enteredViewport<1)))){r&&r();const e={...p,leftViewport:p.leftViewport+1};n&&n({timesTriggered:e,trigger:"left"}),v(e)}}),[f,r,o,i,n]),e.createElement("div",{ref:l,style:{display:"table"},className:s})};function r(e,t){"development"===process.env.NODE_ENV&&(t=t?`background: ${t}; color: #fff`:"background: #007700; color: #fff",console.group("%c log: "+e,t),console.groupEnd())}function n(){const{scrollX:e,scrollY:t}=window;return{scrollX:e,scrollY:t}}function o(){const{innerWidth:e,innerHeight:t}=window;return{width:e,height:t}}function s(t){const[r,n]=e.useState(o()),s=e.useRef(null),i=e.useRef(!1),c=t?.eventListenerTimeoutMs||15;return e.useEffect((()=>{const e=o();function r(){s.current&&clearTimeout(s.current),s.current=setTimeout((()=>n(o())),c)}return n(e),window.addEventListener("resize",r,{passive:t?.passiveEventListener}),i.current=!0,()=>{i&&window.removeEventListener("resize",r)}}),[]),r}function i({containerRef:t,options:r}){const[o,s]=e.useState(n()),i=e.useRef(null),c=e.useRef(!1);return e.useEffect((()=>{const e=e=>{const t=e.target;i.current&&clearTimeout(i.current),i.current=setTimeout((()=>{s({scrollX:t.scrollLeft,scrollY:t.scrollTop})}),r?.eventListenerTimeoutMs||15)},n=t?.current;return n&&(n&&!1===c.current&&n.addEventListener("scroll",e,{passive:r?.passiveEventListener}),c.current=!0),()=>{c&&n&&n.removeEventListener("scroll",e)}}),[t]),o}function c(t){const[r,o]=e.useState(n()),s=e.useRef(null),i=e.useRef(!1);return e.useEffect((()=>{const e=()=>{s.current&&clearTimeout(s.current),s.current=setTimeout((()=>{const{scrollX:e,scrollY:t}=n();o({scrollX:e,scrollY:t})}),t?.eventListenerTimeoutMs||20)};return window.addEventListener("scroll",e,{passive:t?.passiveEventListener}),i.current=!0,()=>{i&&window.removeEventListener("scroll",e)}}),[]),r}export{t as AtomTrigger,r as log,i as useContainerScroll,s as useWindowDimensions,c as useWindowScroll};
|
package/lib/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["react-atom-trigger"]={},e.React)}(this,(function(e,t){"use strict";function r(){const{scrollX:e,scrollY:t}=window;return{scrollX:e,scrollY:t}}function n(){const{innerWidth:e,innerHeight:t}=window;return{width:e,height:t}}e.AtomTrigger=({scrollEvent:e,callback:r,getDebugInfo:n,triggerOnce:o=!1,className:i,behavior:s="default",dimensions:c,offset:u=[0,0,0,0]})=>{const l=t.useRef(null),[f,d]=t.useState(),a=t.useRef(),[p,g]=t.useState({leftViewport:0,enteredViewport:0});return t.useLayoutEffect((()=>{if(l.current
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["react-atom-trigger"]={},e.React)}(this,(function(e,t){"use strict";function r(){const{scrollX:e,scrollY:t}=window;return{scrollX:e,scrollY:t}}function n(){const{innerWidth:e,innerHeight:t}=window;return{width:e,height:t}}e.AtomTrigger=({scrollEvent:e,callback:r,getDebugInfo:n,triggerOnce:o=!1,className:i,behavior:s="default",dimensions:c,offset:u=[0,0,0,0]})=>{const l=t.useRef(null),[f,d]=t.useState(void 0),a=t.useRef(void 0),[p,g]=t.useState({leftViewport:0,enteredViewport:0});return t.useLayoutEffect((()=>{if(l.current){const e=l.current.getBoundingClientRect(),[t,r,n,o]=u;e.top>t&&e.bottom<c.height-n&&e.left>o&&e.right<c.width-r?d("inViewport"):e.top>c.height-n?d("bottom"):d("top")}}),[l,e,c,u]),t.useLayoutEffect((()=>{if(void 0===a.current&&void 0!==f&&(a.current=f),"inViewport"===f&&("bottom"===a.current||"top"===a.current)){if("enter"===s&&(!o||o&&p.enteredViewport)||"default"===s&&(!o||o&&(p.enteredViewport<1||p.leftViewport<1))){r&&r();const e={...p,enteredViewport:p.enteredViewport+1};n&&n({timesTriggered:e,trigger:"entered"}),g(e)}a.current=f}if(("top"===f||"bottom"===f)&&"inViewport"===a.current&&(a.current=f,"leave"===s&&(!o||o&&0===p.leftViewport)||"default"===s&&(!o||o&&(p.leftViewport<1||p.enteredViewport<1)))){r&&r();const e={...p,leftViewport:p.leftViewport+1};n&&n({timesTriggered:e,trigger:"left"}),g(e)}}),[f,r,o,s,n]),t.createElement("div",{ref:l,style:{display:"table"},className:i})},e.log=function(e,t){"development"===process.env.NODE_ENV&&(t=t?`background: ${t}; color: #fff`:"background: #007700; color: #fff",console.group("%c log: "+e,t),console.groupEnd())},e.useContainerScroll=function({containerRef:e,options:n}){const[o,i]=t.useState(r()),s=t.useRef(null),c=t.useRef(!1);return t.useEffect((()=>{const t=e=>{const t=e.target;s.current&&clearTimeout(s.current),s.current=setTimeout((()=>{i({scrollX:t.scrollLeft,scrollY:t.scrollTop})}),n?.eventListenerTimeoutMs||15)},r=e?.current;return r&&(r&&!1===c.current&&r.addEventListener("scroll",t,{passive:n?.passiveEventListener}),c.current=!0),()=>{c&&r&&r.removeEventListener("scroll",t)}}),[e]),o},e.useWindowDimensions=function(e){const[r,o]=t.useState(n()),i=t.useRef(null),s=t.useRef(!1),c=e?.eventListenerTimeoutMs||15;return t.useEffect((()=>{const t=n();function r(){i.current&&clearTimeout(i.current),i.current=setTimeout((()=>o(n())),c)}return o(t),window.addEventListener("resize",r,{passive:e?.passiveEventListener}),s.current=!0,()=>{s&&window.removeEventListener("resize",r)}}),[]),r},e.useWindowScroll=function(e){const[n,o]=t.useState(r()),i=t.useRef(null),s=t.useRef(!1);return t.useEffect((()=>{const t=()=>{i.current&&clearTimeout(i.current),i.current=setTimeout((()=>{const{scrollX:e,scrollY:t}=r();o({scrollX:e,scrollY:t})}),e?.eventListenerTimeoutMs||20)};return window.addEventListener("scroll",t,{passive:e?.passiveEventListener}),s.current=!0,()=>{s&&window.removeEventListener("scroll",t)}}),[]),n}}));
|
package/lib/utils.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Dimensions, ScrollEvent } from './AtomTrigger';
|
|
2
|
+
import { Dimensions, ScrollEvent } from './AtomTrigger.types';
|
|
3
3
|
export type Options = {
|
|
4
4
|
passiveEventListener?: boolean;
|
|
5
5
|
eventListenerTimeoutMs?: number;
|
|
6
6
|
};
|
|
7
7
|
export declare function log<T>(log: T, color?: string): void;
|
|
8
|
-
export declare function useWindowDimensions(options?: Options | undefined): Dimensions
|
|
8
|
+
export declare function useWindowDimensions(options?: Options | undefined): Dimensions;
|
|
9
9
|
export declare function useContainerScroll({ containerRef, options, }: {
|
|
10
10
|
containerRef?: React.RefObject<HTMLDivElement>;
|
|
11
11
|
options?: Options;
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib/index.es.js",
|
|
7
7
|
"typings": "lib/index.d.ts",
|
|
8
|
-
"version": "1.0.
|
|
8
|
+
"version": "1.0.15",
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"author": "innrVoice <innrvoice@icloud.com>",
|
|
11
11
|
"repository": {
|
|
@@ -22,26 +22,27 @@
|
|
|
22
22
|
"react": "^18.2.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@rollup/plugin-commonjs": "^
|
|
26
|
-
"@rollup/plugin-node-resolve": "^
|
|
27
|
-
"@types/node": "^
|
|
28
|
-
"@types/react": "
|
|
29
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
30
|
-
"@typescript-eslint/parser": "^
|
|
31
|
-
"eslint": "^
|
|
32
|
-
"eslint-config-prettier": "^
|
|
25
|
+
"@rollup/plugin-commonjs": "^28.0.1",
|
|
26
|
+
"@rollup/plugin-node-resolve": "^16.0.0",
|
|
27
|
+
"@types/node": "^22.10.6",
|
|
28
|
+
"@types/react": "19.0.6",
|
|
29
|
+
"@typescript-eslint/eslint-plugin": "^8.20.0",
|
|
30
|
+
"@typescript-eslint/parser": "^8.20.0",
|
|
31
|
+
"eslint": "^9.18.0",
|
|
32
|
+
"eslint-config-prettier": "^10.0.1",
|
|
33
33
|
"eslint-plugin-node": "^11.1.0",
|
|
34
|
-
"eslint-plugin-prettier": "^
|
|
34
|
+
"eslint-plugin-prettier": "^5.2.1",
|
|
35
35
|
"eslint-plugin-react": "^7.27.1",
|
|
36
|
-
"eslint-plugin-react-hooks": "^
|
|
36
|
+
"eslint-plugin-react-hooks": "^5.1.0",
|
|
37
37
|
"eslint-plugin-sort-imports-es6-autofix": "^0.6.0",
|
|
38
|
-
"prettier": "^
|
|
39
|
-
"rimraf": "^
|
|
40
|
-
"rollup": "^
|
|
38
|
+
"prettier": "^3.4.2",
|
|
39
|
+
"rimraf": "^6.0.1",
|
|
40
|
+
"rollup": "^4.24.0",
|
|
41
|
+
"rollup-plugin-node-externals": "^8.0.0",
|
|
41
42
|
"rollup-plugin-terser": "^7.0.2",
|
|
42
|
-
"rollup-plugin-typescript2": "^0.
|
|
43
|
-
"tslib": "^2.
|
|
44
|
-
"typescript": "^5.
|
|
43
|
+
"rollup-plugin-typescript2": "^0.36.0",
|
|
44
|
+
"tslib": "^2.8.0",
|
|
45
|
+
"typescript": "^5.6.3"
|
|
45
46
|
},
|
|
46
47
|
"keywords": [
|
|
47
48
|
"react",
|
|
@@ -54,6 +55,6 @@
|
|
|
54
55
|
"lib"
|
|
55
56
|
],
|
|
56
57
|
"volta": {
|
|
57
|
-
"node": "18.
|
|
58
|
+
"node": "20.18.1"
|
|
58
59
|
}
|
|
59
60
|
}
|