@visactor/vrender-core 1.0.41-alpha.2 → 1.0.41

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.
Files changed (66) hide show
  1. package/cjs/common/diff.js +2 -1
  2. package/cjs/common/event-listener-manager.d.ts +18 -1
  3. package/cjs/common/event-listener-manager.js +40 -10
  4. package/cjs/common/event-listener-manager.js.map +1 -1
  5. package/cjs/common/event-transformer.js +1 -2
  6. package/cjs/common/render-area.js +1 -1
  7. package/cjs/common/render-command-list.js +1 -1
  8. package/cjs/common/render-curve.js +1 -1
  9. package/cjs/common/render-utils.js +1 -1
  10. package/cjs/common/seg-context.js +1 -1
  11. package/cjs/common/simplify.js +2 -1
  12. package/cjs/common/sort.js +1 -1
  13. package/cjs/common/split-path.js +1 -1
  14. package/cjs/common/store.js +1 -1
  15. package/cjs/common/text.js +1 -1
  16. package/cjs/common/utils.js +1 -1
  17. package/cjs/core/constants.js +1 -1
  18. package/cjs/core/core-modules.js +1 -1
  19. package/cjs/core/global-module.js +0 -2
  20. package/cjs/core/global.js +1 -1
  21. package/cjs/core/graphic-utils.js +1 -1
  22. package/cjs/core/index.js +1 -1
  23. package/cjs/core/layer-service.js +1 -2
  24. package/cjs/core/layer.js +1 -1
  25. package/cjs/core/light.js +1 -1
  26. package/cjs/core/stage.js +3 -2
  27. package/cjs/core/stage.js.map +1 -1
  28. package/cjs/core/window.js +1 -1
  29. package/cjs/event/event-manager.js +4 -1
  30. package/cjs/event/event-manager.js.map +1 -1
  31. package/cjs/graphic/graphic.js +2 -1
  32. package/cjs/graphic/graphic.js.map +1 -1
  33. package/dist/index.es.js +76 -16
  34. package/es/common/diff.js +2 -1
  35. package/es/common/event-listener-manager.d.ts +18 -1
  36. package/es/common/event-listener-manager.js +40 -10
  37. package/es/common/event-listener-manager.js.map +1 -1
  38. package/es/common/event-transformer.js +1 -2
  39. package/es/common/render-area.js +1 -1
  40. package/es/common/render-command-list.js +1 -1
  41. package/es/common/render-curve.js +1 -1
  42. package/es/common/render-utils.js +1 -1
  43. package/es/common/seg-context.js +1 -1
  44. package/es/common/simplify.js +2 -1
  45. package/es/common/sort.js +1 -1
  46. package/es/common/split-path.js +1 -1
  47. package/es/common/store.js +1 -1
  48. package/es/common/text.js +1 -1
  49. package/es/common/utils.js +1 -1
  50. package/es/core/constants.js +1 -1
  51. package/es/core/core-modules.js +1 -1
  52. package/es/core/global-module.js +0 -2
  53. package/es/core/global.js +1 -1
  54. package/es/core/graphic-utils.js +1 -1
  55. package/es/core/index.js +1 -1
  56. package/es/core/layer-service.js +1 -2
  57. package/es/core/layer.js +1 -1
  58. package/es/core/light.js +1 -1
  59. package/es/core/stage.js +3 -2
  60. package/es/core/stage.js.map +1 -1
  61. package/es/core/window.js +1 -1
  62. package/es/event/event-manager.js +4 -1
  63. package/es/event/event-manager.js.map +1 -1
  64. package/es/graphic/graphic.js +2 -1
  65. package/es/graphic/graphic.js.map +1 -1
  66. package/package.json +3 -3
@@ -1,6 +1,9 @@
1
1
  import type { IEventListenerManager } from '../interface/event-listener-manager';
