@fundamental-engine/dom 0.7.0 → 0.8.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/container-host.d.ts +12 -0
- package/dist/container-host.d.ts.map +1 -0
- package/dist/container-host.js +60 -0
- package/dist/container-host.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lint.d.ts +32 -1
- package/dist/lint.d.ts.map +1 -1
- package/dist/lint.js +145 -0
- package/dist/lint.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* containerHost — a {@link FieldHost} scoped to a single element instead of the window (#540). The
|
|
3
|
+
* field, its bodies, and its canvas all live in the container's local coordinate space: `viewport()`
|
|
4
|
+
* returns the element's size + its `left,top` as the field-space origin, `root` scans only inside the
|
|
5
|
+
* element, and scroll/resize/input are observed on the element. This is the supported way to render a
|
|
6
|
+
* CONTAINED, card-sized field — pass `bounds: el` to `createField`/`FieldField`, or wire it directly:
|
|
7
|
+
* `createField(canvas, { host: containerHost(card) })`. The first concrete `FieldSurface` (#539).
|
|
8
|
+
*/
|
|
9
|
+
import type { FieldHost } from '@fundamental-engine/core';
|
|
10
|
+
/** Build a FieldHost scoped to `el` — a contained field in the element's local coordinate space. */
|
|
11
|
+
export declare function containerHost(el: HTMLElement): FieldHost;
|
|
12
|
+
//# sourceMappingURL=container-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-host.d.ts","sourceRoot":"","sources":["../src/container-host.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAK1D,oGAAoG;AACpG,wBAAgB,aAAa,CAAC,EAAE,EAAE,WAAW,GAAG,SAAS,CAqDxD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { prefersReducedMotion, pageHidden } from "./env.js";
|
|
2
|
+
const INPUT_EVENTS = ['pointerdown', 'wheel', 'keydown', 'touchstart'];
|
|
3
|
+
/** Build a FieldHost scoped to `el` — a contained field in the element's local coordinate space. */
|
|
4
|
+
export function containerHost(el) {
|
|
5
|
+
return {
|
|
6
|
+
root: el,
|
|
7
|
+
viewport: () => {
|
|
8
|
+
const r = el.getBoundingClientRect();
|
|
9
|
+
// originX/Y = the container's viewport position → bodies/threads/moves are measured
|
|
10
|
+
// container-local (their window rects minus this origin); the canvas is drawn in the same space.
|
|
11
|
+
return { width: r.width, height: r.height, dpr: window.devicePixelRatio || 1, originX: r.left, originY: r.top };
|
|
12
|
+
},
|
|
13
|
+
scrollY: () => el.scrollTop,
|
|
14
|
+
scrollHeight: () => el.scrollHeight,
|
|
15
|
+
reducedMotion: () => prefersReducedMotion(),
|
|
16
|
+
hidden: () => pageHidden(),
|
|
17
|
+
raf: (cb) => requestAnimationFrame(cb),
|
|
18
|
+
cancelRaf: (id) => cancelAnimationFrame(id),
|
|
19
|
+
createCanvas: () => document.createElement('canvas'),
|
|
20
|
+
onResize: (cb) => {
|
|
21
|
+
// a container can resize without the window doing so → ResizeObserver; window resize can still
|
|
22
|
+
// move it (re-layout), so keep that too.
|
|
23
|
+
const ro = new ResizeObserver(cb);
|
|
24
|
+
ro.observe(el);
|
|
25
|
+
window.addEventListener('resize', cb, { passive: true });
|
|
26
|
+
return () => {
|
|
27
|
+
ro.disconnect();
|
|
28
|
+
window.removeEventListener('resize', cb);
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
onScroll: (cb) => {
|
|
32
|
+
// content scrolling INSIDE the container, plus page scroll (which moves the container in the
|
|
33
|
+
// viewport → its origin shifts). The engine re-reads the origin each frame for a contained field.
|
|
34
|
+
el.addEventListener('scroll', cb, { passive: true });
|
|
35
|
+
window.addEventListener('scroll', cb, { passive: true });
|
|
36
|
+
return () => {
|
|
37
|
+
el.removeEventListener('scroll', cb);
|
|
38
|
+
window.removeEventListener('scroll', cb);
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
onVisibility: (cb) => {
|
|
42
|
+
document.addEventListener('visibilitychange', cb);
|
|
43
|
+
return () => document.removeEventListener('visibilitychange', cb);
|
|
44
|
+
},
|
|
45
|
+
onInput: (cb) => {
|
|
46
|
+
// interaction within the container drives its field (not the whole window).
|
|
47
|
+
for (const ev of INPUT_EVENTS)
|
|
48
|
+
el.addEventListener(ev, cb, { passive: true });
|
|
49
|
+
return () => {
|
|
50
|
+
for (const ev of INPUT_EVENTS)
|
|
51
|
+
el.removeEventListener(ev, cb);
|
|
52
|
+
};
|
|
53
|
+
},
|
|
54
|
+
onBodyEvent: (type, cb) => {
|
|
55
|
+
el.addEventListener(type, cb);
|
|
56
|
+
return () => el.removeEventListener(type, cb);
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=container-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-host.js","sourceRoot":"","sources":["../src/container-host.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export * from './apply-recipe.ts';
|
|
|
27
27
|
export * from './field-nav.ts';
|
|
28
28
|
export * from './bind-data.ts';
|
|
29
29
|
export * from './browser-host.ts';
|
|
30
|
+
export * from './container-host.ts';
|
|
30
31
|
export * from './export-dom.ts';
|
|
31
32
|
export * from './governor.ts';
|
|
32
33
|
export * from './flip.ts';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAe,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG5F,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAE1B,yGAAyG;AACzG,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,GAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAM,GAAG,WAAW,CAEhH"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAe,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG5F,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAE1B,yGAAyG;AACzG,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,GAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAM,GAAG,WAAW,CAEhH"}
|
package/dist/index.js
CHANGED
|
@@ -28,6 +28,7 @@ export * from "./apply-recipe.js";
|
|
|
28
28
|
export * from "./field-nav.js";
|
|
29
29
|
export * from "./bind-data.js";
|
|
30
30
|
export * from "./browser-host.js";
|
|
31
|
+
export * from "./container-host.js";
|
|
31
32
|
export * from "./export-dom.js";
|
|
32
33
|
export * from "./governor.js";
|
|
33
34
|
export * from "./flip.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,WAAW,EAAuC,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAE1B,yGAAyG;AACzG,MAAM,UAAU,kBAAkB,CAAC,MAAyB,EAAE,OAAmC,EAAE;IACjG,OAAO,WAAW,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;AAC/D,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,WAAW,EAAuC,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAE1B,yGAAyG;AACzG,MAAM,UAAU,kBAAkB,CAAC,MAAyB,EAAE,OAAmC,EAAE;IACjG,OAAO,WAAW,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;AAC/D,CAAC"}
|
package/dist/lint.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ import type { RelationshipRegistry } from './relationships.ts';
|
|
|
15
15
|
import type { VisualBindingRegistry } from './visual-bindings.ts';
|
|
16
16
|
import type { FrameScheduler } from './schedule.ts';
|
|
17
17
|
import type { Resolver } from './relationships.ts';
|
|
18
|
-
export type LintCode = 'relation-target-missing' | 'visual-orphan' | 'visual-not-hidden' | 'state-unregistered' | 'overlay-without-links' | 'feedback-non-css-var' | 'measurement-off-phase' | 'sink-without-feedback' | 'feedback-vars-unwritten' | 'feedback-lane-inert';
|
|
18
|
+
export type LintCode = 'relation-target-missing' | 'visual-orphan' | 'visual-not-hidden' | 'state-unregistered' | 'overlay-without-links' | 'feedback-non-css-var' | 'measurement-off-phase' | 'sink-without-feedback' | 'feedback-vars-unwritten' | 'feedback-writes-unread' | 'feedback-reads-unwritten' | 'feedback-lane-inert' | 'compositing-fill-trap';
|
|
19
19
|
export interface PlatformLintWarning {
|
|
20
20
|
code: LintCode;
|
|
21
21
|
severity: 'warning' | 'error';
|
|
@@ -38,6 +38,28 @@ export declare function lintSinkFeedback(root: ParentNode): PlatformLintWarning[
|
|
|
38
38
|
* styles itself from variables that will never be set for it. Pure.
|
|
39
39
|
*/
|
|
40
40
|
export declare function lintFeedbackVarReads(root: ParentNode): PlatformLintWarning[];
|
|
41
|
+
/**
|
|
42
|
+
* The producer side of the feedback contract: a `data-feedback` body gets `--d`/`--load`/`--field-*`
|
|
43
|
+
* written onto it every frame, but if **no** style rule reads those vars the body changes invisibly —
|
|
44
|
+
* the recurring "charged but reads nothing" bug (`.btn`, `.hero-mass`). This is the inverse of
|
|
45
|
+
* `lintFeedbackVarReads` (reads-without-writes). **Dev-only, heuristic, browser-coupled:** it walks the
|
|
46
|
+
* document's accessible stylesheets for rules that read a feedback var (the *consumers*) and warns for
|
|
47
|
+
* any `data-feedback` body that neither reads one inline nor matches such a rule. It no-ops where
|
|
48
|
+
* stylesheets aren't reachable (SSR / tests / cross-origin sheets), so it can only under-report there,
|
|
49
|
+
* never false-positive. Pseudo-classes/elements are stripped from consumer selectors before matching,
|
|
50
|
+
* keeping the heuristic lenient (it would rather miss a warning than fire a wrong one).
|
|
51
|
+
*/
|
|
52
|
+
export declare function lintFeedbackWritesUnread(root: ParentNode): PlatformLintWarning[];
|
|
53
|
+
/**
|
|
54
|
+
* The consumer side at the STYLESHEET level — the stylesheet companion to `lintFeedbackVarReads`
|
|
55
|
+
* (which only sees *inline* styles) and the mirror of `lintFeedbackWritesUnread`: a CSS rule reads a
|
|
56
|
+
* feedback var (`var(--field-*)`/`var(--load)`/`var(--d)`) and matches a `[data-body]` element that has
|
|
57
|
+
* **no** `data-feedback` — a field body styled from a channel it never opted into, so the style sits at
|
|
58
|
+
* its `var(…, fallback)` forever. Scoped to `[data-body]` (not every matched element) to stay high-signal
|
|
59
|
+
* and avoid flagging intentional generic fallbacks. **Dev-only, heuristic, browser-coupled:** no-ops
|
|
60
|
+
* where stylesheets are unreachable (SSR / tests / cross-origin), so it can only under-report.
|
|
61
|
+
*/
|
|
62
|
+
export declare function lintFeedbackReadsUnwritten(root: ParentNode): PlatformLintWarning[];
|
|
41
63
|
/** An element styled from field state it was never registered to measure is feedback with no source. Pure. */
|
|
42
64
|
export declare function lintStateRegistration(state: StateRegistry, measure: MeasurementRegistry): PlatformLintWarning[];
|
|
43
65
|
/** A relationship overlay with no relationships behind it draws a graph that does not exist. Pure. */
|
|
@@ -73,6 +95,15 @@ export interface LintOptions {
|
|
|
73
95
|
/** id resolver for relation targets (defaults to document.getElementById). */
|
|
74
96
|
resolve?: Resolver;
|
|
75
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* The DPR2 / mix-blend fill trap (#405, #532) — the hardest-won perf lesson, made a guard. A
|
|
100
|
+
* full-viewport `mix-blend-mode` canvas re-composites the WHOLE screen every frame the layer below
|
|
101
|
+
* animates, **even when it's empty**. So it must stay `display:none` until it actively draws. This flags
|
|
102
|
+
* a mounted full-viewport mix-blend canvas whose backing store is unsized (`0×0` → not drawing) yet
|
|
103
|
+
* isn't `display:none` — paying the full-screen re-blend for nothing. Inline-style only (pure, no
|
|
104
|
+
* `getComputedStyle`), matching the rest of lint.
|
|
105
|
+
*/
|
|
106
|
+
export declare function lintCompositingPerf(root: ParentNode): PlatformLintWarning[];
|
|
76
107
|
/** Run every platform lint rule over a FieldPlatform and return the aggregated warnings. */
|
|
77
108
|
export declare function lintPlatform(platform: PlatformLike, opts?: LintOptions): PlatformLintWarning[];
|
|
78
109
|
//# sourceMappingURL=lint.d.ts.map
|
package/dist/lint.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,MAAM,MAAM,QAAQ,GAChB,yBAAyB,GACzB,eAAe,GACf,mBAAmB,GACnB,oBAAoB,GACpB,uBAAuB,GACvB,sBAAsB,GACtB,uBAAuB,GACvB,uBAAuB,GACvB,yBAAyB,GACzB,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"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"}
|
package/dist/lint.js
CHANGED
|
@@ -61,6 +61,115 @@ export function lintFeedbackVarReads(root) {
|
|
|
61
61
|
});
|
|
62
62
|
return out;
|
|
63
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* The producer side of the feedback contract: a `data-feedback` body gets `--d`/`--load`/`--field-*`
|
|
66
|
+
* written onto it every frame, but if **no** style rule reads those vars the body changes invisibly —
|
|
67
|
+
* the recurring "charged but reads nothing" bug (`.btn`, `.hero-mass`). This is the inverse of
|
|
68
|
+
* `lintFeedbackVarReads` (reads-without-writes). **Dev-only, heuristic, browser-coupled:** it walks the
|
|
69
|
+
* document's accessible stylesheets for rules that read a feedback var (the *consumers*) and warns for
|
|
70
|
+
* any `data-feedback` body that neither reads one inline nor matches such a rule. It no-ops where
|
|
71
|
+
* stylesheets aren't reachable (SSR / tests / cross-origin sheets), so it can only under-report there,
|
|
72
|
+
* never false-positive. Pseudo-classes/elements are stripped from consumer selectors before matching,
|
|
73
|
+
* keeping the heuristic lenient (it would rather miss a warning than fire a wrong one).
|
|
74
|
+
*/
|
|
75
|
+
export function lintFeedbackWritesUnread(root) {
|
|
76
|
+
const out = [];
|
|
77
|
+
if (typeof document === 'undefined')
|
|
78
|
+
return out;
|
|
79
|
+
// collect the selectors of rules that read a feedback var — the consumer side of the contract.
|
|
80
|
+
const consumerSelectors = [];
|
|
81
|
+
for (const sheet of Array.from(document.styleSheets)) {
|
|
82
|
+
let rules;
|
|
83
|
+
try {
|
|
84
|
+
rules = sheet.cssRules;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
continue;
|
|
88
|
+
} // cross-origin sheet → unreadable, skip
|
|
89
|
+
for (const rule of Array.from(rules ?? [])) {
|
|
90
|
+
const r = rule;
|
|
91
|
+
if (r.selectorText && r.cssText && FEEDBACK_VAR_READS.some((v) => r.cssText.includes(v)))
|
|
92
|
+
consumerSelectors.push(r.selectorText);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
root.querySelectorAll('[data-body][data-feedback]').forEach((el) => {
|
|
96
|
+
const style = el.getAttribute('style') ?? '';
|
|
97
|
+
if (FEEDBACK_VAR_READS.some((v) => style.includes(v)))
|
|
98
|
+
return; // reads one inline — consumed
|
|
99
|
+
const consumed = consumerSelectors.some((sel) => sel.split(',').some((part) => {
|
|
100
|
+
const clean = part.trim().replace(/::?[\w-]+(\([^)]*\))?/g, ''); // drop :hover / ::before etc.
|
|
101
|
+
if (!clean)
|
|
102
|
+
return false;
|
|
103
|
+
try {
|
|
104
|
+
return el.matches(clean);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
}));
|
|
110
|
+
if (!consumed)
|
|
111
|
+
out.push({
|
|
112
|
+
code: 'feedback-writes-unread',
|
|
113
|
+
severity: 'warning',
|
|
114
|
+
element: el,
|
|
115
|
+
message: 'data-feedback body is written --d/--load/--field-* every frame but no style rule reads them — it changes invisibly (style against var(--field-density), var(--d)…)',
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
return out;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* The consumer side at the STYLESHEET level — the stylesheet companion to `lintFeedbackVarReads`
|
|
122
|
+
* (which only sees *inline* styles) and the mirror of `lintFeedbackWritesUnread`: a CSS rule reads a
|
|
123
|
+
* feedback var (`var(--field-*)`/`var(--load)`/`var(--d)`) and matches a `[data-body]` element that has
|
|
124
|
+
* **no** `data-feedback` — a field body styled from a channel it never opted into, so the style sits at
|
|
125
|
+
* its `var(…, fallback)` forever. Scoped to `[data-body]` (not every matched element) to stay high-signal
|
|
126
|
+
* and avoid flagging intentional generic fallbacks. **Dev-only, heuristic, browser-coupled:** no-ops
|
|
127
|
+
* where stylesheets are unreachable (SSR / tests / cross-origin), so it can only under-report.
|
|
128
|
+
*/
|
|
129
|
+
export function lintFeedbackReadsUnwritten(root) {
|
|
130
|
+
const out = [];
|
|
131
|
+
if (typeof document === 'undefined')
|
|
132
|
+
return out;
|
|
133
|
+
const seen = new Set();
|
|
134
|
+
for (const sheet of Array.from(document.styleSheets)) {
|
|
135
|
+
let rules;
|
|
136
|
+
try {
|
|
137
|
+
rules = sheet.cssRules;
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
continue;
|
|
141
|
+
} // cross-origin sheet → unreadable, skip
|
|
142
|
+
for (const rule of Array.from(rules ?? [])) {
|
|
143
|
+
const r = rule;
|
|
144
|
+
if (!r.selectorText || !r.cssText || !FEEDBACK_VAR_READS.some((v) => r.cssText.includes(v)))
|
|
145
|
+
continue;
|
|
146
|
+
for (const part of r.selectorText.split(',')) {
|
|
147
|
+
const clean = part.trim().replace(/::?[\w-]+(\([^)]*\))?/g, ''); // drop :hover / ::before etc.
|
|
148
|
+
if (!clean)
|
|
149
|
+
continue;
|
|
150
|
+
let matched;
|
|
151
|
+
try {
|
|
152
|
+
matched = root.querySelectorAll(clean);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
for (const el of Array.from(matched)) {
|
|
158
|
+
if (seen.has(el) || !el.hasAttribute('data-body') || el.hasAttribute('data-feedback'))
|
|
159
|
+
continue;
|
|
160
|
+
seen.add(el);
|
|
161
|
+
out.push({
|
|
162
|
+
code: 'feedback-reads-unwritten',
|
|
163
|
+
severity: 'warning',
|
|
164
|
+
element: el,
|
|
165
|
+
message: `a style rule (${r.selectorText}) styles this body from a feedback var, but it has no data-feedback — that channel is never written for it, so the style stays at its fallback`,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return out;
|
|
172
|
+
}
|
|
64
173
|
/** An element styled from field state it was never registered to measure is feedback with no source. Pure. */
|
|
65
174
|
export function lintStateRegistration(state, measure) {
|
|
66
175
|
const out = [];
|
|
@@ -134,14 +243,50 @@ export function lintVisuals(visuals) {
|
|
|
134
243
|
element: w.visual,
|
|
135
244
|
}));
|
|
136
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* The DPR2 / mix-blend fill trap (#405, #532) — the hardest-won perf lesson, made a guard. A
|
|
248
|
+
* full-viewport `mix-blend-mode` canvas re-composites the WHOLE screen every frame the layer below
|
|
249
|
+
* animates, **even when it's empty**. So it must stay `display:none` until it actively draws. This flags
|
|
250
|
+
* a mounted full-viewport mix-blend canvas whose backing store is unsized (`0×0` → not drawing) yet
|
|
251
|
+
* isn't `display:none` — paying the full-screen re-blend for nothing. Inline-style only (pure, no
|
|
252
|
+
* `getComputedStyle`), matching the rest of lint.
|
|
253
|
+
*/
|
|
254
|
+
export function lintCompositingPerf(root) {
|
|
255
|
+
const out = [];
|
|
256
|
+
root.querySelectorAll('canvas').forEach((el) => {
|
|
257
|
+
const c = el;
|
|
258
|
+
const s = c.style;
|
|
259
|
+
const blend = s.mixBlendMode;
|
|
260
|
+
if (!blend || blend === 'normal')
|
|
261
|
+
return; // only mix-blend canvases pay the per-frame re-blend
|
|
262
|
+
const fullViewport = s.position === 'fixed' &&
|
|
263
|
+
(s.inset === '0' || s.inset === '0px' || (s.width === '100%' && s.height === '100%'));
|
|
264
|
+
if (!fullViewport)
|
|
265
|
+
return;
|
|
266
|
+
if (s.display === 'none')
|
|
267
|
+
return; // correctly gated out of the compositing tree — no cost
|
|
268
|
+
if (c.width !== 0 && c.height !== 0)
|
|
269
|
+
return; // has a sized backing store → assume it's actively drawing
|
|
270
|
+
out.push({
|
|
271
|
+
code: 'compositing-fill-trap',
|
|
272
|
+
severity: 'warning',
|
|
273
|
+
element: c,
|
|
274
|
+
message: `a full-viewport mix-blend-mode="${blend}" canvas is mounted with an unsized backing store (0×0) but not display:none — it re-composites the whole screen every frame for nothing (#405). Set display:none until it actively draws.`,
|
|
275
|
+
});
|
|
276
|
+
});
|
|
277
|
+
return out;
|
|
278
|
+
}
|
|
137
279
|
/** Run every platform lint rule over a FieldPlatform and return the aggregated warnings. */
|
|
138
280
|
export function lintPlatform(platform, opts = {}) {
|
|
139
281
|
const root = opts.root ?? platform.root;
|
|
140
282
|
const resolve = opts.resolve ?? ((id) => (typeof document !== 'undefined' ? document.getElementById(id) : null));
|
|
141
283
|
return [
|
|
142
284
|
...lintRelationTargets(root, resolve),
|
|
285
|
+
...lintCompositingPerf(root),
|
|
143
286
|
...lintSinkFeedback(root),
|
|
144
287
|
...lintFeedbackVarReads(root),
|
|
288
|
+
...lintFeedbackWritesUnread(root),
|
|
289
|
+
...lintFeedbackReadsUnwritten(root),
|
|
145
290
|
...lintStateRegistration(platform.state, platform.measure),
|
|
146
291
|
...lintOverlayLinks(platform.overlays, platform.relationships),
|
|
147
292
|
...lintFeedbackVars(platform.feedback),
|
package/dist/lint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fundamental-engine/dom",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "The platform-adjacent layer for Fundamental — native-first registries for measurement, semantic state, feedback, relationships, visual-semantic bindings, and overlays. The browser primitives Fundamental wishes existed, built on the ones it has.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"access": "public"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@fundamental-engine/core": "0.
|
|
49
|
+
"@fundamental-engine/core": "0.8.0"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"typescript": "^5.9.3"
|