@vectojs/core 0.2.4 → 0.2.6
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/{chunk-TQ4H357Q.js → chunk-4BO5XBJL.js} +57 -13
- package/dist/{chunk-IKLYTHAL.js → chunk-BWLNEJJW.js} +24 -28
- package/dist/{chunk-76NMTLYL.js → chunk-CTZQOM5Z.js} +1 -1
- package/dist/{chunk-TPNADFNN.js → chunk-GADBN53Z.js} +52 -26
- package/dist/{chunk-WEQRBXT2.mjs → chunk-PK5EYWIT.mjs} +50 -24
- package/dist/{chunk-P6MDWIEX.mjs → chunk-SL654OMF.mjs} +55 -11
- package/dist/{chunk-MCULB5VC.mjs → chunk-SSOP3F5F.mjs} +17 -21
- package/dist/{chunk-B3Z3JEJH.mjs → chunk-STWPTWO4.mjs} +1 -1
- package/dist/components/SplineEntity.d.ts +5 -0
- package/dist/index.js +178 -98
- package/dist/index.mjs +101 -21
- package/dist/layout/LayoutEngine.d.ts +1 -0
- package/dist/layout/LayoutWorkerSource.d.ts +1 -1
- package/dist/layout.js +3 -3
- package/dist/layout.mjs +2 -2
- package/dist/renderer/CanvasRenderer.d.ts +12 -1
- package/dist/renderer/IRenderer.d.ts +7 -0
- package/dist/renderer/url.d.ts +1 -1
- package/dist/renderer.js +2 -2
- package/dist/renderer.mjs +1 -1
- package/dist/text/MSDFTextEntity.d.ts +9 -0
- package/dist/text.js +3 -3
- package/dist/text.mjs +2 -2
- package/dist/tree/Scene.d.ts +7 -3
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkBWLNEJJWjs = require('./chunk-BWLNEJJW.js');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
@@ -12,7 +12,7 @@ var _chunkIKLYTHALjs = require('./chunk-IKLYTHAL.js');
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var _chunkGADBN53Zjs = require('./chunk-GADBN53Z.js');
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
|
|
@@ -24,12 +24,12 @@ var _chunkTPNADFNNjs = require('./chunk-TPNADFNN.js');
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
var
|
|
27
|
+
var _chunk4BO5XBJLjs = require('./chunk-4BO5XBJL.js');
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
|
|
32
|
-
var
|
|
32
|
+
var _chunkCTZQOM5Zjs = require('./chunk-CTZQOM5Z.js');
|
|
33
33
|
|
|
34
34
|
// src/tree/ComputeParticleEntity.ts
|
|
35
35
|
var PARTICLE_STRIDE_FLOATS = 8;
|
|
@@ -41,7 +41,7 @@ var PARTICLE_OFFSET_ORIGIN_X = 4;
|
|
|
41
41
|
var PARTICLE_OFFSET_ORIGIN_Y = 5;
|
|
42
42
|
var PARTICLE_OFFSET_SIZE = 6;
|
|
43
43
|
var PARTICLE_OFFSET_LIFE = 7;
|
|
44
|
-
var ComputeParticleEntity = (_class = class extends
|
|
44
|
+
var ComputeParticleEntity = (_class = class extends _chunk4BO5XBJLjs.Entity {
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
|
|
@@ -386,12 +386,14 @@ var Scene = (_class2 = class _Scene {
|
|
|
386
386
|
__init40() {this.initializingWebGPU = false}
|
|
387
387
|
__init41() {this.gpuCanvas = null}
|
|
388
388
|
__init42() {this.gpuContext = null}
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
389
|
+
/** True while the GPU canvas holds a presented particle frame (needs clearing when they leave). */
|
|
390
|
+
__init43() {this.gpuHasContent = false}
|
|
391
|
+
__init44() {this.mouseX = -9999}
|
|
392
|
+
__init45() {this.mouseY = -9999}
|
|
393
|
+
__init46() {this.pointerMoveListener = null}
|
|
394
|
+
__init47() {this.pointerLeaveListener = null}
|
|
395
|
+
__init48() {this.hasWarnedZeroSize = false}
|
|
396
|
+
constructor(canvas, options = {}) {;_class2.prototype.__init7.call(this);_class2.prototype.__init8.call(this);_class2.prototype.__init9.call(this);_class2.prototype.__init10.call(this);_class2.prototype.__init11.call(this);_class2.prototype.__init12.call(this);_class2.prototype.__init13.call(this);_class2.prototype.__init14.call(this);_class2.prototype.__init15.call(this);_class2.prototype.__init16.call(this);_class2.prototype.__init17.call(this);_class2.prototype.__init18.call(this);_class2.prototype.__init19.call(this);_class2.prototype.__init20.call(this);_class2.prototype.__init21.call(this);_class2.prototype.__init22.call(this);_class2.prototype.__init23.call(this);_class2.prototype.__init24.call(this);_class2.prototype.__init25.call(this);_class2.prototype.__init26.call(this);_class2.prototype.__init27.call(this);_class2.prototype.__init28.call(this);_class2.prototype.__init29.call(this);_class2.prototype.__init30.call(this);_class2.prototype.__init31.call(this);_class2.prototype.__init32.call(this);_class2.prototype.__init33.call(this);_class2.prototype.__init34.call(this);_class2.prototype.__init35.call(this);_class2.prototype.__init36.call(this);_class2.prototype.__init37.call(this);_class2.prototype.__init38.call(this);_class2.prototype.__init39.call(this);_class2.prototype.__init40.call(this);_class2.prototype.__init41.call(this);_class2.prototype.__init42.call(this);_class2.prototype.__init43.call(this);_class2.prototype.__init44.call(this);_class2.prototype.__init45.call(this);_class2.prototype.__init46.call(this);_class2.prototype.__init47.call(this);_class2.prototype.__init48.call(this);
|
|
395
397
|
this.canvas = canvas;
|
|
396
398
|
this.debugA11y = _nullishCoalesce(options.debugA11y, () => ( false));
|
|
397
399
|
this.disableWindowResize = _nullishCoalesce(options.disableWindowResize, () => ( false));
|
|
@@ -410,7 +412,7 @@ var Scene = (_class2 = class _Scene {
|
|
|
410
412
|
this.particleBackend = _nullishCoalesce(options.particleBackend, () => ( "auto"));
|
|
411
413
|
this.a11ySyncInterval = _nullishCoalesce(options.a11ySyncInterval, () => ( 0));
|
|
412
414
|
this.reducedMotionQuery = typeof window !== "undefined" && typeof window.matchMedia === "function" ? window.matchMedia("(prefers-reduced-motion: reduce)") : null;
|
|
413
|
-
this.root = new class RootEntity extends
|
|
415
|
+
this.root = new class RootEntity extends _chunk4BO5XBJLjs.Entity {
|
|
414
416
|
isPointInside() {
|
|
415
417
|
return false;
|
|
416
418
|
}
|
|
@@ -419,7 +421,7 @@ var Scene = (_class2 = class _Scene {
|
|
|
419
421
|
}
|
|
420
422
|
}("root");
|
|
421
423
|
this.root._scene = this;
|
|
422
|
-
this.overlayRoot = new class OverlayRoot extends
|
|
424
|
+
this.overlayRoot = new class OverlayRoot extends _chunk4BO5XBJLjs.Entity {
|
|
423
425
|
isPointInside() {
|
|
424
426
|
return false;
|
|
425
427
|
}
|
|
@@ -430,7 +432,10 @@ var Scene = (_class2 = class _Scene {
|
|
|
430
432
|
if (options.renderer) {
|
|
431
433
|
this.renderer = options.renderer;
|
|
432
434
|
} else {
|
|
433
|
-
this.renderer = new (0,
|
|
435
|
+
this.renderer = new (0, _chunkGADBN53Zjs.CanvasRenderer)(
|
|
436
|
+
canvas,
|
|
437
|
+
this.disableWindowResize ? { width: this.width, height: this.height } : void 0
|
|
438
|
+
);
|
|
434
439
|
}
|
|
435
440
|
if (typeof document !== "undefined") {
|
|
436
441
|
this.a11yRoot = document.createElement("div");
|
|
@@ -619,6 +624,10 @@ var Scene = (_class2 = class _Scene {
|
|
|
619
624
|
this.manager.destroy();
|
|
620
625
|
this.manager = null;
|
|
621
626
|
}
|
|
627
|
+
if (this.device) {
|
|
628
|
+
_optionalChain([this, 'access', _40 => _40.device, 'access', _41 => _41.destroy, 'optionalCall', _42 => _42()]);
|
|
629
|
+
this.device = null;
|
|
630
|
+
}
|
|
622
631
|
}
|
|
623
632
|
setupEvents() {
|
|
624
633
|
if (typeof window !== "undefined" && !this.disableWindowResize) {
|
|
@@ -760,42 +769,42 @@ var Scene = (_class2 = class _Scene {
|
|
|
760
769
|
el.style.background = "transparent";
|
|
761
770
|
}
|
|
762
771
|
el.addEventListener("click", (e) => {
|
|
763
|
-
node.dispatchEvent(new (0,
|
|
772
|
+
node.dispatchEvent(new (0, _chunk4BO5XBJLjs.VectoJSEvent)("click", node, e));
|
|
764
773
|
});
|
|
765
774
|
el.addEventListener("mouseenter", (e) => {
|
|
766
775
|
if (this.debugA11y) el.style.backgroundColor = "rgba(56, 189, 248, 0.2)";
|
|
767
|
-
node.dispatchEvent(new (0,
|
|
776
|
+
node.dispatchEvent(new (0, _chunk4BO5XBJLjs.VectoJSEvent)("hover", node, e, false));
|
|
768
777
|
});
|
|
769
778
|
el.addEventListener("mouseleave", (e) => {
|
|
770
779
|
if (this.debugA11y) el.style.backgroundColor = "rgba(56, 189, 248, 0.05)";
|
|
771
|
-
node.dispatchEvent(new (0,
|
|
780
|
+
node.dispatchEvent(new (0, _chunk4BO5XBJLjs.VectoJSEvent)("pointerleave", node, e, false));
|
|
772
781
|
});
|
|
773
782
|
const capEl = el;
|
|
774
783
|
el.addEventListener("pointerdown", (e) => {
|
|
775
784
|
if (typeof capEl.setPointerCapture === "function") capEl.setPointerCapture(e.pointerId);
|
|
776
|
-
node.dispatchEvent(new (0,
|
|
785
|
+
node.dispatchEvent(new (0, _chunk4BO5XBJLjs.VectoJSEvent)("pointerdown", node, e));
|
|
777
786
|
});
|
|
778
787
|
el.addEventListener("pointerup", (e) => {
|
|
779
788
|
if (typeof capEl.releasePointerCapture === "function")
|
|
780
789
|
capEl.releasePointerCapture(e.pointerId);
|
|
781
|
-
node.dispatchEvent(new (0,
|
|
790
|
+
node.dispatchEvent(new (0, _chunk4BO5XBJLjs.VectoJSEvent)("pointerup", node, e));
|
|
782
791
|
});
|
|
783
792
|
el.addEventListener(
|
|
784
793
|
"pointermove",
|
|
785
|
-
(e) => node.dispatchEvent(new (0,
|
|
794
|
+
(e) => node.dispatchEvent(new (0, _chunk4BO5XBJLjs.VectoJSEvent)("pointermove", node, e))
|
|
786
795
|
);
|
|
787
796
|
el.addEventListener(
|
|
788
797
|
"wheel",
|
|
789
798
|
(e) => {
|
|
790
|
-
node.dispatchEvent(new (0,
|
|
799
|
+
node.dispatchEvent(new (0, _chunk4BO5XBJLjs.VectoJSEvent)("wheel", node, e));
|
|
791
800
|
},
|
|
792
801
|
{ passive: false }
|
|
793
802
|
);
|
|
794
803
|
el.addEventListener("keydown", (e) => {
|
|
795
|
-
node.dispatchEvent(new (0,
|
|
804
|
+
node.dispatchEvent(new (0, _chunk4BO5XBJLjs.VectoJSEvent)("keydown", node, e));
|
|
796
805
|
});
|
|
797
806
|
el.addEventListener("keyup", (e) => {
|
|
798
|
-
node.dispatchEvent(new (0,
|
|
807
|
+
node.dispatchEvent(new (0, _chunk4BO5XBJLjs.VectoJSEvent)("keyup", node, e));
|
|
799
808
|
});
|
|
800
809
|
if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {
|
|
801
810
|
const input = el;
|
|
@@ -822,7 +831,7 @@ var Scene = (_class2 = class _Scene {
|
|
|
822
831
|
});
|
|
823
832
|
el.addEventListener("compositionupdate", (e) => {
|
|
824
833
|
const data = _nullishCoalesce(e.data, () => ( ""));
|
|
825
|
-
composition = { start: _nullishCoalesce(_optionalChain([composition, 'optionalAccess',
|
|
834
|
+
composition = { start: _nullishCoalesce(_optionalChain([composition, 'optionalAccess', _43 => _43.start]), () => ( 0)), length: data.length };
|
|
826
835
|
forward();
|
|
827
836
|
});
|
|
828
837
|
el.addEventListener("compositionend", () => {
|
|
@@ -868,7 +877,7 @@ var Scene = (_class2 = class _Scene {
|
|
|
868
877
|
el.addEventListener("keydown", (e) => {
|
|
869
878
|
if (e.key === "Enter" || e.key === " ") {
|
|
870
879
|
e.preventDefault();
|
|
871
|
-
node.dispatchEvent(new (0,
|
|
880
|
+
node.dispatchEvent(new (0, _chunk4BO5XBJLjs.VectoJSEvent)("click", node, e));
|
|
872
881
|
}
|
|
873
882
|
});
|
|
874
883
|
}
|
|
@@ -893,7 +902,7 @@ var Scene = (_class2 = class _Scene {
|
|
|
893
902
|
if (el.placeholder !== attrs.placeholder) el.placeholder = attrs.placeholder;
|
|
894
903
|
}
|
|
895
904
|
if (attrs.href !== void 0 && el instanceof HTMLAnchorElement) {
|
|
896
|
-
const safeHref =
|
|
905
|
+
const safeHref = _chunkGADBN53Zjs.sanitizeUrl.call(void 0, attrs.href);
|
|
897
906
|
if (el.getAttribute("href") !== safeHref) el.setAttribute("href", safeHref);
|
|
898
907
|
}
|
|
899
908
|
if (el instanceof HTMLImageElement) {
|
|
@@ -1026,12 +1035,12 @@ var Scene = (_class2 = class _Scene {
|
|
|
1026
1035
|
syncOverlayGeometry() {
|
|
1027
1036
|
const parent = this.canvas.parentElement;
|
|
1028
1037
|
if (!parent) return;
|
|
1029
|
-
const canvasRect = _optionalChain([this, 'access',
|
|
1030
|
-
const parentRect = _optionalChain([parent, 'access',
|
|
1031
|
-
const cssWidth = _optionalChain([canvasRect, 'optionalAccess',
|
|
1032
|
-
const cssHeight = _optionalChain([canvasRect, 'optionalAccess',
|
|
1033
|
-
const left = (_nullishCoalesce(_optionalChain([canvasRect, 'optionalAccess',
|
|
1034
|
-
const top = (_nullishCoalesce(_optionalChain([canvasRect, 'optionalAccess',
|
|
1038
|
+
const canvasRect = _optionalChain([this, 'access', _44 => _44.canvas, 'access', _45 => _45.getBoundingClientRect, 'optionalCall', _46 => _46()]);
|
|
1039
|
+
const parentRect = _optionalChain([parent, 'access', _47 => _47.getBoundingClientRect, 'optionalCall', _48 => _48()]);
|
|
1040
|
+
const cssWidth = _optionalChain([canvasRect, 'optionalAccess', _49 => _49.width]) || this.canvas.clientWidth || this.width;
|
|
1041
|
+
const cssHeight = _optionalChain([canvasRect, 'optionalAccess', _50 => _50.height]) || this.canvas.clientHeight || this.height;
|
|
1042
|
+
const left = (_nullishCoalesce(_optionalChain([canvasRect, 'optionalAccess', _51 => _51.left]), () => ( 0))) - (_nullishCoalesce(_optionalChain([parentRect, 'optionalAccess', _52 => _52.left]), () => ( 0))) - (parent.clientLeft || 0) + parent.scrollLeft;
|
|
1043
|
+
const top = (_nullishCoalesce(_optionalChain([canvasRect, 'optionalAccess', _53 => _53.top]), () => ( 0))) - (_nullishCoalesce(_optionalChain([parentRect, 'optionalAccess', _54 => _54.top]), () => ( 0))) - (parent.clientTop || 0) + parent.scrollTop;
|
|
1035
1044
|
const scaleX = this.width > 0 ? cssWidth / this.width : 1;
|
|
1036
1045
|
const scaleY = this.height > 0 ? cssHeight / this.height : 1;
|
|
1037
1046
|
for (const root of [this.a11yRoot, this.portalRoot]) {
|
|
@@ -1156,7 +1165,7 @@ var Scene = (_class2 = class _Scene {
|
|
|
1156
1165
|
* (and {@link respectReducedMotion} is on). `0` means uncapped.
|
|
1157
1166
|
*/
|
|
1158
1167
|
effectiveMaxFPS() {
|
|
1159
|
-
const reduced = this.respectReducedMotion && !!_optionalChain([this, 'access',
|
|
1168
|
+
const reduced = this.respectReducedMotion && !!_optionalChain([this, 'access', _55 => _55.reducedMotionQuery, 'optionalAccess', _56 => _56.matches]);
|
|
1160
1169
|
if (reduced)
|
|
1161
1170
|
return this.maxFPS > 0 ? Math.min(this.maxFPS, REDUCED_MOTION_FPS) : REDUCED_MOTION_FPS;
|
|
1162
1171
|
return this.maxFPS;
|
|
@@ -1164,8 +1173,8 @@ var Scene = (_class2 = class _Scene {
|
|
|
1164
1173
|
loop(time) {
|
|
1165
1174
|
if (!this.isRunning) return;
|
|
1166
1175
|
let cap = this.effectiveMaxFPS();
|
|
1167
|
-
const
|
|
1168
|
-
if (
|
|
1176
|
+
const isIdle = !this.dirty && !this.hasAnyPendingAnimation(this.root) && !this.hasAnyPendingAnimation(this.overlayRoot);
|
|
1177
|
+
if (isIdle && this.autoThrottle && this.renderMode === "always" && this.maxFPS > 0) {
|
|
1169
1178
|
cap = Math.min(cap, 2);
|
|
1170
1179
|
}
|
|
1171
1180
|
if (cap > 0 && time - this.lastTime < 1e3 / cap - 1) {
|
|
@@ -1174,10 +1183,11 @@ var Scene = (_class2 = class _Scene {
|
|
|
1174
1183
|
}
|
|
1175
1184
|
const dt = time - this.lastTime;
|
|
1176
1185
|
this.lastTime = time;
|
|
1177
|
-
if (this.renderMode === "onDemand" &&
|
|
1186
|
+
if (this.renderMode === "onDemand" && isIdle) {
|
|
1178
1187
|
this.scheduleFrame();
|
|
1179
1188
|
return;
|
|
1180
1189
|
}
|
|
1190
|
+
this.dirty = false;
|
|
1181
1191
|
this.render(this.renderer, dt, time);
|
|
1182
1192
|
const hasActiveAnimation = this.hasAnyPendingAnimation(this.root) || this.hasAnyPendingAnimation(this.overlayRoot);
|
|
1183
1193
|
const hasInteractive = this.hasAnyInteractive(this.root) || this.hasAnyInteractive(this.overlayRoot);
|
|
@@ -1192,7 +1202,6 @@ var Scene = (_class2 = class _Scene {
|
|
|
1192
1202
|
} else if (hasActiveAnimation) {
|
|
1193
1203
|
this.a11yPendingSyncAfterAnimation = true;
|
|
1194
1204
|
}
|
|
1195
|
-
this.dirty = false;
|
|
1196
1205
|
this.scheduleFrame();
|
|
1197
1206
|
}
|
|
1198
1207
|
/**
|
|
@@ -1304,6 +1313,7 @@ var Scene = (_class2 = class _Scene {
|
|
|
1304
1313
|
renderPass.end();
|
|
1305
1314
|
}
|
|
1306
1315
|
this.device.queue.submit([commandEncoder.finish()]);
|
|
1316
|
+
if (this.gpuContext) this.gpuHasContent = true;
|
|
1307
1317
|
} catch (e) {
|
|
1308
1318
|
console.error("WebGPU frame execution failed. Falling back.", e);
|
|
1309
1319
|
this.deviceLost = true;
|
|
@@ -1312,13 +1322,27 @@ var Scene = (_class2 = class _Scene {
|
|
|
1312
1322
|
}
|
|
1313
1323
|
} else if (isMainRenderPath) {
|
|
1314
1324
|
for (const entity of computeEntities) {
|
|
1315
|
-
|
|
1325
|
+
let mx = this.mouseX;
|
|
1326
|
+
let my = this.mouseY;
|
|
1327
|
+
if (mx > -9e3 && my > -9e3) {
|
|
1328
|
+
const local = entity.worldToLocal(mx, my);
|
|
1329
|
+
if (local) {
|
|
1330
|
+
mx = local.x;
|
|
1331
|
+
my = local.y;
|
|
1332
|
+
} else {
|
|
1333
|
+
mx = -9999;
|
|
1334
|
+
my = -9999;
|
|
1335
|
+
}
|
|
1336
|
+
}
|
|
1337
|
+
entity.updateCPU(dt / 1e3, mx, my, this.width, this.height);
|
|
1316
1338
|
}
|
|
1317
1339
|
}
|
|
1340
|
+
} else if (isMainRenderer) {
|
|
1341
|
+
this.clearGPUCanvasIfStale();
|
|
1318
1342
|
}
|
|
1319
1343
|
renderer.clear();
|
|
1320
1344
|
if (isMainRenderer) {
|
|
1321
|
-
_optionalChain([this, 'access',
|
|
1345
|
+
_optionalChain([this, 'access', _57 => _57.pointRenderer, 'optionalAccess', _58 => _58.begin, 'call', _59 => _59()]);
|
|
1322
1346
|
}
|
|
1323
1347
|
const vw = this.width;
|
|
1324
1348
|
const vh = this.height;
|
|
@@ -1412,7 +1436,19 @@ var Scene = (_class2 = class _Scene {
|
|
|
1412
1436
|
if (visible) {
|
|
1413
1437
|
if (node instanceof ComputeParticleEntity) {
|
|
1414
1438
|
if (this.deviceLost || this.webgpuDisabled || !this.device || !this.manager) {
|
|
1415
|
-
this.renderCPUParticles(
|
|
1439
|
+
this.renderCPUParticles(
|
|
1440
|
+
renderer,
|
|
1441
|
+
node,
|
|
1442
|
+
worldOpacity,
|
|
1443
|
+
a,
|
|
1444
|
+
b,
|
|
1445
|
+
c,
|
|
1446
|
+
d,
|
|
1447
|
+
te,
|
|
1448
|
+
tf,
|
|
1449
|
+
worldScaleX,
|
|
1450
|
+
isSimilarityTransform
|
|
1451
|
+
);
|
|
1416
1452
|
}
|
|
1417
1453
|
} else {
|
|
1418
1454
|
node.render(renderer);
|
|
@@ -1434,14 +1470,15 @@ var Scene = (_class2 = class _Scene {
|
|
|
1434
1470
|
if (isMainRenderer) this.reconcilePortals();
|
|
1435
1471
|
renderer.flush();
|
|
1436
1472
|
if (isMainRenderer) {
|
|
1437
|
-
_optionalChain([this, 'access',
|
|
1473
|
+
_optionalChain([this, 'access', _60 => _60.pointRenderer, 'optionalAccess', _61 => _61.flush, 'call', _62 => _62()]);
|
|
1438
1474
|
}
|
|
1475
|
+
_optionalChain([renderer, 'access', _63 => _63.present, 'optionalCall', _64 => _64()]);
|
|
1439
1476
|
}
|
|
1440
1477
|
/**
|
|
1441
1478
|
* Export the current scene state to a lightweight, flat SVG XML string.
|
|
1442
1479
|
*/
|
|
1443
1480
|
toSVG() {
|
|
1444
|
-
const renderer = new (0,
|
|
1481
|
+
const renderer = new (0, _chunkGADBN53Zjs.SVGRenderer)(this.width, this.height);
|
|
1445
1482
|
this.render(renderer, 0, 0);
|
|
1446
1483
|
return renderer.toXMLString();
|
|
1447
1484
|
}
|
|
@@ -1454,7 +1491,11 @@ var Scene = (_class2 = class _Scene {
|
|
|
1454
1491
|
if (typeof this.renderer.resize === "function") {
|
|
1455
1492
|
this.renderer.resize(width, height);
|
|
1456
1493
|
}
|
|
1457
|
-
_optionalChain([this, 'access',
|
|
1494
|
+
_optionalChain([this, 'access', _65 => _65.pointRenderer, 'optionalAccess', _66 => _66.resize, 'call', _67 => _67(width, height)]);
|
|
1495
|
+
if (this.gpuCanvas) {
|
|
1496
|
+
this.gpuCanvas.width = width;
|
|
1497
|
+
this.gpuCanvas.height = height;
|
|
1498
|
+
}
|
|
1458
1499
|
this.markDirty();
|
|
1459
1500
|
}
|
|
1460
1501
|
/**
|
|
@@ -1477,6 +1518,27 @@ var Scene = (_class2 = class _Scene {
|
|
|
1477
1518
|
if (overlayHit) return overlayHit;
|
|
1478
1519
|
return this.findHitRecursively(this.root, x, y);
|
|
1479
1520
|
}
|
|
1521
|
+
/** Submit one transparent clear pass when particle content lingers on the GPU canvas. */
|
|
1522
|
+
clearGPUCanvasIfStale() {
|
|
1523
|
+
if (!this.gpuHasContent || !this.device || !this.gpuContext || this.deviceLost) return;
|
|
1524
|
+
try {
|
|
1525
|
+
const encoder = this.device.createCommandEncoder();
|
|
1526
|
+
const pass = encoder.beginRenderPass({
|
|
1527
|
+
colorAttachments: [
|
|
1528
|
+
{
|
|
1529
|
+
view: this.gpuContext.getCurrentTexture().createView(),
|
|
1530
|
+
clearValue: { r: 0, g: 0, b: 0, a: 0 },
|
|
1531
|
+
loadOp: "clear",
|
|
1532
|
+
storeOp: "store"
|
|
1533
|
+
}
|
|
1534
|
+
]
|
|
1535
|
+
});
|
|
1536
|
+
pass.end();
|
|
1537
|
+
this.device.queue.submit([encoder.finish()]);
|
|
1538
|
+
} catch (e2) {
|
|
1539
|
+
}
|
|
1540
|
+
this.gpuHasContent = false;
|
|
1541
|
+
}
|
|
1480
1542
|
async initWebGPUContext(entities) {
|
|
1481
1543
|
if (!navigator.gpu) {
|
|
1482
1544
|
throw new Error("WebGPU not supported on this platform.");
|
|
@@ -1569,10 +1631,10 @@ var Scene = (_class2 = class _Scene {
|
|
|
1569
1631
|
}).catch(() => this.recreateWebGPUDeviceWithRetry(entities, attempt + 1));
|
|
1570
1632
|
}, backoff);
|
|
1571
1633
|
}
|
|
1572
|
-
renderCPUParticles(renderer, entity, worldOpacity) {
|
|
1634
|
+
renderCPUParticles(renderer, entity, worldOpacity, a, b, c, d, e, f, worldScale, isSimilarityTransform) {
|
|
1573
1635
|
const data = entity.particleData;
|
|
1574
1636
|
const size = entity.maxParticles;
|
|
1575
|
-
const
|
|
1637
|
+
const useGL = renderer === this.renderer && !!this.pointRenderer && isSimilarityTransform;
|
|
1576
1638
|
for (let i = 0; i < size; i++) {
|
|
1577
1639
|
const idx = i * 8;
|
|
1578
1640
|
const x = data[idx];
|
|
@@ -1582,8 +1644,14 @@ var Scene = (_class2 = class _Scene {
|
|
|
1582
1644
|
if (life === 0) continue;
|
|
1583
1645
|
const opacity = life < 0 ? worldOpacity : worldOpacity * Math.min(1, life);
|
|
1584
1646
|
const scale = life >= 0 ? Math.min(1, life) : 1;
|
|
1585
|
-
if (
|
|
1586
|
-
this.pointRenderer.addCircle(
|
|
1647
|
+
if (useGL) {
|
|
1648
|
+
this.pointRenderer.addCircle(
|
|
1649
|
+
a * x + c * y + e,
|
|
1650
|
+
b * x + d * y + f,
|
|
1651
|
+
pSize * scale * worldScale,
|
|
1652
|
+
entity.baseColor,
|
|
1653
|
+
opacity
|
|
1654
|
+
);
|
|
1587
1655
|
} else {
|
|
1588
1656
|
renderer.fillCircle(x, y, pSize * scale, entity.baseColor, opacity);
|
|
1589
1657
|
}
|
|
@@ -1604,27 +1672,27 @@ var Scene = (_class2 = class _Scene {
|
|
|
1604
1672
|
// src/components/TextEntity.ts
|
|
1605
1673
|
var sharedMeasurer;
|
|
1606
1674
|
function defaultMeasurer() {
|
|
1607
|
-
if (sharedMeasurer === void 0) sharedMeasurer =
|
|
1675
|
+
if (sharedMeasurer === void 0) sharedMeasurer = _chunkBWLNEJJWjs.createCanvasMeasurer.call(void 0, "sans-serif");
|
|
1608
1676
|
return sharedMeasurer;
|
|
1609
1677
|
}
|
|
1610
|
-
var TextEntity = (_class3 = class extends
|
|
1678
|
+
var TextEntity = (_class3 = class extends _chunk4BO5XBJLjs.Entity {
|
|
1611
1679
|
|
|
1612
1680
|
|
|
1613
1681
|
|
|
1614
1682
|
|
|
1615
|
-
|
|
1683
|
+
__init49() {this.nodes = []}
|
|
1616
1684
|
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1685
|
+
__init50() {this.fillStyle = "#94a3b8"}
|
|
1686
|
+
__init51() {this.strokeStyle = null}
|
|
1687
|
+
__init52() {this.hoveredFillStyle = "#ffffff"}
|
|
1688
|
+
__init53() {this.lineWidth = 1}
|
|
1689
|
+
__init54() {this.isHovered = false}
|
|
1622
1690
|
constructor(text, atlas, maxWidth, fontSize = 24) {
|
|
1623
|
-
super();_class3.prototype.
|
|
1691
|
+
super();_class3.prototype.__init49.call(this);_class3.prototype.__init50.call(this);_class3.prototype.__init51.call(this);_class3.prototype.__init52.call(this);_class3.prototype.__init53.call(this);_class3.prototype.__init54.call(this);;
|
|
1624
1692
|
this.text = text;
|
|
1625
1693
|
this.atlas = atlas;
|
|
1626
1694
|
this.fontSize = fontSize;
|
|
1627
|
-
this.layout = new (0,
|
|
1695
|
+
this.layout = new (0, _chunkBWLNEJJWjs.LayoutEngine)(maxWidth, 1e4, defaultMeasurer());
|
|
1628
1696
|
this.prepared = this.layout.prepare(this.text, this.atlas, this.fontSize);
|
|
1629
1697
|
this.applyLayout();
|
|
1630
1698
|
this.interactive = true;
|
|
@@ -1705,17 +1773,17 @@ var TextEntity = (_class3 = class extends _chunkTQ4H357Qjs.Entity {
|
|
|
1705
1773
|
}, _class3);
|
|
1706
1774
|
|
|
1707
1775
|
// src/components/GridTextEntity.ts
|
|
1708
|
-
var GridTextEntity = (_class4 = class extends
|
|
1776
|
+
var GridTextEntity = (_class4 = class extends _chunk4BO5XBJLjs.Entity {
|
|
1709
1777
|
|
|
1710
|
-
|
|
1711
|
-
|
|
1778
|
+
__init55() {this.fillStyle = "#ffffff"}
|
|
1779
|
+
__init56() {this.grid = []}
|
|
1712
1780
|
// Array of rows
|
|
1713
|
-
|
|
1714
|
-
|
|
1781
|
+
__init57() {this.cols = 0}
|
|
1782
|
+
__init58() {this.rows = 0}
|
|
1715
1783
|
|
|
1716
1784
|
|
|
1717
1785
|
constructor(_atlas, fontSize = 10) {
|
|
1718
|
-
super();_class4.prototype.
|
|
1786
|
+
super();_class4.prototype.__init55.call(this);_class4.prototype.__init56.call(this);_class4.prototype.__init57.call(this);_class4.prototype.__init58.call(this);;
|
|
1719
1787
|
this.fontSize = fontSize;
|
|
1720
1788
|
this.charWidth = fontSize * 1;
|
|
1721
1789
|
this.charHeight = fontSize * 1.1;
|
|
@@ -1724,7 +1792,7 @@ var GridTextEntity = (_class4 = class extends _chunkTQ4H357Qjs.Entity {
|
|
|
1724
1792
|
updateGrid(ascii) {
|
|
1725
1793
|
this.grid = ascii;
|
|
1726
1794
|
this.rows = ascii.length;
|
|
1727
|
-
this.cols = _optionalChain([ascii, 'access',
|
|
1795
|
+
this.cols = _optionalChain([ascii, 'access', _68 => _68[0], 'optionalAccess', _69 => _69.length]) || 0;
|
|
1728
1796
|
}
|
|
1729
1797
|
isPointInside(_globalX, _globalY) {
|
|
1730
1798
|
return false;
|
|
@@ -1799,26 +1867,31 @@ function distSqToSegment(px, py, x1, y1, x2, y2) {
|
|
|
1799
1867
|
const ey = py - cy;
|
|
1800
1868
|
return ex * ex + ey * ey;
|
|
1801
1869
|
}
|
|
1802
|
-
var SplineEntity = (_class5 = class extends
|
|
1870
|
+
var SplineEntity = (_class5 = class extends _chunk4BO5XBJLjs.Entity {
|
|
1871
|
+
|
|
1803
1872
|
|
|
1804
1873
|
|
|
1805
1874
|
|
|
1806
1875
|
|
|
1807
1876
|
|
|
1808
1877
|
|
|
1878
|
+
__init59() {this.offscreen = null}
|
|
1879
|
+
__init60() {this.baked = false}
|
|
1880
|
+
/** Logical (CSS-pixel) size of the baked bitmap — the blit destination size. */
|
|
1881
|
+
__init61() {this.bakedWidth = 0}
|
|
1882
|
+
__init62() {this.bakedHeight = 0}
|
|
1883
|
+
/** Gradient strokes can't be baked to a solid-color bitmap; they render per-frame. */
|
|
1809
1884
|
|
|
1810
|
-
__init58() {this.offscreen = null}
|
|
1811
|
-
__init59() {this.baked = false}
|
|
1812
1885
|
/** Lazily-flattened polylines (one Float32Array of [x,y,...] per segment) for hit-testing. */
|
|
1813
|
-
|
|
1886
|
+
__init63() {this.polylines = null}
|
|
1814
1887
|
/**
|
|
1815
1888
|
* When `true`, the renderer draws a rounded-rect outline of the entity's
|
|
1816
1889
|
* local bounds after painting the curves. Useful for drag feedback and
|
|
1817
1890
|
* debugging hit areas. Defaults to `false`.
|
|
1818
1891
|
*/
|
|
1819
|
-
|
|
1892
|
+
__init64() {this.showBounds = false}
|
|
1820
1893
|
constructor(doc, opts = {}) {
|
|
1821
|
-
super();_class5.prototype.
|
|
1894
|
+
super();_class5.prototype.__init59.call(this);_class5.prototype.__init60.call(this);_class5.prototype.__init61.call(this);_class5.prototype.__init62.call(this);_class5.prototype.__init63.call(this);_class5.prototype.__init64.call(this);;
|
|
1822
1895
|
this.doc = doc;
|
|
1823
1896
|
this.lineWidth = _nullishCoalesce(opts.lineWidth, () => ( 2));
|
|
1824
1897
|
this.cache = _nullishCoalesce(opts.cache, () => ( true));
|
|
@@ -1828,6 +1901,8 @@ var SplineEntity = (_class5 = class extends _chunkTQ4H357Qjs.Entity {
|
|
|
1828
1901
|
this.bounds = this.computeBounds();
|
|
1829
1902
|
this.width = this.bounds.width;
|
|
1830
1903
|
this.height = this.bounds.height;
|
|
1904
|
+
const isGradient = (c) => c !== null && !Array.isArray(c);
|
|
1905
|
+
this.containsGradient = (_nullishCoalesce(_optionalChain([this, 'access', _70 => _70.doc, 'access', _71 => _71.equations, 'optionalAccess', _72 => _72.some, 'call', _73 => _73((eq) => isGradient(eq.color_rgb))]), () => ( false))) || (_nullishCoalesce(_optionalChain([this, 'access', _74 => _74.doc, 'access', _75 => _75.paths, 'optionalAccess', _76 => _76.some, 'call', _77 => _77((p) => isGradient(p.color_rgb))]), () => ( false)));
|
|
1831
1906
|
this.interactive = true;
|
|
1832
1907
|
}
|
|
1833
1908
|
computeBounds() {
|
|
@@ -1987,18 +2062,22 @@ var SplineEntity = (_class5 = class extends _chunkTQ4H357Qjs.Entity {
|
|
|
1987
2062
|
const pad = this.lineWidth + 2;
|
|
1988
2063
|
const w = Math.max(1, Math.ceil(this.bounds.width) + pad * 2);
|
|
1989
2064
|
const h = Math.max(1, Math.ceil(this.bounds.height) + pad * 2);
|
|
2065
|
+
this.bakedWidth = w;
|
|
2066
|
+
this.bakedHeight = h;
|
|
2067
|
+
const dpr = typeof window !== "undefined" && typeof window.devicePixelRatio === "number" ? window.devicePixelRatio || 1 : 1;
|
|
1990
2068
|
let canvas;
|
|
1991
2069
|
if (typeof OffscreenCanvas !== "undefined") {
|
|
1992
|
-
canvas = new OffscreenCanvas(w, h);
|
|
2070
|
+
canvas = new OffscreenCanvas(w * dpr, h * dpr);
|
|
1993
2071
|
} else if (typeof document !== "undefined") {
|
|
1994
2072
|
canvas = document.createElement("canvas");
|
|
1995
|
-
canvas.width = w;
|
|
1996
|
-
canvas.height = h;
|
|
2073
|
+
canvas.width = w * dpr;
|
|
2074
|
+
canvas.height = h * dpr;
|
|
1997
2075
|
} else {
|
|
1998
2076
|
return;
|
|
1999
2077
|
}
|
|
2000
2078
|
const ctx = canvas.getContext("2d");
|
|
2001
2079
|
if (!ctx) return;
|
|
2080
|
+
ctx.scale(dpr, dpr);
|
|
2002
2081
|
ctx.translate(pad - this.bounds.x, pad - this.bounds.y);
|
|
2003
2082
|
ctx.lineWidth = this.lineWidth;
|
|
2004
2083
|
ctx.lineCap = "round";
|
|
@@ -2032,7 +2111,7 @@ var SplineEntity = (_class5 = class extends _chunkTQ4H357Qjs.Entity {
|
|
|
2032
2111
|
}
|
|
2033
2112
|
render(r) {
|
|
2034
2113
|
let rendered = false;
|
|
2035
|
-
if (this.cache) {
|
|
2114
|
+
if (this.cache && !this.containsGradient) {
|
|
2036
2115
|
if (!this.baked) this.bake();
|
|
2037
2116
|
if (this.offscreen) {
|
|
2038
2117
|
const pad = this.lineWidth + 2;
|
|
@@ -2040,8 +2119,9 @@ var SplineEntity = (_class5 = class extends _chunkTQ4H357Qjs.Entity {
|
|
|
2040
2119
|
this.offscreen,
|
|
2041
2120
|
this.bounds.x - pad,
|
|
2042
2121
|
this.bounds.y - pad,
|
|
2043
|
-
|
|
2044
|
-
this.
|
|
2122
|
+
// Logical size, not the (DPR-scaled) bitmap size.
|
|
2123
|
+
this.bakedWidth,
|
|
2124
|
+
this.bakedHeight
|
|
2045
2125
|
);
|
|
2046
2126
|
rendered = true;
|
|
2047
2127
|
}
|
|
@@ -2064,9 +2144,9 @@ async function loadSpline(url) {
|
|
|
2064
2144
|
// src/math/SpatialHashGrid.ts
|
|
2065
2145
|
var SpatialHashGrid = (_class6 = class {
|
|
2066
2146
|
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
constructor(cellSize = 64) {;_class6.prototype.
|
|
2147
|
+
__init65() {this.grid = /* @__PURE__ */ new Map()}
|
|
2148
|
+
__init66() {this.entityCells = /* @__PURE__ */ new Map()}
|
|
2149
|
+
constructor(cellSize = 64) {;_class6.prototype.__init65.call(this);_class6.prototype.__init66.call(this);
|
|
2070
2150
|
this.cellSize = cellSize;
|
|
2071
2151
|
}
|
|
2072
2152
|
hash(cx, cy) {
|
|
@@ -2120,7 +2200,7 @@ var SpatialHashGrid = (_class6 = class {
|
|
|
2120
2200
|
const keys = this.entityCells.get(id);
|
|
2121
2201
|
if (!keys) return;
|
|
2122
2202
|
for (const key of keys) {
|
|
2123
|
-
_optionalChain([this, 'access',
|
|
2203
|
+
_optionalChain([this, 'access', _78 => _78.grid, 'access', _79 => _79.get, 'call', _80 => _80(key), 'optionalAccess', _81 => _81.delete, 'call', _82 => _82(id)]);
|
|
2124
2204
|
}
|
|
2125
2205
|
this.entityCells.delete(id);
|
|
2126
2206
|
}
|
|
@@ -2156,20 +2236,20 @@ var SpatialHashGrid = (_class6 = class {
|
|
|
2156
2236
|
}, _class6);
|
|
2157
2237
|
|
|
2158
2238
|
// src/tree/DOMPortalEntity.ts
|
|
2159
|
-
var DOMPortalEntity = (_class7 = class extends
|
|
2239
|
+
var DOMPortalEntity = (_class7 = class extends _chunk4BO5XBJLjs.Entity {
|
|
2160
2240
|
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2241
|
+
__init67() {this.isDOMPortal = true}
|
|
2242
|
+
__init68() {this.domListeners = []}
|
|
2243
|
+
__init69() {this.resizeObserver = null}
|
|
2244
|
+
__init70() {this.cachedWidth = 100}
|
|
2245
|
+
__init71() {this.cachedHeight = 100}
|
|
2246
|
+
__init72() {this.lastWidth = ""}
|
|
2247
|
+
__init73() {this.lastHeight = ""}
|
|
2248
|
+
__init74() {this.lastTransform = ""}
|
|
2249
|
+
__init75() {this.lastZIndex = ""}
|
|
2250
|
+
__init76() {this.lastOpacity = ""}
|
|
2171
2251
|
constructor(domElement, width, height, id) {
|
|
2172
|
-
super(id);_class7.prototype.
|
|
2252
|
+
super(id);_class7.prototype.__init67.call(this);_class7.prototype.__init68.call(this);_class7.prototype.__init69.call(this);_class7.prototype.__init70.call(this);_class7.prototype.__init71.call(this);_class7.prototype.__init72.call(this);_class7.prototype.__init73.call(this);_class7.prototype.__init74.call(this);_class7.prototype.__init75.call(this);_class7.prototype.__init76.call(this);;
|
|
2173
2253
|
this.domElement = domElement;
|
|
2174
2254
|
this.width = _nullishCoalesce(width, () => ( 0));
|
|
2175
2255
|
this.height = _nullishCoalesce(height, () => ( 0));
|
|
@@ -2191,7 +2271,7 @@ var DOMPortalEntity = (_class7 = class extends _chunkTQ4H357Qjs.Entity {
|
|
|
2191
2271
|
const events = ["click", "pointerdown", "pointerup", "pointermove", "wheel"];
|
|
2192
2272
|
for (const type of events) {
|
|
2193
2273
|
const handler = (e) => {
|
|
2194
|
-
this.dispatchEvent(new (0,
|
|
2274
|
+
this.dispatchEvent(new (0, _chunk4BO5XBJLjs.VectoJSEvent)(type, this, e));
|
|
2195
2275
|
};
|
|
2196
2276
|
this.domElement.addEventListener(type, handler);
|
|
2197
2277
|
this.domListeners.push({ type, handler, capture: false });
|
|
@@ -2202,7 +2282,7 @@ var DOMPortalEntity = (_class7 = class extends _chunkTQ4H357Qjs.Entity {
|
|
|
2202
2282
|
];
|
|
2203
2283
|
for (const { native, vecto } of hoverEvents) {
|
|
2204
2284
|
const handler = (e) => {
|
|
2205
|
-
this.dispatchEvent(new (0,
|
|
2285
|
+
this.dispatchEvent(new (0, _chunk4BO5XBJLjs.VectoJSEvent)(vecto, this, e, false));
|
|
2206
2286
|
};
|
|
2207
2287
|
this.domElement.addEventListener(native, handler);
|
|
2208
2288
|
this.domListeners.push({ type: native, handler, capture: false });
|
|
@@ -2210,7 +2290,7 @@ var DOMPortalEntity = (_class7 = class extends _chunkTQ4H357Qjs.Entity {
|
|
|
2210
2290
|
const focusEvents = ["focus", "blur"];
|
|
2211
2291
|
for (const type of focusEvents) {
|
|
2212
2292
|
const handler = (e) => {
|
|
2213
|
-
this.dispatchEvent(new (0,
|
|
2293
|
+
this.dispatchEvent(new (0, _chunk4BO5XBJLjs.VectoJSEvent)(type, this, e, true));
|
|
2214
2294
|
};
|
|
2215
2295
|
this.domElement.addEventListener(type, handler, true);
|
|
2216
2296
|
this.domListeners.push({ type, handler, capture: true });
|
|
@@ -2249,8 +2329,8 @@ var DOMPortalEntity = (_class7 = class extends _chunkTQ4H357Qjs.Entity {
|
|
|
2249
2329
|
}, _class7);
|
|
2250
2330
|
|
|
2251
2331
|
// src/index.ts
|
|
2252
|
-
Scene.registerWebGLPointRendererCreator(
|
|
2253
|
-
Scene.registerWebGPUParticleSystemManager(
|
|
2332
|
+
Scene.registerWebGLPointRendererCreator(_chunkGADBN53Zjs.createWebGLPointRenderer);
|
|
2333
|
+
Scene.registerWebGPUParticleSystemManager(_chunkGADBN53Zjs.WebGPUParticleSystemManager);
|
|
2254
2334
|
|
|
2255
2335
|
|
|
2256
2336
|
|
|
@@ -2295,4 +2375,4 @@ Scene.registerWebGPUParticleSystemManager(_chunkTPNADFNNjs.WebGPUParticleSystemM
|
|
|
2295
2375
|
|
|
2296
2376
|
|
|
2297
2377
|
|
|
2298
|
-
exports.ArabicShaper =
|
|
2378
|
+
exports.ArabicShaper = _chunkCTZQOM5Zjs.ArabicShaper; exports.BidiResolver = _chunkCTZQOM5Zjs.BidiResolver; exports.CanvasRenderer = _chunkGADBN53Zjs.CanvasRenderer; exports.ComputeParticleEntity = ComputeParticleEntity; exports.DOMPortalEntity = DOMPortalEntity; exports.Easing = _chunk4BO5XBJLjs.Easing; exports.Entity = _chunk4BO5XBJLjs.Entity; exports.GridTextEntity = GridTextEntity; exports.LayoutEngine = _chunkBWLNEJJWjs.LayoutEngine; exports.LayoutResultBuffer = _chunkBWLNEJJWjs.LayoutResultBuffer; exports.LayoutWorkerManager = _chunkCTZQOM5Zjs.LayoutWorkerManager; exports.MSDFFont = _chunk4BO5XBJLjs.MSDFFont; exports.MSDFTextEntity = _chunk4BO5XBJLjs.MSDFTextEntity; exports.PARTICLE_OFFSET_LIFE = PARTICLE_OFFSET_LIFE; exports.PARTICLE_OFFSET_ORIGIN_X = PARTICLE_OFFSET_ORIGIN_X; exports.PARTICLE_OFFSET_ORIGIN_Y = PARTICLE_OFFSET_ORIGIN_Y; exports.PARTICLE_OFFSET_POSITION_X = PARTICLE_OFFSET_POSITION_X; exports.PARTICLE_OFFSET_POSITION_Y = PARTICLE_OFFSET_POSITION_Y; exports.PARTICLE_OFFSET_SIZE = PARTICLE_OFFSET_SIZE; exports.PARTICLE_OFFSET_VELOCITY_X = PARTICLE_OFFSET_VELOCITY_X; exports.PARTICLE_OFFSET_VELOCITY_Y = PARTICLE_OFFSET_VELOCITY_Y; exports.PARTICLE_STRIDE_FLOATS = PARTICLE_STRIDE_FLOATS; exports.REDUCED_MOTION_FPS = REDUCED_MOTION_FPS; exports.SVGEntity = _chunk4BO5XBJLjs.SVGEntity; exports.SVGRenderer = _chunkGADBN53Zjs.SVGRenderer; exports.Scene = Scene; exports.SpatialHashGrid = SpatialHashGrid; exports.SplineEntity = SplineEntity; exports.SpringDriver = _chunk4BO5XBJLjs.SpringDriver; exports.SpringPhysics = _chunk4BO5XBJLjs.SpringPhysics; exports.TextEntity = TextEntity; exports.TweenDriver = _chunk4BO5XBJLjs.TweenDriver; exports.VectoJSEvent = _chunk4BO5XBJLjs.VectoJSEvent; exports.WebGPUParticleSystemManager = _chunkGADBN53Zjs.WebGPUParticleSystemManager; exports.computeLineSegments = _chunkBWLNEJJWjs.computeLineSegments; exports.createCanvasMeasurer = _chunkBWLNEJJWjs.createCanvasMeasurer; exports.createWebGLPointRenderer = _chunkGADBN53Zjs.createWebGLPointRenderer; exports.isSafeUrl = _chunkGADBN53Zjs.isSafeUrl; exports.isTweenConfig = _chunk4BO5XBJLjs.isTweenConfig; exports.loadSpline = loadSpline; exports.parseColorToRGBA = _chunkGADBN53Zjs.parseColorToRGBA; exports.polySegmentToBezier = polySegmentToBezier; exports.sanitizeUrl = _chunkGADBN53Zjs.sanitizeUrl;
|