2
2
  export declare class EventListenerManager implements IEventListenerManager {
3
- protected _listenerMap: Map<string, Map<EventListenerOrEventListenerObject, EventListener>>;
3
+ protected _listenerMap: Map<string, Map<EventListenerOrEventListenerObject, Map<boolean, {
4
+ wrappedListener: EventListener;
5
+ options?: boolean | AddEventListenerOptions;
6
+ }>>>;
4
7
  protected _eventListenerTransformer: (event: Event) => Event;
5
8
  constructor();
6
9
  setEventListenerTransformer(transformer: (event: Event) => Event): void;
@@ -8,6 +11,20 @@ export declare class EventListenerManager implements IEventListenerManager {
8
11
  removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
9
12
  dispatchEvent(event: Event): boolean;
10
13
  clearAllEventListeners(): void;
14
+ protected _resolveCapture(options?: boolean | EventListenerOptions | AddEventListenerOptions): boolean;
15
+ protected _resolveOnce(options?: boolean | AddEventListenerOptions): boolean;
16
+ protected _getOrCreateListenerTypeMap(type: string): Map<EventListenerOrEventListenerObject, Map<boolean, {
17
+ wrappedListener: EventListener;
18
+ options?: boolean | AddEventListenerOptions;
19
+ }>>;
20
+ protected _getOrCreateWrappedMap(listenerTypeMap: Map<EventListenerOrEventListenerObject, Map<boolean, {
21
+ wrappedListener: EventListener;
22
+ options?: boolean | AddEventListenerOptions;
23
+ }>>, listener: EventListenerOrEventListenerObject): Map<boolean, {
24
+ wrappedListener: EventListener;
25
+ options?: boolean | AddEventListenerOptions;
26
+ }>;
27
+ protected _deleteListenerRecord(type: string, listener: EventListenerOrEventListenerObject, capture: boolean): void;
11
28
  protected _nativeAddEventListener(type: string, listener: EventListener, options?: boolean | AddEventListenerOptions): void;
12
29
  protected _nativeRemoveEventListener(type: string, listener: EventListener, options?: boolean | EventListenerOptions): void;
13
30
  protected _nativeDispatchEvent(event: Event): boolean;
@@ -7,30 +7,60 @@ export class EventListenerManager {
7
7
  }
8
8
  addEventListener(type, listener, options) {
9
9
  if (!listener) return;
10
+ const capture = this._resolveCapture(options), once = this._resolveOnce(options), listenerTypeMap = this._getOrCreateListenerTypeMap(type), wrappedMap = this._getOrCreateWrappedMap(listenerTypeMap, listener);
11
+ if (wrappedMap.has(capture)) return;
10
12
  const wrappedListener = event => {
11
13
  const transformedEvent = this._eventListenerTransformer(event);
12
- "function" == typeof listener ? listener(transformedEvent) : listener.handleEvent && listener.handleEvent(transformedEvent);
14
+ "function" == typeof listener ? listener(transformedEvent) : listener.handleEvent && listener.handleEvent(transformedEvent),
15
+ once && this._deleteListenerRecord(type, listener, capture);
13
16
  };
14
- this._listenerMap.has(type) || this._listenerMap.set(type, new Map), this._listenerMap.get(type).set(listener, wrappedListener),
15
- this._nativeAddEventListener(type, wrappedListener, options);
17
+ wrappedMap.set(capture, {
18
+ wrappedListener: wrappedListener,
19
+ options: options
20
+ }), this._nativeAddEventListener(type, wrappedListener, options);
16
21
  }
17
22
  removeEventListener(type, listener, options) {
18
- var _a;
23
+ var _a, _b;
19
24
  if (!listener) return;
20
- const wrappedListener = null === (_a = this._listenerMap.get(type)) || void 0 === _a ? void 0 : _a.get(listener);
21
- wrappedListener && (this._nativeRemoveEventListener(type, wrappedListener, options),
22
- this._listenerMap.get(type).delete(listener), 0 === this._listenerMap.get(type).size && this._listenerMap.delete(type));
25
+ const capture = this._resolveCapture(options), wrappedRecord = null === (_b = null === (_a = this._listenerMap.get(type)) || void 0 === _a ? void 0 : _a.get(listener)) || void 0 === _b ? void 0 : _b.get(capture);
26
+ wrappedRecord && (this._nativeRemoveEventListener(type, wrappedRecord.wrappedListener, capture),
27
+ this._deleteListenerRecord(type, listener, capture));
23
28
  }
24
29
  dispatchEvent(event) {
25
30
  return this._nativeDispatchEvent(event);
26
31
  }
27
32
  clearAllEventListeners() {
28
- this._listenerMap.forEach(((listenersMap, type) => {
29
- listenersMap.forEach(((wrappedListener, originalListener) => {
30
- this._nativeRemoveEventListener(type, wrappedListener, void 0);
33
+ this._listenerMap.forEach(((listenerMap, type) => {
34
+ listenerMap.forEach((wrappedMap => {
35
+ wrappedMap.forEach(((wrappedRecord, capture) => {
36
+ this._nativeRemoveEventListener(type, wrappedRecord.wrappedListener, capture);
37
+ }));
31
38
  }));
32
39
  })), this._listenerMap.clear();
33
40
  }
41
+ _resolveCapture(options) {
42
+ return "boolean" == typeof options ? options : !!(null == options ? void 0 : options.capture);
43
+ }
44
+ _resolveOnce(options) {
45
+ return "object" == typeof options && !!(null == options ? void 0 : options.once);
46
+ }
47
+ _getOrCreateListenerTypeMap(type) {
48
+ let listenerTypeMap = this._listenerMap.get(type);
49
+ return listenerTypeMap || (listenerTypeMap = new Map, this._listenerMap.set(type, listenerTypeMap)),
50
+ listenerTypeMap;
51
+ }
52
+ _getOrCreateWrappedMap(listenerTypeMap, listener) {
53
+ let wrappedMap = listenerTypeMap.get(listener);
54
+ return wrappedMap || (wrappedMap = new Map, listenerTypeMap.set(listener, wrappedMap)),
55
+ wrappedMap;
56
+ }
57
+ _deleteListenerRecord(type, listener, capture) {
58
+ const listenerTypeMap = this._listenerMap.get(type);
59
+ if (!listenerTypeMap) return;
60
+ const wrappedMap = listenerTypeMap.get(listener);
61
+ wrappedMap && (wrappedMap.delete(capture), 0 === wrappedMap.size && listenerTypeMap.delete(listener),
62
+ 0 === listenerTypeMap.size && this._listenerMap.delete(type));
63
+ }
34
64
  _nativeAddEventListener(type, listener, options) {
35
65
  throw new Error("_nativeAddEventListener must be implemented by derived classes");
36
66
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/event-listener-manager.ts"],"names":[],"mappings":"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","file":"event-listener-manager.js","sourcesContent":["import type { IEventListenerManager } from '../interface/event-listener-manager';\n\n/**\n * Base class to manage event listeners with support for event transformation\n * Used by DefaultGlobal and DefaultWindow to handle the transformation of event coordinates\n */\nexport class EventListenerManager implements IEventListenerManager {\n /**\n * Map that stores the mapping from original listeners to wrapped listeners\n * Structure: Map<eventType, Map<originalListener, wrappedListener>>\n */\n protected _listenerMap: Map<string, Map<EventListenerOrEventListenerObject, EventListener>>;\n\n /**\n * Transformer function that transforms the event\n */\n protected _eventListenerTransformer: (event: Event) => Event;\n\n constructor() {\n this._listenerMap = new Map();\n this._eventListenerTransformer = event => event; // Default: no transformation\n }\n\n /**\n * Set the event transformer function\n * @param transformer Function that transforms events\n */\n setEventListenerTransformer(transformer: (event: Event) => Event): void {\n this._eventListenerTransformer = transformer || (event => event);\n }\n\n /**\n * Add an event listener with event transformation\n * @param type Event type\n * @param listener Original event listener\n * @param options Event listener options\n */\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): void {\n if (!listener) {\n return;\n }\n\n // Create a wrapped listener that applies the transformation\n const wrappedListener = (event: Event) => {\n const transformedEvent = this._eventListenerTransformer(event);\n if (typeof listener === 'function') {\n listener(transformedEvent);\n } else if (listener.handleEvent) {\n listener.handleEvent(transformedEvent);\n }\n };\n\n // Store the mapping between original and wrapped listener\n if (!this._listenerMap.has(type)) {\n this._listenerMap.set(type, new Map());\n }\n this._listenerMap.get(type)!.set(listener, wrappedListener);\n\n // Add the wrapped listener\n this._nativeAddEventListener(type, wrappedListener, options);\n }\n\n /**\n * Remove an event listener\n * @param type Event type\n * @param listener Event listener to remove\n * @param options Event listener options\n */\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void {\n if (!listener) {\n return;\n }\n\n // Get the wrapped listener from our map\n const wrappedListener = this._listenerMap.get(type)?.get(listener);\n if (wrappedListener) {\n // Remove the wrapped listener\n this._nativeRemoveEventListener(type, wrappedListener, options);\n\n // Remove from our map\n this._listenerMap.get(type)!.delete(listener);\n if (this._listenerMap.get(type)!.size === 0) {\n this._listenerMap.delete(type);\n }\n }\n }\n\n /**\n * Dispatch an event\n * @param event Event to dispatch\n */\n dispatchEvent(event: Event): boolean {\n return this._nativeDispatchEvent(event);\n }\n\n /**\n * Clear all event listeners\n */\n clearAllEventListeners(): void {\n this._listenerMap.forEach((listenersMap, type) => {\n listenersMap.forEach((wrappedListener, originalListener) => {\n this._nativeRemoveEventListener(type, wrappedListener, undefined);\n });\n });\n this._listenerMap.clear();\n }\n\n /**\n * Native implementation of addEventListener\n * To be implemented by derived classes\n */\n protected _nativeAddEventListener(\n type: string,\n listener: EventListener,\n options?: boolean | AddEventListenerOptions\n ): void {\n throw new Error('_nativeAddEventListener must be implemented by derived classes');\n }\n\n /**\n * Native implementation of removeEventListener\n * To be implemented by derived classes\n */\n protected _nativeRemoveEventListener(\n type: string,\n listener: EventListener,\n options?: boolean | EventListenerOptions\n ): void {\n throw new Error('_nativeRemoveEventListener must be implemented by derived classes');\n }\n\n /**\n * Native implementation of dispatchEvent\n * To be implemented by derived classes\n */\n protected _nativeDispatchEvent(event: Event): boolean {\n throw new Error('_nativeDispatchEvent must be implemented by derived classes');\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/common/event-listener-manager.ts"],"names":[],"mappings":"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","file":"event-listener-manager.js","sourcesContent":["import type { IEventListenerManager } from '../interface/event-listener-manager';\n\n/**\n * Base class to manage event listeners with support for event transformation\n * Used by DefaultGlobal and DefaultWindow to handle the transformation of event coordinates\n */\nexport class EventListenerManager implements IEventListenerManager {\n /**\n * Map that stores the mapping from original listeners to wrapped listeners\n * Structure: Map<eventType, Map<originalListener, Map<capture, wrappedRecord>>>\n */\n protected _listenerMap: Map<\n string,\n Map<\n EventListenerOrEventListenerObject,\n Map<boolean, { wrappedListener: EventListener; options?: boolean | AddEventListenerOptions }>\n >\n >;\n\n /**\n * Transformer function that transforms the event\n */\n protected _eventListenerTransformer: (event: Event) => Event;\n\n constructor() {\n this._listenerMap = new Map();\n this._eventListenerTransformer = event => event; // Default: no transformation\n }\n\n /**\n * Set the event transformer function\n * @param transformer Function that transforms events\n */\n setEventListenerTransformer(transformer: (event: Event) => Event): void {\n this._eventListenerTransformer = transformer || (event => event);\n }\n\n /**\n * Add an event listener with event transformation\n * @param type Event type\n * @param listener Original event listener\n * @param options Event listener options\n */\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions\n ): void {\n if (!listener) {\n return;\n }\n\n const capture = this._resolveCapture(options);\n const once = this._resolveOnce(options);\n const listenerTypeMap = this._getOrCreateListenerTypeMap(type);\n const wrappedMap = this._getOrCreateWrappedMap(listenerTypeMap, listener);\n\n // Align with native behavior: adding same (type, listener, capture) repeatedly is a no-op.\n if (wrappedMap.has(capture)) {\n return;\n }\n\n // Create a wrapped listener that applies the transformation\n const wrappedListener = (event: Event) => {\n const transformedEvent = this._eventListenerTransformer(event);\n if (typeof listener === 'function') {\n listener(transformedEvent);\n } else if (listener.handleEvent) {\n listener.handleEvent(transformedEvent);\n }\n\n // Native once listeners are removed automatically after dispatch, clear the mapping as well.\n if (once) {\n this._deleteListenerRecord(type, listener, capture);\n }\n };\n\n // Store the mapping between original and wrapped listener\n wrappedMap.set(capture, { wrappedListener, options });\n\n // Add the wrapped listener\n this._nativeAddEventListener(type, wrappedListener, options);\n }\n\n /**\n * Remove an event listener\n * @param type Event type\n * @param listener Event listener to remove\n * @param options Event listener options\n */\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions\n ): void {\n if (!listener) {\n return;\n }\n\n const capture = this._resolveCapture(options);\n const wrappedRecord = this._listenerMap.get(type)?.get(listener)?.get(capture);\n if (wrappedRecord) {\n // Remove the wrapped listener\n this._nativeRemoveEventListener(type, wrappedRecord.wrappedListener, capture);\n this._deleteListenerRecord(type, listener, capture);\n }\n }\n\n /**\n * Dispatch an event\n * @param event Event to dispatch\n */\n dispatchEvent(event: Event): boolean {\n return this._nativeDispatchEvent(event);\n }\n\n /**\n * Clear all event listeners\n */\n clearAllEventListeners(): void {\n this._listenerMap.forEach((listenerMap, type) => {\n listenerMap.forEach(wrappedMap => {\n wrappedMap.forEach((wrappedRecord, capture) => {\n this._nativeRemoveEventListener(type, wrappedRecord.wrappedListener, capture);\n });\n });\n });\n this._listenerMap.clear();\n }\n\n protected _resolveCapture(options?: boolean | EventListenerOptions | AddEventListenerOptions): boolean {\n if (typeof options === 'boolean') {\n return options;\n }\n return !!options?.capture;\n }\n\n protected _resolveOnce(options?: boolean | AddEventListenerOptions): boolean {\n return typeof options === 'object' && !!options?.once;\n }\n\n protected _getOrCreateListenerTypeMap(\n type: string\n ): Map<\n EventListenerOrEventListenerObject,\n Map<boolean, { wrappedListener: EventListener; options?: boolean | AddEventListenerOptions }>\n > {\n let listenerTypeMap = this._listenerMap.get(type);\n if (!listenerTypeMap) {\n listenerTypeMap = new Map();\n this._listenerMap.set(type, listenerTypeMap);\n }\n return listenerTypeMap;\n }\n\n protected _getOrCreateWrappedMap(\n listenerTypeMap: Map<\n EventListenerOrEventListenerObject,\n Map<boolean, { wrappedListener: EventListener; options?: boolean | AddEventListenerOptions }>\n >,\n listener: EventListenerOrEventListenerObject\n ): Map<boolean, { wrappedListener: EventListener; options?: boolean | AddEventListenerOptions }> {\n let wrappedMap = listenerTypeMap.get(listener);\n if (!wrappedMap) {\n wrappedMap = new Map();\n listenerTypeMap.set(listener, wrappedMap);\n }\n return wrappedMap;\n }\n\n protected _deleteListenerRecord(type: string, listener: EventListenerOrEventListenerObject, capture: boolean): void {\n const listenerTypeMap = this._listenerMap.get(type);\n if (!listenerTypeMap) {\n return;\n }\n const wrappedMap = listenerTypeMap.get(listener);\n if (!wrappedMap) {\n return;\n }\n wrappedMap.delete(capture);\n if (wrappedMap.size === 0) {\n listenerTypeMap.delete(listener);\n }\n if (listenerTypeMap.size === 0) {\n this._listenerMap.delete(type);\n }\n }\n\n /**\n * Native implementation of addEventListener\n * To be implemented by derived classes\n */\n protected _nativeAddEventListener(\n type: string,\n listener: EventListener,\n options?: boolean | AddEventListenerOptions\n ): void {\n throw new Error('_nativeAddEventListener must be implemented by derived classes');\n }\n\n /**\n * Native implementation of removeEventListener\n * To be implemented by derived classes\n */\n protected _nativeRemoveEventListener(\n type: string,\n listener: EventListener,\n options?: boolean | EventListenerOptions\n ): void {\n throw new Error('_nativeRemoveEventListener must be implemented by derived classes');\n }\n\n /**\n * Native implementation of dispatchEvent\n * To be implemented by derived classes\n */\n protected _nativeDispatchEvent(event: Event): boolean {\n throw new Error('_nativeDispatchEvent must be implemented by derived classes');\n }\n}\n"]}
@@ -77,5 +77,4 @@ export function mapToCanvasPointForCanvas(nativeEvent) {
77
77
  x: nativeEvent._canvasX || 0,
78
78
  y: nativeEvent._canvasY || 0
79
79
  };
80
- }
81
- //# sourceMappingURL=event-transformer.js.map
80
+ }
@@ -61,4 +61,4 @@ function drawAreaBlock(path, topList, bottomList, params) {
61
61
  }
62
62
  path.closePath();
63
63
  }
64
- //# sourceMappingURL=render-area.js.map
64
+ //# sourceMappingURL=render-area.js.map
@@ -6,4 +6,4 @@ export function renderCommandList(commandList, context, x = 0, y = 0, sx = 1, sy
6
6
  commandFuncs[command[0]](command, context, x, y, sx, sy, z);
7
7
  }
8
8
  }
9
- //# sourceMappingURL=render-command-list.js.map
9
+ //# sourceMappingURL=render-command-list.js.map
@@ -93,4 +93,4 @@ export function drawIncrementalAreaSegments(path, lastSeg, segments, params) {
93
93
  path.closePath();
94
94
  }));
95
95
  }
96
- //# sourceMappingURL=render-curve.js.map
96
+ //# sourceMappingURL=render-curve.js.map
@@ -11,4 +11,4 @@ export function drawSegItem(ctx, curve, endPercent, params) {
11
11
  ctx.lineTo(offsetX + p.x, offsetY + p.y, offsetZ);
12
12
  }
13
13
  }
14
- //# sourceMappingURL=render-utils.js.map
14
+ //# sourceMappingURL=render-utils.js.map
@@ -91,4 +91,4 @@ export class ReflectSegContext extends SegContext {
91
91
  return super.clear();
92
92
  }
93
93
  }
94
- //# sourceMappingURL=seg-context.js.map
94
+ //# sourceMappingURL=seg-context.js.map
@@ -29,4 +29,5 @@ function simplifyDouglasPeucker(points, sqTolerance) {
29
29
  export function flatten_simplify(points, tolerance, highestQuality) {
30
30
  if (points.length <= 10) return points;
31
31
  return points = highestQuality ? points : simplifyRadialDist(points, void 0 !== tolerance ? tolerance * tolerance : 1);
32
- }
32
+ }
33
+ //# sourceMappingURL=simplify.js.map
package/es/common/sort.js CHANGED
@@ -94,4 +94,4 @@ export function findNextGraphic(graphic, id, defaultZIndex, reverse = !1) {
94
94
  !1)), reverse);
