@oh-just-another/renderer-core 0.57.1 → 0.59.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/CHANGELOG.md +70 -0
- package/README.md +98 -20
- package/dist/.tsbuildinfo +1 -1
- package/dist/animation-adapter.d.ts +22 -20
- package/dist/animation-adapter.d.ts.map +1 -1
- package/dist/animation-adapter.js +14 -15
- package/dist/animation-adapter.js.map +1 -1
- package/dist/built-in-renderers.d.ts +1 -2
- package/dist/built-in-renderers.d.ts.map +1 -1
- package/dist/built-in-renderers.js +144 -60
- package/dist/built-in-renderers.js.map +1 -1
- package/dist/constants.d.ts +64 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +67 -0
- package/dist/constants.js.map +1 -1
- package/dist/dim-target.d.ts +20 -0
- package/dist/dim-target.d.ts.map +1 -0
- package/dist/dim-target.js +37 -0
- package/dist/dim-target.js.map +1 -0
- package/dist/edge-cache-bitmap.d.ts +3 -4
- package/dist/edge-cache-bitmap.d.ts.map +1 -1
- package/dist/edge-cache-bitmap.js +4 -14
- package/dist/edge-cache-bitmap.js.map +1 -1
- package/dist/edge-renderer.d.ts +1 -1
- package/dist/edge-renderer.d.ts.map +1 -1
- package/dist/edge-renderer.js +13 -17
- package/dist/edge-renderer.js.map +1 -1
- package/dist/grid-renderer.d.ts.map +1 -1
- package/dist/grid-renderer.js +7 -20
- package/dist/grid-renderer.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/js-rasterizer.d.ts.map +1 -1
- package/dist/js-rasterizer.js +1 -5
- package/dist/js-rasterizer.js.map +1 -1
- package/dist/layer-cache-composite.d.ts +4 -7
- package/dist/layer-cache-composite.d.ts.map +1 -1
- package/dist/layer-cache-composite.js +5 -19
- package/dist/layer-cache-composite.js.map +1 -1
- package/dist/lru-cache.d.ts +16 -0
- package/dist/lru-cache.d.ts.map +1 -0
- package/dist/lru-cache.js +48 -0
- package/dist/lru-cache.js.map +1 -0
- package/dist/rasterizer.d.ts.map +1 -1
- package/dist/rasterizer.js +3 -4
- package/dist/rasterizer.js.map +1 -1
- package/dist/render-target.d.ts +12 -1
- package/dist/render-target.d.ts.map +1 -1
- package/dist/scene-renderer.d.ts +13 -7
- package/dist/scene-renderer.d.ts.map +1 -1
- package/dist/scene-renderer.js +34 -18
- package/dist/scene-renderer.js.map +1 -1
- package/dist/shape-cache-bitmap.d.ts +0 -1
- package/dist/shape-cache-bitmap.d.ts.map +1 -1
- package/dist/shape-cache-bitmap.js +4 -16
- package/dist/shape-cache-bitmap.js.map +1 -1
- package/dist/shape-renderer.d.ts +9 -0
- package/dist/shape-renderer.d.ts.map +1 -1
- package/dist/shape-renderer.js.map +1 -1
- package/dist/text-editing.d.ts +2 -4
- package/dist/text-editing.d.ts.map +1 -1
- package/dist/text-editing.js +1 -5
- package/dist/text-editing.js.map +1 -1
- package/dist/text-layout.d.ts +1 -1
- package/dist/text-shaper.d.ts +6 -9
- package/dist/text-shaper.d.ts.map +1 -1
- package/dist/text-shaper.js +4 -7
- package/dist/text-shaper.js.map +1 -1
- package/dist/tile-renderer.d.ts +13 -20
- package/dist/tile-renderer.d.ts.map +1 -1
- package/dist/tile-renderer.js +6 -9
- package/dist/tile-renderer.js.map +1 -1
- package/dist/wasm-bytes.d.ts +40 -0
- package/dist/wasm-bytes.d.ts.map +1 -0
- package/dist/wasm-bytes.js +88 -0
- package/dist/wasm-bytes.js.map +1 -0
- package/dist/worker-render.d.ts +4 -11
- package/dist/worker-render.d.ts.map +1 -1
- package/dist/worker-render.js +3 -4
- package/dist/worker-render.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js-rasterizer.js","sourceRoot":"","sources":["../src/js-rasterizer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"js-rasterizer.js","sourceRoot":"","sources":["../src/js-rasterizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAa,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG/C;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAe;IACtC,OAAO,CAAC,QAAQ,EAAE,SAAS;QACzB,qEAAqE;QACrE,6DAA6D;QAC7D,mCAAmC;QACnC,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAU,EAAE,CAC/C,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,GAAG,GAAW,EAAE,CAAC;QACvB,IAAI,GAAG,GAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;gBACjB,KAAK,GAAG;oBACN,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;oBACb,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACd,MAAM;gBACR,KAAK,GAAG;oBACN,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;oBACb,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACd,MAAM;gBACR,KAAK,GAAG,CAAC,CAAC,CAAC;oBACT,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;oBACtF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;wBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnE,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;oBACb,MAAM;gBACR,CAAC;gBACD,KAAK,GAAG,CAAC,CAAC,CAAC;oBACT,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CACjC,GAAG,EACH,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,EAAE,EACN,WAAW,CAAC,KAAK,CAAC,CACnB,CAAC;oBACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;wBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnE,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;oBACb,MAAM;gBACR,CAAC;gBACD,KAAK,GAAG;oBACN,wDAAwD;oBACxD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACnB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC1B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAChB,GAAG,GAAG,KAAK,CAAC;oBACd,CAAC;oBACD,MAAM;YACV,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO;QACnC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;QACvB,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,MAAM,CAAC;QACnC,KAAK,OAAO,EAAE,IAAI,CAAC,CAAC,8CAA8C;QAClE,MAAM,IAAI,GAAW,EAAE,CAAC;QACxB,MAAM,KAAK,GAAW,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;YACrB,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,8DAA8D;QAC9D,yBAAyB;QACzB,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACxC,gEAAgE;QAClE,CAAC;QACD,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;CACF,CAAC"}
|
|
@@ -4,12 +4,10 @@ import type { LayerId } from "@oh-just-another/types";
|
|
|
4
4
|
* composite so renderScene can replay unchanged layers via a single
|
|
5
5
|
* `drawImage` instead of walking every shape on every frame.
|
|
6
6
|
*
|
|
7
|
-
* Invalidation:
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* `
|
|
11
|
-
* renderer falls back to the per-shape walk + optionally caches the
|
|
12
|
-
* result via the host's `compositeLayerBitmap` callback.
|
|
7
|
+
* Invalidation: `invalidateLayer(id)` is called for each layer changed
|
|
8
|
+
* this frame, so `get` then misses for those layers and the renderer
|
|
9
|
+
* falls back to the per-shape walk + optionally re-caches the result via
|
|
10
|
+
* the host's `compositeLayerBitmap` callback.
|
|
13
11
|
*
|
|
14
12
|
* `Map<LayerId @ zoomBucket → bitmap>` shape mirrors the per-shape /
|
|
15
13
|
* per-edge caches; LRU by insertion order with a count cap.
|
|
@@ -23,7 +21,6 @@ export interface LayerCompositeCache<V = unknown> {
|
|
|
23
21
|
}
|
|
24
22
|
export declare class InMemoryLayerCompositeCache<V> implements LayerCompositeCache<V> {
|
|
25
23
|
private readonly entries;
|
|
26
|
-
private readonly cap;
|
|
27
24
|
constructor(cap?: number);
|
|
28
25
|
get size(): number;
|
|
29
26
|
get(layerId: LayerId, zoomBucket: number): V | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layer-cache-composite.d.ts","sourceRoot":"","sources":["../src/layer-cache-composite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"layer-cache-composite.d.ts","sourceRoot":"","sources":["../src/layer-cache-composite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,mBAAmB,CAAC,CAAC,GAAG,OAAO;IAC9C,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IACzD,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAC1D,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxC,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAID,qBAAa,2BAA2B,CAAC,CAAC,CAAE,YAAW,mBAAmB,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;gBAElC,GAAG,SAAK;IAIpB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAIxD,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAIzD;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOvC,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -1,32 +1,18 @@
|
|
|
1
|
+
import { LruCache } from "./lru-cache.js";
|
|
1
2
|
const keyFor = (layerId, zoomBucket) => `${layerId}@${zoomBucket}`;
|
|
2
3
|
export class InMemoryLayerCompositeCache {
|
|
3
|
-
entries
|
|
4
|
-
cap;
|
|
4
|
+
entries;
|
|
5
5
|
constructor(cap = 32) {
|
|
6
|
-
this.
|
|
6
|
+
this.entries = new LruCache(cap);
|
|
7
7
|
}
|
|
8
8
|
get size() {
|
|
9
9
|
return this.entries.size;
|
|
10
10
|
}
|
|
11
11
|
get(layerId, zoomBucket) {
|
|
12
|
-
|
|
13
|
-
const v = this.entries.get(key);
|
|
14
|
-
if (v === undefined)
|
|
15
|
-
return undefined;
|
|
16
|
-
this.entries.delete(key);
|
|
17
|
-
this.entries.set(key, v);
|
|
18
|
-
return v;
|
|
12
|
+
return this.entries.get(keyFor(layerId, zoomBucket));
|
|
19
13
|
}
|
|
20
14
|
set(layerId, zoomBucket, value) {
|
|
21
|
-
|
|
22
|
-
if (this.entries.has(key))
|
|
23
|
-
this.entries.delete(key);
|
|
24
|
-
this.entries.set(key, value);
|
|
25
|
-
if (this.entries.size > this.cap) {
|
|
26
|
-
const oldest = this.entries.keys().next().value;
|
|
27
|
-
if (oldest !== undefined)
|
|
28
|
-
this.entries.delete(oldest);
|
|
29
|
-
}
|
|
15
|
+
this.entries.set(keyFor(layerId, zoomBucket), value);
|
|
30
16
|
}
|
|
31
17
|
/**
|
|
32
18
|
* Drop every cached bucket for a layer (across all zoom buckets).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layer-cache-composite.js","sourceRoot":"","sources":["../src/layer-cache-composite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"layer-cache-composite.js","sourceRoot":"","sources":["../src/layer-cache-composite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAwB1C,MAAM,MAAM,GAAG,CAAC,OAAgB,EAAE,UAAkB,EAAU,EAAE,CAAC,GAAG,OAAO,IAAI,UAAU,EAAE,CAAC;AAE5F,MAAM,OAAO,2BAA2B;IACrB,OAAO,CAAsB;IAE9C,YAAY,GAAG,GAAG,EAAE;QAClB,IAAI,CAAC,OAAO,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,OAAgB,EAAE,UAAkB;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,GAAG,CAAC,OAAgB,EAAE,UAAkB,EAAE,KAAQ;QAChD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,OAAgB;QAC9B,MAAM,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3C,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Insertion-ordered LRU map: get() marks recency; set() evicts oldest past `cap` (by entry count). */
|
|
2
|
+
export declare class LruCache<K, V> {
|
|
3
|
+
private readonly cap;
|
|
4
|
+
private readonly onEvict?;
|
|
5
|
+
private readonly map;
|
|
6
|
+
constructor(cap: number, onEvict?: ((key: K, value: V) => void) | undefined);
|
|
7
|
+
get(key: K): V | undefined;
|
|
8
|
+
has(key: K): boolean;
|
|
9
|
+
set(key: K, value: V): void;
|
|
10
|
+
delete(key: K): boolean;
|
|
11
|
+
clear(): void;
|
|
12
|
+
get size(): number;
|
|
13
|
+
keys(): IterableIterator<K>;
|
|
14
|
+
values(): IterableIterator<V>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=lru-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru-cache.d.ts","sourceRoot":"","sources":["../src/lru-cache.ts"],"names":[],"mappings":"AAAA,uGAAuG;AACvG,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC;IAGtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAH3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAmB;gBAEpB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,GAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,aAAA;IAEvD,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAO1B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAGpB,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAU3B,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAGvB,KAAK,IAAI,IAAI;IAGb,IAAI,IAAI,IAAI,MAAM,CAEjB;IACD,IAAI,IAAI,gBAAgB,CAAC,CAAC,CAAC;IAG3B,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC;CAG9B"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/** Insertion-ordered LRU map: get() marks recency; set() evicts oldest past `cap` (by entry count). */
|
|
2
|
+
export class LruCache {
|
|
3
|
+
cap;
|
|
4
|
+
onEvict;
|
|
5
|
+
map = new Map();
|
|
6
|
+
constructor(cap, onEvict) {
|
|
7
|
+
this.cap = cap;
|
|
8
|
+
this.onEvict = onEvict;
|
|
9
|
+
}
|
|
10
|
+
get(key) {
|
|
11
|
+
const v = this.map.get(key);
|
|
12
|
+
if (v === undefined)
|
|
13
|
+
return undefined;
|
|
14
|
+
this.map.delete(key);
|
|
15
|
+
this.map.set(key, v);
|
|
16
|
+
return v;
|
|
17
|
+
}
|
|
18
|
+
has(key) {
|
|
19
|
+
return this.map.has(key);
|
|
20
|
+
}
|
|
21
|
+
set(key, value) {
|
|
22
|
+
this.map.delete(key);
|
|
23
|
+
this.map.set(key, value);
|
|
24
|
+
while (this.map.size > this.cap) {
|
|
25
|
+
const oldest = this.map.keys().next().value;
|
|
26
|
+
const ev = this.map.get(oldest);
|
|
27
|
+
this.map.delete(oldest);
|
|
28
|
+
if (ev !== undefined)
|
|
29
|
+
this.onEvict?.(oldest, ev);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
delete(key) {
|
|
33
|
+
return this.map.delete(key);
|
|
34
|
+
}
|
|
35
|
+
clear() {
|
|
36
|
+
this.map.clear();
|
|
37
|
+
}
|
|
38
|
+
get size() {
|
|
39
|
+
return this.map.size;
|
|
40
|
+
}
|
|
41
|
+
keys() {
|
|
42
|
+
return this.map.keys();
|
|
43
|
+
}
|
|
44
|
+
values() {
|
|
45
|
+
return this.map.values();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=lru-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru-cache.js","sourceRoot":"","sources":["../src/lru-cache.ts"],"names":[],"mappings":"AAAA,uGAAuG;AACvG,MAAM,OAAO,QAAQ;IAGA;IACA;IAHF,GAAG,GAAG,IAAI,GAAG,EAAQ,CAAC;IACvC,YACmB,GAAW,EACX,OAAoC;QADpC,QAAG,GAAH,GAAG,CAAQ;QACX,YAAO,GAAP,OAAO,CAA6B;IACpD,CAAC;IACJ,GAAG,CAAC,GAAM;QACR,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,GAAG,CAAC,GAAM,EAAE,KAAQ;QAClB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAU,CAAC;YACjD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,EAAE,KAAK,SAAS;gBAAE,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IACD,MAAM,CAAC,GAAM;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IACD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB,CAAC;IACD,IAAI;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IACD,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IAC3B,CAAC;CACF"}
|
package/dist/rasterizer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rasterizer.d.ts","sourceRoot":"","sources":["../src/rasterizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"rasterizer.d.ts","sourceRoot":"","sources":["../src/rasterizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAQ1D,eAAO,MAAM,mBAAmB,GAAI,GAAG,UAAU,GAAG,IAAI,KAAG,IAE1D,CAAC;AAEF,eAAO,MAAM,mBAAmB,QAAO,UAAU,GAAG,IAAwB,CAAC;AAE7E;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,OAAO,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,IAAI,EAAE,CAAC;IAE9E;;;OAGG;IACH,YAAY,CACV,QAAQ,EAAE,SAAS,IAAI,EAAE,EACzB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;QAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;KAC7C,GACA,SAAS,IAAI,EAAE,CAAC;CACpB"}
|
package/dist/rasterizer.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
// Process-global active rasterizer.
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
// built-in JS sampler.
|
|
1
|
+
// Process-global active rasterizer. A host installs one; backend code
|
|
2
|
+
// reads it at draw time. `null` falls back to the backend's built-in JS
|
|
3
|
+
// sampler.
|
|
5
4
|
let activeRasterizer = null;
|
|
6
5
|
export const setActiveRasterizer = (r) => {
|
|
7
6
|
activeRasterizer = r;
|
package/dist/rasterizer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rasterizer.js","sourceRoot":"","sources":["../src/rasterizer.ts"],"names":[],"mappings":"AAGA,
|
|
1
|
+
{"version":3,"file":"rasterizer.js","sourceRoot":"","sources":["../src/rasterizer.ts"],"names":[],"mappings":"AAGA,sEAAsE;AACtE,wEAAwE;AACxE,WAAW;AAEX,IAAI,gBAAgB,GAAsB,IAAI,CAAC;AAE/C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAoB,EAAQ,EAAE;IAChE,gBAAgB,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAsB,EAAE,CAAC,gBAAgB,CAAC"}
|
package/dist/render-target.d.ts
CHANGED
|
@@ -64,7 +64,18 @@ export interface RenderTarget {
|
|
|
64
64
|
* when `dynamic` is true; backends that read the source live every
|
|
65
65
|
* draw (Canvas2D) ignore it. Default `false` — static image.
|
|
66
66
|
*/
|
|
67
|
-
|
|
67
|
+
/**
|
|
68
|
+
* `crop` (optional) is a normalised source rectangle (fractions of the
|
|
69
|
+
* image's intrinsic size, `[0,1]`) — only the cropped region is drawn,
|
|
70
|
+
* stretched to fill `dw` × `dh`. Backends that can't sample a source
|
|
71
|
+
* sub-rectangle ignore it and draw the whole image (graceful degradation).
|
|
72
|
+
*/
|
|
73
|
+
drawImage(image: unknown, dx: number, dy: number, dw: number, dh: number, dynamic?: boolean, crop?: {
|
|
74
|
+
readonly x: number;
|
|
75
|
+
readonly y: number;
|
|
76
|
+
readonly width: number;
|
|
77
|
+
readonly height: number;
|
|
78
|
+
}): void;
|
|
68
79
|
/** Erase a region. Without bounds, erases everything. */
|
|
69
80
|
clear(bounds?: Bounds): void;
|
|
70
81
|
/** Current intrinsic surface size in CSS pixels (pre-DPR). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-target.d.ts","sourceRoot":"","sources":["../src/render-target.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"render-target.d.ts","sourceRoot":"","sources":["../src/render-target.ts"],"names":[],"mappings":"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"}
|
package/dist/scene-renderer.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type Scene, type ElementBase, type SpatialGrid } from "@oh-just-another/scene";
|
|
2
2
|
import type { Bounds, LayerId, ElementId } from "@oh-just-another/types";
|
|
3
3
|
import type { RenderTarget } from "./render-target.js";
|
|
4
|
+
import type { AnimationClock } from "./animation-adapter.js";
|
|
4
5
|
import { ElementCache } from "./shape-cache.js";
|
|
5
6
|
import type { LayerCompositeCache } from "./layer-cache-composite.js";
|
|
6
7
|
/**
|
|
@@ -82,11 +83,9 @@ export interface RenderSceneOptions {
|
|
|
82
83
|
*/
|
|
83
84
|
readonly dimOpacity?: number;
|
|
84
85
|
/**
|
|
85
|
-
* Element ids that should NOT render this pass.
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
* and forwards the set here. Hidden shapes are also skipped in
|
|
89
|
-
* hit-test on the editor side, so they read as "absent" entirely.
|
|
86
|
+
* Element ids that should NOT render this pass. The host computes
|
|
87
|
+
* which shapes are effectively hidden (e.g. via group hide
|
|
88
|
+
* propagation) and forwards the set here.
|
|
90
89
|
*/
|
|
91
90
|
readonly hideElements?: ReadonlySet<ElementId>;
|
|
92
91
|
/**
|
|
@@ -104,10 +103,17 @@ export interface RenderSceneOptions {
|
|
|
104
103
|
/**
|
|
105
104
|
* Host-side layer rasteriser. Receives the layer id, the active
|
|
106
105
|
* zoom bucket, and the scene; returns the bitmap to cache or
|
|
107
|
-
* `null` to opt out. The kernel doesn't ship one —
|
|
108
|
-
*
|
|
106
|
+
* `null` to opt out. The kernel doesn't ship one — OffscreenCanvas
|
|
107
|
+
* creation is the backend's job.
|
|
109
108
|
*/
|
|
110
109
|
readonly compositeLayerBitmap?: (layerId: LayerId, zoomBucket: number, scene: Scene) => unknown;
|
|
110
|
+
/**
|
|
111
|
+
* Per-instance animated-content playback clock, forwarded to each shape
|
|
112
|
+
* renderer via {@link ElementRenderContext.clock}. Lets the caller (an
|
|
113
|
+
* `Editor`) drive per-shape GIF playback without mutating the process-global
|
|
114
|
+
* {@link setAnimationClock}. Omit to fall back to the module clock.
|
|
115
|
+
*/
|
|
116
|
+
readonly clock?: AnimationClock;
|
|
111
117
|
}
|
|
112
118
|
/**
|
|
113
119
|
* Renders the `main` z-stack of a scene onto a single target.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-renderer.d.ts","sourceRoot":"","sources":["../src/scene-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"scene-renderer.d.ts","sourceRoot":"","sources":["../src/scene-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,EAAqB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGtE;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACzD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5C;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC;IACpC;;OAEG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC;;;;;;;;OAQG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IAC/C;;;;;;;;;OASG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IACnD,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9C;;;;;OAKG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;IAChG;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;CACjC;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW,GACtB,OAAO,KAAK,EACZ,QAAQ,YAAY,EACpB,UAAS,kBAAuB,KAC/B,IAkJF,CAAC"}
|
package/dist/scene-renderer.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { getLayersInOrder, getElementsInLayer, getWorldToScreen, } from "@oh-just-another/scene";
|
|
1
|
+
import { getLayersInOrder, getElementsInLayer, getWorldToScreen, isText, } from "@oh-just-another/scene";
|
|
2
2
|
import { bounds as B, matrix } from "@oh-just-another/math";
|
|
3
3
|
import { getElementRenderer } from "./shape-renderer.js";
|
|
4
|
+
import { createDimTarget } from "./dim-target.js";
|
|
4
5
|
import { cachedWorldBounds, ElementCache } from "./shape-cache.js";
|
|
5
6
|
import { DEFAULT_PLACEHOLDER_FILL } from "./constants.js";
|
|
6
7
|
import { zoomBucket as bucketFor } from "./shape-cache-bitmap.js";
|
|
@@ -51,6 +52,11 @@ export const renderScene = (scene, target, options = {}) => {
|
|
|
51
52
|
candidates = options.spatialIndex.query(viewport);
|
|
52
53
|
}
|
|
53
54
|
const zoom = scene.viewport.zoom;
|
|
55
|
+
const clock = options.clock;
|
|
56
|
+
// Reused per-shape render context. `clock` is per-instance when the caller
|
|
57
|
+
// (Editor) threads one; omitted otherwise so the image renderer falls back
|
|
58
|
+
// to the process-global animation clock.
|
|
59
|
+
const ctx = clock ? { zoom, clock } : { zoom };
|
|
54
60
|
const lod = options.lod;
|
|
55
61
|
const usePlaceholder = lod?.placeholder !== undefined && zoom < lod.placeholder;
|
|
56
62
|
const dropText = lod?.hideText !== undefined && zoom < lod.hideText;
|
|
@@ -67,15 +73,22 @@ export const renderScene = (scene, target, options = {}) => {
|
|
|
67
73
|
}
|
|
68
74
|
return acc;
|
|
69
75
|
};
|
|
76
|
+
// Dim (isolation / eraser preview) scales the alpha of `dimElements`. Route
|
|
77
|
+
// those shapes through a wrapper that multiplies `setOpacity` by `dimOpacity`
|
|
78
|
+
// — so a shape carrying its own `style.opacity` renders dimmed too, instead
|
|
79
|
+
// of overwriting the dim back to full. Built once (constant factor), reused.
|
|
80
|
+
const dimOpacity = options.dimOpacity;
|
|
81
|
+
const dimTarget = options.dimElements !== undefined && dimOpacity !== undefined
|
|
82
|
+
? createDimTarget(target, dimOpacity)
|
|
83
|
+
: null;
|
|
70
84
|
for (const layer of getLayersInOrder(scene)) {
|
|
71
85
|
if (!layer.visible)
|
|
72
86
|
continue;
|
|
73
|
-
// Per-layer composite cache fast path. Only fires when the
|
|
74
|
-
//
|
|
75
|
-
//
|
|
76
|
-
//
|
|
77
|
-
//
|
|
78
|
-
// re-used after a mutation.
|
|
87
|
+
// Per-layer composite cache fast path. Only fires when the host
|
|
88
|
+
// plugged a cache + a layer rasteriser; the kernel ships no default
|
|
89
|
+
// rasteriser (OffscreenCanvas creation is the backend's job). Drop
|
|
90
|
+
// dirty layers from the cache so the bitmap isn't re-used after a
|
|
91
|
+
// mutation.
|
|
79
92
|
if (layerCache && compositeLayerBitmap) {
|
|
80
93
|
if (dirtyLayers?.has(layer.id))
|
|
81
94
|
layerCache.invalidateLayer(layer.id);
|
|
@@ -109,7 +122,7 @@ export const renderScene = (scene, target, options = {}) => {
|
|
|
109
122
|
if (!B.intersects(bb, dirtyWorld))
|
|
110
123
|
continue;
|
|
111
124
|
}
|
|
112
|
-
if (dropText && shape
|
|
125
|
+
if (dropText && isText(shape))
|
|
113
126
|
continue;
|
|
114
127
|
if (usePlaceholder) {
|
|
115
128
|
// Draw the AABB directly in world coords — skip the renderer
|
|
@@ -128,19 +141,22 @@ export const renderScene = (scene, target, options = {}) => {
|
|
|
128
141
|
continue;
|
|
129
142
|
}
|
|
130
143
|
target.save();
|
|
131
|
-
// Isolation dim —
|
|
132
|
-
// shape
|
|
133
|
-
//
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
target
|
|
144
|
+
// Isolation / eraser dim — draw through the scaling wrapper so the
|
|
145
|
+
// shape's own `style.opacity` multiplies with `dimOpacity` instead of
|
|
146
|
+
// overwriting it (see RenderSceneOptions.dimElements / createDimTarget).
|
|
147
|
+
// The wrapper's base alpha is `dimOpacity` (setOpacity(1) → dimOpacity),
|
|
148
|
+
// so a shape that never sets its own opacity still dims.
|
|
149
|
+
const dimmed = dimTarget !== null && options.dimElements?.has(shape.id) === true;
|
|
150
|
+
const draw = dimmed ? dimTarget : target;
|
|
151
|
+
if (dimmed)
|
|
152
|
+
draw.setOpacity(1);
|
|
153
|
+
draw.translate(shape.position.x, shape.position.y);
|
|
138
154
|
if (shape.rotation !== 0)
|
|
139
|
-
|
|
155
|
+
draw.rotate(shape.rotation);
|
|
140
156
|
if (shape.scale.x !== 1 || shape.scale.y !== 1) {
|
|
141
|
-
|
|
157
|
+
draw.scale(shape.scale.x, shape.scale.y);
|
|
142
158
|
}
|
|
143
|
-
renderer(shape,
|
|
159
|
+
renderer(shape, draw, ctx);
|
|
144
160
|
target.restore();
|
|
145
161
|
}
|
|
146
162
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-renderer.js","sourceRoot":"","sources":["../src/scene-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"scene-renderer.js","sourceRoot":"","sources":["../src/scene-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,6 @@ export interface ElementBitmapCache<V = unknown> {
|
|
|
25
25
|
*/
|
|
26
26
|
export declare class InMemoryElementBitmapCache<V> implements ElementBitmapCache<V> {
|
|
27
27
|
private readonly entries;
|
|
28
|
-
private readonly cap;
|
|
29
28
|
constructor(cap?: number);
|
|
30
29
|
get size(): number;
|
|
31
30
|
get(shape: ElementBase, zoomBucket: number): V | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape-cache-bitmap.d.ts","sourceRoot":"","sources":["../src/shape-cache-bitmap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"shape-cache-bitmap.d.ts","sourceRoot":"","sources":["../src/shape-cache-bitmap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,OAAO;IAC7C,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAC3D,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAC5D,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACrD,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AASD;;;;;GAKG;AACH,qBAAa,0BAA0B,CAAC,CAAC,CAAE,YAAW,kBAAkB,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;gBAEzC,GAAG,SAAM;IAIrB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAY1D,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAI3D,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAIpD,KAAK,IAAI,IAAI;CAGd;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAGzC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { LruCache } from "./lru-cache.js";
|
|
1
2
|
const keyFor = (shape, zoomBucket) => `${shape.id}@${zoomBucket}`;
|
|
2
3
|
/**
|
|
3
4
|
* In-memory LRU cache. Operates on shape identity (reference) —
|
|
@@ -6,10 +7,9 @@ const keyFor = (shape, zoomBucket) => `${shape.id}@${zoomBucket}`;
|
|
|
6
7
|
* mechanism — no version field needed.
|
|
7
8
|
*/
|
|
8
9
|
export class InMemoryElementBitmapCache {
|
|
9
|
-
entries
|
|
10
|
-
cap;
|
|
10
|
+
entries;
|
|
11
11
|
constructor(cap = 512) {
|
|
12
|
-
this.
|
|
12
|
+
this.entries = new LruCache(cap);
|
|
13
13
|
}
|
|
14
14
|
get size() {
|
|
15
15
|
return this.entries.size;
|
|
@@ -24,22 +24,10 @@ export class InMemoryElementBitmapCache {
|
|
|
24
24
|
this.entries.delete(key);
|
|
25
25
|
return undefined;
|
|
26
26
|
}
|
|
27
|
-
// Re-insert to mark as recently-used (Map preserves insert order).
|
|
28
|
-
this.entries.delete(key);
|
|
29
|
-
this.entries.set(key, e);
|
|
30
27
|
return e.value;
|
|
31
28
|
}
|
|
32
29
|
set(shape, zoomBucket, value) {
|
|
33
|
-
|
|
34
|
-
if (this.entries.has(key))
|
|
35
|
-
this.entries.delete(key);
|
|
36
|
-
this.entries.set(key, { shapeRef: shape, value });
|
|
37
|
-
if (this.entries.size > this.cap) {
|
|
38
|
-
// Evict the oldest entry (first key in insertion order).
|
|
39
|
-
const oldest = this.entries.keys().next().value;
|
|
40
|
-
if (oldest !== undefined)
|
|
41
|
-
this.entries.delete(oldest);
|
|
42
|
-
}
|
|
30
|
+
this.entries.set(keyFor(shape, zoomBucket), { shapeRef: shape, value });
|
|
43
31
|
}
|
|
44
32
|
delete(shape, zoomBucket) {
|
|
45
33
|
this.entries.delete(keyFor(shape, zoomBucket));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape-cache-bitmap.js","sourceRoot":"","sources":["../src/shape-cache-bitmap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shape-cache-bitmap.js","sourceRoot":"","sources":["../src/shape-cache-bitmap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAsB1C,MAAM,MAAM,GAAG,CAAC,KAAkB,EAAE,UAAkB,EAAU,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,UAAU,EAAE,CAAC;AAO/F;;;;;GAKG;AACH,MAAM,OAAO,0BAA0B;IACpB,OAAO,CAA6B;IAErD,YAAY,GAAG,GAAG,GAAG;QACnB,IAAI,CAAC,OAAO,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,KAAkB,EAAE,UAAkB;QACxC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzB,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YACzB,wDAAwD;YACxD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,CAAC,KAAK,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,KAAkB,EAAE,UAAkB,EAAE,KAAQ;QAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,KAAkB,EAAE,UAAkB;QAC3C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAU,EAAE;IACjD,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACxB,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC"}
|
package/dist/shape-renderer.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ElementBase } from "@oh-just-another/scene";
|
|
2
2
|
import type { RenderTarget } from "./render-target.js";
|
|
3
|
+
import type { AnimationClock } from "./animation-adapter.js";
|
|
3
4
|
/**
|
|
4
5
|
* Optional draw context passed to an {@link ElementRenderer}. Carries the
|
|
5
6
|
* current view `zoom` so a renderer can draw screen-constant features (e.g. a
|
|
@@ -11,6 +12,14 @@ import type { RenderTarget } from "./render-target.js";
|
|
|
11
12
|
export interface ElementRenderContext {
|
|
12
13
|
/** Current view scale (1.0 = 1:1). `world × zoom = screen px`. */
|
|
13
14
|
readonly zoom: number;
|
|
15
|
+
/**
|
|
16
|
+
* Per-instance animated-content playback clock. When set, the image
|
|
17
|
+
* renderer samples animated sources at `clock(shape)` instead of the
|
|
18
|
+
* process-global fallback ({@link setAnimationClock}) — so two editors on
|
|
19
|
+
* one page can freeze / offset their GIFs independently. Omitted by headless
|
|
20
|
+
* / preview paths, which fall back to the module clock.
|
|
21
|
+
*/
|
|
22
|
+
readonly clock?: AnimationClock;
|
|
14
23
|
}
|
|
15
24
|
/**
|
|
16
25
|
* Draws a single shape onto `target`. The shape's `position` / `rotation` /
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape-renderer.d.ts","sourceRoot":"","sources":["../src/shape-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"shape-renderer.d.ts","sourceRoot":"","sources":["../src/shape-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI,CACjE,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,YAAY,EACpB,GAAG,CAAC,EAAE,oBAAoB,KACvB,IAAI,CAAC;AAIV;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAAI,CAAC,SAAS,WAAW,EAC3D,MAAM,CAAC,CAAC,MAAM,CAAC,EACf,UAAU,eAAe,CAAC,CAAC,CAAC,KAC3B,IAEF,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,KAAG,eAAe,GAAG,SAA+B,CAAC;AAEpG,mDAAmD;AACnD,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,KAAG,OAA6B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape-renderer.js","sourceRoot":"","sources":["../src/shape-renderer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shape-renderer.js","sourceRoot":"","sources":["../src/shape-renderer.ts"],"names":[],"mappings":"AAwCA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,IAAe,EACf,QAA4B,EACtB,EAAE;IACR,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAA2B,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAA+B,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAEpG,mDAAmD;AACnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/text-editing.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { TextAlign } from "./render-target.js";
|
|
2
|
+
import { type Vec2 } from "@oh-just-another/types";
|
|
2
3
|
/**
|
|
3
4
|
* Caret-aware text layout. Unlike {@link wrapText} (which collapses
|
|
4
5
|
* whitespace and is only good enough for *drawing*), this keeps every
|
|
@@ -63,10 +64,7 @@ export declare const caretGeometry: (layout: EditableTextLayout, caret: number,
|
|
|
63
64
|
* Map a local-space point to the nearest source caret offset. Used for
|
|
64
65
|
* click-to-place-caret and drag-to-select.
|
|
65
66
|
*/
|
|
66
|
-
export declare const pointToCaretIndex: (layout: EditableTextLayout, point:
|
|
67
|
-
readonly x: number;
|
|
68
|
-
readonly y: number;
|
|
69
|
-
}, measure: MeasureText, align: TextAlign) => number;
|
|
67
|
+
export declare const pointToCaretIndex: (layout: EditableTextLayout, point: Vec2, measure: MeasureText, align: TextAlign) => number;
|
|
70
68
|
export interface SelectionRect {
|
|
71
69
|
readonly x: number;
|
|
72
70
|
readonly y: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-editing.d.ts","sourceRoot":"","sources":["../src/text-editing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"text-editing.d.ts","sourceRoot":"","sources":["../src/text-editing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAO,KAAK,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAExD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,6EAA6E;AAC7E,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAsE9C;;;GAGG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM,MAAM,EACZ,SAAS,WAAW,EACpB,SAAS,iBAAiB,KACzB,kBAoBF,CAAC;AAuBF,MAAM,WAAW,aAAa;IAC5B,gCAAgC;IAChC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,GACxB,QAAQ,kBAAkB,EAC1B,OAAO,MAAM,EACb,SAAS,WAAW,EACpB,UAAU,MAAM,EAChB,OAAO,SAAS,KACf,aAOF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,kBAAkB,EAC1B,OAAO,IAAI,EACX,SAAS,WAAW,EACpB,OAAO,SAAS,KACf,MAiBF,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,GACzB,QAAQ,kBAAkB,EAC1B,MAAM,MAAM,EACZ,IAAI,MAAM,EACV,SAAS,WAAW,EACpB,OAAO,SAAS,KACf,SAAS,aAAa,EA6BxB,CAAC"}
|
package/dist/text-editing.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
if (v === undefined)
|
|
3
|
-
throw new Error("packages/renderer-core: index out of range");
|
|
4
|
-
return v;
|
|
5
|
-
};
|
|
1
|
+
import { req } from "@oh-just-another/types";
|
|
6
2
|
/** Default multiplier from font size to line height (matches `drawText`). */
|
|
7
3
|
export const DEFAULT_LINE_HEIGHT_FACTOR = 1.2;
|
|
8
4
|
const wrapParagraph = (para, base, maxWidth, measure, out) => {
|
package/dist/text-editing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-editing.js","sourceRoot":"","sources":["../src/text-editing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"text-editing.js","sourceRoot":"","sources":["../src/text-editing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAa,MAAM,wBAAwB,CAAC;AA4CxD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAE9C,MAAM,aAAa,GAAG,CACpB,IAAY,EACZ,IAAY,EACZ,QAAgB,EAChB,OAAoB,EACpB,GAAkB,EACZ,EAAE;IACR,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IACD,oEAAoE;IACpE,MAAM,KAAK,GAA+B,EAAE,CAAC;IAC7C,MAAM,EAAE,GAAG,MAAM,CAAC;IAClB,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,sEAAsE;QACtE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrF,OAAO;IACT,CAAC;IAED,oEAAoE;IACpE,sEAAsE;IACtE,sEAAsE;IACtE,iEAAiE;IACjE,qEAAqE;IACrE,sEAAsE;IACtE,+DAA+D;IAC/D,oEAAoE;IACpE,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,GAAW,EAAQ,EAAE;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACpC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,KAAK,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;YACpD,CAAC,EAAE,CAAC,CAAC,wDAAwD;YAC7D,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC;YACpB,gEAAgE;YAChE,mEAAmE;YACnE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;YAChB,SAAS,CAAC,oCAAoC;QAChD,CAAC;QACD,oEAAoE;QACpE,iEAAiE;QACjE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ;YAAE,CAAC,EAAE,CAAC;QACzE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACb,iEAAiE;YACjE,kEAAkE;YAClE,oDAAoD;YACpD,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACnB,SAAS,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,mDAAmD;IAC9D,CAAC;IACD,+DAA+D;IAC/D,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,IAAY,EACZ,OAAoB,EACpB,OAA0B,EACN,EAAE;IACtB,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC,gBAAgB,IAAI,0BAA0B,CAAC,CAAC;IAC/F,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACtC,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7E,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACnE,CAAC;YACD,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7E,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;IAC9C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AAC3C,CAAC,CAAC;AAEF,wEAAwE;AACxE,MAAM,SAAS,GAAG,CAAC,SAAiB,EAAE,UAAkB,EAAE,KAAgB,EAAU,EAAE;IACpF,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;IAC9D,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,UAAU,GAAG,SAAS,CAAC;IACrD,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,sEAAsE;AACtE,MAAM,iBAAiB,GAAG,CAAC,MAA0B,EAAE,KAAa,EAAU,EAAE;IAC9E,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,gEAAgE;QAChE,+DAA+D;QAC/D,+DAA+D;QAC/D,wCAAwC;QACxC,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG;YAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1B,CAAC,CAAC;AAaF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,MAA0B,EAC1B,KAAa,EACb,OAAoB,EACpB,QAAgB,EAChB,KAAgB,EACD,EAAE;IACjB,MAAM,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC7D,OAAO,EAAE,CAAC,EAAE,IAAI,GAAG,WAAW,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACxF,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,MAA0B,EAC1B,KAAW,EACX,OAAoB,EACpB,KAAgB,EACR,EAAE;IACV,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IACrC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC7D,oEAAoE;IACpE,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC;YACjB,QAAQ,GAAG,CAAC,CAAC;YACb,IAAI,GAAG,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAC3B,CAAC,CAAC;AASF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,MAA0B,EAC1B,IAAY,EACZ,EAAU,EACV,OAAoB,EACpB,KAAgB,EACU,EAAE;IAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9B,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IACzB,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC;YAAE,SAAS;QACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACpD,kEAAkE;YAClE,yDAAyD;YACzD,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC;gBAAE,SAAS;QACnD,CAAC;QACD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC7D,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvF,mEAAmE;QACnE,qDAAqD;QACrD,MAAM,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC;YACT,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU;YACxB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,QAAQ;YACtC,MAAM,EAAE,MAAM,CAAC,UAAU;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
|