@fundamental-engine/core 0.8.0 → 0.9.1
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/agents/event-agent.d.ts +4 -2
- package/dist/agents/event-agent.d.ts.map +1 -1
- package/dist/agents/event-agent.js +15 -6
- package/dist/agents/event-agent.js.map +1 -1
- package/dist/core/currents.d.ts +12 -0
- package/dist/core/currents.d.ts.map +1 -1
- package/dist/core/currents.js +23 -0
- package/dist/core/currents.js.map +1 -1
- package/dist/core/events.d.ts +22 -0
- package/dist/core/events.d.ts.map +1 -1
- package/dist/core/events.js +52 -0
- package/dist/core/events.js.map +1 -1
- package/dist/core/field.d.ts.map +1 -1
- package/dist/core/field.js +537 -78
- package/dist/core/field.js.map +1 -1
- package/dist/core/frame-harness.d.ts +109 -0
- package/dist/core/frame-harness.d.ts.map +1 -0
- package/dist/core/frame-harness.js +300 -0
- package/dist/core/frame-harness.js.map +1 -0
- package/dist/core/host-headless.d.ts +35 -0
- package/dist/core/host-headless.d.ts.map +1 -0
- package/dist/core/host-headless.js +47 -0
- package/dist/core/host-headless.js.map +1 -0
- package/dist/core/integrator.d.ts +6 -0
- package/dist/core/integrator.d.ts.map +1 -1
- package/dist/core/integrator.js +62 -12
- package/dist/core/integrator.js.map +1 -1
- package/dist/core/streamlines.d.ts.map +1 -1
- package/dist/core/streamlines.js +18 -2
- package/dist/core/streamlines.js.map +1 -1
- package/dist/core/types.d.ts +88 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +10 -1
- package/dist/core/types.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/record/index.d.ts +13 -0
- package/dist/record/index.d.ts.map +1 -0
- package/dist/record/index.js +13 -0
- package/dist/record/index.js.map +1 -0
- package/dist/record/record.d.ts +87 -0
- package/dist/record/record.d.ts.map +1 -0
- package/dist/record/record.js +172 -0
- package/dist/record/record.js.map +1 -0
- package/dist/record/rng.d.ts +15 -0
- package/dist/record/rng.d.ts.map +1 -0
- package/dist/record/rng.js +25 -0
- package/dist/record/rng.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -36,8 +36,10 @@ export interface FieldEventName {
|
|
|
36
36
|
/**
|
|
37
37
|
* The named field-event catalog (system-contracts §9, shadow-dom §22, interaction §12). These are
|
|
38
38
|
* the thresholded, debounced events the engine may dispatch — never per-frame by default.
|
|
39
|
-
* `field:lit`/`dim
|
|
40
|
-
*
|
|
39
|
+
* `field:lit`/`dim`, the `*-body` lifecycle events, capture/release/relocate, and (as of #686) the
|
|
40
|
+
* agent-threshold events below are all dispatched today. Each threshold event is hysteretic and
|
|
41
|
+
* debounced (see `updateThresholdEvents` in core/field.ts) and pairs a rising edge with a falling
|
|
42
|
+
* edge so a consumer can react both ways.
|
|
41
43
|
*/
|
|
42
44
|
export declare const FIELD_EVENTS: Readonly<Record<string, FieldEventName>>;
|
|
43
45
|
/** Map a metric to its conventional `field:*` event name for an edge. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-agent.d.ts","sourceRoot":"","sources":["../../src/agents/event-agent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,gGAAgG;IAChG,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;gBAC1B,GAAG,EAAE,eAAe;IAIhC,2FAA2F;IAC3F,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa;IAenD,sDAAsD;IACtD,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,iDAAiD;IACjD,KAAK,IAAI,IAAI;CAId;AAED,mDAAmD;AACnD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED
|
|
1
|
+
{"version":3,"file":"event-agent.d.ts","sourceRoot":"","sources":["../../src/agents/event-agent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,gGAAgG;IAChG,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;gBAC1B,GAAG,EAAE,eAAe;IAIhC,2FAA2F;IAC3F,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa;IAenD,sDAAsD;IACtD,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,iDAAiD;IACjD,KAAK,IAAI,IAAI;CAId;AAED,mDAAmD;AACnD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CA6BjE,CAAC;AAEF,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAWnG"}
|
|
@@ -41,11 +41,13 @@ export class Thresholder {
|
|
|
41
41
|
/**
|
|
42
42
|
* The named field-event catalog (system-contracts §9, shadow-dom §22, interaction §12). These are
|
|
43
43
|
* the thresholded, debounced events the engine may dispatch — never per-frame by default.
|
|
44
|
-
* `field:lit`/`dim
|
|
45
|
-
*
|
|
44
|
+
* `field:lit`/`dim`, the `*-body` lifecycle events, capture/release/relocate, and (as of #686) the
|
|
45
|
+
* agent-threshold events below are all dispatched today. Each threshold event is hysteretic and
|
|
46
|
+
* debounced (see `updateThresholdEvents` in core/field.ts) and pairs a rising edge with a falling
|
|
47
|
+
* edge so a consumer can react both ways.
|
|
46
48
|
*/
|
|
47
49
|
export const FIELD_EVENTS = {
|
|
48
|
-
// ---
|
|
50
|
+
// --- lifecycle (shipped) ---
|
|
49
51
|
registerBody: { field: 'field:register-body' },
|
|
50
52
|
unregisterBody: { field: 'field:unregister-body' },
|
|
51
53
|
updateBody: { field: 'field:update-body' },
|
|
@@ -57,15 +59,22 @@ export const FIELD_EVENTS = {
|
|
|
57
59
|
released: { field: 'field:released' },
|
|
58
60
|
// relocate (§22.3): a [data-warp] element teleports its transform to its paired throat.
|
|
59
61
|
relocated: { field: 'field:relocated' },
|
|
60
|
-
// ---
|
|
61
|
-
// See docs/canonical/agent-consumption-model.md
|
|
62
|
+
// --- agent-threshold events (#686): hysteretic + debounced, dispatched by updateThresholdEvents.
|
|
63
|
+
// Rising edge then a paired falling edge. See docs/canonical/agent-consumption-model.md. ---
|
|
62
64
|
entered: { field: 'field:entered', metric: 'density' },
|
|
63
65
|
exited: { field: 'field:exited', metric: 'density' },
|
|
66
|
+
// saturation is a discrete transition fired from the supernova callback; field:released is its
|
|
67
|
+
// paired down-edge (see core/field.ts), so there is no separate "unsaturated" event.
|
|
64
68
|
saturated: { field: 'field:saturated', metric: 'accreted' },
|
|
65
69
|
attentionShifted: { field: 'field:attention-shifted', metric: 'attention' },
|
|
66
|
-
|
|
70
|
+
attentionSettled: { field: 'field:attention-settled', metric: 'attention' },
|
|
67
71
|
memoryThreshold: { field: 'field:memory-threshold', metric: 'memory' },
|
|
72
|
+
memoryFaded: { field: 'field:memory-faded', metric: 'memory' },
|
|
68
73
|
entropyWarning: { field: 'field:entropy-warning', metric: 'entropy' },
|
|
74
|
+
entropyCleared: { field: 'field:entropy-cleared', metric: 'entropy' },
|
|
75
|
+
// reserved (not yet dispatched): relationship-strength crossing — addEdge tracks strength but the
|
|
76
|
+
// designed dynamics rarely cross a fixed level cleanly; left reserved until a use case lands.
|
|
77
|
+
relationshipStrengthened: { field: 'field:relationship-strengthened', metric: 'strength' },
|
|
69
78
|
};
|
|
70
79
|
/** Map a metric to its conventional `field:*` event name for an edge. */
|
|
71
80
|
export function eventNamesFor(metric, edge) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-agent.js","sourceRoot":"","sources":["../../src/agents/event-agent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,kEAAkE;AAClE,MAAM,OAAO,WAAW;IACd,GAAG,GAAG,KAAK,CAAC;IACZ,UAAU,GAAG,CAAC,QAAQ,CAAC;IACd,GAAG,CAAkB;IACtC,YAAY,GAAoB;QAC9B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,2FAA2F;IAC3F,MAAM,CAAC,KAAa,EAAE,KAAa;QACjC,MAAM,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC;YACpD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;YAClD,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;YACjB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sDAAsD;IACtD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,iDAAiD;IACjD,KAAK;QACH,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,CAAC,QAAQ,CAAC;IAC9B,CAAC;CACF;AASD
|
|
1
|
+
{"version":3,"file":"event-agent.js","sourceRoot":"","sources":["../../src/agents/event-agent.ts"],"names":[],"mappings":"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"}
|
package/dist/core/currents.d.ts
CHANGED
|
@@ -50,4 +50,16 @@ export interface WavePull {
|
|
|
50
50
|
export declare function waveYat(w: Wave, x: number, time: number, H: number, waveSpeed?: number, amplitude?: number, pull?: WavePull): number;
|
|
51
51
|
/** The wave's slope at `x` — the derivative the free particles drift along. */
|
|
52
52
|
export declare function waveSlope(w: Wave, x: number, time: number, waveSpeed?: number, amplitude?: number): number;
|
|
53
|
+
/** The circular wave's undulating radius at angle `theta` (radians) and `time` seconds. */
|
|
54
|
+
export declare function waveRAt(w: Wave, theta: number, time: number, maxRadius: number, waveSpeed?: number, amplitude?: number): number;
|
|
55
|
+
/** Calculate shortest distance and coordinates from a particle (px, py) to a wave. */
|
|
56
|
+
export declare function waveDistance(w: Wave, px: number, py: number, time: number, W: number, H: number, style: 'linear' | 'circular', center: {
|
|
57
|
+
x: number;
|
|
58
|
+
y: number;
|
|
59
|
+
}, waveSpeed?: number, amplitude?: number, pull?: WavePull): {
|
|
60
|
+
dist: number;
|
|
61
|
+
rWave: number;
|
|
62
|
+
r: number;
|
|
63
|
+
theta: number;
|
|
64
|
+
};
|
|
53
65
|
//# sourceMappingURL=currents.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"currents.d.ts","sourceRoot":"","sources":["../../src/core/currents.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,WAAW,IAAI;IACnB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,GAAG,CAAC;IACX,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;CACf;AAKD,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,OAAO,EAAE,SAAS,GAAG,EAAE,GAAG,IAAI,EAAE,CAgB1D;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,MAAM,GAAG,aAAa,EAAE,CAgBlG;AAED,oEAAoE;AACpE,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,4DAA4D;IAC5D,CAAC,EAAE,MAAM,CAAC;CACX;AAED,yEAAyE;AACzE,wBAAgB,OAAO,CACrB,CAAC,EAAE,IAAI,EACP,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EACT,SAAS,SAAI,EACb,SAAS,SAAI,EACb,IAAI,CAAC,EAAE,QAAQ,GACd,MAAM,CAaR;AAED,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,SAAI,EAAE,SAAS,SAAI,GAAG,MAAM,CAIhG"}
|
|
1
|
+
{"version":3,"file":"currents.d.ts","sourceRoot":"","sources":["../../src/core/currents.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,WAAW,IAAI;IACnB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,GAAG,CAAC;IACX,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;CACf;AAKD,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,OAAO,EAAE,SAAS,GAAG,EAAE,GAAG,IAAI,EAAE,CAgB1D;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,MAAM,GAAG,aAAa,EAAE,CAgBlG;AAED,oEAAoE;AACpE,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,4DAA4D;IAC5D,CAAC,EAAE,MAAM,CAAC;CACX;AAED,yEAAyE;AACzE,wBAAgB,OAAO,CACrB,CAAC,EAAE,IAAI,EACP,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EACT,SAAS,SAAI,EACb,SAAS,SAAI,EACb,IAAI,CAAC,EAAE,QAAQ,GACd,MAAM,CAaR;AAED,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,SAAI,EAAE,SAAS,SAAI,GAAG,MAAM,CAIhG;AAED,2FAA2F;AAC3F,wBAAgB,OAAO,CACrB,CAAC,EAAE,IAAI,EACP,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,SAAI,EACb,SAAS,SAAI,GACZ,MAAM,CAKR;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAC1B,CAAC,EAAE,IAAI,EACP,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,QAAQ,GAAG,UAAU,EAC5B,MAAM,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAChC,SAAS,SAAI,EACb,SAAS,SAAI,EACb,IAAI,CAAC,EAAE,QAAQ,GACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAa3D"}
|
package/dist/core/currents.js
CHANGED
|
@@ -62,4 +62,27 @@ export function waveYat(w, x, time, H, waveSpeed = 1, amplitude = 1, pull) {
|
|
|
62
62
|
export function waveSlope(w, x, time, waveSpeed = 1, amplitude = 1) {
|
|
63
63
|
return (Math.cos(x * w.freq + w.phase + time * w.speed * 1000 * waveSpeed) * w.amp * w.freq * amplitude);
|
|
64
64
|
}
|
|
65
|
+
/** The circular wave's undulating radius at angle `theta` (radians) and `time` seconds. */
|
|
66
|
+
export function waveRAt(w, theta, time, maxRadius, waveSpeed = 1, amplitude = 1) {
|
|
67
|
+
const baseR = w.baseFrac * maxRadius + w.offsetY;
|
|
68
|
+
// Ensure an integer number of ripples so the circular path is closed (seamless)
|
|
69
|
+
const N = Math.max(1, Math.round(w.freq * 2500));
|
|
70
|
+
return baseR + Math.sin(N * theta + w.phase + time * w.speed * 1000 * waveSpeed) * w.amp * amplitude;
|
|
71
|
+
}
|
|
72
|
+
/** Calculate shortest distance and coordinates from a particle (px, py) to a wave. */
|
|
73
|
+
export function waveDistance(w, px, py, time, W, H, style, center, waveSpeed = 1, amplitude = 1, pull) {
|
|
74
|
+
if (style === 'circular') {
|
|
75
|
+
const dx = px - center.x;
|
|
76
|
+
const dy = py - center.y;
|
|
77
|
+
const r = Math.sqrt(dx * dx + dy * dy) || 1e-3;
|
|
78
|
+
const theta = Math.atan2(dy, dx);
|
|
79
|
+
const maxRadius = Math.min(W, H) * 0.48;
|
|
80
|
+
const rWave = waveRAt(w, theta, time, maxRadius, waveSpeed, amplitude);
|
|
81
|
+
return { dist: Math.abs(r - rWave), rWave, r, theta };
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
const yWave = waveYat(w, px, time, H, waveSpeed, amplitude, pull);
|
|
85
|
+
return { dist: Math.abs(py - yWave), rWave: yWave, r: py, theta: 0 };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
65
88
|
//# sourceMappingURL=currents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"currents.js","sourceRoot":"","sources":["../../src/core/currents.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"currents.js","sourceRoot":"","sources":["../../src/core/currents.ts"],"names":[],"mappings":"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"}
|
package/dist/core/events.d.ts
CHANGED
|
@@ -34,6 +34,28 @@ export interface FieldEventMap {
|
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
36
|
export type FieldEventType = keyof FieldEventMap;
|
|
37
|
+
/**
|
|
38
|
+
* Per-frame coalescing buffer for the discrete event bus (#684, shadow-dom §31). A force/condition can
|
|
39
|
+
* cross the same edge more than once within a single frame (multiple detection passes, a same-frame
|
|
40
|
+
* fill+release); without batching the bus would deliver duplicates per tick. `record` buffers an
|
|
41
|
+
* occurrence keyed by (type, source identity); `flush` delivers at most ONE event per (source, type)
|
|
42
|
+
* for the frame — last write wins, so a consumer sees the final payload for that frame. State events
|
|
43
|
+
* (absorb/release) key on the single source body; relational events (enter/exit/met) key on the body
|
|
44
|
+
* *pair* so distinct counterparties in one frame stay distinct while a genuine duplicate collapses.
|
|
45
|
+
* Identity uses object reference (the body, falling back from its element), via a per-source numeric id.
|
|
46
|
+
*/
|
|
47
|
+
export declare class FieldEventCoalescer {
|
|
48
|
+
private readonly pending;
|
|
49
|
+
private readonly ids;
|
|
50
|
+
private seq;
|
|
51
|
+
private idOf;
|
|
52
|
+
/** Coalescing key for an occurrence — "per (element, type)" for state events, per-pair for relational. */
|
|
53
|
+
keyOf<K extends FieldEventType>(type: K, payload: FieldEventMap[K]): string;
|
|
54
|
+
/** Buffer an occurrence for this frame. Repeated calls for the same (type, source) keep the last payload. */
|
|
55
|
+
record<K extends FieldEventType>(type: K, payload: FieldEventMap[K]): void;
|
|
56
|
+
/** Deliver the frame's coalesced occurrences — one per (source, type) — then clear the buffer. */
|
|
57
|
+
flush(deliver: <K extends FieldEventType>(type: K, payload: FieldEventMap[K]) => void): void;
|
|
58
|
+
}
|
|
37
59
|
export interface EventBinding {
|
|
38
60
|
trigger: string;
|
|
39
61
|
event: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/core/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAOvC,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,MAAM,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,mFAAmF;IACnF,OAAO,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,oGAAoG;IACpG,KAAK,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC;IACnC,8DAA8D;IAC9D,IAAI,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC;IAClC,qGAAqG;IACrG,GAAG,EAAE;QAAE,CAAC,EAAE,IAAI,CAAC;QAAC,CAAC,EAAE,IAAI,CAAA;KAAE,CAAC;CAC3B;AACD,MAAM,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAU/D;AAED,kCAAkC;AAClC,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CAavE"}
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/core/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAOvC,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,MAAM,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,mFAAmF;IACnF,OAAO,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,oGAAoG;IACpG,KAAK,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC;IACnC,8DAA8D;IAC9D,IAAI,EAAE;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,CAAC;IAClC,qGAAqG;IACrG,GAAG,EAAE;QAAE,CAAC,EAAE,IAAI,CAAC;QAAC,CAAC,EAAE,IAAI,CAAA;KAAE,CAAC;CAC3B;AACD,MAAM,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC;AAEjD;;;;;;;;;GASG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyE;IACjG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiC;IACrD,OAAO,CAAC,GAAG,CAAK;IAEhB,OAAO,CAAC,IAAI;IAMZ,0GAA0G;IAC1G,KAAK,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM;IAc3E,6GAA6G;IAC7G,MAAM,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI;IAM1E,kGAAkG;IAClG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;CAO7F;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,EAAE,CAU/D;AAED,kCAAkC;AAClC,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CAavE"}
|
package/dist/core/events.js
CHANGED
|
@@ -4,6 +4,58 @@
|
|
|
4
4
|
* Declared with `data-on="dense:field:lit, captured:field:dock"` (trigger:event,
|
|
5
5
|
* comma-separated). Rising-edge debounced: fires once on cross, re-arms on reset.
|
|
6
6
|
*/
|
|
7
|
+
/**
|
|
8
|
+
* Per-frame coalescing buffer for the discrete event bus (#684, shadow-dom §31). A force/condition can
|
|
9
|
+
* cross the same edge more than once within a single frame (multiple detection passes, a same-frame
|
|
10
|
+
* fill+release); without batching the bus would deliver duplicates per tick. `record` buffers an
|
|
11
|
+
* occurrence keyed by (type, source identity); `flush` delivers at most ONE event per (source, type)
|
|
12
|
+
* for the frame — last write wins, so a consumer sees the final payload for that frame. State events
|
|
13
|
+
* (absorb/release) key on the single source body; relational events (enter/exit/met) key on the body
|
|
14
|
+
* *pair* so distinct counterparties in one frame stay distinct while a genuine duplicate collapses.
|
|
15
|
+
* Identity uses object reference (the body, falling back from its element), via a per-source numeric id.
|
|
16
|
+
*/
|
|
17
|
+
export class FieldEventCoalescer {
|
|
18
|
+
pending = new Map();
|
|
19
|
+
ids = new WeakMap();
|
|
20
|
+
seq = 0;
|
|
21
|
+
idOf(o) {
|
|
22
|
+
let id = this.ids.get(o);
|
|
23
|
+
if (id === undefined)
|
|
24
|
+
this.ids.set(o, (id = ++this.seq));
|
|
25
|
+
return id;
|
|
26
|
+
}
|
|
27
|
+
/** Coalescing key for an occurrence — "per (element, type)" for state events, per-pair for relational. */
|
|
28
|
+
keyOf(type, payload) {
|
|
29
|
+
if (type === 'met') {
|
|
30
|
+
const p = payload;
|
|
31
|
+
const [x, y] = [this.idOf(p.a.el ?? p.a), this.idOf(p.b.el ?? p.b)].sort((m, n) => m - n);
|
|
32
|
+
return `${x}:${y}`; // unordered pair
|
|
33
|
+
}
|
|
34
|
+
if (type === 'enter' || type === 'exit') {
|
|
35
|
+
const p = payload;
|
|
36
|
+
return `${this.idOf(p.body.el ?? p.body)}:${this.idOf(p.other.el ?? p.other)}`; // directed
|
|
37
|
+
}
|
|
38
|
+
const p = payload;
|
|
39
|
+
return String(this.idOf(p.body.el ?? p.body)); // single source: per (element, type)
|
|
40
|
+
}
|
|
41
|
+
/** Buffer an occurrence for this frame. Repeated calls for the same (type, source) keep the last payload. */
|
|
42
|
+
record(type, payload) {
|
|
43
|
+
let perType = this.pending.get(type);
|
|
44
|
+
if (!perType)
|
|
45
|
+
this.pending.set(type, (perType = new Map()));
|
|
46
|
+
perType.set(this.keyOf(type, payload), payload); // last-wins within the frame
|
|
47
|
+
}
|
|
48
|
+
/** Deliver the frame's coalesced occurrences — one per (source, type) — then clear the buffer. */
|
|
49
|
+
flush(deliver) {
|
|
50
|
+
if (this.pending.size === 0)
|
|
51
|
+
return;
|
|
52
|
+
for (const [type, perKey] of this.pending) {
|
|
53
|
+
for (const payload of perKey.values())
|
|
54
|
+
deliver(type, payload);
|
|
55
|
+
}
|
|
56
|
+
this.pending.clear();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
7
59
|
/** Parse a `data-on` string into trigger→event bindings (event names may contain ':'). */
|
|
8
60
|
export function parseEventBindings(spec) {
|
|
9
61
|
return spec
|
package/dist/core/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/core/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/core/events.ts"],"names":[],"mappings":"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"}
|
package/dist/core/field.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../src/core/field.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../src/core/field.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAwD,WAAW,EAAE,YAAY,EAAkD,MAAM,YAAY,CAAC;AA8DlK,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,GAAE,YAAiB,GAAG,WAAW,CAukF3F"}
|