@fundamental-engine/dom 0.9.2 → 0.9.4
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/apply-recipe.d.ts +14 -6
- package/dist/apply-recipe.d.ts.map +1 -1
- package/dist/apply-recipe.js +3 -1
- package/dist/apply-recipe.js.map +1 -1
- 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
|
@@ -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":"AAoBA,SAAS,UAAU,CAAC,KAAkB;IACpC,MAAM,EAAE,GAAI,KAA8B,CAAC,MAAM,CAAC;IAClD,OAAO,OAAO,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC;AACD,SAAS,WAAW,CAAC,KAAkB;IACrC,MAAM,EAAE,GAAI,KAA8B,CAAC,MAAM,CAAC;IAClD,OAAO,OAAO,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAkB,EAAE,SAAmC,EAAE,OAAoB,EAAE;IACvG,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,cAAc,CAAC;IAE5C,gGAAgG;IAChG,qGAAqG;IACrG,+CAA+C;IAC/C,MAAM,GAAG,GACN,SAAkB,CAAC,aAAa,IAAK,SAAiC,CAAC;IAC1E,MAAM,WAAW,GAAgB,GAAG,CAAC,IAAI,IAAK,GAAG,CAAC,eAA0C,CAAC;IAE7F,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAElC,IAAI,KAAK,GAAuB,IAAI,CAAC;IACrC,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,SAAS,aAAa;QACpB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAyC,CAAC;QACtE,OAAO,kBAAkB,CAAC,SAAS,CAAC,sBAAsB,CAAC;IAC7D,CAAC;IAED;+DAC2D;IAC3D,SAAS,GAAG,CAAC,KAAa,EAAE,KAAc,EAAE,UAAmB;QAC7D,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,UAAU;gBAAE,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC;YAC3C,CAAC,CAAC,WAAW,GAAG,KAAK,CAAC;YACtB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,SAAS,IAAI;QACX,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAErC,oFAAoF;QACpF,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACvC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,yEAAyE,CAAC;QAEhG,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACvC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,sEAAsE,CAAC;QAC7F,KAAK,CAAC,WAAW,GAAG,eAAe,CAAC;QACpC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEpB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,EAAE,CAAC;YACN,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;YAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;YAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACf,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,EAAE,CAAC;YACN,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC;YACvD,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAAC,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;YAAC,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/F,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7C,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAAC,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;YAAC,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/F,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAChB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,6CAA6C,CAAC;QACnE,8FAA8F;QAC9F,IAAI,CAAC,WAAW,GAAG,SAAS,MAAM,yCAAyC,CAAC;QAC5E,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEnB,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC7B,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,SAAS,IAAI;QACX,IAAI,KAAK;YAAE,OAAO;QAClB,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjC,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC1C,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,aAAa,EAAE,GAAG,0JAA0J,CAAC;QACnM,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,EAAE,CAAC;IACT,CAAC;IAED,SAAS,KAAK;QACZ,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAAC,KAAK,GAAG,IAAI,CAAC;QAAC,CAAC;QACjE,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,GAAG,IAAI,CAAC;IACf,CAAC;IAED,SAAS,KAAK,CAAC,CAAQ;QACrB,MAAM,GAAG,GAAI,CAAmB,CAAC,GAAG,CAAC;QACrC,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAAC,CAAC;QACjD,IAAI,GAAG,KAAK,QAAQ;YAAE,KAAK,EAAE,CAAC;IAChC,CAAC;IAED,SAAS,MAAM,CAAC,CAAQ;QACtB,OAAO,GAAI,CAAgB,CAAC,OAAO,CAAC;QACpC,OAAO,GAAI,CAAgB,CAAC,OAAO,CAAC;IACtC,CAAC;IAED,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAsB,CAAC,CAAC;IAC9D,SAAS,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAuB,CAAC,CAAC;IAEjE,OAAO,GAAG,EAAE;QACV,KAAK,EAAE,CAAC;QACR,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAsB,CAAC,CAAC;QACjE,SAAS,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAuB,CAAC,CAAC;IACtE,CAAC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fundamental-engine/dom",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.4",
|
|
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.4"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"typescript": "^5.9.3"
|