@nifrajs/island-trigger 4.0.0 → 5.0.0
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/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -32
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +22 -32
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,oGAAoG;AACpG,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAErF,2EAA2E;AAC3E,eAAO,MAAM,sBAAsB,MAAM,CAAA;AAEzC,MAAM,WAAW,cAAc;IAC7B,8FAA8F;IAC9F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,oGAAoG;AACpG,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAErF,2EAA2E;AAC3E,eAAO,MAAM,sBAAsB,MAAM,CAAA;AAEzC,MAAM,WAAW,cAAc;IAC7B,8FAA8F;IAC9F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAuCD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,MAAM,IAAI,EACf,OAAO,GAAE,cAAmB,GAC3B,MAAM,IAAI,CAgFZ"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
/** The maximum media-query length accepted from an HTML data attribute. */
|
|
7
7
|
export const MAX_MEDIA_QUERY_LENGTH = 256;
|
|
8
|
-
const NOOP = () => { };
|
|
9
8
|
const mediaQuery = (strategy) => {
|
|
10
9
|
if (typeof strategy !== "object" || strategy === null)
|
|
11
10
|
return undefined;
|
|
@@ -21,41 +20,42 @@ export function scheduleTrigger(strategy, run, options = {}) {
|
|
|
21
20
|
// Cast through unknown so a consumer's DOM lib cannot merge its stricter Element signatures into
|
|
22
21
|
// this structural, DOM-free contract.
|
|
23
22
|
const browser = globalThis;
|
|
24
|
-
let fired = false;
|
|
25
23
|
let disposed = false;
|
|
26
24
|
let cleanup;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
fired = true;
|
|
25
|
+
// The one disposer every pending strategy returns; `cleanup` holds what that strategy registered.
|
|
26
|
+
const stop = () => {
|
|
27
|
+
disposed = true;
|
|
31
28
|
cleanup?.();
|
|
32
29
|
cleanup = undefined;
|
|
30
|
+
};
|
|
31
|
+
// Firing stops the trigger first, so a late event (or a dispose) finds it already done.
|
|
32
|
+
const fire = () => {
|
|
33
|
+
if (disposed)
|
|
34
|
+
return;
|
|
35
|
+
stop();
|
|
33
36
|
run();
|
|
34
37
|
};
|
|
35
38
|
if (strategy === "load") {
|
|
36
39
|
fire();
|
|
37
|
-
return
|
|
40
|
+
return stop;
|
|
38
41
|
}
|
|
39
42
|
if (strategy === "idle") {
|
|
40
43
|
const ric = browser.requestIdleCallback;
|
|
41
44
|
if (ric === undefined) {
|
|
42
|
-
const handle =
|
|
43
|
-
|
|
44
|
-
disposed = true;
|
|
45
|
-
globalThis.clearTimeout(handle);
|
|
46
|
-
};
|
|
45
|
+
const handle = setTimeout(fire, 1);
|
|
46
|
+
cleanup = () => clearTimeout(handle);
|
|
47
47
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
else {
|
|
49
|
+
const handle = ric(fire);
|
|
50
|
+
cleanup = () => browser.cancelIdleCallback?.(handle);
|
|
51
|
+
}
|
|
52
|
+
return stop;
|
|
53
53
|
}
|
|
54
54
|
if (strategy === "visible") {
|
|
55
55
|
const Observer = browser.IntersectionObserver;
|
|
56
56
|
if (options.target === undefined || Observer === undefined) {
|
|
57
57
|
fire();
|
|
58
|
-
return
|
|
58
|
+
return stop;
|
|
59
59
|
}
|
|
60
60
|
const observer = new Observer((entries) => {
|
|
61
61
|
if (entries.some((entry) => entry.isIntersecting))
|
|
@@ -63,26 +63,22 @@ export function scheduleTrigger(strategy, run, options = {}) {
|
|
|
63
63
|
});
|
|
64
64
|
observer.observe(options.target);
|
|
65
65
|
cleanup = () => observer.disconnect();
|
|
66
|
-
return
|
|
67
|
-
disposed = true;
|
|
68
|
-
cleanup?.();
|
|
69
|
-
cleanup = undefined;
|
|
70
|
-
};
|
|
66
|
+
return stop;
|
|
71
67
|
}
|
|
72
68
|
const query = mediaQuery(strategy);
|
|
73
69
|
const matchMedia = browser.matchMedia;
|
|
74
70
|
if (query === undefined)
|
|
75
|
-
return
|
|
71
|
+
return stop;
|
|
76
72
|
if (matchMedia === undefined) {
|
|
77
73
|
// No matchMedia means the browser cannot honor a conditional trigger. Immediate activation is
|
|
78
74
|
// the availability fallback; malformed/oversized queries remain inert above.
|
|
79
75
|
fire();
|
|
80
|
-
return
|
|
76
|
+
return stop;
|
|
81
77
|
}
|
|
82
78
|
const list = matchMedia(query);
|
|
83
79
|
if (list.matches) {
|
|
84
80
|
fire();
|
|
85
|
-
return
|
|
81
|
+
return stop;
|
|
86
82
|
}
|
|
87
83
|
const onChange = (event) => {
|
|
88
84
|
if (event.matches)
|
|
@@ -97,12 +93,8 @@ export function scheduleTrigger(strategy, run, options = {}) {
|
|
|
97
93
|
cleanup = () => list.removeListener?.(onChange);
|
|
98
94
|
}
|
|
99
95
|
else {
|
|
100
|
-
return
|
|
96
|
+
return stop;
|
|
101
97
|
}
|
|
102
|
-
return
|
|
103
|
-
disposed = true;
|
|
104
|
-
cleanup?.();
|
|
105
|
-
cleanup = undefined;
|
|
106
|
-
};
|
|
98
|
+
return stop;
|
|
107
99
|
}
|
|
108
100
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -15,8 +15,6 @@ export interface TriggerOptions {
|
|
|
15
15
|
readonly target?: object
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
const NOOP = (): void => {}
|
|
19
|
-
|
|
20
18
|
/** Structural event shape used instead of a DOM lib type so this package stays runtime-neutral. */
|
|
21
19
|
interface MediaQueryChangeEvent {
|
|
22
20
|
readonly matches: boolean
|
|
@@ -67,71 +65,67 @@ export function scheduleTrigger(
|
|
|
67
65
|
// Cast through unknown so a consumer's DOM lib cannot merge its stricter Element signatures into
|
|
68
66
|
// this structural, DOM-free contract.
|
|
69
67
|
const browser = globalThis as unknown as BrowserCapabilities
|
|
70
|
-
let fired = false
|
|
71
68
|
let disposed = false
|
|
72
69
|
let cleanup: (() => void) | undefined
|
|
73
70
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
71
|
+
// The one disposer every pending strategy returns; `cleanup` holds what that strategy registered.
|
|
72
|
+
const stop = (): void => {
|
|
73
|
+
disposed = true
|
|
77
74
|
cleanup?.()
|
|
78
75
|
cleanup = undefined
|
|
76
|
+
}
|
|
77
|
+
// Firing stops the trigger first, so a late event (or a dispose) finds it already done.
|
|
78
|
+
const fire = (): void => {
|
|
79
|
+
if (disposed) return
|
|
80
|
+
stop()
|
|
79
81
|
run()
|
|
80
82
|
}
|
|
81
83
|
|
|
82
84
|
if (strategy === "load") {
|
|
83
85
|
fire()
|
|
84
|
-
return
|
|
86
|
+
return stop
|
|
85
87
|
}
|
|
86
88
|
|
|
87
89
|
if (strategy === "idle") {
|
|
88
90
|
const ric = browser.requestIdleCallback
|
|
89
91
|
if (ric === undefined) {
|
|
90
|
-
const handle =
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
const handle = ric(fire)
|
|
97
|
-
return () => {
|
|
98
|
-
disposed = true
|
|
99
|
-
browser.cancelIdleCallback?.(handle)
|
|
92
|
+
const handle = setTimeout(fire, 1)
|
|
93
|
+
cleanup = () => clearTimeout(handle)
|
|
94
|
+
} else {
|
|
95
|
+
const handle = ric(fire)
|
|
96
|
+
cleanup = () => browser.cancelIdleCallback?.(handle)
|
|
100
97
|
}
|
|
98
|
+
return stop
|
|
101
99
|
}
|
|
102
100
|
|
|
103
101
|
if (strategy === "visible") {
|
|
104
102
|
const Observer = browser.IntersectionObserver
|
|
105
103
|
if (options.target === undefined || Observer === undefined) {
|
|
106
104
|
fire()
|
|
107
|
-
return
|
|
105
|
+
return stop
|
|
108
106
|
}
|
|
109
107
|
const observer = new Observer((entries) => {
|
|
110
108
|
if (entries.some((entry) => entry.isIntersecting)) fire()
|
|
111
109
|
})
|
|
112
110
|
observer.observe(options.target)
|
|
113
111
|
cleanup = () => observer.disconnect()
|
|
114
|
-
return
|
|
115
|
-
disposed = true
|
|
116
|
-
cleanup?.()
|
|
117
|
-
cleanup = undefined
|
|
118
|
-
}
|
|
112
|
+
return stop
|
|
119
113
|
}
|
|
120
114
|
|
|
121
115
|
const query = mediaQuery(strategy)
|
|
122
116
|
const matchMedia = browser.matchMedia
|
|
123
|
-
if (query === undefined) return
|
|
117
|
+
if (query === undefined) return stop
|
|
124
118
|
if (matchMedia === undefined) {
|
|
125
119
|
// No matchMedia means the browser cannot honor a conditional trigger. Immediate activation is
|
|
126
120
|
// the availability fallback; malformed/oversized queries remain inert above.
|
|
127
121
|
fire()
|
|
128
|
-
return
|
|
122
|
+
return stop
|
|
129
123
|
}
|
|
130
124
|
|
|
131
125
|
const list = matchMedia(query)
|
|
132
126
|
if (list.matches) {
|
|
133
127
|
fire()
|
|
134
|
-
return
|
|
128
|
+
return stop
|
|
135
129
|
}
|
|
136
130
|
|
|
137
131
|
const onChange = (event: MediaQueryChangeEvent): void => {
|
|
@@ -144,11 +138,7 @@ export function scheduleTrigger(
|
|
|
144
138
|
list.addListener(onChange)
|
|
145
139
|
cleanup = () => list.removeListener?.(onChange)
|
|
146
140
|
} else {
|
|
147
|
-
return
|
|
148
|
-
}
|
|
149
|
-
return () => {
|
|
150
|
-
disposed = true
|
|
151
|
-
cleanup?.()
|
|
152
|
-
cleanup = undefined
|
|
141
|
+
return stop
|
|
153
142
|
}
|
|
143
|
+
return stop
|
|
154
144
|
}
|