polite-media 0.3.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/CHANGELOG.md +113 -0
- package/LICENSE +21 -0
- package/README.md +675 -0
- package/dist/coordinator.d.ts +231 -0
- package/dist/coordinator.d.ts.map +1 -0
- package/dist/coordinator.js +1017 -0
- package/dist/coordinator.js.map +1 -0
- package/dist/env.d.ts +30 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +49 -0
- package/dist/env.js.map +1 -0
- package/dist/events.d.ts +70 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +42 -0
- package/dist/events.js.map +1 -0
- package/dist/image.css +1 -0
- package/dist/image.d.ts +45 -0
- package/dist/image.d.ts.map +1 -0
- package/dist/image.js +127 -0
- package/dist/image.js.map +1 -0
- package/dist/layer.css +1 -0
- package/dist/reveal.d.ts +34 -0
- package/dist/reveal.d.ts.map +1 -0
- package/dist/reveal.js +72 -0
- package/dist/reveal.js.map +1 -0
- package/dist/sources.d.ts +22 -0
- package/dist/sources.d.ts.map +1 -0
- package/dist/sources.js +148 -0
- package/dist/sources.js.map +1 -0
- package/dist/targets.d.ts +20 -0
- package/dist/targets.d.ts.map +1 -0
- package/dist/targets.js +17 -0
- package/dist/targets.js.map +1 -0
- package/dist/video.css +1 -0
- package/dist/video.d.ts +15 -0
- package/dist/video.d.ts.map +1 -0
- package/dist/video.js +17 -0
- package/dist/video.js.map +1 -0
- package/dist/warm.d.ts +13 -0
- package/dist/warm.d.ts.map +1 -0
- package/dist/warm.js +12 -0
- package/dist/warm.js.map +1 -0
- package/dist/warming.d.ts +62 -0
- package/dist/warming.d.ts.map +1 -0
- package/dist/warming.js +136 -0
- package/dist/warming.js.map +1 -0
- package/package.json +96 -0
- package/src/coordinator.ts +1337 -0
- package/src/env.ts +56 -0
- package/src/events.ts +78 -0
- package/src/image.css +74 -0
- package/src/image.ts +160 -0
- package/src/layer.css +60 -0
- package/src/reveal.ts +75 -0
- package/src/sources.ts +164 -0
- package/src/targets.ts +27 -0
- package/src/video.css +74 -0
- package/src/video.ts +32 -0
- package/src/warm.ts +12 -0
- package/src/warming.ts +162 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../src/coordinator.ts"],"names":[],"mappings":"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"}
|
package/dist/env.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment gates: the conditions under which video is allowed to play at all.
|
|
3
|
+
* The poster is a complete fallback for every one of them, so a gate that says no
|
|
4
|
+
* costs the user nothing.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Memoised `matchMedia`, and the reason every media query in this package goes
|
|
8
|
+
* through one function: a module-scope `matchMedia(...)` throws the moment the
|
|
9
|
+
* package is imported anywhere without a DOM (SSR, prerender, a Node test), and
|
|
10
|
+
* would contradict the `sideEffects` declaration in package.json.
|
|
11
|
+
*
|
|
12
|
+
* Memoising also lets callers attach `change` listeners to the same object the
|
|
13
|
+
* predicates read, so "honour it live" costs no extra plumbing.
|
|
14
|
+
*/
|
|
15
|
+
export declare function mediaQuery(query: string): MediaQueryList;
|
|
16
|
+
export declare function motionAllowed(): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Video is an enhancement over a poster that already stands on its own, so it is
|
|
19
|
+
* skipped on a metered or very slow connection.
|
|
20
|
+
*
|
|
21
|
+
* Absence must mean *allow*. The Network Information API is not Baseline: Safari
|
|
22
|
+
* and Firefox never expose it, and Brave disables it as a fingerprinting surface.
|
|
23
|
+
* Reading absence as "block" would fail closed for most of the web, and fail
|
|
24
|
+
* closed in the one direction nobody would catch: Chrome is the browser that has
|
|
25
|
+
* the API, so a Chrome-only developer never sees it.
|
|
26
|
+
*/
|
|
27
|
+
export declare function connectionAllowsMedia(): boolean;
|
|
28
|
+
/** Drops memoised queries so a test can swap `matchMedia`. Not part of the public API. */
|
|
29
|
+
export declare function resetEnv(): void;
|
|
30
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAOxD;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAOD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAK/C;AAED,0FAA0F;AAC1F,wBAAgB,QAAQ,IAAI,IAAI,CAE/B"}
|
package/dist/env.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment gates: the conditions under which video is allowed to play at all.
|
|
3
|
+
* The poster is a complete fallback for every one of them, so a gate that says no
|
|
4
|
+
* costs the user nothing.
|
|
5
|
+
*/
|
|
6
|
+
const queries = new Map();
|
|
7
|
+
/**
|
|
8
|
+
* Memoised `matchMedia`, and the reason every media query in this package goes
|
|
9
|
+
* through one function: a module-scope `matchMedia(...)` throws the moment the
|
|
10
|
+
* package is imported anywhere without a DOM (SSR, prerender, a Node test), and
|
|
11
|
+
* would contradict the `sideEffects` declaration in package.json.
|
|
12
|
+
*
|
|
13
|
+
* Memoising also lets callers attach `change` listeners to the same object the
|
|
14
|
+
* predicates read, so "honour it live" costs no extra plumbing.
|
|
15
|
+
*/
|
|
16
|
+
export function mediaQuery(query) {
|
|
17
|
+
let mql = queries.get(query);
|
|
18
|
+
if (!mql) {
|
|
19
|
+
mql = matchMedia(query);
|
|
20
|
+
queries.set(query, mql);
|
|
21
|
+
}
|
|
22
|
+
return mql;
|
|
23
|
+
}
|
|
24
|
+
export function motionAllowed() {
|
|
25
|
+
return !mediaQuery('(prefers-reduced-motion: reduce)').matches;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Video is an enhancement over a poster that already stands on its own, so it is
|
|
29
|
+
* skipped on a metered or very slow connection.
|
|
30
|
+
*
|
|
31
|
+
* Absence must mean *allow*. The Network Information API is not Baseline: Safari
|
|
32
|
+
* and Firefox never expose it, and Brave disables it as a fingerprinting surface.
|
|
33
|
+
* Reading absence as "block" would fail closed for most of the web, and fail
|
|
34
|
+
* closed in the one direction nobody would catch: Chrome is the browser that has
|
|
35
|
+
* the API, so a Chrome-only developer never sees it.
|
|
36
|
+
*/
|
|
37
|
+
export function connectionAllowsMedia() {
|
|
38
|
+
const conn = navigator.connection;
|
|
39
|
+
if (!conn)
|
|
40
|
+
return true;
|
|
41
|
+
if (conn.saveData)
|
|
42
|
+
return false;
|
|
43
|
+
return conn.effectiveType !== 'slow-2g' && conn.effectiveType !== '2g';
|
|
44
|
+
}
|
|
45
|
+
/** Drops memoised queries so a test can swap `matchMedia`. Not part of the public API. */
|
|
46
|
+
export function resetEnv() {
|
|
47
|
+
queries.clear();
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=env.js.map
|
package/dist/env.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;AAElD;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC,OAAO,CAAC;AACjE,CAAC;AAOD;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,IAAI,GAAI,SAA6D,CAAC,UAAU,CAAC;IACvF,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAChC,OAAO,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC;AACzE,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,QAAQ;IACtB,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
|
package/dist/events.d.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The events both halves dispatch, and the typing that makes them usable.
|
|
3
|
+
*
|
|
4
|
+
* Three pieces, because no one of them is sufficient on its own:
|
|
5
|
+
*
|
|
6
|
+
* - The **constants**, because a mistyped event name still compiles. lib.dom
|
|
7
|
+
* declares a fallback `addEventListener(type: string, ...)` overload, so
|
|
8
|
+
* `'polite-video:redy'` type-checks happily however the maps are augmented.
|
|
9
|
+
* - The **detail**, because these events bubble by design and the useful
|
|
10
|
+
* listener sits on a container, which makes `event.target` the wrong element
|
|
11
|
+
* or a bare `EventTarget` needing a cast.
|
|
12
|
+
* - The **augmentation**, so a listener gets `CustomEvent<Detail>` rather than
|
|
13
|
+
* `Event`.
|
|
14
|
+
*
|
|
15
|
+
* `ElementEventMap` and `DocumentEventMap` are the two that have to be patched,
|
|
16
|
+
* and not the more obvious `HTMLElementEventMap`. lib.dom declares
|
|
17
|
+
* `HTMLElementEventMap extends ElementEventMap`, so augmenting the base reaches
|
|
18
|
+
* `HTMLElement`, `HTMLMediaElement` and `HTMLVideoElement` through inheritance,
|
|
19
|
+
* while augmenting the derived one reaches none of its ancestors. `document` is
|
|
20
|
+
* a separate branch entirely -- `DocumentEventMap extends
|
|
21
|
+
* GlobalEventHandlersEventMap` -- so it needs its own entry.
|
|
22
|
+
*/
|
|
23
|
+
/** Dispatched on the video once a frame has genuinely painted. Bubbles. */
|
|
24
|
+
export declare const POLITE_VIDEO_READY = "polite-video:ready";
|
|
25
|
+
/** Dispatched on the video when no source could be decoded. Bubbles. */
|
|
26
|
+
export declare const POLITE_VIDEO_FAILED = "polite-video:failed";
|
|
27
|
+
/** Dispatched on the image once it has decoded. Bubbles. */
|
|
28
|
+
export declare const POLITE_IMAGE_READY = "polite-image:ready";
|
|
29
|
+
/**
|
|
30
|
+
* Dispatched on `document` when the user pauses or resumes everything.
|
|
31
|
+
*
|
|
32
|
+
* The odd one out, and deliberately: a user pause is page-wide rather than about
|
|
33
|
+
* one video, so there is no element to dispatch it at and nothing for it to
|
|
34
|
+
* bubble through. Only `DocumentEventMap` is augmented for it.
|
|
35
|
+
*
|
|
36
|
+
* It exists because the alternative for a host is watching `data-polite-paused`
|
|
37
|
+
* on `<html>` with a MutationObserver, which is the same unreasonable ask this
|
|
38
|
+
* library avoids by maintaining `aria-pressed` itself. Without it, the
|
|
39
|
+
* label-swapping control the README offers as an option cannot be built.
|
|
40
|
+
*/
|
|
41
|
+
export declare const POLITE_VIDEO_PAUSECHANGE = "polite-video:pausechange";
|
|
42
|
+
export interface PoliteVideoEventDetail {
|
|
43
|
+
/**
|
|
44
|
+
* The managed video. Saves casting `event.target`, which is the container
|
|
45
|
+
* rather than the video whenever the listener is on an ancestor.
|
|
46
|
+
*/
|
|
47
|
+
video: HTMLVideoElement;
|
|
48
|
+
}
|
|
49
|
+
export interface PoliteImageEventDetail {
|
|
50
|
+
/** The managed image, for the same reason. */
|
|
51
|
+
image: HTMLImageElement;
|
|
52
|
+
}
|
|
53
|
+
export interface PolitePauseEventDetail {
|
|
54
|
+
/** True once the user has paused everything, false once they resume. */
|
|
55
|
+
paused: boolean;
|
|
56
|
+
}
|
|
57
|
+
declare global {
|
|
58
|
+
interface ElementEventMap {
|
|
59
|
+
'polite-video:ready': CustomEvent<PoliteVideoEventDetail>;
|
|
60
|
+
'polite-video:failed': CustomEvent<PoliteVideoEventDetail>;
|
|
61
|
+
'polite-image:ready': CustomEvent<PoliteImageEventDetail>;
|
|
62
|
+
}
|
|
63
|
+
interface DocumentEventMap {
|
|
64
|
+
'polite-video:ready': CustomEvent<PoliteVideoEventDetail>;
|
|
65
|
+
'polite-video:failed': CustomEvent<PoliteVideoEventDetail>;
|
|
66
|
+
'polite-image:ready': CustomEvent<PoliteImageEventDetail>;
|
|
67
|
+
'polite-video:pausechange': CustomEvent<PolitePauseEventDetail>;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAEvD,wEAAwE;AACxE,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AAEzD,4DAA4D;AAC5D,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAEvD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAEnE,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,8CAA8C;IAC9C,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,wEAAwE;IACxE,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,eAAe;QACvB,oBAAoB,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC1D,qBAAqB,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC3D,oBAAoB,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;KAC3D;IAED,UAAU,gBAAgB;QACxB,oBAAoB,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC1D,qBAAqB,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC3D,oBAAoB,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC1D,0BAA0B,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;KACjE;CACF"}
|
package/dist/events.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The events both halves dispatch, and the typing that makes them usable.
|
|
3
|
+
*
|
|
4
|
+
* Three pieces, because no one of them is sufficient on its own:
|
|
5
|
+
*
|
|
6
|
+
* - The **constants**, because a mistyped event name still compiles. lib.dom
|
|
7
|
+
* declares a fallback `addEventListener(type: string, ...)` overload, so
|
|
8
|
+
* `'polite-video:redy'` type-checks happily however the maps are augmented.
|
|
9
|
+
* - The **detail**, because these events bubble by design and the useful
|
|
10
|
+
* listener sits on a container, which makes `event.target` the wrong element
|
|
11
|
+
* or a bare `EventTarget` needing a cast.
|
|
12
|
+
* - The **augmentation**, so a listener gets `CustomEvent<Detail>` rather than
|
|
13
|
+
* `Event`.
|
|
14
|
+
*
|
|
15
|
+
* `ElementEventMap` and `DocumentEventMap` are the two that have to be patched,
|
|
16
|
+
* and not the more obvious `HTMLElementEventMap`. lib.dom declares
|
|
17
|
+
* `HTMLElementEventMap extends ElementEventMap`, so augmenting the base reaches
|
|
18
|
+
* `HTMLElement`, `HTMLMediaElement` and `HTMLVideoElement` through inheritance,
|
|
19
|
+
* while augmenting the derived one reaches none of its ancestors. `document` is
|
|
20
|
+
* a separate branch entirely -- `DocumentEventMap extends
|
|
21
|
+
* GlobalEventHandlersEventMap` -- so it needs its own entry.
|
|
22
|
+
*/
|
|
23
|
+
/** Dispatched on the video once a frame has genuinely painted. Bubbles. */
|
|
24
|
+
export const POLITE_VIDEO_READY = 'polite-video:ready';
|
|
25
|
+
/** Dispatched on the video when no source could be decoded. Bubbles. */
|
|
26
|
+
export const POLITE_VIDEO_FAILED = 'polite-video:failed';
|
|
27
|
+
/** Dispatched on the image once it has decoded. Bubbles. */
|
|
28
|
+
export const POLITE_IMAGE_READY = 'polite-image:ready';
|
|
29
|
+
/**
|
|
30
|
+
* Dispatched on `document` when the user pauses or resumes everything.
|
|
31
|
+
*
|
|
32
|
+
* The odd one out, and deliberately: a user pause is page-wide rather than about
|
|
33
|
+
* one video, so there is no element to dispatch it at and nothing for it to
|
|
34
|
+
* bubble through. Only `DocumentEventMap` is augmented for it.
|
|
35
|
+
*
|
|
36
|
+
* It exists because the alternative for a host is watching `data-polite-paused`
|
|
37
|
+
* on `<html>` with a MutationObserver, which is the same unreasonable ask this
|
|
38
|
+
* library avoids by maintaining `aria-pressed` itself. Without it, the
|
|
39
|
+
* label-swapping control the README offers as an option cannot be built.
|
|
40
|
+
*/
|
|
41
|
+
export const POLITE_VIDEO_PAUSECHANGE = 'polite-video:pausechange';
|
|
42
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEvD,wEAAwE;AACxE,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAEzD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEvD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAC"}
|
package/dist/image.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@media(scripting:enabled){img[data-polite-reveal]{opacity:0;transition:opacity var(--polite-fade, .35s) ease;animation:polite-reveal-failsafe 0s var(--polite-failsafe, 5s) forwards}img[data-polite-reveal][data-polite-ready]{opacity:1}@keyframes polite-reveal-failsafe{to{opacity:1}}}@media(prefers-reduced-motion:reduce){img[data-polite-reveal]{transition:none}}
|
package/dist/image.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module
|
|
3
|
+
* Image reveal. Independent of the video module by design: an image needs no
|
|
4
|
+
* IntersectionObserver, no source negotiation and no playback arbitration, and
|
|
5
|
+
* it is not skipped on a metered connection the way video is -- you still have
|
|
6
|
+
* to show the picture.
|
|
7
|
+
*
|
|
8
|
+
* The point is the same as the video module's, applied to a different signal:
|
|
9
|
+
* reveal when pixels are ready, not when bytes arrived. `load` fires *before*
|
|
10
|
+
* decode, so fading on it can start against an undecoded bitmap and hitch.
|
|
11
|
+
* `HTMLImageElement.decode()` resolves when the image is actually paintable,
|
|
12
|
+
* which is the image analogue of requestVideoFrameCallback.
|
|
13
|
+
*
|
|
14
|
+
* Reduced motion is handled entirely in image.css: the image still reveals, it
|
|
15
|
+
* just does so instantly. No JS gate, because "show the picture without
|
|
16
|
+
* animating" is a pure styling concern.
|
|
17
|
+
*/
|
|
18
|
+
import { type Target } from './targets.js';
|
|
19
|
+
/** Anything that names one or more images. See {@link Target}. */
|
|
20
|
+
export type ImageTarget = Target<HTMLImageElement>;
|
|
21
|
+
export interface RevealImagesOptions {
|
|
22
|
+
/**
|
|
23
|
+
* Manage images that are not `loading="lazy"`.
|
|
24
|
+
*
|
|
25
|
+
* Off by default because LCP excludes elements at `opacity: 0`, and revealing
|
|
26
|
+
* one does not restore its candidacy -- so fading an eager, above-the-fold
|
|
27
|
+
* image can forfeit the metric it was meant to improve. A lazy image was never
|
|
28
|
+
* an LCP candidate, so the default is risk-free.
|
|
29
|
+
*
|
|
30
|
+
* Turning this on is legitimate and sometimes right: an eager grid that would
|
|
31
|
+
* otherwise cut from its backdrop to the photo on whatever frame the async
|
|
32
|
+
* decode lands looks worse without a fade. It just has to be a decision rather
|
|
33
|
+
* than an accident.
|
|
34
|
+
*/
|
|
35
|
+
allowEager?: boolean;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Reveals each matching image once it has decoded.
|
|
39
|
+
*
|
|
40
|
+
* Returns a function that stops any reveals still pending, for a client-side
|
|
41
|
+
* router tearing the page down before the images resolved.
|
|
42
|
+
*/
|
|
43
|
+
export declare function revealImages(target: ImageTarget, options?: RevealImagesOptions): () => void;
|
|
44
|
+
export { POLITE_IMAGE_READY, type PoliteImageEventDetail } from './events.js';
|
|
45
|
+
//# sourceMappingURL=image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAkB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3D,kEAAkE;AAClE,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAmDD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,IAAI,CA0D/F;AAKD,OAAO,EAAE,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/image.js
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module
|
|
3
|
+
* Image reveal. Independent of the video module by design: an image needs no
|
|
4
|
+
* IntersectionObserver, no source negotiation and no playback arbitration, and
|
|
5
|
+
* it is not skipped on a metered connection the way video is -- you still have
|
|
6
|
+
* to show the picture.
|
|
7
|
+
*
|
|
8
|
+
* The point is the same as the video module's, applied to a different signal:
|
|
9
|
+
* reveal when pixels are ready, not when bytes arrived. `load` fires *before*
|
|
10
|
+
* decode, so fading on it can start against an undecoded bitmap and hitch.
|
|
11
|
+
* `HTMLImageElement.decode()` resolves when the image is actually paintable,
|
|
12
|
+
* which is the image analogue of requestVideoFrameCallback.
|
|
13
|
+
*
|
|
14
|
+
* Reduced motion is handled entirely in image.css: the image still reveals, it
|
|
15
|
+
* just does so instantly. No JS gate, because "show the picture without
|
|
16
|
+
* animating" is a pure styling concern.
|
|
17
|
+
*/
|
|
18
|
+
import { POLITE_IMAGE_READY } from './events.js';
|
|
19
|
+
import { resolveTargets } from './targets.js';
|
|
20
|
+
const READY = 'data-polite-ready';
|
|
21
|
+
function markReady(image) {
|
|
22
|
+
image.setAttribute(READY, '');
|
|
23
|
+
image.dispatchEvent(new CustomEvent(POLITE_IMAGE_READY, {
|
|
24
|
+
bubbles: true,
|
|
25
|
+
detail: { image },
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Every image this module has taken responsibility for.
|
|
30
|
+
*
|
|
31
|
+
* A WeakSet rather than an attribute: the stylesheet no longer needs to know
|
|
32
|
+
* which images are managed, so writing it into the DOM would be state kept for
|
|
33
|
+
* nobody. Weak so a released image is not pinned by the bookkeeping.
|
|
34
|
+
*/
|
|
35
|
+
const managed = new WeakSet();
|
|
36
|
+
let unmanagedCheck;
|
|
37
|
+
/**
|
|
38
|
+
* The failsafe in image.css keeps a stray image from vanishing, but silently.
|
|
39
|
+
* This is the half a developer can act on: it names the element and says which
|
|
40
|
+
* of the two mistakes was made.
|
|
41
|
+
*
|
|
42
|
+
* Debounced rather than run per call, because several `revealImages()` calls
|
|
43
|
+
* with different selectors are a normal way to set a page up and an image is
|
|
44
|
+
* only stray once all of them have had their chance. Rescheduling also means a
|
|
45
|
+
* client-side navigation gets its own check instead of one per page lifetime,
|
|
46
|
+
* which a once-only flag would have given.
|
|
47
|
+
*/
|
|
48
|
+
function scheduleUnmanagedCheck() {
|
|
49
|
+
clearTimeout(unmanagedCheck);
|
|
50
|
+
unmanagedCheck = setTimeout(() => {
|
|
51
|
+
for (const image of document.querySelectorAll('img[data-polite-reveal]')) {
|
|
52
|
+
if (managed.has(image))
|
|
53
|
+
continue;
|
|
54
|
+
console.warn('polite-media: no revealImages() call manages this image, so the failsafe revealed ' +
|
|
55
|
+
'it late and unfaded. Widen the selector, or drop data-polite-reveal.', image);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
}, 1000);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Reveals each matching image once it has decoded.
|
|
62
|
+
*
|
|
63
|
+
* Returns a function that stops any reveals still pending, for a client-side
|
|
64
|
+
* router tearing the page down before the images resolved.
|
|
65
|
+
*/
|
|
66
|
+
export function revealImages(target, options = {}) {
|
|
67
|
+
const controller = new AbortController();
|
|
68
|
+
const { signal } = controller;
|
|
69
|
+
scheduleUnmanagedCheck();
|
|
70
|
+
for (const image of resolveTargets(target)) {
|
|
71
|
+
managed.add(image);
|
|
72
|
+
// Eager images are revealed at once rather than skipped.
|
|
73
|
+
//
|
|
74
|
+
// Skipping looks like the cautious choice and is the opposite: image.css
|
|
75
|
+
// has already hidden anything carrying data-polite-reveal, so declining to
|
|
76
|
+
// manage it leaves it invisible permanently instead of merely unfaded.
|
|
77
|
+
// Revealing immediately keeps the LCP candidate visible from its first
|
|
78
|
+
// paint, which is the whole reason eager images are treated differently.
|
|
79
|
+
//
|
|
80
|
+
// Tested against 'lazy' rather than for 'eager' deliberately. Engines
|
|
81
|
+
// disagree on what an absent or invalid attribute reports: MDN documents
|
|
82
|
+
// only 'eager' and 'lazy', while happy-dom returns 'auto'. Only "lazy" has
|
|
83
|
+
// one agreed spelling, so asking whether it is lazy is answerable
|
|
84
|
+
// everywhere, and everything else correctly falls into the eager branch.
|
|
85
|
+
if (!options.allowEager && image.loading !== 'lazy') {
|
|
86
|
+
markReady(image);
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
// A cached image is frequently already decoded before this module runs at
|
|
90
|
+
// all -- these are deferred scripts. Revealing on the next frame rather than
|
|
91
|
+
// synchronously lets the browser paint the hidden state first, so the
|
|
92
|
+
// transition still runs instead of snapping.
|
|
93
|
+
if (image.complete && image.naturalWidth > 0) {
|
|
94
|
+
requestAnimationFrame(() => {
|
|
95
|
+
if (!signal.aborted)
|
|
96
|
+
markReady(image);
|
|
97
|
+
});
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
image
|
|
101
|
+
.decode()
|
|
102
|
+
.then(() => {
|
|
103
|
+
if (!signal.aborted)
|
|
104
|
+
markReady(image);
|
|
105
|
+
})
|
|
106
|
+
.catch(() => {
|
|
107
|
+
// decode() rejects with EncodingError when `src` changes mid-flight,
|
|
108
|
+
// which a responsive `srcset` genuinely does on resize, and on a real
|
|
109
|
+
// decode failure. Either way the image must not be left hidden: `load`
|
|
110
|
+
// is the weaker signal, and no reveal at all is worse than an early one.
|
|
111
|
+
if (signal.aborted)
|
|
112
|
+
return;
|
|
113
|
+
if (image.complete) {
|
|
114
|
+
markReady(image);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
image.addEventListener('load', () => markReady(image), { once: true, signal });
|
|
118
|
+
image.addEventListener('error', () => markReady(image), { once: true, signal });
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
return () => controller.abort();
|
|
122
|
+
}
|
|
123
|
+
// Re-exported so `polite-media/image` carries the ElementEventMap and
|
|
124
|
+
// DocumentEventMap augmentation too: it only reaches a consumer whose program
|
|
125
|
+
// includes the module that declares it.
|
|
126
|
+
export { POLITE_IMAGE_READY } from './events.js';
|
|
127
|
+
//# sourceMappingURL=image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"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"}
|
package/dist/layer.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[data-polite-media]{position:relative}[data-polite-media]>:is(img,video),[data-polite-media]>picture>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
|
package/dist/reveal.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The library's core primitive: fire once a frame has genuinely reached the
|
|
3
|
+
* compositor.
|
|
4
|
+
*
|
|
5
|
+
* The obvious signal, the `playing` event, is wrong -- and measurably wrong in
|
|
6
|
+
* both directions rather than merely early. On one machine in one run
|
|
7
|
+
* H.264 presented its first frame 1.6 ms *before* `playing`,
|
|
8
|
+
* while AV1 presented 0.8 ms *after*. So revealing on `playing` either flashes
|
|
9
|
+
* (poster removed before anything painted) or lingers (poster held over a frame
|
|
10
|
+
* that already painted), and which one you get depends on the codec, so no delay
|
|
11
|
+
* can tune it away.
|
|
12
|
+
*
|
|
13
|
+
* `requestVideoFrameCallback` is specified in terms of a frame being sent to the
|
|
14
|
+
* compositor, making it correct by definition rather than by timing.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Calls `onPainted` once, when a frame is on screen.
|
|
18
|
+
*
|
|
19
|
+
* Returns a cancel function. Cancelling matters: a video can be unregistered
|
|
20
|
+
* (scrolled out of view, a router navigation) before its first frame ever
|
|
21
|
+
* arrives, and a reveal firing afterwards would un-hide a layer whose element is
|
|
22
|
+
* already gone.
|
|
23
|
+
*
|
|
24
|
+
* Cancellation does two things on the two rungs that can still be pending. The
|
|
25
|
+
* `done` flag is the correctness guarantee, so `cancel()` means "will not fire"
|
|
26
|
+
* however the underlying mechanism behaves; the platform call beside it
|
|
27
|
+
* (`cancelVideoFrameCallback`, `removeEventListener`) is resource release. They
|
|
28
|
+
* overlap on the `loadeddata` rung, where removing the listener would be enough
|
|
29
|
+
* on its own -- the price of `cancel()` meaning one thing rather than three
|
|
30
|
+
* subtly different things. On the `readyState` rung there is nothing to cancel:
|
|
31
|
+
* it has already fired synchronously by the time the caller holds the function.
|
|
32
|
+
*/
|
|
33
|
+
export declare function revealWhenPainted(video: HTMLVideoElement, onPainted: () => void): () => void;
|
|
34
|
+
//# sourceMappingURL=reveal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reveal.d.ts","sourceRoot":"","sources":["../src/reveal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAmC5F"}
|
package/dist/reveal.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The library's core primitive: fire once a frame has genuinely reached the
|
|
3
|
+
* compositor.
|
|
4
|
+
*
|
|
5
|
+
* The obvious signal, the `playing` event, is wrong -- and measurably wrong in
|
|
6
|
+
* both directions rather than merely early. On one machine in one run
|
|
7
|
+
* H.264 presented its first frame 1.6 ms *before* `playing`,
|
|
8
|
+
* while AV1 presented 0.8 ms *after*. So revealing on `playing` either flashes
|
|
9
|
+
* (poster removed before anything painted) or lingers (poster held over a frame
|
|
10
|
+
* that already painted), and which one you get depends on the codec, so no delay
|
|
11
|
+
* can tune it away.
|
|
12
|
+
*
|
|
13
|
+
* `requestVideoFrameCallback` is specified in terms of a frame being sent to the
|
|
14
|
+
* compositor, making it correct by definition rather than by timing.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* `HTMLMediaElement.HAVE_CURRENT_DATA`. Inlined rather than read off the global
|
|
18
|
+
* so this module never touches `HTMLMediaElement`, which does not exist in Node.
|
|
19
|
+
*/
|
|
20
|
+
const HAVE_CURRENT_DATA = 2;
|
|
21
|
+
/**
|
|
22
|
+
* Calls `onPainted` once, when a frame is on screen.
|
|
23
|
+
*
|
|
24
|
+
* Returns a cancel function. Cancelling matters: a video can be unregistered
|
|
25
|
+
* (scrolled out of view, a router navigation) before its first frame ever
|
|
26
|
+
* arrives, and a reveal firing afterwards would un-hide a layer whose element is
|
|
27
|
+
* already gone.
|
|
28
|
+
*
|
|
29
|
+
* Cancellation does two things on the two rungs that can still be pending. The
|
|
30
|
+
* `done` flag is the correctness guarantee, so `cancel()` means "will not fire"
|
|
31
|
+
* however the underlying mechanism behaves; the platform call beside it
|
|
32
|
+
* (`cancelVideoFrameCallback`, `removeEventListener`) is resource release. They
|
|
33
|
+
* overlap on the `loadeddata` rung, where removing the listener would be enough
|
|
34
|
+
* on its own -- the price of `cancel()` meaning one thing rather than three
|
|
35
|
+
* subtly different things. On the `readyState` rung there is nothing to cancel:
|
|
36
|
+
* it has already fired synchronously by the time the caller holds the function.
|
|
37
|
+
*/
|
|
38
|
+
export function revealWhenPainted(video, onPainted) {
|
|
39
|
+
let done = false;
|
|
40
|
+
const fire = () => {
|
|
41
|
+
if (done)
|
|
42
|
+
return;
|
|
43
|
+
done = true;
|
|
44
|
+
onPainted();
|
|
45
|
+
};
|
|
46
|
+
// lib.dom declares requestVideoFrameCallback as always present, but it is only
|
|
47
|
+
// Baseline as of October 2024, so the types are more optimistic than reality
|
|
48
|
+
// and the runtime check is doing real work on older browsers.
|
|
49
|
+
if (typeof video.requestVideoFrameCallback === 'function') {
|
|
50
|
+
const handle = video.requestVideoFrameCallback(fire);
|
|
51
|
+
return () => {
|
|
52
|
+
done = true;
|
|
53
|
+
video.cancelVideoFrameCallback(handle);
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
// Both fallbacks are strictly weaker signals. HAVE_CURRENT_DATA means "data
|
|
57
|
+
// exists for the current playback position", which is a decode-side fact and
|
|
58
|
+
// says nothing about whether pixels have been presented. Accepted only because
|
|
59
|
+
// the alternative on these browsers is no reveal at all.
|
|
60
|
+
if (video.readyState >= HAVE_CURRENT_DATA) {
|
|
61
|
+
fire();
|
|
62
|
+
return () => {
|
|
63
|
+
done = true;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
video.addEventListener('loadeddata', fire, { once: true });
|
|
67
|
+
return () => {
|
|
68
|
+
done = true;
|
|
69
|
+
video.removeEventListener('loadeddata', fire);
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=reveal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reveal.js","sourceRoot":"","sources":["../src/reveal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;GAGG;AACH,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAuB,EAAE,SAAqB;IAC9E,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,IAAI,IAAI;YAAE,OAAO;QACjB,IAAI,GAAG,IAAI,CAAC;QACZ,SAAS,EAAE,CAAC;IACd,CAAC,CAAC;IAEF,+EAA+E;IAC/E,6EAA6E;IAC7E,8DAA8D;IAC9D,IAAI,OAAO,KAAK,CAAC,yBAAyB,KAAK,UAAU,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,GAAG,EAAE;YACV,IAAI,GAAG,IAAI,CAAC;YACZ,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,6EAA6E;IAC7E,+EAA+E;IAC/E,yDAAyD;IACzD,IAAI,KAAK,CAAC,UAAU,IAAI,iBAAiB,EAAE,CAAC;QAC1C,IAAI,EAAE,CAAC;QACP,OAAO,GAAG,EAAE;YACV,IAAI,GAAG,IAAI,CAAC;QACd,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,OAAO,GAAG,EAAE;QACV,IAAI,GAAG,IAAI,CAAC;QACZ,KAAK,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether an error means "this file is unusable, try another" as opposed to
|
|
3
|
+
* "something happened to this attempt".
|
|
4
|
+
*
|
|
5
|
+
* Codes matter here. `MEDIA_ERR_ABORTED` (1) is what the element reports when
|
|
6
|
+
* its `src` is reassigned -- which this module does itself -- so treating every
|
|
7
|
+
* error as fatal would cascade through the whole candidate list on the first
|
|
8
|
+
* assignment. `MEDIA_ERR_NETWORK` (2) means the fetch failed on a resource that
|
|
9
|
+
* was previously fine; another candidate is unlikely to fare better on the same
|
|
10
|
+
* connection, and burning the list would leave nothing to retry with.
|
|
11
|
+
*/
|
|
12
|
+
export declare function isUnusable(error: MediaError | null): boolean;
|
|
13
|
+
export interface SourceManager {
|
|
14
|
+
/** Loads the best remaining candidate. False when none are left to try. */
|
|
15
|
+
select(): boolean;
|
|
16
|
+
/** Discards the current candidate and loads the next. False when exhausted. */
|
|
17
|
+
advance(): boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function manageSources(video: HTMLVideoElement): SourceManager;
|
|
20
|
+
/** Internal reset for tests. Not exported from the package entry point. */
|
|
21
|
+
export declare function resetSourceWarnings(): void;
|
|
22
|
+
//# sourceMappingURL=sources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../src/sources.ts"],"names":[],"mappings":"AAkCA;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,OAAO,CAG5D;AAED,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,MAAM,IAAI,OAAO,CAAC;IAClB,+EAA+E;IAC/E,OAAO,IAAI,OAAO,CAAC;CACpB;AAoED,wBAAgB,aAAa,CAAC,KAAK,EAAE,gBAAgB,GAAG,aAAa,CAmCpE;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
|