95
95
  return result;
96
96
  }
97
- //# sourceMappingURL=sort.js.map
97
+ //# sourceMappingURL=sort.js.map
@@ -248,4 +248,4 @@ export const splitPath = (path, count) => {
248
248
  }
249
249
  return res;
250
250
  };
251
- //# sourceMappingURL=split-path.js.map
251
+ //# sourceMappingURL=split-path.js.map
@@ -1,2 +1,2 @@
1
1
  class StageStore {}
2
- //# sourceMappingURL=store.js.map
2
+ //# sourceMappingURL=store.js.map
package/es/common/text.js CHANGED
@@ -24,4 +24,4 @@ export function textAttributesToStyle(attrs) {
24
24
  attrs.underline ? style["text-decoration"] = "underline" : attrs.lineThrough && (style["text-decoration"] = "line-through"),
25
25
  attrs.fill && isString(attrs.fill) && (style.color = attrs.fill), style;
26
26
  }
27
- //# sourceMappingURL=text.js.map
27
+ //# sourceMappingURL=text.js.map
@@ -148,4 +148,4 @@ export const calculateLineHeight = (lineHeight, fontSize) => {
148
148
  const _lh = _calculateLineHeight(lineHeight, fontSize);
149
149
  return isNaN(_lh) ? _lh : Math.max(fontSize, _lh);
150
150
  };
