@fundamental-engine/dom 0.9.2 → 0.9.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/browser-host.js.map +1 -1
- package/dist/container-host.d.ts +1 -1
- package/dist/container-host.d.ts.map +1 -1
- package/dist/container-host.js +16 -0
- package/dist/container-host.js.map +1 -1
- package/dist/dev-warn.d.ts +16 -0
- package/dist/dev-warn.d.ts.map +1 -0
- package/dist/dev-warn.js +53 -0
- package/dist/dev-warn.js.map +1 -0
- package/dist/feedback.d.ts +5 -0
- package/dist/feedback.d.ts.map +1 -1
- package/dist/feedback.js +22 -0
- package/dist/feedback.js.map +1 -1
- package/dist/governor.d.ts +6 -2
- package/dist/governor.d.ts.map +1 -1
- package/dist/governor.js +6 -2
- package/dist/governor.js.map +1 -1
- package/dist/lint.d.ts +30 -1
- package/dist/lint.d.ts.map +1 -1
- package/dist/lint.js +147 -0
- package/dist/lint.js.map +1 -1
- package/dist/measurement.d.ts +8 -1
- package/dist/measurement.d.ts.map +1 -1
- package/dist/measurement.js +15 -4
- package/dist/measurement.js.map +1 -1
- package/dist/relationships.d.ts.map +1 -1
- package/dist/relationships.js +5 -0
- package/dist/relationships.js.map +1 -1
- package/dist/state.d.ts +3 -0
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +6 -0
- package/dist/state.js.map +1 -1
- package/dist/visual-bindings.d.ts +0 -24
- package/dist/visual-bindings.d.ts.map +1 -1
- package/dist/visual-bindings.js +7 -2
- package/dist/visual-bindings.js.map +1 -1
- package/dist/worker/offthread-bridge.d.ts.map +1 -1
- package/dist/worker/offthread-bridge.js +31 -8
- package/dist/worker/offthread-bridge.js.map +1 -1
- package/dist/worker/render-worker.d.ts +3 -2
- package/dist/worker/render-worker.d.ts.map +1 -1
- package/dist/worker/render-worker.js +9 -3
- package/dist/worker/render-worker.js.map +1 -1
- package/dist/x-ray.d.ts.map +1 -1
- package/dist/x-ray.js +73 -13
- package/dist/x-ray.js.map +1 -1
- package/package.json +2 -2
package/dist/measurement.js
CHANGED
|
@@ -28,6 +28,13 @@ function visibilityRatio(r, vp) {
|
|
|
28
28
|
export class MeasurementRegistry {
|
|
29
29
|
entries = new Map();
|
|
30
30
|
snapshot = [];
|
|
31
|
+
/**
|
|
32
|
+
* Identity-keyed index into the current `snapshot`, rebuilt each `measure()`. Turns `for(element)`
|
|
33
|
+
* from an O(N) linear scan of the snapshot array (which forces called per-element → O(M×N)/frame)
|
|
34
|
+
* into an O(1) Map lookup. Reset before `measure()` populates it, so `for()` on a since-pruned
|
|
35
|
+
* element correctly returns undefined.
|
|
36
|
+
*/
|
|
37
|
+
byElement = new Map();
|
|
31
38
|
guard = null;
|
|
32
39
|
/**
|
|
33
40
|
* Install a phase guard (the FrameScheduler supplies one via `readGuard()`). It is consulted
|
|
@@ -59,6 +66,8 @@ export class MeasurementRegistry {
|
|
|
59
66
|
this.guard?.('measure'); // read-phase discipline: reading layout off-phase thrashes
|
|
60
67
|
const vp = viewport ?? defaultViewport();
|
|
61
68
|
const out = [];
|
|
69
|
+
const index = this.byElement;
|
|
70
|
+
index.clear();
|
|
62
71
|
for (const [el, e] of this.entries) {
|
|
63
72
|
if (!el.isConnected) {
|
|
64
73
|
this.entries.delete(el);
|
|
@@ -66,14 +75,16 @@ export class MeasurementRegistry {
|
|
|
66
75
|
}
|
|
67
76
|
const rect = toFieldRect(e.getRect ? e.getRect() : el.getBoundingClientRect());
|
|
68
77
|
const ratio = visibilityRatio(rect, vp);
|
|
69
|
-
|
|
78
|
+
const m = {
|
|
70
79
|
element: el,
|
|
71
80
|
rect,
|
|
72
81
|
visible: ratio > 0,
|
|
73
82
|
visibilityRatio: ratio,
|
|
74
83
|
coordinateSpace: e.coordinateSpace ?? 'viewport',
|
|
75
84
|
timestamp: now,
|
|
76
|
-
}
|
|
85
|
+
};
|
|
86
|
+
out.push(m);
|
|
87
|
+
index.set(el, m);
|
|
77
88
|
}
|
|
78
89
|
this.snapshot = out;
|
|
79
90
|
return out;
|
|
@@ -82,9 +93,9 @@ export class MeasurementRegistry {
|
|
|
82
93
|
last() {
|
|
83
94
|
return this.snapshot;
|
|
84
95
|
}
|
|
85
|
-
/** The latest measurement for one element, if present. */
|
|
96
|
+
/** The latest measurement for one element, if present. O(1) via the identity index. */
|
|
86
97
|
for(element) {
|
|
87
|
-
return this.
|
|
98
|
+
return this.byElement.get(element);
|
|
88
99
|
}
|
|
89
100
|
}
|
|
90
101
|
function defaultViewport() {
|
package/dist/measurement.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"measurement.js","sourceRoot":"","sources":["../src/measurement.ts"],"names":[],"mappings":"AAuBA,SAAS,WAAW,CAAC,CAAyE;IAC5F,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;IACpB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;IAClB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IACtB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACxB,OAAO;QACL,CAAC,EAAE,IAAI;QACP,CAAC,EAAE,GAAG;QACN,KAAK;QACL,MAAM;QACN,EAAE,EAAE,IAAI,GAAG,KAAK,GAAG,CAAC;QACpB,EAAE,EAAE,GAAG,GAAG,MAAM,GAAG,CAAC;QACpB,GAAG;QACH,KAAK,EAAE,IAAI,GAAG,KAAK;QACnB,MAAM,EAAE,GAAG,GAAG,MAAM;QACpB,IAAI;KACL,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,SAAS,eAAe,CAAC,CAAY,EAAE,EAAY;IACjD,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACxB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,OAAO,mBAAmB;IACb,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,QAAQ,GAAgC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"measurement.js","sourceRoot":"","sources":["../src/measurement.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relationships.d.ts","sourceRoot":"","sources":["../src/relationships.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"relationships.d.ts","sourceRoot":"","sources":["../src/relationships.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AACjF,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,SAAS,GAAG,eAAe,CAAC;AAE5E,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,qBAAqB,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,uCAAuC;AACvC,MAAM,MAAM,QAAQ,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC;AAuBtD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,UAAU,EAAE,sBAAsB,EAAE,CAAC;CACtC;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,GAAG,UAAU,CAmC5E;AAED,2GAA2G;AAC3G,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,GAAG,iBAAiB,EAAE,CAE5F;AAED,wGAAwG;AACxG,wBAAgB,kCAAkC,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,GAAG,sBAAsB,EAAE,CAE3G;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwC;IAC7D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;IAE5E;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,IAAI;IA4BpD;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IASlC,6EAA6E;IAC7E,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,iBAAiB;IAYzH,GAAG,IAAI,iBAAiB,EAAE;IAI1B,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,yEAAyE;IACzE,aAAa,IAAI,sBAAsB,EAAE;IAIzC,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,oFAAoF;IACpF,QAAQ,IAAI,iBAAiB,EAAE;CAYhC"}
|
package/dist/relationships.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { warnIfFrameFrequent } from "./dev-warn.js";
|
|
1
2
|
// Id-less elements need a STABLE, UNIQUE fallback id. A content hash (tagName) collapsed every
|
|
2
3
|
// id-less <a> onto one key, so edges keyed by `${idOf(from)}~type~${idOf(to)}` collided and
|
|
3
4
|
// silently overwrote each other. A WeakMap hands out `el-<seq>` on first sight: same element → same
|
|
@@ -81,6 +82,10 @@ export class RelationshipRegistry {
|
|
|
81
82
|
* Resolved edges accumulate across passes — only disconnected ones are dropped.
|
|
82
83
|
*/
|
|
83
84
|
discover(root, resolve) {
|
|
85
|
+
// layout-traversal trap: discover() walks the DOM with querySelectorAll to rebuild graph edges.
|
|
86
|
+
// It is meant to run on a throttle (see shouldDiscoverRelationships' every-30-frames cadence), not
|
|
87
|
+
// every frame — warn once (dev-only) if it is being called at frame frequency.
|
|
88
|
+
warnIfFrameFrequent('RELATIONSHIP_DISCOVER', 'RelationshipRegistry.discover() is being called at frame frequency — it walks the DOM (querySelectorAll) to rebuild the relationship graph. Throttle it (e.g. every ~30 frames) instead of running it each frame.');
|
|
84
89
|
const r = resolve ?? ((id) => (typeof document !== 'undefined' ? document.getElementById(id) : null));
|
|
85
90
|
// prune resolved edges whose from or to element left the DOM before rescanning
|
|
86
91
|
for (const [id, rl] of this.rels) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relationships.js","sourceRoot":"","sources":["../src/relationships.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"relationships.js","sourceRoot":"","sources":["../src/relationships.ts"],"names":[],"mappings":"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"}
|
package/dist/state.d.ts
CHANGED
|
@@ -28,6 +28,9 @@ export declare class StateRegistry {
|
|
|
28
28
|
* at their natural moments — callers with a frame loop can run this on a cadence). */
|
|
29
29
|
prune(): void;
|
|
30
30
|
clear(element: Element): void;
|
|
31
|
+
/** Drop ALL held state and listeners — used on platform teardown to free every strong Element ref
|
|
32
|
+
* immediately rather than waiting for the registry object itself to be collected. */
|
|
33
|
+
clearAll(): void;
|
|
31
34
|
/** Observe one key on one element. Returns an unsubscribe function. */
|
|
32
35
|
observe(element: Element, key: string, fn: StateListener): () => void;
|
|
33
36
|
private notify;
|
package/dist/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,KAAK,GAAG,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAShE,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAE5F,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoD;IAC1E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuD;IAEjF,gFAAgF;IAChF,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAYpD,iEAAiE;IACjE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAK7C,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI/D,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAI3C,mDAAmD;IACnD,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC;IAI9D,uEAAuE;IACvE,QAAQ,IAAI,OAAO,EAAE;IAIrB,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAiB3C;2FACuF;IACvF,KAAK,IAAI,IAAI;IAKb,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK7B,uEAAuE;IACvE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI;IAerE,OAAO,CAAC,MAAM;CAIf"}
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,KAAK,GAAG,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAShE,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAE5F,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoD;IAC1E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuD;IAEjF,gFAAgF;IAChF,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAYpD,iEAAiE;IACjE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAK7C,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI/D,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAI3C,mDAAmD;IACnD,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC;IAI9D,uEAAuE;IACvE,QAAQ,IAAI,OAAO,EAAE;IAIrB,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAiB3C;2FACuF;IACvF,KAAK,IAAI,IAAI;IAKb,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK7B;0FACsF;IACtF,QAAQ,IAAI,IAAI;IAKhB,uEAAuE;IACvE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,GAAG,MAAM,IAAI;IAerE,OAAO,CAAC,MAAM;CAIf"}
|
package/dist/state.js
CHANGED
|
@@ -75,6 +75,12 @@ export class StateRegistry {
|
|
|
75
75
|
this.store.delete(element);
|
|
76
76
|
this.listeners.delete(element);
|
|
77
77
|
}
|
|
78
|
+
/** Drop ALL held state and listeners — used on platform teardown to free every strong Element ref
|
|
79
|
+
* immediately rather than waiting for the registry object itself to be collected. */
|
|
80
|
+
clearAll() {
|
|
81
|
+
this.store.clear();
|
|
82
|
+
this.listeners.clear();
|
|
83
|
+
}
|
|
78
84
|
/** Observe one key on one element. Returns an unsubscribe function. */
|
|
79
85
|
observe(element, key, fn) {
|
|
80
86
|
let byKey = this.listeners.get(element);
|
package/dist/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* VisualBindingRegistry — bind an expressive visual layer (SVG, Canvas, WebGL) to its semantic DOM
|
|
3
|
-
* source without duplicating meaning or harming accessibility. The native primitive Fundamental wishes
|
|
4
|
-
* existed: a declarative "this visual represents that semantic element; don't double-expose it".
|
|
5
|
-
*
|
|
6
|
-
* The semantic source stays real HTML; the visual is `aria-hidden` unless it carries independent
|
|
7
|
-
* meaning. `lint()` flags orphan visuals and accessibility hazards.
|
|
8
|
-
*
|
|
9
|
-
* Declarative authoring: mark the visual with `data-field-visual-for` (id/selector of the semantic
|
|
10
|
-
* source) and `data-field-visual-role`, then call `scan(root)` to register it. This is the bridge from
|
|
11
|
-
* semantic HTML + data attributes → VisualBindingRegistry
|
|
12
|
-
* It does NOT extract glyph outlines or generate vector geometry — it only binds an authored visual
|
|
13
|
-
* layer to its source so the field can lint and inspect the pairing.
|
|
14
|
-
*
|
|
15
|
-
* State mirroring (Body Matter Interaction — the Bound Visual tier): the element absorbs field
|
|
16
|
-
* matter; the visual layer shows what that absorption means; the semantic text remains the source
|
|
17
|
-
* of meaning. CSS custom properties don't cross to siblings, so with mirroring enabled
|
|
18
|
-
* (`setMirroring(true)` — the platform default) every `representation`/`measurement` visual
|
|
19
|
-
* receives its source's feedback channels (`--d`/`--field-density`, `--load`/`--mass`, the measured
|
|
20
|
-
* metrics — see MIRRORED_CHANNELS) copied onto its own inline style: an aria-hidden SVG beside a
|
|
21
|
-
* sink heading thickens its contours from `var(--load)` exactly as if it were the body itself.
|
|
22
|
-
* Change-gated via a MutationObserver on the source's style attribute — no polling, no frame cost
|
|
23
|
-
* while the field is quiet.
|
|
24
|
-
*/
|
|
25
1
|
export type VisualRole = 'decorative' | 'representation' | 'debug' | 'relationship' | 'measurement';
|
|
26
2
|
export interface VisualBinding {
|
|
27
3
|
visual: Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual-bindings.d.ts","sourceRoot":"","sources":["../src/visual-bindings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"visual-bindings.d.ts","sourceRoot":"","sources":["../src/visual-bindings.ts"],"names":[],"mappings":"AA0BA,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,gBAAgB,GAAG,OAAO,GAAG,cAAc,GAAG,aAAa,CAAC;AAOpG,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,aAAa,EAAE;QACb,UAAU,EAAE,OAAO,CAAC;QACpB,yDAAyD;QACzD,sBAAsB,EAAE,OAAO,CAAC;QAChC,6FAA6F;QAC7F,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,uBAAuB,GAAG,mBAAmB,GAAG,qBAAqB,CAAC;IAC5E,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oGAAoG;AACpG,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,wBAAwB,EAAE,CAAC;CACtC;AAID;+FAC+F;AAC/F,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAS9C,CAAC;AA8BF,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwC;IAElE,+FAA+F;IAC/F,IAAI,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,GAAG,aAAa;IAmBzF;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAU/B,6FAA6F;IAC7F,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAYhC,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,OAAO;IAQf;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,IAA4B,GAAG,uBAAuB;IAgDjH,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS;IAI/C,GAAG,IAAI,aAAa,EAAE;IAItB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,wEAAwE;IACxE,IAAI,IAAI,iBAAiB,EAAE;CAc5B"}
|
package/dist/visual-bindings.js
CHANGED
|
@@ -16,12 +16,13 @@
|
|
|
16
16
|
* matter; the visual layer shows what that absorption means; the semantic text remains the source
|
|
17
17
|
* of meaning. CSS custom properties don't cross to siblings, so with mirroring enabled
|
|
18
18
|
* (`setMirroring(true)` — the platform default) every `representation`/`measurement` visual
|
|
19
|
-
* receives its source's feedback channels (`--d`/`--field-density`, `--load
|
|
19
|
+
* receives its source's feedback channels (`--d`/`--field-density`, `--load`, the measured
|
|
20
20
|
* metrics — see MIRRORED_CHANNELS) copied onto its own inline style: an aria-hidden SVG beside a
|
|
21
21
|
* sink heading thickens its contours from `var(--load)` exactly as if it were the body itself.
|
|
22
22
|
* Change-gated via a MutationObserver on the source's style attribute — no polling, no frame cost
|
|
23
23
|
* while the field is quiet.
|
|
24
24
|
*/
|
|
25
|
+
import { warnIfFrameFrequent } from "./dev-warn.js";
|
|
25
26
|
const VISUAL_ROLES = ['decorative', 'representation', 'debug', 'relationship', 'measurement'];
|
|
26
27
|
const isVisualRole = (v) => v != null && VISUAL_ROLES.includes(v);
|
|
27
28
|
/** roles that re-present existing meaning and therefore require a semantic source. */
|
|
@@ -33,7 +34,6 @@ export const MIRRORED_CHANNELS = [
|
|
|
33
34
|
'--d',
|
|
34
35
|
'--field-density',
|
|
35
36
|
'--load',
|
|
36
|
-
'--mass',
|
|
37
37
|
'--lit',
|
|
38
38
|
'--entropy',
|
|
39
39
|
'--coherence',
|
|
@@ -149,6 +149,11 @@ export class VisualBindingRegistry {
|
|
|
149
149
|
* and disconnected visuals are pruned. `resolve` defaults to a document-backed resolver.
|
|
150
150
|
*/
|
|
151
151
|
scan(root, resolve = defaultResolver(root)) {
|
|
152
|
+
// layout-traversal trap: scan() walks the DOM with querySelectorAll to (re)discover declarative
|
|
153
|
+
// bindings. It is meant to run on mount / mutation, not every frame — warn once (dev-only) if it
|
|
154
|
+
// is being called at frame frequency. Once bound, mirroring is change-gated via MutationObserver,
|
|
155
|
+
// so per-frame rescans are pure overhead.
|
|
156
|
+
warnIfFrameFrequent('VISUAL_BINDING_SCAN', 'VisualBindingRegistry.scan() is being called at frame frequency — it walks the DOM (querySelectorAll) to rediscover bindings. Scan on mount / DOM mutation, not every frame (mirroring is already change-gated via MutationObserver).');
|
|
152
157
|
// navigation hygiene: drop bindings whose visual OR source left the DOM (and stop mirroring
|
|
153
158
|
// them). Pruning only on the visual leaves a MutationObserver pinned to a removed source —
|
|
154
159
|
// holding that detached source subtree alive for as long as the visual stays mounted.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visual-bindings.js","sourceRoot":"","sources":["../src/visual-bindings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;
|
|
1
|
+
{"version":3,"file":"visual-bindings.js","sourceRoot":"","sources":["../src/visual-bindings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"offthread-bridge.d.ts","sourceRoot":"","sources":["../../src/worker/offthread-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAK5D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,iBAAiB,EACzB,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1B,qBAAqB,
|
|
1
|
+
{"version":3,"file":"offthread-bridge.d.ts","sourceRoot":"","sources":["../../src/worker/offthread-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAK5D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,iBAAiB,EACzB,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1B,qBAAqB,CA+EvB"}
|
|
@@ -12,28 +12,51 @@ export function attachOffthreadRender(field, canvas, opts = {}) {
|
|
|
12
12
|
let frameN = 0;
|
|
13
13
|
let pending = false;
|
|
14
14
|
let raf = null;
|
|
15
|
-
//
|
|
16
|
-
|
|
15
|
+
// Double-buffered particle transfer (#991). Instead of `buf.slice(...)` allocating a fresh copy
|
|
16
|
+
// every posted frame, we keep a small free-list of buffers and *transfer* ownership to the worker
|
|
17
|
+
// (zero-copy). The worker posts the buffer back on 'done', where it re-enters the pool. A pool of
|
|
18
|
+
// two lets frame N+1 fill one buffer while the worker still holds frame N's — but rendering is
|
|
19
|
+
// gated on `pending` (one frame in flight), so at most one buffer is ever out on the worker.
|
|
20
|
+
const pool = [
|
|
21
|
+
new Float32Array(1000 * PARTICLE_STRIDE),
|
|
22
|
+
new Float32Array(1000 * PARTICLE_STRIDE),
|
|
23
|
+
];
|
|
24
|
+
function takeBuffer(minLen) {
|
|
25
|
+
// reuse a pooled buffer if one is large enough; else allocate (and let the small one drop).
|
|
26
|
+
for (let i = 0; i < pool.length; i++) {
|
|
27
|
+
if (pool[i].length >= minLen)
|
|
28
|
+
return pool.splice(i, 1)[0];
|
|
29
|
+
}
|
|
30
|
+
return new Float32Array(minLen * 2);
|
|
31
|
+
}
|
|
17
32
|
function tick() {
|
|
18
33
|
raf = requestAnimationFrame(tick);
|
|
19
34
|
if (pending)
|
|
20
|
-
return; // worker still rendering previous frame
|
|
35
|
+
return; // worker still rendering previous frame (its buffer is still out)
|
|
21
36
|
const n = field.particleCount();
|
|
22
|
-
|
|
23
|
-
|
|
37
|
+
const need = n * PARTICLE_STRIDE;
|
|
38
|
+
const buf = takeBuffer(need);
|
|
24
39
|
field.readParticles(buf);
|
|
25
40
|
pending = true;
|
|
41
|
+
// Transfer the underlying ArrayBuffer — zero-copy hand-off. The buffer is neutered on this side
|
|
42
|
+
// until the worker returns it (below), which is safe because `pending` blocks the next fill.
|
|
26
43
|
worker.postMessage({
|
|
27
44
|
type: 'frame',
|
|
28
|
-
particles: buf
|
|
45
|
+
particles: buf,
|
|
29
46
|
count: n,
|
|
30
47
|
W: canvas.width / dpr,
|
|
31
48
|
H: canvas.height / dpr,
|
|
32
49
|
dpr,
|
|
33
50
|
frameN: frameN++,
|
|
34
|
-
});
|
|
51
|
+
}, [buf.buffer]);
|
|
35
52
|
}
|
|
36
|
-
worker.addEventListener('message', () => {
|
|
53
|
+
worker.addEventListener('message', (e) => {
|
|
54
|
+
// Reclaim the transferred buffer the worker sends back, and clear the in-flight gate.
|
|
55
|
+
const returned = e.data?.particles;
|
|
56
|
+
if (returned instanceof Float32Array && pool.length < 2)
|
|
57
|
+
pool.push(returned);
|
|
58
|
+
pending = false;
|
|
59
|
+
});
|
|
37
60
|
tick();
|
|
38
61
|
return {
|
|
39
62
|
supported: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"offthread-bridge.js","sourceRoot":"","sources":["../../src/worker/offthread-bridge.ts"],"names":[],"mappings":"AAUA,kEAAkE;AAClE,MAAM,eAAe,GAAG,CAAC,CAAC;AAO1B,MAAM,UAAU,qBAAqB,CACnC,KAAkB,EAClB,MAAyB,EACzB,OAAyB,EAAE;IAE3B,iCAAiC;IACjC,IAAI,OAAO,eAAe,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC;QACjF,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,MAAM,CAAC,0BAA0B,EAAE,CAAC;IAEtD,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAC9C,EAAE,IAAI,EAAE,QAAQ,EAAE,CACnB,CAAC;IAEF,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,SAAoC,CAAC,CAAC,CAAC;IAEhG,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,GAAG,GAAkB,IAAI,CAAC;IAE9B,
|
|
1
|
+
{"version":3,"file":"offthread-bridge.js","sourceRoot":"","sources":["../../src/worker/offthread-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* Off-main-thread render worker. Receives particle data each frame via postMessage,
|
|
3
3
|
* draws to an OffscreenCanvas using the canvas2d API.
|
|
4
4
|
* Protocol: main → worker: { type:'frame', particles: Float32Array, count: number,
|
|
5
|
-
* W: number, H: number, dpr: number, frameN: number }
|
|
6
|
-
* worker → main: { type:'done', frameN: number }
|
|
5
|
+
* W: number, H: number, dpr: number, frameN: number } — `particles.buffer` is transferred.
|
|
6
|
+
* worker → main: { type:'done', frameN: number, particles: Float32Array } — the particle buffer is
|
|
7
|
+
* transferred BACK so the main thread can recycle it (see offthread-bridge pool, #991).
|
|
7
8
|
*/
|
|
8
9
|
export {};
|
|
9
10
|
//# sourceMappingURL=render-worker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-worker.d.ts","sourceRoot":"","sources":["../../src/worker/render-worker.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"render-worker.d.ts","sourceRoot":"","sources":["../../src/worker/render-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -2,10 +2,15 @@
|
|
|
2
2
|
* Off-main-thread render worker. Receives particle data each frame via postMessage,
|
|
3
3
|
* draws to an OffscreenCanvas using the canvas2d API.
|
|
4
4
|
* Protocol: main → worker: { type:'frame', particles: Float32Array, count: number,
|
|
5
|
-
* W: number, H: number, dpr: number, frameN: number }
|
|
6
|
-
* worker → main: { type:'done', frameN: number }
|
|
5
|
+
* W: number, H: number, dpr: number, frameN: number } — `particles.buffer` is transferred.
|
|
6
|
+
* worker → main: { type:'done', frameN: number, particles: Float32Array } — the particle buffer is
|
|
7
|
+
* transferred BACK so the main thread can recycle it (see offthread-bridge pool, #991).
|
|
7
8
|
*/
|
|
8
9
|
let ctx = null;
|
|
10
|
+
// This module runs in a DedicatedWorkerGlobalScope, but the package tsconfig uses the DOM lib (not
|
|
11
|
+
// WebWorker), so `self` types as Window — whose postMessage overloads differ (targetOrigin first).
|
|
12
|
+
// Narrow to the worker shape for the transfer-list call below.
|
|
13
|
+
const workerScope = self;
|
|
9
14
|
self.addEventListener('message', (e) => {
|
|
10
15
|
const msg = e.data;
|
|
11
16
|
if (msg.type === 'init') {
|
|
@@ -36,7 +41,8 @@ self.addEventListener('message', (e) => {
|
|
|
36
41
|
ctx.fill();
|
|
37
42
|
}
|
|
38
43
|
ctx.restore();
|
|
39
|
-
|
|
44
|
+
// Transfer the particle buffer back to the main thread so it can be recycled (zero-copy pool).
|
|
45
|
+
workerScope.postMessage({ type: 'done', frameN, particles }, particles?.buffer ? [particles.buffer] : []);
|
|
40
46
|
}
|
|
41
47
|
});
|
|
42
48
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-worker.js","sourceRoot":"","sources":["../../src/worker/render-worker.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"render-worker.js","sourceRoot":"","sources":["../../src/worker/render-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,IAAI,GAAG,GAA6C,IAAI,CAAC;AAEzD,mGAAmG;AACnG,mGAAmG;AACnG,+DAA+D;AAC/D,MAAM,WAAW,GAAG,IAEnB,CAAC;AAEF,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAe,EAAE,EAAE;IACnD,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;IACnB,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACxB,GAAG,GAAI,GAAG,CAAC,MAA0B,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,EAAE,CAAC;QAChC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;QAC5D,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;QACtC,GAAG,CAAC,IAAI,EAAE,CAAC;QACX,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpB,iDAAiD;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,CAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,CAAE,CAAC;YAClC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,CAAE,CAAC;YAClC,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACjC,GAAG,CAAC,SAAS,EAAE,CAAC;YAChB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACtC,iDAAiD;YACjD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;YACtC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;YACtC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3D,GAAG,CAAC,IAAI,EAAE,CAAC;QACb,CAAC;QACD,GAAG,CAAC,OAAO,EAAE,CAAC;QACd,+FAA+F;QAC/F,WAAW,CAAC,WAAW,CACrB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EACnC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAC5C,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC"}
|
package/dist/x-ray.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-ray.d.ts","sourceRoot":"","sources":["../src/x-ray.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,CAAC;CACtE;
|
|
1
|
+
{"version":3,"file":"x-ray.d.ts","sourceRoot":"","sources":["../src/x-ray.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,WAAW,WAAW;IAC1B,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,CAAC;CACtE;AAiBD,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,GAAG,WAAW,EAAE,IAAI,GAAE,WAAgB,GAAG,MAAM,IAAI,CAqHrH"}
|
package/dist/x-ray.js
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
|
+
function forceProbe(field) {
|
|
2
|
+
const fn = field.sample;
|
|
3
|
+
return typeof fn === 'function' ? (x, y) => fn.call(field, x, y) : null;
|
|
4
|
+
}
|
|
5
|
+
function energyProbe(field) {
|
|
6
|
+
const fn = field.energy;
|
|
7
|
+
return typeof fn === 'function' ? () => fn.call(field) : null;
|
|
8
|
+
}
|
|
1
9
|
export function mountXRay(field, container, opts = {}) {
|
|
2
10
|
const hotkey = opts.hotkey ?? '?';
|
|
3
11
|
const pos = opts.position ?? 'bottom-right';
|
|
12
|
+
// Mount against the container's OWN document, not the global `document` — the field may live in
|
|
13
|
+
// an iframe, a popup window, or a test DOM. `ownerDocument` is null only for a Document node itself,
|
|
14
|
+
// in which case the container IS the document.
|
|
15
|
+
const doc = container.ownerDocument ?? container;
|
|
16
|
+
const mountParent = doc.body ?? doc.documentElement;
|
|
17
|
+
const sample = forceProbe(field);
|
|
18
|
+
const energy = energyProbe(field);
|
|
4
19
|
let panel = null;
|
|
5
20
|
let rafId = null;
|
|
6
21
|
let cursorX = 0;
|
|
@@ -9,30 +24,75 @@ export function mountXRay(field, container, opts = {}) {
|
|
|
9
24
|
const [v, h] = pos.split('-');
|
|
10
25
|
return `position:fixed;${v}:16px;${h}:16px;z-index:99999;`;
|
|
11
26
|
}
|
|
27
|
+
/** A styled key/value line. Values are set via textContent, never innerHTML — a hotkey (or any
|
|
28
|
+
* numeric readout) can never be interpreted as markup. */
|
|
29
|
+
function row(label, value, valueColor) {
|
|
30
|
+
const div = doc.createElement('div');
|
|
31
|
+
div.append(doc.createTextNode(label));
|
|
32
|
+
if (value !== undefined) {
|
|
33
|
+
const b = doc.createElement('b');
|
|
34
|
+
if (valueColor)
|
|
35
|
+
b.style.color = valueColor;
|
|
36
|
+
b.textContent = value;
|
|
37
|
+
div.append(doc.createTextNode(' '), b);
|
|
38
|
+
}
|
|
39
|
+
return div;
|
|
40
|
+
}
|
|
12
41
|
function tick() {
|
|
13
42
|
if (!panel)
|
|
14
43
|
return;
|
|
15
44
|
const n = field.particleCount();
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
45
|
+
const e = energy?.();
|
|
46
|
+
const f = sample?.(cursorX, cursorY);
|
|
47
|
+
// Rebuild the body from scratch each frame via typed nodes — no innerHTML anywhere.
|
|
48
|
+
const inner = doc.createElement('div');
|
|
49
|
+
inner.style.cssText = 'font:11px/1.4 monospace;color:#e2e8f0;padding:12px 14px;min-width:220px';
|
|
50
|
+
const title = doc.createElement('div');
|
|
51
|
+
title.style.cssText = 'color:#a0c4ff;font-weight:700;margin-bottom:8px;letter-spacing:.04em';
|
|
52
|
+
title.textContent = '⊕ FIELD X-RAY';
|
|
53
|
+
inner.append(title);
|
|
54
|
+
inner.append(row('particles', String(n), '#ffd166'));
|
|
55
|
+
if (e) {
|
|
56
|
+
const line = doc.createElement('div');
|
|
57
|
+
line.append(doc.createTextNode('kinetic '));
|
|
58
|
+
const k = doc.createElement('b');
|
|
59
|
+
k.style.color = '#ffd166';
|
|
60
|
+
k.textContent = e.kinetic.toFixed(3);
|
|
61
|
+
line.append(k, doc.createTextNode(' thermal '));
|
|
62
|
+
const t = doc.createElement('b');
|
|
63
|
+
t.style.color = '#ffd166';
|
|
64
|
+
t.textContent = e.thermal.toFixed(3);
|
|
65
|
+
line.append(t);
|
|
66
|
+
inner.append(line);
|
|
67
|
+
}
|
|
68
|
+
if (f) {
|
|
69
|
+
const line = doc.createElement('div');
|
|
70
|
+
line.append(doc.createTextNode('force @ cursor fx '));
|
|
71
|
+
const fx = doc.createElement('b');
|
|
72
|
+
fx.style.color = '#06d6a0';
|
|
73
|
+
fx.textContent = f.x.toFixed(3);
|
|
74
|
+
line.append(fx, doc.createTextNode(' fy '));
|
|
75
|
+
const fy = doc.createElement('b');
|
|
76
|
+
fy.style.color = '#06d6a0';
|
|
77
|
+
fy.textContent = f.y.toFixed(3);
|
|
78
|
+
line.append(fy);
|
|
79
|
+
inner.append(line);
|
|
80
|
+
}
|
|
81
|
+
const hint = doc.createElement('div');
|
|
82
|
+
hint.style.cssText = 'margin-top:6px;color:#718096;font-size:10px';
|
|
83
|
+
// hotkey is interpolated as TEXT — an `<img onerror=…>` hotkey renders as literal characters.
|
|
84
|
+
hint.textContent = `press ${hotkey} to close · move cursor for force probe`;
|
|
85
|
+
inner.append(hint);
|
|
86
|
+
panel.replaceChildren(inner);
|
|
27
87
|
rafId = requestAnimationFrame(tick);
|
|
28
88
|
}
|
|
29
89
|
function open() {
|
|
30
90
|
if (panel)
|
|
31
91
|
return;
|
|
32
|
-
panel =
|
|
92
|
+
panel = doc.createElement('div');
|
|
33
93
|
panel.setAttribute('data-field-xray', '');
|
|
34
94
|
panel.style.cssText = positionStyle() + 'background:rgba(10,15,28,.88);border:1px solid rgba(160,196,255,.18);border-radius:10px;backdrop-filter:blur(12px);box-shadow:0 8px 32px rgba(0,0,0,.5);';
|
|
35
|
-
|
|
95
|
+
mountParent.appendChild(panel);
|
|
36
96
|
tick();
|
|
37
97
|
}
|
|
38
98
|
function close() {
|
package/dist/x-ray.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-ray.js","sourceRoot":"","sources":["../src/x-ray.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"x-ray.js","sourceRoot":"","sources":["../src/x-ray.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.9.
|
|
3
|
+
"version": "0.9.3",
|
|
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.9.
|
|
49
|
+
"@fundamental-engine/core": "0.9.3"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"typescript": "^5.9.3"
|