polite-media 0.4.3 → 0.6.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 +123 -0
- package/README.md +167 -57
- package/dist/coordinator.d.ts +51 -3
- package/dist/coordinator.d.ts.map +1 -1
- package/dist/coordinator.js +172 -105
- package/dist/coordinator.js.map +1 -1
- package/dist/events.d.ts +8 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +6 -0
- package/dist/events.js.map +1 -1
- package/dist/fade.d.ts +11 -0
- package/dist/fade.d.ts.map +1 -0
- package/dist/fade.js +17 -0
- package/dist/fade.js.map +1 -0
- package/dist/image.css +1 -1
- package/dist/image.d.ts +6 -13
- package/dist/image.d.ts.map +1 -1
- package/dist/image.js +38 -20
- package/dist/image.js.map +1 -1
- package/dist/layer.css +1 -1
- package/dist/sources.js +4 -4
- package/dist/targets.d.ts.map +1 -1
- package/dist/targets.js +0 -2
- package/dist/targets.js.map +1 -1
- package/dist/video.css +1 -1
- package/dist/video.d.ts +1 -1
- package/dist/video.d.ts.map +1 -1
- package/dist/video.js +1 -1
- package/dist/video.js.map +1 -1
- package/dist/warming.d.ts +4 -1
- package/dist/warming.d.ts.map +1 -1
- package/dist/warming.js +3 -0
- package/dist/warming.js.map +1 -1
- package/package.json +13 -13
- package/src/coordinator.ts +221 -125
- package/src/events.ts +9 -0
- package/src/fade.ts +19 -0
- package/src/image.css +13 -6
- package/src/image.ts +49 -31
- package/src/layer.css +3 -2
- package/src/sources.ts +4 -4
- package/src/targets.ts +0 -2
- package/src/video.css +32 -19
- package/src/video.ts +1 -0
- package/src/warming.ts +6 -1
package/dist/events.d.ts
CHANGED
|
@@ -24,6 +24,12 @@
|
|
|
24
24
|
export declare const POLITE_VIDEO_READY = "polite-video:ready";
|
|
25
25
|
/** Dispatched on the video when no source could be decoded. Bubbles. */
|
|
26
26
|
export declare const POLITE_VIDEO_FAILED = "polite-video:failed";
|
|
27
|
+
/**
|
|
28
|
+
* Dispatched on the video when the browser refused `play()` until a user gesture.
|
|
29
|
+
* Bubbles. The library keeps retrying on its own; this exists so a host can show
|
|
30
|
+
* a play affordance in the meantime, which the library cannot do for it.
|
|
31
|
+
*/
|
|
32
|
+
export declare const POLITE_VIDEO_BLOCKED = "polite-video:blocked";
|
|
27
33
|
/** Dispatched on the image once it has decoded. Bubbles. */
|
|
28
34
|
export declare const POLITE_IMAGE_READY = "polite-image:ready";
|
|
29
35
|
/**
|
|
@@ -58,11 +64,13 @@ declare global {
|
|
|
58
64
|
interface ElementEventMap {
|
|
59
65
|
'polite-video:ready': CustomEvent<PoliteVideoEventDetail>;
|
|
60
66
|
'polite-video:failed': CustomEvent<PoliteVideoEventDetail>;
|
|
67
|
+
'polite-video:blocked': CustomEvent<PoliteVideoEventDetail>;
|
|
61
68
|
'polite-image:ready': CustomEvent<PoliteImageEventDetail>;
|
|
62
69
|
}
|
|
63
70
|
interface DocumentEventMap {
|
|
64
71
|
'polite-video:ready': CustomEvent<PoliteVideoEventDetail>;
|
|
65
72
|
'polite-video:failed': CustomEvent<PoliteVideoEventDetail>;
|
|
73
|
+
'polite-video:blocked': CustomEvent<PoliteVideoEventDetail>;
|
|
66
74
|
'polite-image:ready': CustomEvent<PoliteImageEventDetail>;
|
|
67
75
|
'polite-video:pausechange': CustomEvent<PolitePauseEventDetail>;
|
|
68
76
|
}
|
package/dist/events.d.ts.map
CHANGED
|
@@ -1 +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"}
|
|
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;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D,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,sBAAsB,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC5D,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,sBAAsB,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC5D,oBAAoB,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;QAC1D,0BAA0B,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;KACjE;CACF"}
|
package/dist/events.js
CHANGED
|
@@ -24,6 +24,12 @@
|
|
|
24
24
|
export const POLITE_VIDEO_READY = 'polite-video:ready';
|
|
25
25
|
/** Dispatched on the video when no source could be decoded. Bubbles. */
|
|
26
26
|
export const POLITE_VIDEO_FAILED = 'polite-video:failed';
|
|
27
|
+
/**
|
|
28
|
+
* Dispatched on the video when the browser refused `play()` until a user gesture.
|
|
29
|
+
* Bubbles. The library keeps retrying on its own; this exists so a host can show
|
|
30
|
+
* a play affordance in the meantime, which the library cannot do for it.
|
|
31
|
+
*/
|
|
32
|
+
export const POLITE_VIDEO_BLOCKED = 'polite-video:blocked';
|
|
27
33
|
/** Dispatched on the image once it has decoded. Bubbles. */
|
|
28
34
|
export const POLITE_IMAGE_READY = 'polite-image:ready';
|
|
29
35
|
/**
|
package/dist/events.js.map
CHANGED
|
@@ -1 +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"}
|
|
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;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAE3D,4DAA4D;AAC5D,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEvD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAC"}
|
package/dist/fade.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Warns, and returns true, when `--polite-fade` on an element is set to something that is not a CSS
|
|
3
|
+
* time. Such a value computes to `0s` rather than to the stylesheet's fallback, so `0.6` silently
|
|
4
|
+
* removes image.css's 350ms fade.
|
|
5
|
+
*
|
|
6
|
+
* Parsed by the browser rather than a pattern, which would reject a valid `calc(0.3s * 2)`. A bare
|
|
7
|
+
* `0` passes: it gives the cut its author meant, and a warning on working code teaches people to
|
|
8
|
+
* ignore the rest.
|
|
9
|
+
*/
|
|
10
|
+
export declare function warnIfFadeInvalid(element: Element): boolean;
|
|
11
|
+
//# sourceMappingURL=fade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fade.d.ts","sourceRoot":"","sources":["../src/fade.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAS3D"}
|
package/dist/fade.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Warns, and returns true, when `--polite-fade` on an element is set to something that is not a CSS
|
|
3
|
+
* time. Such a value computes to `0s` rather than to the stylesheet's fallback, so `0.6` silently
|
|
4
|
+
* removes image.css's 350ms fade.
|
|
5
|
+
*
|
|
6
|
+
* Parsed by the browser rather than a pattern, which would reject a valid `calc(0.3s * 2)`. A bare
|
|
7
|
+
* `0` passes: it gives the cut its author meant, and a warning on working code teaches people to
|
|
8
|
+
* ignore the rest.
|
|
9
|
+
*/
|
|
10
|
+
export function warnIfFadeInvalid(element) {
|
|
11
|
+
const value = getComputedStyle(element).getPropertyValue('--polite-fade').trim();
|
|
12
|
+
if (value === '' || value === '0' || CSS.supports('transition-duration', value))
|
|
13
|
+
return false;
|
|
14
|
+
console.warn(`polite-media: --polite-fade "${value}" is not a CSS time, so nothing fades. Give it a unit.`, element);
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=fade.js.map
|
package/dist/fade.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fade.js","sourceRoot":"","sources":["../src/fade.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;IACjF,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,qBAAqB,EAAE,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE9F,OAAO,CAAC,IAAI,CACV,gCAAgC,KAAK,wDAAwD,EAC7F,OAAO,CACR,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/image.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@media(scripting:enabled){img[data-polite-reveal]{opacity:0;transition:opacity var(--polite-fade, .35s) ease}img[data-polite-reveal]:not([data-polite-ready]):not([data-polite-managed]){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}}
|
|
1
|
+
@media(scripting:enabled){img[data-polite-reveal][loading=lazy],img[data-polite-reveal=eager]{opacity:0;transition:opacity var(--polite-fade, .35s) ease}img[data-polite-reveal][loading=lazy]:not([data-polite-ready]):not([data-polite-managed]),img[data-polite-reveal=eager]:not([data-polite-ready]):not([data-polite-managed]){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][loading=lazy],img[data-polite-reveal=eager]{transition:none}}
|
package/dist/image.d.ts
CHANGED
|
@@ -20,26 +20,19 @@ import { type Target } from './targets.js';
|
|
|
20
20
|
export type ImageTarget = Target<HTMLImageElement>;
|
|
21
21
|
export interface RevealImagesOptions {
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
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.
|
|
23
|
+
* @deprecated Ignored since 0.5, and warns. image.css no longer hides an eager
|
|
24
|
+
* image at all, so the opt-in has to be in the markup where the stylesheet can
|
|
25
|
+
* see it: `data-polite-reveal="eager"` on the image.
|
|
34
26
|
*/
|
|
35
27
|
allowEager?: boolean;
|
|
36
28
|
}
|
|
37
29
|
/**
|
|
38
|
-
* Reveals each matching image once it has decoded.
|
|
30
|
+
* Reveals each matching image once it has decoded. With no target it takes every
|
|
31
|
+
* marked image on the page.
|
|
39
32
|
*
|
|
40
33
|
* Returns a function that stops any reveals still pending, for a client-side
|
|
41
34
|
* router tearing the page down before the images resolved.
|
|
42
35
|
*/
|
|
43
|
-
export declare function revealImages(target
|
|
36
|
+
export declare function revealImages(target?: ImageTarget, options?: RevealImagesOptions): () => void;
|
|
44
37
|
export { POLITE_IMAGE_READY, type PoliteImageEventDetail } from './events.js';
|
|
45
38
|
//# sourceMappingURL=image.d.ts.map
|
package/dist/image.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,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;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA8GD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,MAAM,GAAE,WAAuC,EAC/C,OAAO,GAAE,mBAAwB,GAChC,MAAM,IAAI,CAiFZ;AAKD,OAAO,EAAE,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/image.js
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
* animating" is a pure styling concern.
|
|
17
17
|
*/
|
|
18
18
|
import { POLITE_IMAGE_READY } from './events.js';
|
|
19
|
+
import { warnIfFadeInvalid } from './fade.js';
|
|
19
20
|
import { resolveTargets } from './targets.js';
|
|
20
21
|
const READY = 'data-polite-ready';
|
|
21
22
|
/** Written while this module owns an image's reveal, so image.css can stand down. */
|
|
@@ -27,12 +28,22 @@ function markReady(image) {
|
|
|
27
28
|
detail: { image },
|
|
28
29
|
}));
|
|
29
30
|
}
|
|
31
|
+
let warnedFade = false;
|
|
30
32
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
* `markReady` for an image that fades, the only kind `--polite-fade` reaches. The value is read once
|
|
34
|
+
* the attribute has landed, never before, for the reason `warnIfUnstyled` gives.
|
|
35
|
+
*/
|
|
36
|
+
function revealFaded(image) {
|
|
37
|
+
markReady(image);
|
|
38
|
+
warnedFade ||= warnIfFadeInvalid(image);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Every image a `revealImages()` call has ever claimed, for the stray-image
|
|
42
|
+
* warning. Distinct from `data-polite-managed`, which marks an image only while
|
|
43
|
+
* this module still owns its reveal so the stylesheet's failsafe stands down: a
|
|
44
|
+
* teardown removes the attribute but the claim stays, since the warning is about
|
|
45
|
+
* selectors that never reached an image at all. Weak so a released image is not
|
|
46
|
+
* pinned by the bookkeeping.
|
|
36
47
|
*/
|
|
37
48
|
const managed = new WeakSet();
|
|
38
49
|
let unmanagedCheck;
|
|
@@ -61,6 +72,7 @@ function scheduleUnmanagedCheck() {
|
|
|
61
72
|
}, 1000);
|
|
62
73
|
}
|
|
63
74
|
let warnedNoStylesheet = false;
|
|
75
|
+
let warnedAllowEager = false;
|
|
64
76
|
/**
|
|
65
77
|
* image.css is the only thing that hides a marked image. Without it `data-polite-reveal` is inert:
|
|
66
78
|
* the image is never hidden, so it never fades and everything this module does is invisible.
|
|
@@ -84,6 +96,8 @@ function warnIfUnstyled() {
|
|
|
84
96
|
// removed in this same task so nothing paints it and no scan above ever sees it.
|
|
85
97
|
const probe = document.createElement('img');
|
|
86
98
|
probe.setAttribute('data-polite-reveal', '');
|
|
99
|
+
// The stylesheet hides only lazy images, so an eager probe would read as unstyled everywhere.
|
|
100
|
+
probe.setAttribute('loading', 'lazy');
|
|
87
101
|
document.body.appendChild(probe);
|
|
88
102
|
const opacity = getComputedStyle(probe).opacity;
|
|
89
103
|
probe.remove();
|
|
@@ -97,14 +111,20 @@ function warnIfUnstyled() {
|
|
|
97
111
|
"images will not fade. Import 'polite-media/image.css' from wherever the attribute is emitted.");
|
|
98
112
|
}
|
|
99
113
|
/**
|
|
100
|
-
* Reveals each matching image once it has decoded.
|
|
114
|
+
* Reveals each matching image once it has decoded. With no target it takes every
|
|
115
|
+
* marked image on the page.
|
|
101
116
|
*
|
|
102
117
|
* Returns a function that stops any reveals still pending, for a client-side
|
|
103
118
|
* router tearing the page down before the images resolved.
|
|
104
119
|
*/
|
|
105
|
-
export function revealImages(target, options = {}) {
|
|
120
|
+
export function revealImages(target = 'img[data-polite-reveal]', options = {}) {
|
|
106
121
|
const controller = new AbortController();
|
|
107
122
|
const { signal } = controller;
|
|
123
|
+
if (options.allowEager && !warnedAllowEager) {
|
|
124
|
+
warnedAllowEager = true;
|
|
125
|
+
console.warn('polite-media: allowEager is ignored. To fade an eager image, put ' +
|
|
126
|
+
'data-polite-reveal="eager" on it, where the stylesheet can see the choice.');
|
|
127
|
+
}
|
|
108
128
|
scheduleUnmanagedCheck();
|
|
109
129
|
const claimed = [];
|
|
110
130
|
for (const image of resolveTargets(target)) {
|
|
@@ -116,20 +136,18 @@ export function revealImages(target, options = {}) {
|
|
|
116
136
|
// seconds in, none of them loaded.
|
|
117
137
|
image.setAttribute(MANAGED, '');
|
|
118
138
|
claimed.push(image);
|
|
119
|
-
//
|
|
120
|
-
//
|
|
121
|
-
//
|
|
122
|
-
//
|
|
123
|
-
// manage it leaves it invisible permanently instead of merely unfaded.
|
|
124
|
-
// Revealing immediately keeps the LCP candidate visible from its first
|
|
125
|
-
// paint, which is the whole reason eager images are treated differently.
|
|
139
|
+
// An eager image is never hidden by image.css, because LCP excludes elements at
|
|
140
|
+
// opacity 0 and a deferred module cannot reveal one before first paint. So it
|
|
141
|
+
// is marked ready at once, unless the markup opted it into the fade with the
|
|
142
|
+
// same value the stylesheet keys on.
|
|
126
143
|
//
|
|
127
144
|
// Tested against 'lazy' rather than for 'eager' deliberately. Engines
|
|
128
145
|
// disagree on what an absent or invalid attribute reports: MDN documents
|
|
129
146
|
// only 'eager' and 'lazy', while happy-dom returns 'auto'. Only "lazy" has
|
|
130
147
|
// one agreed spelling, so asking whether it is lazy is answerable
|
|
131
148
|
// everywhere, and everything else correctly falls into the eager branch.
|
|
132
|
-
|
|
149
|
+
const optedIn = image.getAttribute('data-polite-reveal') === 'eager';
|
|
150
|
+
if (!optedIn && image.loading !== 'lazy') {
|
|
133
151
|
markReady(image);
|
|
134
152
|
continue;
|
|
135
153
|
}
|
|
@@ -140,7 +158,7 @@ export function revealImages(target, options = {}) {
|
|
|
140
158
|
if (image.complete && image.naturalWidth > 0) {
|
|
141
159
|
requestAnimationFrame(() => {
|
|
142
160
|
if (!signal.aborted)
|
|
143
|
-
|
|
161
|
+
revealFaded(image);
|
|
144
162
|
});
|
|
145
163
|
continue;
|
|
146
164
|
}
|
|
@@ -148,7 +166,7 @@ export function revealImages(target, options = {}) {
|
|
|
148
166
|
.decode()
|
|
149
167
|
.then(() => {
|
|
150
168
|
if (!signal.aborted)
|
|
151
|
-
|
|
169
|
+
revealFaded(image);
|
|
152
170
|
})
|
|
153
171
|
.catch(() => {
|
|
154
172
|
// decode() rejects with EncodingError when `src` changes mid-flight,
|
|
@@ -158,11 +176,11 @@ export function revealImages(target, options = {}) {
|
|
|
158
176
|
if (signal.aborted)
|
|
159
177
|
return;
|
|
160
178
|
if (image.complete) {
|
|
161
|
-
|
|
179
|
+
revealFaded(image);
|
|
162
180
|
return;
|
|
163
181
|
}
|
|
164
|
-
image.addEventListener('load', () =>
|
|
165
|
-
image.addEventListener('error', () =>
|
|
182
|
+
image.addEventListener('load', () => revealFaded(image), { once: true, signal });
|
|
183
|
+
image.addEventListener('error', () => revealFaded(image), { once: true, signal });
|
|
166
184
|
});
|
|
167
185
|
}
|
|
168
186
|
// Hands anything still unrevealed back to the stylesheet. A router tearing the page down before
|
package/dist/image.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.js","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,kBAAkB,EAA+B,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAe,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"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"}
|
package/dist/layer.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[data-polite-media]{position:relative}[data-polite-media]
|
|
1
|
+
[data-polite-media]{position:relative}[data-polite-media]>img,[data-polite-media]>picture>img,[data-polite-media] video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
|
package/dist/sources.js
CHANGED
|
@@ -57,11 +57,11 @@ let warnedMediaGap = false;
|
|
|
57
57
|
* browser behaves that way too, which is no help to anyone.
|
|
58
58
|
*
|
|
59
59
|
* So when no source claims the current viewport, every decodable one is a
|
|
60
|
-
* candidate and document order decides. The alternative
|
|
61
|
-
* last <source> must carry no media attribute", which every consumer
|
|
62
|
-
* remember and which
|
|
60
|
+
* candidate and document order decides. The alternative is a markup rule, "the
|
|
61
|
+
* last <source> must carry no media attribute", which every consumer has to
|
|
62
|
+
* remember and which is silent when forgotten.
|
|
63
63
|
*
|
|
64
|
-
* The cost is that `media`
|
|
64
|
+
* The cost is that `media` cannot mean "and otherwise play nothing". It
|
|
65
65
|
* never reliably could, since the markup contract already required an
|
|
66
66
|
* unconditional fallback, and `atOnce: { small: 0 }` says that properly.
|
|
67
67
|
*/
|
package/dist/targets.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../src/targets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;GASG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,OAAO,IAAI,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEhF,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"targets.d.ts","sourceRoot":"","sources":["../src/targets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;GASG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,OAAO,IAAI,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEhF,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAIxE"}
|
package/dist/targets.js
CHANGED
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
export function resolveTargets(target) {
|
|
9
9
|
if (typeof target === 'string')
|
|
10
10
|
return [...document.querySelectorAll(target)];
|
|
11
|
-
// A single element is the obvious thing to pass when you already hold one, and
|
|
12
|
-
// it used to be rejected: `revealImages(myImg)` did not compile.
|
|
13
11
|
if (target instanceof Element)
|
|
14
12
|
return [target];
|
|
15
13
|
return Array.from(target);
|
package/dist/targets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targets.js","sourceRoot":"","sources":["../src/targets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,0DAA0D;AAC1D,MAAM,UAAU,cAAc,CAAoB,MAAiB;IACjE,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAI,MAAM,CAAC,CAAC,CAAC;IACjF
|
|
1
|
+
{"version":3,"file":"targets.js","sourceRoot":"","sources":["../src/targets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,0DAA0D;AAC1D,MAAM,UAAU,cAAc,CAAoB,MAAiB;IACjE,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAI,MAAM,CAAC,CAAC,CAAC;IACjF,IAAI,MAAM,YAAY,OAAO;QAAE,OAAO,CAAC,MAAW,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAsB,CAAC,CAAC;AAC5C,CAAC"}
|
package/dist/video.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[data-polite-media]
|
|
1
|
+
[data-polite-media] video{opacity:0;transition:opacity var(--polite-fade, 0s) ease}[data-polite-media][data-polite-ready] video{opacity:1}[data-polite-media][data-polite-media][data-polite-ready]>img,[data-polite-media][data-polite-media][data-polite-ready]>picture>img{opacity:0!important;pointer-events:none;transition:opacity 0s linear var(--polite-fade, 0s)}[data-polite-media][data-polite-failed] video{opacity:0}@media(prefers-reduced-motion:reduce){[data-polite-media] video,[data-polite-media]>:is(img,picture){transition:none}}
|
package/dist/video.d.ts
CHANGED
|
@@ -11,5 +11,5 @@
|
|
|
11
11
|
*/
|
|
12
12
|
export { configure, pauseAll, register, registerAll, resumeAll, unregister, unregisterAll, } from './coordinator.js';
|
|
13
13
|
export type { AtOnce, ConfigureOptions, RegisterOptions, VideoTarget } from './coordinator.js';
|
|
14
|
-
export { POLITE_VIDEO_PAUSECHANGE, POLITE_VIDEO_FAILED, POLITE_VIDEO_READY, type PolitePauseEventDetail, type PoliteVideoEventDetail, } from './events.js';
|
|
14
|
+
export { POLITE_VIDEO_BLOCKED, POLITE_VIDEO_PAUSECHANGE, POLITE_VIDEO_FAILED, POLITE_VIDEO_READY, type PolitePauseEventDetail, type PoliteVideoEventDetail, } from './events.js';
|
|
15
15
|
//# sourceMappingURL=video.d.ts.map
|
package/dist/video.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../src/video.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,SAAS,EACT,UAAU,EACV,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAK/F,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,GAC5B,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../src/video.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,SAAS,EACT,UAAU,EACV,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAK/F,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,GAC5B,MAAM,aAAa,CAAC"}
|
package/dist/video.js
CHANGED
|
@@ -13,5 +13,5 @@ export { configure, pauseAll, register, registerAll, resumeAll, unregister, unre
|
|
|
13
13
|
// Loaded for its `declare global` block as much as for the constants: the
|
|
14
14
|
// ElementEventMap and DocumentEventMap augmentation only reaches a consumer if
|
|
15
15
|
// this module is part of their program.
|
|
16
|
-
export { POLITE_VIDEO_PAUSECHANGE, POLITE_VIDEO_FAILED, POLITE_VIDEO_READY, } from './events.js';
|
|
16
|
+
export { POLITE_VIDEO_BLOCKED, POLITE_VIDEO_PAUSECHANGE, POLITE_VIDEO_FAILED, POLITE_VIDEO_READY, } from './events.js';
|
|
17
17
|
//# sourceMappingURL=video.js.map
|
package/dist/video.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.js","sourceRoot":"","sources":["../src/video.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,SAAS,EACT,UAAU,EACV,aAAa,GACd,MAAM,kBAAkB,CAAC;AAG1B,0EAA0E;AAC1E,+EAA+E;AAC/E,wCAAwC;AACxC,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,GAGnB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"video.js","sourceRoot":"","sources":["../src/video.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,SAAS,EACT,UAAU,EACV,aAAa,GACd,MAAM,kBAAkB,CAAC;AAG1B,0EAA0E;AAC1E,+EAA+E;AAC/E,wCAAwC;AACxC,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,GAGnB,MAAM,aAAa,CAAC"}
|
package/dist/warming.d.ts
CHANGED
|
@@ -40,7 +40,10 @@ export interface WarmOptions {
|
|
|
40
40
|
srcset?: string;
|
|
41
41
|
/** A single URL, for an image with no variants. */
|
|
42
42
|
src?: string;
|
|
43
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* Handed to the browser verbatim, on every `<source>` and on the `<img>`. Nothing in this
|
|
45
|
+
* package parses it.
|
|
46
|
+
*/
|
|
44
47
|
sizes?: string;
|
|
45
48
|
}
|
|
46
49
|
/** Warms one image: selects the variant this browser would request, and fetches it. */
|
package/dist/warming.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warming.d.ts","sourceRoot":"","sources":["../src/warming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,6EAA6E;AAC7E,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb
|
|
1
|
+
{"version":3,"file":"warming.d.ts","sourceRoot":"","sources":["../src/warming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,6EAA6E;AAC7E,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA4BD,uFAAuF;AACvF,wBAAgB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CA2C/C;AASD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,WAAW,GAAG,IAAI,GAAG,SAAS,GAC5D,MAAM,IAAI,CAcZ;AAED,sFAAsF;AACtF,wBAAgB,WAAW,IAAI,IAAI,CAGlC"}
|
package/dist/warming.js
CHANGED
|
@@ -74,6 +74,9 @@ export function warm(options) {
|
|
|
74
74
|
const element = document.createElement('source');
|
|
75
75
|
if (source.type)
|
|
76
76
|
element.type = source.type;
|
|
77
|
+
// A <source> without its own sizes is chosen as if it said 100vw.
|
|
78
|
+
if (options.sizes)
|
|
79
|
+
element.sizes = options.sizes;
|
|
77
80
|
element.srcset = source.srcset;
|
|
78
81
|
picture.append(element);
|
|
79
82
|
}
|
package/dist/warming.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warming.js","sourceRoot":"","sources":["../src/warming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"warming.js","sourceRoot":"","sources":["../src/warming.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "polite-media",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Background video, image reveals and next-page image warming. Reveals on the frame that actually painted, plays only what is on screen, respects data and motion.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"video",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
],
|
|
25
25
|
"license": "MIT",
|
|
26
26
|
"author": "sixra",
|
|
27
|
-
"packageManager": "pnpm@
|
|
27
|
+
"packageManager": "pnpm@12.6.0",
|
|
28
28
|
"repository": {
|
|
29
29
|
"type": "git",
|
|
30
30
|
"url": "git+https://github.com/sixra/polite-media.git"
|
|
@@ -84,19 +84,19 @@
|
|
|
84
84
|
},
|
|
85
85
|
"devDependencies": {
|
|
86
86
|
"@axe-core/playwright": "^4.13.0",
|
|
87
|
-
"@commitlint/cli": "^21.2.
|
|
88
|
-
"@commitlint/config-conventional": "^21.2.
|
|
87
|
+
"@commitlint/cli": "^21.2.3",
|
|
88
|
+
"@commitlint/config-conventional": "^21.2.3",
|
|
89
89
|
"@eslint/js": "^10.0.1",
|
|
90
|
-
"@playwright/test": "^1.
|
|
91
|
-
"@types/node": "^26.
|
|
90
|
+
"@playwright/test": "^1.63.0",
|
|
91
|
+
"@types/node": "^26.6.2",
|
|
92
92
|
"esbuild": "^0.28.2",
|
|
93
|
-
"eslint": "^10.
|
|
94
|
-
"globals": "^17.
|
|
95
|
-
"happy-dom": "^20.
|
|
96
|
-
"lefthook": "^2.1.
|
|
97
|
-
"prettier": "^3.9.
|
|
93
|
+
"eslint": "^10.11.0",
|
|
94
|
+
"globals": "^17.12.0",
|
|
95
|
+
"happy-dom": "^20.14.5",
|
|
96
|
+
"lefthook": "^2.1.14",
|
|
97
|
+
"prettier": "^3.9.9",
|
|
98
98
|
"typescript": "^6.0.3",
|
|
99
|
-
"typescript-eslint": "^8.
|
|
100
|
-
"vitest": "^
|
|
99
|
+
"typescript-eslint": "^8.70.1",
|
|
100
|
+
"vitest": "^5.0.1"
|
|
101
101
|
}
|
|
102
102
|
}
|