151
- //# sourceMappingURL=utils.js.map
151
+ //# sourceMappingURL=utils.js.map
@@ -9,4 +9,4 @@ export const StaticLayerHandlerContribution = Symbol.for("StaticLayerHandlerCont
9
9
  export const DynamicLayerHandlerContribution = Symbol.for("DynamicLayerHandlerContribution");
10
10
 
11
11
  export const VirtualLayerHandlerContribution = Symbol.for("VirtualLayerHandlerContribution");
12
- //# sourceMappingURL=constants.js.map
12
+ //# sourceMappingURL=constants.js.map
@@ -17,4 +17,4 @@ export default new ContainerModule((bind => {
17
17
  bind(GraphicUtil).to(DefaultGraphicUtil).inSingletonScope(), bind(TransformUtil).to(DefaultTransformUtil).inSingletonScope(),
18
18
  bind(LayerService).to(DefaultLayerService).inSingletonScope();
19
19
  }));
20
- //# sourceMappingURL=core-modules.js.map
20
+ //# sourceMappingURL=core-modules.js.map
@@ -1,3 +1 @@
1
-
2
-
3
1
  //# sourceMappingURL=global-module.js.map
package/es/core/global.js CHANGED
@@ -238,4 +238,4 @@ let DefaultGlobal = class extends EventListenerManager {
238
238
  DefaultGlobal = __decorate([ injectable(), __param(0, inject(ContributionProvider)), __param(0, named(EnvContribution)), __metadata("design:paramtypes", [ Object ]) ], DefaultGlobal);
239
239
 
240
240
  export { DefaultGlobal };
241
- //# sourceMappingURL=global.js.map
241
+ //# sourceMappingURL=global.js.map
@@ -189,4 +189,4 @@ let DefaultTransformUtil = class {
189
189
  DefaultTransformUtil = __decorate([ injectable(), __metadata("design:paramtypes", []) ], DefaultTransformUtil);
190
190
 
191
191
  export { DefaultTransformUtil };
192
- //# sourceMappingURL=graphic-utils.js.map
192
+ //# sourceMappingURL=graphic-utils.js.map
package/es/core/index.js CHANGED
@@ -15,4 +15,4 @@ export * from "./layer-service";
15
15
  export * from "./constants";
16
16
 
17
17
  export * from "../interface/core";
18
- //# sourceMappingURL=index.js.map
18
+ //# sourceMappingURL=index.js.map
@@ -82,5 +82,4 @@ let DefaultLayerService = DefaultLayerService_1 = class {
82
82
  DefaultLayerService.idprefix = "visactor_layer", DefaultLayerService.prefix_count = 0,
83
83
  DefaultLayerService = DefaultLayerService_1 = __decorate([ injectable(), __metadata("design:paramtypes", []) ], DefaultLayerService);
84
84
 
85
- export { DefaultLayerService };
86
- //# sourceMappingURL=layer-service.js.map
85
+ export { DefaultLayerService };
package/es/core/layer.js CHANGED
@@ -112,4 +112,4 @@ export class Layer extends Group {
112
112
  }, params)), this.afterDrawCbs.forEach((c => c(this)));
113
113
  }
114
114
  }
