@vectojs/core 1.32.5 → 1.32.7
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-TRT2TRCW.js → chunk-FQ2565IT.js} +45 -41
- package/dist/{chunk-RWN3ITBD.mjs → chunk-YTGGL4I4.mjs} +4 -0
- package/dist/components/SplineEntity.d.ts +28 -4
- package/dist/index.js +313 -163
- package/dist/index.mjs +185 -35
- package/dist/text.js +2 -2
- package/dist/text.mjs +1 -1
- package/dist/tree/Entity.d.ts +2 -0
- package/dist/tree/Scene.d.ts +24 -1
- package/package.json +1 -1
|
@@ -73,62 +73,66 @@ var VectoJSEvent = (_class = class {
|
|
|
73
73
|
get deltaY() {
|
|
74
74
|
return _optionalChain([this, 'access', _9 => _9.nativeEvent, 'optionalAccess', _10 => _10.deltaY]);
|
|
75
75
|
}
|
|
76
|
+
/** Native wheel delta mode (0=pixels, 1=lines, 2=pages), if this wraps a `WheelEvent`. */
|
|
77
|
+
get deltaMode() {
|
|
78
|
+
return _optionalChain([this, 'access', _11 => _11.nativeEvent, 'optionalAccess', _12 => _12.deltaMode]);
|
|
79
|
+
}
|
|
76
80
|
/** Native pointer X, if this wraps a pointer/mouse event. */
|
|
77
81
|
get clientX() {
|
|
78
|
-
return _optionalChain([this, 'access',
|
|
82
|
+
return _optionalChain([this, 'access', _13 => _13.nativeEvent, 'optionalAccess', _14 => _14.clientX]);
|
|
79
83
|
}
|
|
80
84
|
/** Native pointer Y, if this wraps a pointer/mouse event. */
|
|
81
85
|
get clientY() {
|
|
82
|
-
return _optionalChain([this, 'access',
|
|
86
|
+
return _optionalChain([this, 'access', _15 => _15.nativeEvent, 'optionalAccess', _16 => _16.clientY]);
|
|
83
87
|
}
|
|
84
88
|
get resolvedScenePoint() {
|
|
85
89
|
if (this.explicitScenePoint) return this.explicitScenePoint;
|
|
86
90
|
const native = this.nativeEvent;
|
|
87
|
-
if (_optionalChain([native, 'optionalAccess',
|
|
91
|
+
if (_optionalChain([native, 'optionalAccess', _17 => _17.vectoSceneX]) !== void 0 && native.vectoSceneY !== void 0) {
|
|
88
92
|
return { x: native.vectoSceneX, y: native.vectoSceneY };
|
|
89
93
|
}
|
|
90
|
-
if (_optionalChain([native, 'optionalAccess',
|
|
94
|
+
if (_optionalChain([native, 'optionalAccess', _18 => _18.clientX]) === void 0 || native.clientY === void 0) return void 0;
|
|
91
95
|
const scene = this.target.scene;
|
|
92
|
-
return _nullishCoalesce(_optionalChain([scene, 'optionalAccess',
|
|
96
|
+
return _nullishCoalesce(_optionalChain([scene, 'optionalAccess', _19 => _19.clientToScene, 'optionalCall', _20 => _20(native.clientX, native.clientY)]), () => ( {
|
|
93
97
|
x: native.clientX,
|
|
94
98
|
y: native.clientY
|
|
95
99
|
}));
|
|
96
100
|
}
|
|
97
101
|
/** Pointer X in the Scene's logical coordinate space. */
|
|
98
102
|
get sceneX() {
|
|
99
|
-
return _optionalChain([this, 'access',
|
|
103
|
+
return _optionalChain([this, 'access', _21 => _21.resolvedScenePoint, 'optionalAccess', _22 => _22.x]);
|
|
100
104
|
}
|
|
101
105
|
/** Pointer Y in the Scene's logical coordinate space. */
|
|
102
106
|
get sceneY() {
|
|
103
|
-
return _optionalChain([this, 'access',
|
|
107
|
+
return _optionalChain([this, 'access', _23 => _23.resolvedScenePoint, 'optionalAccess', _24 => _24.y]);
|
|
104
108
|
}
|
|
105
109
|
/** Pointer X local to the entity whose listener is currently running. */
|
|
106
110
|
get localX() {
|
|
107
111
|
const point = this.resolvedScenePoint;
|
|
108
112
|
if (!point) return void 0;
|
|
109
|
-
return _optionalChain([this, 'access',
|
|
113
|
+
return _optionalChain([this, 'access', _25 => _25.currentTarget, 'access', _26 => _26.worldToLocal, 'call', _27 => _27(point.x, point.y), 'optionalAccess', _28 => _28.x]);
|
|
110
114
|
}
|
|
111
115
|
/** Pointer Y local to the entity whose listener is currently running. */
|
|
112
116
|
get localY() {
|
|
113
117
|
const point = this.resolvedScenePoint;
|
|
114
118
|
if (!point) return void 0;
|
|
115
|
-
return _optionalChain([this, 'access',
|
|
119
|
+
return _optionalChain([this, 'access', _29 => _29.currentTarget, 'access', _30 => _30.worldToLocal, 'call', _31 => _31(point.x, point.y), 'optionalAccess', _32 => _32.y]);
|
|
116
120
|
}
|
|
117
121
|
get shiftKey() {
|
|
118
|
-
return !!_optionalChain([this, 'access',
|
|
122
|
+
return !!_optionalChain([this, 'access', _33 => _33.nativeEvent, 'optionalAccess', _34 => _34.shiftKey]);
|
|
119
123
|
}
|
|
120
124
|
get ctrlKey() {
|
|
121
|
-
return !!_optionalChain([this, 'access',
|
|
125
|
+
return !!_optionalChain([this, 'access', _35 => _35.nativeEvent, 'optionalAccess', _36 => _36.ctrlKey]);
|
|
122
126
|
}
|
|
123
127
|
get altKey() {
|
|
124
|
-
return !!_optionalChain([this, 'access',
|
|
128
|
+
return !!_optionalChain([this, 'access', _37 => _37.nativeEvent, 'optionalAccess', _38 => _38.altKey]);
|
|
125
129
|
}
|
|
126
130
|
get metaKey() {
|
|
127
|
-
return !!_optionalChain([this, 'access',
|
|
131
|
+
return !!_optionalChain([this, 'access', _39 => _39.nativeEvent, 'optionalAccess', _40 => _40.metaKey]);
|
|
128
132
|
}
|
|
129
133
|
/** Native key, if this wraps a keyboard event. */
|
|
130
134
|
get key() {
|
|
131
|
-
return _optionalChain([this, 'access',
|
|
135
|
+
return _optionalChain([this, 'access', _41 => _41.nativeEvent, 'optionalAccess', _42 => _42.key]);
|
|
132
136
|
}
|
|
133
137
|
}, _class);
|
|
134
138
|
var Entity = (_class2 = class {
|
|
@@ -358,7 +362,7 @@ var Entity = (_class2 = class {
|
|
|
358
362
|
const s = this.scene;
|
|
359
363
|
if (s) {
|
|
360
364
|
s.a11yNeedsReorder = true;
|
|
361
|
-
_optionalChain([s, 'access',
|
|
365
|
+
_optionalChain([s, 'access', _43 => _43.markStructureChanged, 'optionalCall', _44 => _44()]);
|
|
362
366
|
s.markDirty({ entity: this.id, reason: "child-added" });
|
|
363
367
|
child._notifyMounted();
|
|
364
368
|
}
|
|
@@ -388,7 +392,7 @@ var Entity = (_class2 = class {
|
|
|
388
392
|
if (s) {
|
|
389
393
|
s.detachA11y(child);
|
|
390
394
|
s.a11yNeedsReorder = true;
|
|
391
|
-
_optionalChain([s, 'access',
|
|
395
|
+
_optionalChain([s, 'access', _45 => _45.markStructureChanged, 'optionalCall', _46 => _46()]);
|
|
392
396
|
s.markDirty({ entity: this.id, reason: "child-removed" });
|
|
393
397
|
}
|
|
394
398
|
}
|
|
@@ -443,7 +447,7 @@ var Entity = (_class2 = class {
|
|
|
443
447
|
startTime: -1,
|
|
444
448
|
startProps: {}
|
|
445
449
|
});
|
|
446
|
-
_optionalChain([this, 'access',
|
|
450
|
+
_optionalChain([this, 'access', _47 => _47.scene, 'optionalAccess', _48 => _48.markDirty, 'call', _49 => _49({ entity: this.id, reason: "animation-start" })]);
|
|
447
451
|
return this;
|
|
448
452
|
}
|
|
449
453
|
/** Write a driver-computed value to a backing field without re-triggering the setter. */
|
|
@@ -490,26 +494,26 @@ var Entity = (_class2 = class {
|
|
|
490
494
|
* that need to seed a starting state (e.g. the presence helper's enter `from`).
|
|
491
495
|
*/
|
|
492
496
|
setImmediate(prop, v) {
|
|
493
|
-
const existing = _optionalChain([this, 'access',
|
|
497
|
+
const existing = _optionalChain([this, 'access', _50 => _50._drivers, 'optionalAccess', _51 => _51.get, 'call', _52 => _52(prop)]);
|
|
494
498
|
if (existing) this._settleDriver(existing);
|
|
495
|
-
_optionalChain([this, 'access',
|
|
499
|
+
_optionalChain([this, 'access', _53 => _53._drivers, 'optionalAccess', _54 => _54.delete, 'call', _55 => _55(prop)]);
|
|
496
500
|
this._applyAnimated(prop, v);
|
|
497
501
|
}
|
|
498
502
|
_settleDriver(driver) {
|
|
499
503
|
const active = driver;
|
|
500
504
|
const onDone = active.onDone;
|
|
501
505
|
active.onDone = void 0;
|
|
502
|
-
_optionalChain([onDone, 'optionalCall',
|
|
506
|
+
_optionalChain([onDone, 'optionalCall', _56 => _56()]);
|
|
503
507
|
}
|
|
504
508
|
_spawnDriver(prop, to, cfg) {
|
|
505
|
-
if (prop !== "opacity" && _optionalChain([this, 'access',
|
|
506
|
-
const existing2 = _optionalChain([this, 'access',
|
|
509
|
+
if (prop !== "opacity" && _optionalChain([this, 'access', _57 => _57.scene, 'optionalAccess', _58 => _58.prefersReducedMotion])) {
|
|
510
|
+
const existing2 = _optionalChain([this, 'access', _59 => _59._drivers, 'optionalAccess', _60 => _60.get, 'call', _61 => _61(prop)]);
|
|
507
511
|
if (existing2) this._settleDriver(existing2);
|
|
508
|
-
_optionalChain([this, 'access',
|
|
512
|
+
_optionalChain([this, 'access', _62 => _62._drivers, 'optionalAccess', _63 => _63.delete, 'call', _64 => _64(prop)]);
|
|
509
513
|
this._applyAnimated(prop, to);
|
|
510
514
|
return;
|
|
511
515
|
}
|
|
512
|
-
const existing = _optionalChain([this, 'access',
|
|
516
|
+
const existing = _optionalChain([this, 'access', _65 => _65._drivers, 'optionalAccess', _66 => _66.get, 'call', _67 => _67(prop)]);
|
|
513
517
|
if (existing) {
|
|
514
518
|
this._settleDriver(existing);
|
|
515
519
|
existing.retarget(to);
|
|
@@ -518,12 +522,12 @@ var Entity = (_class2 = class {
|
|
|
518
522
|
const from = this._currentOf(prop);
|
|
519
523
|
const driver = _animation.isTweenConfig.call(void 0, cfg) ? new (0, _animation.TweenDriver)(from, to, cfg) : new (0, _animation.SpringDriver)(from, to, cfg === "spring" ? {} : cfg);
|
|
520
524
|
(this._drivers ??= /* @__PURE__ */ new Map()).set(prop, driver);
|
|
521
|
-
_optionalChain([this, 'access',
|
|
522
|
-
_optionalChain([this, 'access',
|
|
525
|
+
_optionalChain([this, 'access', _68 => _68.scene, 'optionalAccess', _69 => _69.markDirty, 'call', _70 => _70({ entity: this.id, reason: "driver-added" })]);
|
|
526
|
+
_optionalChain([this, 'access', _71 => _71.scene, 'optionalAccess', _72 => _72._registerActiveDriverEntity, 'call', _73 => _73(this)]);
|
|
523
527
|
}
|
|
524
528
|
/** Assignment path when a declarative transition is configured for `prop`. */
|
|
525
529
|
_animateProp(prop, to) {
|
|
526
|
-
const cfg = _optionalChain([this, 'access',
|
|
530
|
+
const cfg = _optionalChain([this, 'access', _74 => _74._transitions, 'optionalAccess', _75 => _75.get, 'call', _76 => _76(prop)]);
|
|
527
531
|
if (!cfg) {
|
|
528
532
|
this._applyAnimated(prop, to);
|
|
529
533
|
return;
|
|
@@ -552,7 +556,7 @@ var Entity = (_class2 = class {
|
|
|
552
556
|
entries.map(
|
|
553
557
|
(e) => new Promise((resolve) => {
|
|
554
558
|
this._spawnDriver(e[0], e[1], cfg);
|
|
555
|
-
const d = _optionalChain([this, 'access',
|
|
559
|
+
const d = _optionalChain([this, 'access', _77 => _77._drivers, 'optionalAccess', _78 => _78.get, 'call', _79 => _79(e[0])]);
|
|
556
560
|
if (!d)
|
|
557
561
|
resolve();
|
|
558
562
|
else d.onDone = resolve;
|
|
@@ -574,7 +578,7 @@ var Entity = (_class2 = class {
|
|
|
574
578
|
this._applyAnimated(prop, driver.value);
|
|
575
579
|
}
|
|
576
580
|
}
|
|
577
|
-
_optionalChain([this, 'access',
|
|
581
|
+
_optionalChain([this, 'access', _80 => _80.scene, 'optionalAccess', _81 => _81.markDirty, 'call', _82 => _82({ entity: this.id, reason: "driver-tick" })]);
|
|
578
582
|
}
|
|
579
583
|
/**
|
|
580
584
|
* Internal: this entity's active-driver map (read-only view), or `null` if
|
|
@@ -599,7 +603,7 @@ var Entity = (_class2 = class {
|
|
|
599
603
|
if (driver.isDone()) {
|
|
600
604
|
this._applyAnimated(prop, driver.target);
|
|
601
605
|
this._settleDriver(driver);
|
|
602
|
-
_optionalChain([this, 'access',
|
|
606
|
+
_optionalChain([this, 'access', _83 => _83._drivers, 'optionalAccess', _84 => _84.delete, 'call', _85 => _85(prop)]);
|
|
603
607
|
} else {
|
|
604
608
|
this._applyAnimated(prop, driver.value);
|
|
605
609
|
}
|
|
@@ -660,7 +664,7 @@ var Entity = (_class2 = class {
|
|
|
660
664
|
* @example entity.on('click', (e) => console.log('clicked', e));
|
|
661
665
|
*/
|
|
662
666
|
on(event, callback, options) {
|
|
663
|
-
const map = _optionalChain([options, 'optionalAccess',
|
|
667
|
+
const map = _optionalChain([options, 'optionalAccess', _86 => _86.capture]) ? this.captureListeners ??= /* @__PURE__ */ new Map() : this.listeners ??= /* @__PURE__ */ new Map();
|
|
664
668
|
if (!map.has(event)) {
|
|
665
669
|
map.set(event, []);
|
|
666
670
|
}
|
|
@@ -676,7 +680,7 @@ var Entity = (_class2 = class {
|
|
|
676
680
|
* @returns `this` for method chaining.
|
|
677
681
|
*/
|
|
678
682
|
off(event, callback, options) {
|
|
679
|
-
const handlers = _optionalChain([(_optionalChain([options, 'optionalAccess',
|
|
683
|
+
const handlers = _optionalChain([(_optionalChain([options, 'optionalAccess', _87 => _87.capture]) ? this.captureListeners : this.listeners), 'optionalAccess', _88 => _88.get, 'call', _89 => _89(event)]);
|
|
680
684
|
if (handlers) {
|
|
681
685
|
const idx = handlers.indexOf(callback);
|
|
682
686
|
if (idx !== -1) handlers.splice(idx, 1);
|
|
@@ -713,8 +717,8 @@ var Entity = (_class2 = class {
|
|
|
713
717
|
}
|
|
714
718
|
this._drivers.clear();
|
|
715
719
|
}
|
|
716
|
-
_optionalChain([this, 'access',
|
|
717
|
-
_optionalChain([this, 'access',
|
|
720
|
+
_optionalChain([this, 'access', _90 => _90.listeners, 'optionalAccess', _91 => _91.clear, 'call', _92 => _92()]);
|
|
721
|
+
_optionalChain([this, 'access', _93 => _93.captureListeners, 'optionalAccess', _94 => _94.clear, 'call', _95 => _95()]);
|
|
718
722
|
if (this.parent) {
|
|
719
723
|
this.parent.remove(this);
|
|
720
724
|
}
|
|
@@ -729,7 +733,7 @@ var Entity = (_class2 = class {
|
|
|
729
733
|
* @param payload - Arbitrary data forwarded to each listener.
|
|
730
734
|
*/
|
|
731
735
|
emit(event, payload) {
|
|
732
|
-
const handlers = _optionalChain([this, 'access',
|
|
736
|
+
const handlers = _optionalChain([this, 'access', _96 => _96.listeners, 'optionalAccess', _97 => _97.get, 'call', _98 => _98(event)]);
|
|
733
737
|
if (handlers) {
|
|
734
738
|
handlers.forEach((h) => h(payload));
|
|
735
739
|
}
|
|
@@ -743,19 +747,19 @@ var Entity = (_class2 = class {
|
|
|
743
747
|
* with `requestAnimationFrame(() => document.getElementById(id)?.focus())`.
|
|
744
748
|
*/
|
|
745
749
|
focus() {
|
|
746
|
-
const el = _optionalChain([this, 'access',
|
|
750
|
+
const el = _optionalChain([this, 'access', _99 => _99.scene, 'optionalAccess', _100 => _100.getA11yElement, 'call', _101 => _101(this.id)]);
|
|
747
751
|
if (el) {
|
|
748
752
|
el.focus();
|
|
749
753
|
return;
|
|
750
754
|
}
|
|
751
755
|
requestAnimationFrame(() => {
|
|
752
|
-
const retry = _optionalChain([this, 'access',
|
|
756
|
+
const retry = _optionalChain([this, 'access', _102 => _102.scene, 'optionalAccess', _103 => _103.getA11yElement, 'call', _104 => _104(this.id)]);
|
|
753
757
|
if (retry) retry.focus();
|
|
754
758
|
});
|
|
755
759
|
}
|
|
756
760
|
/** Run one node's listeners for the event, honoring stopImmediatePropagation. */
|
|
757
761
|
fireListeners(node, map, event) {
|
|
758
|
-
const handlers = _optionalChain([map, 'optionalAccess',
|
|
762
|
+
const handlers = _optionalChain([map, 'optionalAccess', _105 => _105.get, 'call', _106 => _106(event.type)]);
|
|
759
763
|
if (!handlers) return;
|
|
760
764
|
event.currentTarget = node;
|
|
761
765
|
for (const h of handlers.slice()) {
|
|
@@ -1142,7 +1146,7 @@ var Entity = (_class2 = class {
|
|
|
1142
1146
|
* @returns `true` if at least one animation or property driver remains.
|
|
1143
1147
|
*/
|
|
1144
1148
|
hasPendingAnimations() {
|
|
1145
|
-
return (_nullishCoalesce(_optionalChain([this, 'access',
|
|
1149
|
+
return (_nullishCoalesce(_optionalChain([this, 'access', _107 => _107.animations, 'optionalAccess', _108 => _108.length]), () => ( 0))) > 0 || (_nullishCoalesce(_optionalChain([this, 'access', _109 => _109._drivers, 'optionalAccess', _110 => _110.size]), () => ( 0))) > 0;
|
|
1146
1150
|
}
|
|
1147
1151
|
}, _class2);
|
|
1148
1152
|
|
|
@@ -1224,7 +1228,7 @@ var MSDFTextEntity = (_class3 = class extends Entity {
|
|
|
1224
1228
|
const target = this.texture;
|
|
1225
1229
|
this.atlasDecodeHandler = () => {
|
|
1226
1230
|
this.detachAtlasDecodeListener();
|
|
1227
|
-
_optionalChain([this, 'access',
|
|
1231
|
+
_optionalChain([this, 'access', _111 => _111.scene, 'optionalAccess', _112 => _112.markDirty, 'call', _113 => _113()]);
|
|
1228
1232
|
};
|
|
1229
1233
|
target.addEventListener("load", this.atlasDecodeHandler);
|
|
1230
1234
|
target.addEventListener("error", this.atlasDecodeHandler);
|
|
@@ -1303,7 +1307,7 @@ var MSDFTextEntity = (_class3 = class extends Entity {
|
|
|
1303
1307
|
if (res.seqId < this.lastRenderedSeqId) return;
|
|
1304
1308
|
this.lastRenderedSeqId = res.seqId;
|
|
1305
1309
|
this.layoutResult = res;
|
|
1306
|
-
_optionalChain([this, 'access',
|
|
1310
|
+
_optionalChain([this, 'access', _114 => _114.scene, 'optionalAccess', _115 => _115.markDirty, 'call', _116 => _116()]);
|
|
1307
1311
|
}
|
|
1308
1312
|
});
|
|
1309
1313
|
}
|
|
@@ -71,6 +71,10 @@ var VectoJSEvent = class {
|
|
|
71
71
|
get deltaY() {
|
|
72
72
|
return this.nativeEvent?.deltaY;
|
|
73
73
|
}
|
|
74
|
+
/** Native wheel delta mode (0=pixels, 1=lines, 2=pages), if this wraps a `WheelEvent`. */
|
|
75
|
+
get deltaMode() {
|
|
76
|
+
return this.nativeEvent?.deltaMode;
|
|
77
|
+
}
|
|
74
78
|
/** Native pointer X, if this wraps a pointer/mouse event. */
|
|
75
79
|
get clientX() {
|
|
76
80
|
return this.nativeEvent?.clientX;
|
|
@@ -87,8 +87,8 @@ export declare function polySegmentToBezier(seg: SplineSegment): BezierControlPo
|
|
|
87
87
|
* scene.add(new SplineEntity(doc).setPosition(100, 100));
|
|
88
88
|
*/
|
|
89
89
|
export declare class SplineEntity extends Entity {
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
private _doc;
|
|
91
|
+
private _lineWidth;
|
|
92
92
|
defaultColor: string;
|
|
93
93
|
hitTolerance: number;
|
|
94
94
|
private cache;
|
|
@@ -99,10 +99,26 @@ export declare class SplineEntity extends Entity {
|
|
|
99
99
|
/** Logical (CSS-pixel) size of the baked bitmap — the blit destination size. */
|
|
100
100
|
private bakedWidth;
|
|
101
101
|
private bakedHeight;
|
|
102
|
-
/**
|
|
103
|
-
|
|
102
|
+
/**
|
|
103
|
+
* Gradient strokes can't be baked to a solid-color bitmap; they render
|
|
104
|
+
* per-frame. Derived from `_doc`, so it is NOT readonly — assigning a new
|
|
105
|
+
* document has to recompute it (see the `doc` setter).
|
|
106
|
+
*/
|
|
107
|
+
private containsGradient;
|
|
104
108
|
/** Lazily-flattened polylines (one Float32Array of [x,y,...] per segment) for hit-testing. */
|
|
105
109
|
private polylines;
|
|
110
|
+
/**
|
|
111
|
+
* The spline document to render. Assigning a new document invalidates all
|
|
112
|
+
* caches (baked canvas, flattened polylines, bounds).
|
|
113
|
+
*/
|
|
114
|
+
get doc(): SplineDocument;
|
|
115
|
+
set doc(value: SplineDocument);
|
|
116
|
+
/**
|
|
117
|
+
* Stroke width in local units. Assigning a new value invalidates the baked
|
|
118
|
+
* canvas and hit-test polylines so visual and hit geometry stay consistent.
|
|
119
|
+
*/
|
|
120
|
+
get lineWidth(): number;
|
|
121
|
+
set lineWidth(value: number);
|
|
106
122
|
/**
|
|
107
123
|
* When `true`, the renderer draws a rounded-rect outline of the entity's
|
|
108
124
|
* local bounds after painting the curves. Useful for drag feedback and
|
|
@@ -110,6 +126,14 @@ export declare class SplineEntity extends Entity {
|
|
|
110
126
|
*/
|
|
111
127
|
showBounds: boolean;
|
|
112
128
|
constructor(doc: SplineDocument, opts?: SplineOptions);
|
|
129
|
+
/**
|
|
130
|
+
* Whether any stroke in the current document is a gradient. Shared by the
|
|
131
|
+
* constructor and the `doc` setter so both stay in agreement — the flag picks
|
|
132
|
+
* the render path, so a stale value renders a gradient as a flat color.
|
|
133
|
+
*/
|
|
134
|
+
private computeContainsGradient;
|
|
135
|
+
/** Clear cached baked canvas and hit-test polylines. */
|
|
136
|
+
private invalidateCache;
|
|
113
137
|
private computeBounds;
|
|
114
138
|
/** @inheritdoc */
|
|
115
139
|
getBounds(): Bounds;
|