@wardic/dom 1.0.0-rc.2 → 1.0.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/probe.d.ts.map +1 -1
- package/dist/internal/probe.js +7 -6
- package/dist/internal/probe.js.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +1 -1
- package/src/internal/probe.ts +10 -9
package/dist/index.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ import type * as RefreshFrameSource from "@wardic/core/RefreshFrameSource";
|
|
|
27
27
|
import type * as Renderer from "@wardic/core/Renderer";
|
|
28
28
|
import * as Layer from "effect/Layer";
|
|
29
29
|
import { AtomRegistry } from "effect/reactivity";
|
|
30
|
-
export declare const VERSION = "1.0.0-rc.
|
|
30
|
+
export declare const VERSION = "1.0.0-rc.3";
|
|
31
31
|
export * as DomClock from "./DomClock.ts";
|
|
32
32
|
export * as DomInput from "./DomInput.ts";
|
|
33
33
|
export * as DomProbe from "./DomProbe.ts";
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import * as DomInterpolators from "./DomInterpolators.js";
|
|
|
8
8
|
import * as DomPositionalKeys from "./DomPositionalKeys.js";
|
|
9
9
|
import * as DomProbe from "./DomProbe.js";
|
|
10
10
|
import * as DomRenderer from "./DomRenderer.js";
|
|
11
|
-
export const VERSION = "1.0.0-rc.
|
|
11
|
+
export const VERSION = "1.0.0-rc.3";
|
|
12
12
|
export * as DomClock from "./DomClock.js";
|
|
13
13
|
export * as DomInput from "./DomInput.js";
|
|
14
14
|
export * as DomProbe from "./DomProbe.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../src/internal/probe.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAK3C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAMrC,OAAO,EAAQ,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../src/internal/probe.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAK3C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAMrC,OAAO,EAAQ,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAiItD;;;;GAIG;AAIH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,YAAY,CAE7E,CAAA"}
|
package/dist/internal/probe.js
CHANGED
|
@@ -16,6 +16,7 @@ import { makeScroll } from "./scroll.js";
|
|
|
16
16
|
/** An `IntersectionObserver`'s init from the Probe's options: each left out when not given. */
|
|
17
17
|
const observerInit = (options) => ({
|
|
18
18
|
...UndefinedOr.match(options.root, { onUndefined: () => ({}), onDefined: (root) => ({ root }) }),
|
|
19
|
+
// The DOM's margin is a string, `rootMargin`'s syntax, as `root` is an element (#610).
|
|
19
20
|
...UndefinedOr.match(options.margin, { onUndefined: () => ({}), onDefined: (rootMargin) => ({ rootMargin }) }),
|
|
20
21
|
...UndefinedOr.match(options.amount, { onUndefined: () => ({}), onDefined: (threshold) => ({ threshold }) }),
|
|
21
22
|
});
|
|
@@ -60,18 +61,18 @@ const make = Effect.gen(function* () {
|
|
|
60
61
|
const prefersReducedMotion = Atom.keepAlive(Atom.make(Option.exists(mql, (query) => query.matches)));
|
|
61
62
|
if (Option.isSome(mql)) {
|
|
62
63
|
// The MediaQueryList's `change` listener is the Atom's only writer, and it writes inside the
|
|
63
|
-
// event, as `viewport`'s and `
|
|
64
|
+
// event, as `viewport`'s and `visible`'s do: a reader sees the new preference before the next
|
|
64
65
|
// frame (#618, M8: a fiber over `Stream.fromEventListener` set it a task later).
|
|
65
66
|
const query = mql.value;
|
|
66
67
|
const writeReduced = (event) => registry.set(prefersReducedMotion, event.matches);
|
|
67
68
|
yield* Effect.acquireRelease(Effect.sync(() => query.addEventListener("change", writeReduced)), () => Effect.sync(() => query.removeEventListener("change", writeReduced)));
|
|
68
69
|
}
|
|
69
|
-
// ---
|
|
70
|
+
// --- visible (#443, #610) ---------------------------------------------------
|
|
70
71
|
// The document's `visibilitychange` listener is its only writer, and it writes inside the event,
|
|
71
72
|
// as `viewport`'s does: a reader sees the page hidden before the next frame.
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
yield* Effect.acquireRelease(Effect.sync(() => document.addEventListener("visibilitychange",
|
|
73
|
+
const visible = Atom.keepAlive(Atom.make(document.visibilityState !== "hidden"));
|
|
74
|
+
const writeVisible = () => registry.set(visible, document.visibilityState !== "hidden");
|
|
75
|
+
yield* Effect.acquireRelease(Effect.sync(() => document.addEventListener("visibilitychange", writeVisible)), () => Effect.sync(() => document.removeEventListener("visibilitychange", writeVisible)));
|
|
75
76
|
// --- observeResize ------------------------------------------------------
|
|
76
77
|
// One ResizeObserver per target, ref-counted via `SharedSource.byTarget`. The
|
|
77
78
|
// observer is constructed on the first subscriber; `Effect.addFinalizer`
|
|
@@ -98,7 +99,7 @@ const make = Effect.gen(function* () {
|
|
|
98
99
|
measure: (target) => Effect.sync(() => toBounds(target.getBoundingClientRect())),
|
|
99
100
|
viewport,
|
|
100
101
|
prefersReducedMotion,
|
|
101
|
-
|
|
102
|
+
visible,
|
|
102
103
|
// A container's scroll, set within its events (#234): `scroll.ts`.
|
|
103
104
|
scroll: yield* makeScroll(registry),
|
|
104
105
|
observeResize,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/internal/probe.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,YAAY,MAAM,2BAA2B,CAAA;AACzD,OAAO,KAAK,GAAG,MAAM,cAAc,CAAA;AACnC,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAA;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,WAAW,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,4EAA4E;AAC5E,+FAA+F;AAC/F,MAAM,YAAY,GAAG,CAAC,OAAkC,EAA4B,EAAE,CAAC,CAAC;IACtF,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,IAAsC,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAClI,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/internal/probe.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wardic/dom",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.3",
|
|
4
4
|
"description": "The browser environment for Wardic: its clock, renderer, input, probe and projection system, as Effect Layers.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"animation",
|
|
@@ -55,13 +55,13 @@
|
|
|
55
55
|
"typecheck:tests": "../../node_modules/typescript-7/bin/tsc -p tsconfig.test.json"
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"@wardic/core": "1.0.0-rc.
|
|
58
|
+
"@wardic/core": "1.0.0-rc.3",
|
|
59
59
|
"culori": "^4.0.2"
|
|
60
60
|
},
|
|
61
61
|
"peerDependencies": {
|
|
62
62
|
"effect": "^4.1.1"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
|
-
"@wardic/test": "1.0.0-rc.
|
|
65
|
+
"@wardic/test": "1.0.0-rc.3"
|
|
66
66
|
}
|
|
67
67
|
}
|
package/src/index.ts
CHANGED
|
@@ -36,7 +36,7 @@ import * as DomPositionalKeys from "./DomPositionalKeys.ts"
|
|
|
36
36
|
import * as DomProbe from "./DomProbe.ts"
|
|
37
37
|
import * as DomRenderer from "./DomRenderer.ts"
|
|
38
38
|
|
|
39
|
-
export const VERSION = "1.0.0-rc.
|
|
39
|
+
export const VERSION = "1.0.0-rc.3"
|
|
40
40
|
|
|
41
41
|
export * as DomClock from "./DomClock.ts"
|
|
42
42
|
export * as DomInput from "./DomInput.ts"
|
package/src/internal/probe.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* preference, whether the page is shown (`document.visibilityState`, #443), and per-target
|
|
5
5
|
* resize/intersection observation streams.
|
|
6
6
|
*
|
|
7
|
-
* The writable Atoms (`viewport`, `prefersReducedMotion`, `
|
|
7
|
+
* The writable Atoms (`viewport`, `prefersReducedMotion`, `visible`) are pinned with
|
|
8
8
|
* `keepAlive` and written through the
|
|
9
9
|
* Environment's {@link AtomRegistry} captured at build time — the same registry
|
|
10
10
|
* a consumer reads `Probe.viewport`/`Probe.prefersReducedMotion` from — so the
|
|
@@ -43,7 +43,8 @@ import { makeScroll } from "./scroll.ts"
|
|
|
43
43
|
/** An `IntersectionObserver`'s init from the Probe's options: each left out when not given. */
|
|
44
44
|
const observerInit = (options: Probe.IntersectionOptions): IntersectionObserverInit => ({
|
|
45
45
|
...UndefinedOr.match(options.root as Element | Document | undefined, { onUndefined: () => ({}), onDefined: (root) => ({ root }) }),
|
|
46
|
-
|
|
46
|
+
// The DOM's margin is a string, `rootMargin`'s syntax, as `root` is an element (#610).
|
|
47
|
+
...UndefinedOr.match(options.margin as string | undefined, { onUndefined: () => ({}), onDefined: (rootMargin) => ({ rootMargin }) }),
|
|
47
48
|
...UndefinedOr.match(options.amount, { onUndefined: () => ({}), onDefined: (threshold) => ({ threshold }) }),
|
|
48
49
|
})
|
|
49
50
|
|
|
@@ -97,7 +98,7 @@ const make = Effect.gen(function* () {
|
|
|
97
98
|
const prefersReducedMotion = Atom.keepAlive(Atom.make(Option.exists(mql, (query) => query.matches)))
|
|
98
99
|
if (Option.isSome(mql)) {
|
|
99
100
|
// The MediaQueryList's `change` listener is the Atom's only writer, and it writes inside the
|
|
100
|
-
// event, as `viewport`'s and `
|
|
101
|
+
// event, as `viewport`'s and `visible`'s do: a reader sees the new preference before the next
|
|
101
102
|
// frame (#618, M8: a fiber over `Stream.fromEventListener` set it a task later).
|
|
102
103
|
const query = mql.value
|
|
103
104
|
const writeReduced = (event: MediaQueryListEvent): void => registry.set(prefersReducedMotion, event.matches)
|
|
@@ -107,14 +108,14 @@ const make = Effect.gen(function* () {
|
|
|
107
108
|
)
|
|
108
109
|
}
|
|
109
110
|
|
|
110
|
-
// ---
|
|
111
|
+
// --- visible (#443, #610) ---------------------------------------------------
|
|
111
112
|
// The document's `visibilitychange` listener is its only writer, and it writes inside the event,
|
|
112
113
|
// as `viewport`'s does: a reader sees the page hidden before the next frame.
|
|
113
|
-
const
|
|
114
|
-
const
|
|
114
|
+
const visible = Atom.keepAlive(Atom.make(document.visibilityState !== "hidden"))
|
|
115
|
+
const writeVisible = (): void => registry.set(visible, document.visibilityState !== "hidden")
|
|
115
116
|
yield* Effect.acquireRelease(
|
|
116
|
-
Effect.sync(() => document.addEventListener("visibilitychange",
|
|
117
|
-
() => Effect.sync(() => document.removeEventListener("visibilitychange",
|
|
117
|
+
Effect.sync(() => document.addEventListener("visibilitychange", writeVisible)),
|
|
118
|
+
() => Effect.sync(() => document.removeEventListener("visibilitychange", writeVisible)),
|
|
118
119
|
)
|
|
119
120
|
|
|
120
121
|
// --- observeResize ------------------------------------------------------
|
|
@@ -155,7 +156,7 @@ const make = Effect.gen(function* () {
|
|
|
155
156
|
measure: (target) => Effect.sync(() => toBounds((target as Element).getBoundingClientRect())),
|
|
156
157
|
viewport,
|
|
157
158
|
prefersReducedMotion,
|
|
158
|
-
|
|
159
|
+
visible,
|
|
159
160
|
// A container's scroll, set within its events (#234): `scroll.ts`.
|
|
160
161
|
scroll: yield* makeScroll(registry),
|
|
161
162
|
observeResize,
|