@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.
@@ -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', _11 => _11.nativeEvent, 'optionalAccess', _12 => _12.clientX]);
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', _13 => _13.nativeEvent, 'optionalAccess', _14 => _14.clientY]);
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', _15 => _15.vectoSceneX]) !== void 0 && native.vectoSceneY !== void 0) {
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', _16 => _16.clientX]) === void 0 || native.clientY === void 0) return void 0;
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', _17 => _17.clientToScene, 'optionalCall', _18 => _18(native.clientX, native.clientY)]), () => ( {
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', _19 => _19.resolvedScenePoint, 'optionalAccess', _20 => _20.x]);
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', _21 => _21.resolvedScenePoint, 'optionalAccess', _22 => _22.y]);
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', _23 => _23.currentTarget, 'access', _24 => _24.worldToLocal, 'call', _25 => _25(point.x, point.y), 'optionalAccess', _26 => _26.x]);
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', _27 => _27.currentTarget, 'access', _28 => _28.worldToLocal, 'call', _29 => _29(point.x, point.y), 'optionalAccess', _30 => _30.y]);
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', _31 => _31.nativeEvent, 'optionalAccess', _32 => _32.shiftKey]);
122
+ return !!_optionalChain([this, 'access', _33 => _33.nativeEvent, 'optionalAccess', _34 => _34.shiftKey]);
119
123
  }
120
124
  get ctrlKey() {
121
- return !!_optionalChain([this, 'access', _33 => _33.nativeEvent, 'optionalAccess', _34 => _34.ctrlKey]);
125
+ return !!_optionalChain([this, 'access', _35 => _35.nativeEvent, 'optionalAccess', _36 => _36.ctrlKey]);
122
126
  }
123
127
  get altKey() {
124
- return !!_optionalChain([this, 'access', _35 => _35.nativeEvent, 'optionalAccess', _36 => _36.altKey]);
128
+ return !!_optionalChain([this, 'access', _37 => _37.nativeEvent, 'optionalAccess', _38 => _38.altKey]);
125
129
  }
126
130
  get metaKey() {
127
- return !!_optionalChain([this, 'access', _37 => _37.nativeEvent, 'optionalAccess', _38 => _38.metaKey]);
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', _39 => _39.nativeEvent, 'optionalAccess', _40 => _40.key]);
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', _41 => _41.markStructureChanged, 'optionalCall', _42 => _42()]);
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', _43 => _43.markStructureChanged, 'optionalCall', _44 => _44()]);
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', _45 => _45.scene, 'optionalAccess', _46 => _46.markDirty, 'call', _47 => _47({ entity: this.id, reason: "animation-start" })]);
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', _48 => _48._drivers, 'optionalAccess', _49 => _49.get, 'call', _50 => _50(prop)]);
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', _51 => _51._drivers, 'optionalAccess', _52 => _52.delete, 'call', _53 => _53(prop)]);
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', _54 => _54()]);
506
+ _optionalChain([onDone, 'optionalCall', _56 => _56()]);
503
507
  }
504
508
  _spawnDriver(prop, to, cfg) {
505
- if (prop !== "opacity" && _optionalChain([this, 'access', _55 => _55.scene, 'optionalAccess', _56 => _56.prefersReducedMotion])) {
506
- const existing2 = _optionalChain([this, 'access', _57 => _57._drivers, 'optionalAccess', _58 => _58.get, 'call', _59 => _59(prop)]);
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', _60 => _60._drivers, 'optionalAccess', _61 => _61.delete, 'call', _62 => _62(prop)]);
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', _63 => _63._drivers, 'optionalAccess', _64 => _64.get, 'call', _65 => _65(prop)]);
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', _66 => _66.scene, 'optionalAccess', _67 => _67.markDirty, 'call', _68 => _68({ entity: this.id, reason: "driver-added" })]);
522
- _optionalChain([this, 'access', _69 => _69.scene, 'optionalAccess', _70 => _70._registerActiveDriverEntity, 'call', _71 => _71(this)]);
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', _72 => _72._transitions, 'optionalAccess', _73 => _73.get, 'call', _74 => _74(prop)]);
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', _75 => _75._drivers, 'optionalAccess', _76 => _76.get, 'call', _77 => _77(e[0])]);
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', _78 => _78.scene, 'optionalAccess', _79 => _79.markDirty, 'call', _80 => _80({ entity: this.id, reason: "driver-tick" })]);
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', _81 => _81._drivers, 'optionalAccess', _82 => _82.delete, 'call', _83 => _83(prop)]);
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', _84 => _84.capture]) ? this.captureListeners ??= /* @__PURE__ */ new Map() : this.listeners ??= /* @__PURE__ */ new Map();
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', _85 => _85.capture]) ? this.captureListeners : this.listeners), 'optionalAccess', _86 => _86.get, 'call', _87 => _87(event)]);
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', _88 => _88.listeners, 'optionalAccess', _89 => _89.clear, 'call', _90 => _90()]);
717
- _optionalChain([this, 'access', _91 => _91.captureListeners, 'optionalAccess', _92 => _92.clear, 'call', _93 => _93()]);
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', _94 => _94.listeners, 'optionalAccess', _95 => _95.get, 'call', _96 => _96(event)]);
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', _97 => _97.scene, 'optionalAccess', _98 => _98.getA11yElement, 'call', _99 => _99(this.id)]);
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', _100 => _100.scene, 'optionalAccess', _101 => _101.getA11yElement, 'call', _102 => _102(this.id)]);
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', _103 => _103.get, 'call', _104 => _104(event.type)]);
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', _105 => _105.animations, 'optionalAccess', _106 => _106.length]), () => ( 0))) > 0 || (_nullishCoalesce(_optionalChain([this, 'access', _107 => _107._drivers, 'optionalAccess', _108 => _108.size]), () => ( 0))) > 0;
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', _109 => _109.scene, 'optionalAccess', _110 => _110.markDirty, 'call', _111 => _111()]);
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', _112 => _112.scene, 'optionalAccess', _113 => _113.markDirty, 'call', _114 => _114()]);
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
- doc: SplineDocument;
91
- lineWidth: number;
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
- /** Gradient strokes can't be baked to a solid-color bitmap; they render per-frame. */
103
- private readonly containsGradient;
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;