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/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
  }
@@ -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
  /**
@@ -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
@@ -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
- * 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.
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: ImageTarget, options?: RevealImagesOptions): () => void;
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
@@ -1 +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;AA+FD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,IAAI,CA2E/F;AAKD,OAAO,EAAE,kBAAkB,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
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
- * Every image this module has taken responsibility for.
32
- *
33
- * A WeakSet rather than an attribute: the stylesheet no longer needs to know
34
- * which images are managed, so writing it into the DOM would be state kept for
35
- * nobody. Weak so a released image is not pinned by the bookkeeping.
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
- // Eager images are revealed at once rather than skipped.
120
- //
121
- // Skipping looks like the cautious choice and is the opposite: image.css
122
- // has already hidden anything carrying data-polite-reveal, so declining to
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
- if (!options.allowEager && image.loading !== 'lazy') {
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
- markReady(image);
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
- markReady(image);
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
- markReady(image);
179
+ revealFaded(image);
162
180
  return;
163
181
  }
164
- image.addEventListener('load', () => markReady(image), { once: true, signal });
165
- image.addEventListener('error', () => markReady(image), { once: true, signal });
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":"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"}
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]>:is(img,video),[data-polite-media]>picture>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
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 was a markup rule, "the
61
- * last <source> must carry no media attribute", which every consumer had to
62
- * remember and which a real project had already got wrong.
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` can no longer mean "and otherwise play nothing". It
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
  */
@@ -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,CAMxE"}
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);
@@ -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,+EAA+E;IAC/E,iEAAiE;IACjE,IAAI,MAAM,YAAY,OAAO;QAAE,OAAO,CAAC,MAAW,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAsB,CAAC,CAAC;AAC5C,CAAC"}
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]>video{opacity:0;transition:opacity var(--polite-fade, 0s) ease}[data-polite-media][data-polite-ready]>video{opacity:1}[data-polite-media][data-polite-ready]>:is(img,picture){visibility:hidden;transition:visibility 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}}
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
@@ -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
- /** Handed to the browser verbatim. Nothing in this package parses it. */
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. */
@@ -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,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA4BD,uFAAuF;AACvF,wBAAgB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAyC/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"}
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"warming.js","sourceRoot":"","sources":["../src/warming.ts"],"names":[],"mappings":"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"}
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.4.3",
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@11.25.0",
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.2",
88
- "@commitlint/config-conventional": "^21.2.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.62.1",
91
- "@types/node": "^26.4.0",
90
+ "@playwright/test": "^1.63.0",
91
+ "@types/node": "^26.6.2",
92
92
  "esbuild": "^0.28.2",
93
- "eslint": "^10.9.1",
94
- "globals": "^17.11.0",
95
- "happy-dom": "^20.12.0",
96
- "lefthook": "^2.1.12",
97
- "prettier": "^3.9.6",
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.68.0",
100
- "vitest": "^4.1.11"
99
+ "typescript-eslint": "^8.70.1",
100
+ "vitest": "^5.0.1"
101
101
  }
102
102
  }