@fundamental-engine/core 0.6.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/README.md +7 -7
- package/dist/config/themes.d.ts +22 -0
- package/dist/config/themes.d.ts.map +1 -0
- package/dist/config/themes.js +9 -0
- package/dist/config/themes.js.map +1 -0
- package/dist/contracts/guards.d.ts +14 -0
- package/dist/contracts/guards.d.ts.map +1 -1
- package/dist/contracts/guards.js +21 -0
- package/dist/contracts/guards.js.map +1 -1
- package/dist/core/agents.d.ts +1 -1
- package/dist/core/agents.d.ts.map +1 -1
- package/dist/core/agents.js +5 -2
- package/dist/core/agents.js.map +1 -1
- package/dist/core/events.d.ts +15 -0
- package/dist/core/events.d.ts.map +1 -1
- package/dist/core/events.js.map +1 -1
- package/dist/core/field.d.ts.map +1 -1
- package/dist/core/field.js +295 -99
- package/dist/core/field.js.map +1 -1
- package/dist/core/host.d.ts +8 -1
- package/dist/core/host.d.ts.map +1 -1
- package/dist/core/host.js +1 -1
- package/dist/core/math.d.ts +4 -3
- package/dist/core/math.d.ts.map +1 -1
- package/dist/core/math.js +10 -9
- package/dist/core/math.js.map +1 -1
- package/dist/core/scanner.d.ts +1 -1
- package/dist/core/scanner.d.ts.map +1 -1
- package/dist/core/scanner.js +8 -4
- package/dist/core/scanner.js.map +1 -1
- package/dist/core/temporal.d.ts +2 -2
- package/dist/core/temporal.js +2 -2
- package/dist/core/types.d.ts +81 -43
- package/dist/core/types.d.ts.map +1 -1
- package/dist/export.d.ts +1 -1
- package/dist/forces/index.d.ts.map +1 -1
- package/dist/forces/index.js +3 -1
- package/dist/forces/index.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/recipes/compile.d.ts +1 -1
- package/dist/recipes/index.js +1 -1
- package/dist/recipes/index.js.map +1 -1
- package/dist/version.d.ts +8 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ renderer other than the DOM canvas.
|
|
|
18
18
|
npm i @fundamental-engine/core
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
The browser host lives in [`@fundamental-engine/
|
|
21
|
+
The browser host lives in [`@fundamental-engine/dom`](../platform); most apps reach for a thin adapter
|
|
22
22
|
([`@fundamental-engine/elements`](../elements), [`@fundamental-engine/react`](../react), [`@fundamental-engine/vanilla`](../vanilla))
|
|
23
23
|
instead of wiring the host themselves. The public surface is frozen for `0.x` (see
|
|
24
24
|
[API stability](../../docs/canonical/api-stability.md)).
|
|
@@ -37,18 +37,18 @@ instead of wiring the host themselves. The public surface is frozen for `0.x` (s
|
|
|
37
37
|
`voronoi`, `field-lines`, `heatmap`) and diagnostics (`force-vectors`, `contours`, `potential`,
|
|
38
38
|
`energy`, `topology`, `inspector`, `causality`, `prediction`).
|
|
39
39
|
- **64 recipes** across 4 tiers: a recipe is a portable field program. `compileRecipe()` lives here
|
|
40
|
-
(pure, no DOM); `applyRecipe()` and `bindData()` are in [`@fundamental-engine/
|
|
40
|
+
(pure, no DOM); `applyRecipe()` and `bindData()` are in [`@fundamental-engine/dom`](../platform).
|
|
41
41
|
- **A conformance framework** that fires known particles into each force and checks the measured
|
|
42
42
|
trajectory against the math. The same catalog drives the tests and the visual Lab.
|
|
43
43
|
|
|
44
44
|
## Quick start
|
|
45
45
|
|
|
46
46
|
`createField` is renderer-agnostic, so it **requires a host** (a `FieldHost`: viewport, scroll, raf,
|
|
47
|
-
and a canvas). In the browser, the host comes from [`@fundamental-engine/
|
|
47
|
+
and a canvas). In the browser, the host comes from [`@fundamental-engine/dom`](../platform):
|
|
48
48
|
|
|
49
49
|
```ts
|
|
50
50
|
import { createField } from '@fundamental-engine/core';
|
|
51
|
-
import { browserHost } from '@fundamental-engine/
|
|
51
|
+
import { browserHost } from '@fundamental-engine/dom';
|
|
52
52
|
|
|
53
53
|
const canvas = document.querySelector('canvas')!;
|
|
54
54
|
const field = createField(canvas, { host: browserHost(), accent: '#4da3ff' });
|
|
@@ -108,18 +108,18 @@ const plan = compileRecipe(recipeById('priority-well')!);
|
|
|
108
108
|
```
|
|
109
109
|
|
|
110
110
|
`applyRecipe()` (run a recipe on a live DOM platform) and `bindData()` (records → bodies) are in
|
|
111
|
-
[`@fundamental-engine/
|
|
111
|
+
[`@fundamental-engine/dom`](../platform). Browse all 64 at [`/docs/gallery`](https://fundamental-engine.com/docs/gallery).
|
|
112
112
|
|
|
113
113
|
## Renderer-agnostic
|
|
114
114
|
|
|
115
115
|
The engine touches no DOM globals (a boundary test keeps the allowlist empty). Everything the browser
|
|
116
116
|
provides arrives through an injected `FieldHost`, so the same engine runs on a DOM canvas, an offscreen
|
|
117
117
|
canvas, a headless harness, or any renderer you implement. `browserHost()` (in
|
|
118
|
-
[`@fundamental-engine/
|
|
118
|
+
[`@fundamental-engine/dom`](../platform)) is the canonical DOM implementation of that contract.
|
|
119
119
|
|
|
120
120
|
## Related
|
|
121
121
|
|
|
122
|
-
[`@fundamental-engine/
|
|
122
|
+
[`@fundamental-engine/dom`](../platform) · [`@fundamental-engine/elements`](../elements) ·
|
|
123
123
|
[`@fundamental-engine/react`](../react) · [`@fundamental-engine/vanilla`](../vanilla) · the
|
|
124
124
|
[documentation map](../../docs/README.md).
|
|
125
125
|
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field themes (#529) — the ambient palette as a first-class contract, not a fork. A theme bundles the
|
|
3
|
+
* free-particle **heat ramp** (`cool` → `warm` ends, §20.8) and the background-wave **baseline**. Before
|
|
4
|
+
* this, those were hardcoded module constants (`COOL`/`WARM` in `math.ts`, `WAVE_RGB` in `field.ts`), so
|
|
5
|
+
* changing the look meant patching core. Now `FieldOptions.theme` picks a preset and
|
|
6
|
+
* `gradientCool`/`gradientWarm`/`waveBaseline` override individual lanes — additive, the frozen surface
|
|
7
|
+
* intact, and `theme: 'warm'` reproduces the shipped defaults byte-for-byte.
|
|
8
|
+
*/
|
|
9
|
+
import type { RGB } from '../core/math.ts';
|
|
10
|
+
export interface FieldTheme {
|
|
11
|
+
/** the resting (cool) end of the free-particle heat ramp. */
|
|
12
|
+
cool: RGB;
|
|
13
|
+
/** the energized (warm) end of the heat ramp. */
|
|
14
|
+
warm: RGB;
|
|
15
|
+
/** the background-wave baseline colors (hex), built into the resting Currents. */
|
|
16
|
+
wave: readonly string[];
|
|
17
|
+
}
|
|
18
|
+
/** Named presets. `warm` is the shipped 0.8.0 default; `cool` and `mono` are alternatives. */
|
|
19
|
+
export declare const THEMES: Record<string, FieldTheme>;
|
|
20
|
+
/** The default theme id — the shipped warm palette. */
|
|
21
|
+
export declare const DEFAULT_THEME = "warm";
|
|
22
|
+
//# sourceMappingURL=themes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../src/config/themes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,6DAA6D;IAC7D,IAAI,EAAE,GAAG,CAAC;IACV,iDAAiD;IACjD,IAAI,EAAE,GAAG,CAAC;IACV,kFAAkF;IAClF,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CACzB;AAED,8FAA8F;AAC9F,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAI7C,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,aAAa,SAAS,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Named presets. `warm` is the shipped 0.8.0 default; `cool` and `mono` are alternatives. */
|
|
2
|
+
export const THEMES = {
|
|
3
|
+
warm: { cool: [255, 224, 200], warm: [255, 110, 80], wave: ['#ff8a5c', '#f0628e', '#ffc46b'] },
|
|
4
|
+
cool: { cool: [206, 226, 255], warm: [74, 132, 255], wave: ['#5c8aff', '#62a0f0', '#6bc4ff'] },
|
|
5
|
+
mono: { cool: [232, 232, 238], warm: [148, 148, 158], wave: ['#8a8a96', '#b0b0bc', '#9a9aa6'] },
|
|
6
|
+
};
|
|
7
|
+
/** The default theme id — the shipped warm palette. */
|
|
8
|
+
export const DEFAULT_THEME = 'warm';
|
|
9
|
+
//# sourceMappingURL=themes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themes.js","sourceRoot":"","sources":["../../src/config/themes.ts"],"names":[],"mappings":"AAmBA,8FAA8F;AAC9F,MAAM,CAAC,MAAM,MAAM,GAA+B;IAChD,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;IAC9F,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;IAC9F,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;CAChG,CAAC;AAEF,uDAAuD;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC"}
|
|
@@ -22,6 +22,20 @@ export declare class FieldUIError extends Error {
|
|
|
22
22
|
export declare function setContractChecks(on: boolean): void;
|
|
23
23
|
/** Whether contract checks are currently active. */
|
|
24
24
|
export declare function contractChecksEnabled(): boolean;
|
|
25
|
+
/** Diagnostic codes for SILENT no-ops — a call that returned a neutral value (0, {0,0}, nothing)
|
|
26
|
+
* because a prerequisite was missing. Advisory, not a contract violation: the call is legal, it
|
|
27
|
+
* just couldn't do anything. */
|
|
28
|
+
export type FieldUINoOpCode = 'NOOP_NO_HEATMAP';
|
|
29
|
+
/**
|
|
30
|
+
* Dev-only, deduped `console.warn` for a SILENT no-op: a method that returned a neutral value
|
|
31
|
+
* because a prerequisite is missing, so an embedder learns *why* nothing happened instead of
|
|
32
|
+
* debugging a mysterious zero. No-op in production (gated by the same `CHECKS` flag the guards use,
|
|
33
|
+
* so a bundler that defines `NODE_ENV` dead-code-eliminates it). Deduped by message, so a call made
|
|
34
|
+
* every frame warns at most once. Never throws — the no-op is legal; this only explains it.
|
|
35
|
+
*/
|
|
36
|
+
export declare function devWarnNoOp(code: FieldUINoOpCode, message: string): void;
|
|
37
|
+
/** Clear the no-op warning dedup set — for tests that assert the warn fires. */
|
|
38
|
+
export declare function resetNoOpWarnings(): void;
|
|
25
39
|
/** A particle's numeric state must stay finite (no NaN/Infinity). */
|
|
26
40
|
export declare function assertParticleFinite(p: Particle, where?: string): void;
|
|
27
41
|
/** A registered Shadow-DOM body must produce a usable rectangle. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/contracts/guards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,sCAAsC;AACtC,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,mBAAmB,GACnB,iBAAiB,GACjB,cAAc,GACd,0BAA0B,GAC1B,wBAAwB,GACxB,+BAA+B,GAC/B,oBAAoB,CAAC;AAEzB,wDAAwD;AACxD,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;gBACpB,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM;CAKpD;AAUD,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAEnD;AACD,oDAAoD;AACpD,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAQD,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,SAAa,GAAG,IAAI,CAI1E;AAED,oEAAoE;AACpE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,EAAE,SAAS,GAAG,IAAI,CAIjF;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CAKpG;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,SAAc,GAAG,IAAI,CAI5F;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAIpE;AAED,oFAAoF;AACpF,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,SAAU,GAAG,IAAI,CAIvF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,SAAkB,GAAG,CAAC,CAO5G;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EACzC,QAAQ,EAAE,aAAa,GAAG,SAAS,GAClC,IAAI,CAMN"}
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/contracts/guards.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,sCAAsC;AACtC,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,mBAAmB,GACnB,iBAAiB,GACjB,cAAc,GACd,0BAA0B,GAC1B,wBAAwB,GACxB,+BAA+B,GAC/B,oBAAoB,CAAC;AAEzB,wDAAwD;AACxD,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;gBACpB,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM;CAKpD;AAUD,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAEnD;AACD,oDAAoD;AACpD,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAQD;;iCAEiC;AACjC,MAAM,MAAM,eAAe,GACvB,iBAAiB,CAAC;AAItB;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAMxE;AAED,gFAAgF;AAChF,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAID,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,SAAa,GAAG,IAAI,CAI1E;AAED,oEAAoE;AACpE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,EAAE,SAAS,GAAG,IAAI,CAIjF;AAED,iFAAiF;AACjF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CAKpG;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,SAAc,GAAG,IAAI,CAI5F;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAIpE;AAED,oFAAoF;AACpF,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,SAAU,GAAG,IAAI,CAIvF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,SAAkB,GAAG,CAAC,CAO5G;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EACzC,QAAQ,EAAE,aAAa,GAAG,SAAS,GAClC,IAAI,CAMN"}
|
package/dist/contracts/guards.js
CHANGED
|
@@ -25,6 +25,27 @@ export function contractChecksEnabled() {
|
|
|
25
25
|
function fail(code, message) {
|
|
26
26
|
throw new FieldUIError(code, message);
|
|
27
27
|
}
|
|
28
|
+
const warnedOnce = new Set();
|
|
29
|
+
/**
|
|
30
|
+
* Dev-only, deduped `console.warn` for a SILENT no-op: a method that returned a neutral value
|
|
31
|
+
* because a prerequisite is missing, so an embedder learns *why* nothing happened instead of
|
|
32
|
+
* debugging a mysterious zero. No-op in production (gated by the same `CHECKS` flag the guards use,
|
|
33
|
+
* so a bundler that defines `NODE_ENV` dead-code-eliminates it). Deduped by message, so a call made
|
|
34
|
+
* every frame warns at most once. Never throws — the no-op is legal; this only explains it.
|
|
35
|
+
*/
|
|
36
|
+
export function devWarnNoOp(code, message) {
|
|
37
|
+
if (!CHECKS)
|
|
38
|
+
return;
|
|
39
|
+
const key = `${code}:${message}`;
|
|
40
|
+
if (warnedOnce.has(key))
|
|
41
|
+
return;
|
|
42
|
+
warnedOnce.add(key);
|
|
43
|
+
console.warn(`[Fundamental:${code}] ${message}`);
|
|
44
|
+
}
|
|
45
|
+
/** Clear the no-op warning dedup set — for tests that assert the warn fires. */
|
|
46
|
+
export function resetNoOpWarnings() {
|
|
47
|
+
warnedOnce.clear();
|
|
48
|
+
}
|
|
28
49
|
// ── guards ──────────────────────────────────────────────────────────────────────────────────
|
|
29
50
|
/** A particle's numeric state must stay finite (no NaN/Infinity). */
|
|
30
51
|
export function assertParticleFinite(p, where = 'particle') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/contracts/guards.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/contracts/guards.ts"],"names":[],"mappings":"AAyBA,wDAAwD;AACxD,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,IAAI,CAAmB;IAChC,YAAY,IAAsB,EAAE,OAAe;QACjD,KAAK,CAAC,gBAAgB,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,+FAA+F;AAC/F,SAAS,UAAU;IACjB,kGAAkG;IAClG,MAAM,GAAG,GAAI,UAAyE,CAAC,OAAO,EAAE,GAAG,CAAC;IACpG,OAAO,GAAG,EAAE,QAAQ,KAAK,YAAY,CAAC;AACxC,CAAC;AACD,IAAI,MAAM,GAAG,UAAU,EAAE,CAAC;AAE1B,0FAA0F;AAC1F,MAAM,UAAU,iBAAiB,CAAC,EAAW;IAC3C,MAAM,GAAG,EAAE,CAAC;AACd,CAAC;AACD,oDAAoD;AACpD,MAAM,UAAU,qBAAqB;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,IAAI,CAAC,IAAsB,EAAE,OAAe;IACnD,MAAM,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAUD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;AAErC;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,IAAqB,EAAE,OAAe;IAChE,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;IACjC,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO;IAChC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,iBAAiB;IAC/B,UAAU,CAAC,KAAK,EAAE,CAAC;AACrB,CAAC;AAED,+FAA+F;AAE/F,qEAAqE;AACrE,MAAM,UAAU,oBAAoB,CAAC,CAAW,EAAE,KAAK,GAAG,UAAU;IAClE,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACpG,IAAI,CAAC,cAAc,EAAE,GAAG,KAAK,yBAAyB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACpG,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,oBAAoB,CAAC,IAAyB,EAAE,EAAE,GAAG,MAAM;IACzE,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;QACnH,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,wDAAwD,CAAC,CAAC;AACpG,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,oBAAoB,CAAC,QAAuB,EAAE,MAAgC;IAC5F,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,IAAI,CAAC,QAAQ,CAAC,QAAQ;QAAE,OAAO;IAC/B,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;QACrE,IAAI,CAAC,mBAAmB,EAAE,GAAG,QAAQ,CAAC,KAAK,wDAAwD,CAAC,CAAC;AACzG,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,iBAAiB,CAAC,MAA+B,EAAE,KAAK,GAAG,WAAW;IACpF,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,iBAAiB,EAAE,GAAG,KAAK,2EAA2E,CAAC,CAAC;AACjH,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,GAAW;IAC5D,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,GAAG;QAC1C,IAAI,CAAC,iBAAiB,EAAE,UAAU,MAAM,8BAA8B,GAAG,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,2BAA2B,CAAC,WAAoB,EAAE,KAAK,GAAG,OAAO;IAC/E,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,IAAI,CAAC,WAAW;QACd,IAAI,CAAC,wBAAwB,EAAE,GAAG,KAAK,4DAA4D,CAAC,CAAC;AACzG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAI,SAAuB,EAAE,IAAa,EAAE,IAAI,GAAG,eAAe;IACvG,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC;IACnB,IAAI,SAAS,EAAE,KAAK,MAAM;QACxB,IAAI,CAAC,+BAA+B,EAAE,GAAG,IAAI,+DAA+D,CAAC,CAAC;IAChH,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAyC,EACzC,QAAmC;IAEnC,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,IAAI,CAAC,QAAQ;QAAE,IAAI,CAAC,oBAAoB,EAAE,GAAG,KAAK,CAAC,KAAK,uCAAuC,CAAC,CAAC;IACjG,MAAM,SAAS,GAAG,OAAQ,KAA6B,CAAC,KAAK,KAAK,UAAU,CAAC;IAC7E,IAAI,QAAS,CAAC,SAAS,KAAK,SAAS;QACnC,IAAI,CAAC,oBAAoB,EAAE,GAAG,KAAK,CAAC,KAAK,wBAAwB,QAAS,CAAC,SAAS,gBAAgB,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC9I,CAAC"}
|
package/dist/core/agents.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export declare function elementMass(area: number): number;
|
|
|
21
21
|
* `Σ C·(c − cⱼ)/|c − cⱼ|²` — so a cluster spreads out. Softened near coincidence so
|
|
22
22
|
* fully-overlapping elements don't blow up. `others` are the other element centres.
|
|
23
23
|
*/
|
|
24
|
-
export declare function repelForce(self: Vec2, others: readonly Vec2[], C?: number, soft?: number): Vec2;
|
|
24
|
+
export declare function repelForce(self: Vec2, others: readonly Vec2[], skip?: number, C?: number, soft?: number): Vec2;
|
|
25
25
|
/**
|
|
26
26
|
* Density-pressure force (Concept 3): push an element *down* the local density gradient
|
|
27
27
|
* (toward emptier field), `−∇ρ`, estimated by a 4-tap finite difference of a density
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/core/agents.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAC7B,CAAC,EAAE,aAAa,EAChB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,QAAQ,SAAM,EACd,SAAS,SAAK,GACb,IAAI,CAWN;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,SAAO,GAAG,IAAI,CAE5D;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC,SAAO,EAAE,IAAI,SAAK,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/core/agents.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAC7B,CAAC,EAAE,aAAa,EAChB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,QAAQ,SAAM,EACd,SAAS,SAAK,GACb,IAAI,CAWN;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,SAAO,GAAG,IAAI,CAE5D;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE,EAAE,IAAI,SAAK,EAAE,CAAC,SAAO,EAAE,IAAI,SAAK,GAAG,IAAI,CAcpG;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,EACxC,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,SAAK,EACV,KAAK,SAAI,GACR,IAAI,CAIN"}
|
package/dist/core/agents.js
CHANGED
|
@@ -25,11 +25,14 @@ export function elementMass(area) {
|
|
|
25
25
|
* `Σ C·(c − cⱼ)/|c − cⱼ|²` — so a cluster spreads out. Softened near coincidence so
|
|
26
26
|
* fully-overlapping elements don't blow up. `others` are the other element centres.
|
|
27
27
|
*/
|
|
28
|
-
export function repelForce(self, others, C = 1600, soft = 26) {
|
|
28
|
+
export function repelForce(self, others, skip = -1, C = 1600, soft = 26) {
|
|
29
29
|
let fx = 0;
|
|
30
30
|
let fy = 0;
|
|
31
31
|
const s2 = soft * soft;
|
|
32
|
-
for (
|
|
32
|
+
for (let i = 0; i < others.length; i++) {
|
|
33
|
+
if (i === skip)
|
|
34
|
+
continue; // exclude self by index — saves a per-frame `others.filter(j !== i)` alloc (#530)
|
|
35
|
+
const o = others[i];
|
|
33
36
|
const dx = self.x - o.x;
|
|
34
37
|
const dy = self.y - o.y;
|
|
35
38
|
const d2 = dx * dx + dy * dy + s2; // softened |c − cⱼ|²
|
package/dist/core/agents.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/core/agents.ts"],"names":[],"mappings":"AAcA,uFAAuF;AACvF,MAAM,UAAU,eAAe,CAC7B,CAAgB,EAChB,EAAU,EACV,EAAU,EACV,GAAW,EACX,QAAQ,GAAG,GAAG,EACd,SAAS,GAAG,EAAE;IAEd,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;IAClC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;IAClC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IACZ,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;QAC5B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,WAAW,CAAC,CAAgB,EAAE,CAAC,GAAG,IAAI;IACpD,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;AACtC,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC;IACvB,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAAU,EAAE,MAAuB,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/core/agents.ts"],"names":[],"mappings":"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"}
|
package/dist/core/events.d.ts
CHANGED
|
@@ -17,6 +17,21 @@ export interface FieldEventMap {
|
|
|
17
17
|
body: Body;
|
|
18
18
|
count: number;
|
|
19
19
|
};
|
|
20
|
+
/** another body crossed INTO this body's `range` (#441) — the gameplay "entered radius" trigger. */
|
|
21
|
+
enter: {
|
|
22
|
+
body: Body;
|
|
23
|
+
other: Body;
|
|
24
|
+
};
|
|
25
|
+
/** another body crossed OUT of this body's `range` (#441). */
|
|
26
|
+
exit: {
|
|
27
|
+
body: Body;
|
|
28
|
+
other: Body;
|
|
29
|
+
};
|
|
30
|
+
/** two bodies came into contact — their boxes touched/overlapped (#441), once on the rising edge. */
|
|
31
|
+
met: {
|
|
32
|
+
a: Body;
|
|
33
|
+
b: Body;
|
|
34
|
+
};
|
|
20
35
|
}
|
|
21
36
|
export type FieldEventType = keyof FieldEventMap;
|
|
22
37
|
export interface EventBinding {
|
|
@@ -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;
|
|
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"}
|
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":"AAAA;;;;;GAKG;AA+BH,0FAA0F;AAC1F,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC7F,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AASD,sFAAsF;AACtF,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,CAAe;IAC5D,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO;YACV,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,CAAC,CAAC,EAAE,CAAC;QACd,KAAK,UAAU;YACb,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;QACxB;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
|
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,EAA4C,WAAW,EAAE,YAAY,EAAkD,MAAM,YAAY,CAAC;AA2DtJ,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,GAAE,YAAiB,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../src/core/field.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAA4C,WAAW,EAAE,YAAY,EAAkD,MAAM,YAAY,CAAC;AA2DtJ,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,GAAE,YAAiB,GAAG,WAAW,CA2oE3F"}
|