115
- //# sourceMappingURL=layer.js.map
115
+ //# sourceMappingURL=layer.js.map
package/es/core/light.js CHANGED
@@ -23,4 +23,4 @@ export class DirectionalLight {
23
23
  export const registerDirectionalLight = () => {
24
24
  Factory.registerPlugin("DirectionalLight", DirectionalLight);
25
25
  };
26
- //# sourceMappingURL=light.js.map
26
+ //# sourceMappingURL=light.js.map
package/es/core/stage.js CHANGED
@@ -499,7 +499,7 @@ export class Stage extends Group {
499
499
  throw new Error("暂不支持");
500
500
  }
501
501
  release() {
502
- var _a, _b;
502
+ var _a, _b, _d;
503
503
  super.release(), this.hooks.beforeRender.unTap("constructor", this.beforeRender),
504
504
  this.hooks.afterRender.unTap("constructor", this.afterRender), this.eventSystem && this.eventSystem.release(),
505
505
  this.layerService.releaseStage(this), this.pluginService.release(), this.forEach((layer => {
@@ -508,6 +508,7 @@ export class Stage extends Group {
508
508
  item.setStage && item.setStage(null, null), this.interactiveLayer.removeChild(item);
509
509
  })), this.interactiveLayer.release()), this.window.release(), null === (_a = this._ticker) || void 0 === _a || _a.remTimeline(null == this ? void 0 : this.timeline),
510
510
  null === (_b = this._ticker) || void 0 === _b || _b.removeListener("tick", this.afterTickCb),
511
+ this.params.ticker || null === (_d = this._ticker) || void 0 === _d || _d.release(),
511
512
  this.renderService.renderTreeRoots = [];
512
513
  }
513
514
  setStage(stage) {}
@@ -577,4 +578,4 @@ export class Stage extends Group {
577
578
  this.renderService.reInit(), this.pickerService.reInit();
578
579
  }
579
580
  }
580
- //# sourceMappingURL=stage.js.map
581
+ //# sourceMappingURL=stage.js.map