@visactor/vgrammar-core 0.10.9 → 0.10.10

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.
@@ -98,7 +98,9 @@ export default class CanvasRenderer {
98
98
  autoRender: !0,
99
99
  pluginList: viewOptions.pluginList,
100
100
  enableHtmlAttribute: viewOptions.enableHtmlAttribute,
101
- optimize: viewOptions.optimize
101
+ optimize: viewOptions.optimize,
102
+ supportsTouchEvents: viewOptions.supportsTouchEvents,
103
+ supportsPointerEvents: viewOptions.supportsPointerEvents
102
104
  });
103
105
  (null === (_b = viewOptions.options3d) || void 0 === _b ? void 0 : _b.enable) && stage.set3dOptions(viewOptions.options3d),
104
106
  stage.enableIncrementalAutoRender(), this._viewBox = viewOptions.viewBox, this._view.emit(HOOK_EVENT.AFTER_CREATE_VRENDER_STAGE),
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graph/canvas-renderer.ts"],"names":[],"mappings":"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","file":"canvas-renderer.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isObject } from '@visactor/vutils';\nimport type { IEventTarget, IColor, ILayer, Stage } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { createStage, waitForAllSubLayers } from '@visactor/vrender-core';\nimport { DragNDrop, Gesture } from '@visactor/vrender-kits';\nimport type { IViewOptions, IView, IMark, IViewEventConfig } from '../types';\nimport type { IRenderer } from '../types/renderer';\nimport { HOOK_EVENT } from './enums';\n\nexport default class CanvasRenderer implements IRenderer {\n private _width: number;\n private _height: number;\n\n private _view: IView;\n private _viewOptions: IViewOptions;\n private _eventConfig: IViewEventConfig;\n private _stage: Stage;\n private _layer: ILayer;\n private _dragController: DragNDrop;\n private _gestureController: Gesture;\n private _viewBox: IBoundsLike;\n\n constructor(view: IView) {\n this._view = view;\n }\n\n initialize(width: number, height: number, options: IViewOptions, eventConfig: IViewEventConfig) {\n this._width = width;\n this._height = height;\n this._viewOptions = options;\n this._eventConfig = eventConfig;\n\n this.initStage();\n\n // this method will invoke resize to size the canvas appropriately\n return this;\n }\n\n stage() {\n return this._stage ?? null;\n }\n\n gestureController() {\n return this._gestureController ?? null;\n }\n\n canvas() {\n if (this._stage) {\n return this._stage.window.getNativeHandler().nativeCanvas;\n }\n return null;\n }\n\n context() {\n if (this._stage) {\n return this._stage.window.getContext().nativeContext;\n }\n return null;\n }\n\n combineIncrementalLayers() {\n if (this._stage) {\n waitForAllSubLayers(this._stage as any).then(() => {\n // stage might be null in current tick\n if (this._stage) {\n this._stage.defaultLayer.combineSubLayer();\n }\n });\n }\n return this;\n }\n\n background(color: IColor) {\n if (this._stage) {\n this._stage.background = color;\n return this;\n }\n }\n\n setDpr(resolution: number, redraw: boolean) {\n this._stage?.setDpr?.(resolution);\n if (redraw) {\n this.renderNextFrame();\n }\n return this;\n }\n\n shouldResize(width: number, height: number) {\n return width !== this._width || height !== this._height;\n }\n\n resize(width: number, height: number) {\n this._view.emit(HOOK_EVENT.BEFORE_STAGE_RESIZE);\n if (this.shouldResize(width, height)) {\n this._width = width;\n this._height = height;\n this._stage && this._stage.resize(width, height);\n }\n\n this._view.emit(HOOK_EVENT.AFTER_STAGE_RESIZE);\n\n return this;\n }\n\n setViewBox(viewBox: IBoundsLike, rerender: boolean = true) {\n if (!this._stage) {\n return this;\n }\n if (\n viewBox &&\n (!this._viewBox ||\n viewBox.x1 !== this._viewBox.x1 ||\n viewBox.x2 !== this._viewBox.x2 ||\n viewBox.y1 !== this._viewBox.y1 ||\n viewBox.y2 !== this._viewBox.y2)\n ) {\n this._viewBox = viewBox;\n\n // FIXME: vRender\n this._stage.setViewBox(viewBox.x1, viewBox.y1, viewBox.x2 - viewBox.x1, viewBox.y2 - viewBox.y1, rerender);\n }\n return this;\n }\n\n render(immediately: boolean = false) {\n this._view.emit(HOOK_EVENT.BEFORE_VRENDER_DRAW);\n\n this.initStage();\n\n // disable dirty bounds when render is called\n this._stage.disableDirtyBounds();\n this._stage.afterNextRender(this.handleAfterNextRender);\n\n // render immediately and skip render in next frame\n if (immediately) {\n this._stage.render();\n\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_DRAW);\n }\n return this;\n }\n\n renderNextFrame() {\n this.initStage();\n\n this._stage.renderNextFrame();\n\n return this;\n }\n\n toCanvas() {\n if (this._stage) {\n return this._stage.toCanvas();\n }\n return null;\n }\n\n preventRender(tag: boolean) {\n if (this._stage) {\n this._stage.preventRender(tag);\n }\n }\n\n // toImageData() {\n // if (this._stage) {\n // return this._stage.toImageData();\n // }\n // return null;\n // }\n\n release() {\n this._view.traverseMarkTree((mark: IMark) => {\n mark.release();\n });\n\n if (this._dragController) {\n this._dragController.release();\n }\n if (this._gestureController) {\n this._gestureController.release();\n }\n\n if (this._stage !== (this._viewOptions?.stage as unknown as Stage)) {\n // don't release the stage created by outside\n this._stage.release();\n }\n\n this._stage = null;\n this._layer = null;\n this._dragController = null;\n this._gestureController = null;\n }\n\n private createStage() {\n this._view.emit(HOOK_EVENT.BEFORE_CREATE_VRENDER_STAGE);\n\n const viewOptions = this._viewOptions;\n\n const stage =\n (viewOptions.stage as unknown as Stage) ??\n createStage({\n width: this._width,\n height: this._height,\n renderStyle: viewOptions.renderStyle,\n viewBox: viewOptions.viewBox,\n dpr: viewOptions.dpr,\n canvas: viewOptions.renderCanvas,\n canvasControled: viewOptions.canvasControled,\n container: viewOptions.container,\n title: viewOptions.rendererTitle,\n beforeRender: viewOptions.beforeRender,\n afterRender: viewOptions.afterRender,\n disableDirtyBounds: true,\n autoRender: true,\n pluginList: viewOptions.pluginList,\n enableHtmlAttribute: viewOptions.enableHtmlAttribute,\n optimize: viewOptions.optimize\n });\n\n if (viewOptions.options3d?.enable) {\n stage.set3dOptions(viewOptions.options3d);\n }\n\n stage.enableIncrementalAutoRender();\n\n this._viewBox = viewOptions.viewBox;\n this._view.emit(HOOK_EVENT.AFTER_CREATE_VRENDER_STAGE);\n\n this._view.emit(HOOK_EVENT.BEFORE_CREATE_VRENDER_LAYER);\n const layer = viewOptions.layer ?? (stage.defaultLayer as ILayer);\n this._view.emit(HOOK_EVENT.AFTER_CREATE_VRENDER_LAYER);\n\n if (this._eventConfig?.drag) {\n // 允许 drag 事件\n this._dragController = new DragNDrop(stage as unknown as IEventTarget);\n }\n if (this._eventConfig?.gesture) {\n const gestureConfig = isObject(this._eventConfig.gesture) ? this._eventConfig.gesture : {};\n // 允许手势\n this._gestureController = new Gesture(stage as unknown as IEventTarget, gestureConfig);\n }\n\n return {\n stage,\n layer\n };\n }\n\n private initStage() {\n if (!this._stage) {\n const { stage, layer } = this.createStage();\n\n this._stage = stage;\n this._layer = layer;\n\n const background = this._view.background();\n this.background(background);\n }\n }\n\n private handleAfterNextRender = () => {\n if (this._stage && !this._viewOptions.disableDirtyBounds) {\n this._stage.enableDirtyBounds();\n }\n\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_DRAW);\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_NEXT_RENDER);\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/graph/canvas-renderer.ts"],"names":[],"mappings":"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","file":"canvas-renderer.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isObject } from '@visactor/vutils';\nimport type { IEventTarget, IColor, ILayer, Stage } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { createStage, waitForAllSubLayers } from '@visactor/vrender-core';\nimport { DragNDrop, Gesture } from '@visactor/vrender-kits';\nimport type { IViewOptions, IView, IMark, IViewEventConfig } from '../types';\nimport type { IRenderer } from '../types/renderer';\nimport { HOOK_EVENT } from './enums';\n\nexport default class CanvasRenderer implements IRenderer {\n private _width: number;\n private _height: number;\n\n private _view: IView;\n private _viewOptions: IViewOptions;\n private _eventConfig: IViewEventConfig;\n private _stage: Stage;\n private _layer: ILayer;\n private _dragController: DragNDrop;\n private _gestureController: Gesture;\n private _viewBox: IBoundsLike;\n\n constructor(view: IView) {\n this._view = view;\n }\n\n initialize(width: number, height: number, options: IViewOptions, eventConfig: IViewEventConfig) {\n this._width = width;\n this._height = height;\n this._viewOptions = options;\n this._eventConfig = eventConfig;\n\n this.initStage();\n\n // this method will invoke resize to size the canvas appropriately\n return this;\n }\n\n stage() {\n return this._stage ?? null;\n }\n\n gestureController() {\n return this._gestureController ?? null;\n }\n\n canvas() {\n if (this._stage) {\n return this._stage.window.getNativeHandler().nativeCanvas;\n }\n return null;\n }\n\n context() {\n if (this._stage) {\n return this._stage.window.getContext().nativeContext;\n }\n return null;\n }\n\n combineIncrementalLayers() {\n if (this._stage) {\n waitForAllSubLayers(this._stage as any).then(() => {\n // stage might be null in current tick\n if (this._stage) {\n this._stage.defaultLayer.combineSubLayer();\n }\n });\n }\n return this;\n }\n\n background(color: IColor) {\n if (this._stage) {\n this._stage.background = color;\n return this;\n }\n }\n\n setDpr(resolution: number, redraw: boolean) {\n this._stage?.setDpr?.(resolution);\n if (redraw) {\n this.renderNextFrame();\n }\n return this;\n }\n\n shouldResize(width: number, height: number) {\n return width !== this._width || height !== this._height;\n }\n\n resize(width: number, height: number) {\n this._view.emit(HOOK_EVENT.BEFORE_STAGE_RESIZE);\n if (this.shouldResize(width, height)) {\n this._width = width;\n this._height = height;\n this._stage && this._stage.resize(width, height);\n }\n\n this._view.emit(HOOK_EVENT.AFTER_STAGE_RESIZE);\n\n return this;\n }\n\n setViewBox(viewBox: IBoundsLike, rerender: boolean = true) {\n if (!this._stage) {\n return this;\n }\n if (\n viewBox &&\n (!this._viewBox ||\n viewBox.x1 !== this._viewBox.x1 ||\n viewBox.x2 !== this._viewBox.x2 ||\n viewBox.y1 !== this._viewBox.y1 ||\n viewBox.y2 !== this._viewBox.y2)\n ) {\n this._viewBox = viewBox;\n\n // FIXME: vRender\n this._stage.setViewBox(viewBox.x1, viewBox.y1, viewBox.x2 - viewBox.x1, viewBox.y2 - viewBox.y1, rerender);\n }\n return this;\n }\n\n render(immediately: boolean = false) {\n this._view.emit(HOOK_EVENT.BEFORE_VRENDER_DRAW);\n\n this.initStage();\n\n // disable dirty bounds when render is called\n this._stage.disableDirtyBounds();\n this._stage.afterNextRender(this.handleAfterNextRender);\n\n // render immediately and skip render in next frame\n if (immediately) {\n this._stage.render();\n\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_DRAW);\n }\n return this;\n }\n\n renderNextFrame() {\n this.initStage();\n\n this._stage.renderNextFrame();\n\n return this;\n }\n\n toCanvas() {\n if (this._stage) {\n return this._stage.toCanvas();\n }\n return null;\n }\n\n preventRender(tag: boolean) {\n if (this._stage) {\n this._stage.preventRender(tag);\n }\n }\n\n // toImageData() {\n // if (this._stage) {\n // return this._stage.toImageData();\n // }\n // return null;\n // }\n\n release() {\n this._view.traverseMarkTree((mark: IMark) => {\n mark.release();\n });\n\n if (this._dragController) {\n this._dragController.release();\n }\n if (this._gestureController) {\n this._gestureController.release();\n }\n\n if (this._stage !== (this._viewOptions?.stage as unknown as Stage)) {\n // don't release the stage created by outside\n this._stage.release();\n }\n\n this._stage = null;\n this._layer = null;\n this._dragController = null;\n this._gestureController = null;\n }\n\n private createStage() {\n this._view.emit(HOOK_EVENT.BEFORE_CREATE_VRENDER_STAGE);\n\n const viewOptions = this._viewOptions;\n\n const stage =\n (viewOptions.stage as unknown as Stage) ??\n createStage({\n width: this._width,\n height: this._height,\n renderStyle: viewOptions.renderStyle,\n viewBox: viewOptions.viewBox,\n dpr: viewOptions.dpr,\n canvas: viewOptions.renderCanvas,\n canvasControled: viewOptions.canvasControled,\n container: viewOptions.container,\n title: viewOptions.rendererTitle,\n beforeRender: viewOptions.beforeRender,\n afterRender: viewOptions.afterRender,\n disableDirtyBounds: true,\n autoRender: true,\n pluginList: viewOptions.pluginList,\n enableHtmlAttribute: viewOptions.enableHtmlAttribute,\n optimize: viewOptions.optimize,\n supportsTouchEvents: viewOptions.supportsTouchEvents,\n supportsPointerEvents: viewOptions.supportsPointerEvents\n });\n\n if (viewOptions.options3d?.enable) {\n stage.set3dOptions(viewOptions.options3d);\n }\n\n stage.enableIncrementalAutoRender();\n\n this._viewBox = viewOptions.viewBox;\n this._view.emit(HOOK_EVENT.AFTER_CREATE_VRENDER_STAGE);\n\n this._view.emit(HOOK_EVENT.BEFORE_CREATE_VRENDER_LAYER);\n const layer = viewOptions.layer ?? (stage.defaultLayer as ILayer);\n this._view.emit(HOOK_EVENT.AFTER_CREATE_VRENDER_LAYER);\n\n if (this._eventConfig?.drag) {\n // 允许 drag 事件\n this._dragController = new DragNDrop(stage as unknown as IEventTarget);\n }\n if (this._eventConfig?.gesture) {\n const gestureConfig = isObject(this._eventConfig.gesture) ? this._eventConfig.gesture : {};\n // 允许手势\n this._gestureController = new Gesture(stage as unknown as IEventTarget, gestureConfig);\n }\n\n return {\n stage,\n layer\n };\n }\n\n private initStage() {\n if (!this._stage) {\n const { stage, layer } = this.createStage();\n\n this._stage = stage;\n this._layer = layer;\n\n const background = this._view.background();\n this.background(background);\n }\n }\n\n private handleAfterNextRender = () => {\n if (this._stage && !this._viewOptions.disableDirtyBounds) {\n this._stage.enableDirtyBounds();\n }\n\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_DRAW);\n this._view.emit(HOOK_EVENT.AFTER_VRENDER_NEXT_RENDER);\n };\n}\n"]}
package/es/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export declare const version = "0.10.9";
1
+ export declare const version = "0.10.10";
2
2
  export * from './graph';
3
3
  export * from './interactions';
4
4
  export { View } from './view';
package/es/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export const version = "0.10.9";
1
+ export const version = "0.10.10";
2
2
 
3
3
  export * from "./graph";
4
4
 
package/es/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;AAEhC,cAAc,SAAS,CAAC;AAExB,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EACL,cAAc,EACd,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,cAAc,OAAO,CAAC;AACtB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC","file":"index.js","sourcesContent":["// -- Exports -----\nexport const version = \"0.10.9\";\n\nexport * from './graph';\n\nexport * from './interactions';\n\nexport { View } from './view';\nexport { Scale, registerScale } from './view/scale';\nexport { Coordinate, registerCoordinate } from './view/coordinate';\nexport { parseFunctionType, invokeFunctionType } from './parse/util';\nexport { GrammarBase } from './view/grammar-base';\nexport * from './util/text';\nexport * from './types';\nexport { Factory } from './core/factory';\nexport {\n SIGNAL_AUTOFIT,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_VIEW_HEIGHT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_WIDTH,\n SIGNAL_VIEW_BOX\n} from './view/constants';\n\nexport { ThemeManager } from './theme/theme-manager';\n\nexport * from './glyph';\nexport * from './component';\nexport * from './transforms';\nexport * from './graph/animation/animation';\n\nexport { vglobal } from '@visactor/vrender-core';\nexport * from './env';\nexport * from './interactions';\nexport * from './semantic-marks/cell';\nexport * from './semantic-marks/interval';\nexport * from './graph/mark/graphic';\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC;AAEjC,cAAc,SAAS,CAAC;AAExB,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EACL,cAAc,EACd,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,cAAc,OAAO,CAAC;AACtB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC","file":"index.js","sourcesContent":["// -- Exports -----\nexport const version = \"0.10.10\";\n\nexport * from './graph';\n\nexport * from './interactions';\n\nexport { View } from './view';\nexport { Scale, registerScale } from './view/scale';\nexport { Coordinate, registerCoordinate } from './view/coordinate';\nexport { parseFunctionType, invokeFunctionType } from './parse/util';\nexport { GrammarBase } from './view/grammar-base';\nexport * from './util/text';\nexport * from './types';\nexport { Factory } from './core/factory';\nexport {\n SIGNAL_AUTOFIT,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_VIEW_HEIGHT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_WIDTH,\n SIGNAL_VIEW_BOX\n} from './view/constants';\n\nexport { ThemeManager } from './theme/theme-manager';\n\nexport * from './glyph';\nexport * from './component';\nexport * from './transforms';\nexport * from './graph/animation/animation';\n\nexport { vglobal } from '@visactor/vrender-core';\nexport * from './env';\nexport * from './interactions';\nexport * from './semantic-marks/cell';\nexport * from './semantic-marks/interval';\nexport * from './graph/mark/graphic';\n"]}
@@ -7,7 +7,7 @@ export const groupMarksByState = (marks, states) => {
7
7
  if (!states || !marks) return null;
8
8
  const res = {};
9
9
  return marks.forEach((mark => {
10
- const encode = mark.getSpec().encode;
10
+ const markSpec = mark && mark.getSpec(), encode = markSpec && markSpec.encode;
11
11
  encode && states.forEach((state => {
12
12
  state && encode[state] && (res[state] || (res[state] = []), res[state].push(mark));
13
13
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/interactions/utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAA6B,EAAE,EAAE;IACnE,IAAI,OAAO,CAAC,WAAW,EAAE;QACvB,OAAO,CAAC,EAAY,EAAE,EAAE;;YACtB,OAAO,MAAA,EAAE,CAAC,QAAQ,EAAE,0CAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9C,CAAC,CAAC;KACH;IAED,OAAO,CAAC,EAAY,EAAE,EAAE;QACtB,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAE,MAAgB,EAA2B,EAAE;IAC7F,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;QACrB,OAAO,IAAI,CAAC;KACb;IAED,MAAM,GAAG,GAAG,EAAE,CAAC;IAEf,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,MAAM,MAAM,GAAI,IAAI,CAAC,OAAO,EAAe,CAAC,MAAM,CAAC;QAEnD,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QAED,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrB,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBACf,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;iBACjB;gBAED,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvB;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC,CAAC","file":"utils.js","sourcesContent":["import type { ElementFilterOptions, IElement, IMark, MarkSpec } from '../types';\n\nexport const generateFilterValue = (options: ElementFilterOptions) => {\n if (options.filterField) {\n return (el: IElement) => {\n return el.getDatum()?.[options.filterField];\n };\n }\n\n return (el: IElement) => {\n return el[options.filterType];\n };\n};\n\nexport const groupMarksByState = (marks: IMark[], states: string[]): Record<string, IMark[]> => {\n if (!states || !marks) {\n return null;\n }\n\n const res = {};\n\n marks.forEach(mark => {\n const encode = (mark.getSpec() as MarkSpec).encode;\n\n if (!encode) {\n return;\n }\n\n states.forEach(state => {\n if (state && encode[state]) {\n if (!res[state]) {\n res[state] = [];\n }\n\n res[state].push(mark);\n }\n });\n });\n\n return res;\n};\n"]}
1
+ {"version":3,"sources":["../src/interactions/utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAA6B,EAAE,EAAE;IACnE,IAAI,OAAO,CAAC,WAAW,EAAE;QACvB,OAAO,CAAC,EAAY,EAAE,EAAE;;YACtB,OAAO,MAAA,EAAE,CAAC,QAAQ,EAAE,0CAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9C,CAAC,CAAC;KACH;IAED,OAAO,CAAC,EAAY,EAAE,EAAE;QACtB,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAE,MAAgB,EAA2B,EAAE;IAC7F,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;QACrB,OAAO,IAAI,CAAC;KACb;IAED,MAAM,GAAG,GAAG,EAAE,CAAC;IAEf,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,MAAM,QAAQ,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAa,CAAC;QACtD,MAAM,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC;QAE3C,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QAED,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrB,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBACf,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;iBACjB;gBAED,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvB;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC,CAAC","file":"utils.js","sourcesContent":["import type { ElementFilterOptions, IElement, IMark, MarkSpec } from '../types';\n\nexport const generateFilterValue = (options: ElementFilterOptions) => {\n if (options.filterField) {\n return (el: IElement) => {\n return el.getDatum()?.[options.filterField];\n };\n }\n\n return (el: IElement) => {\n return el[options.filterType];\n };\n};\n\nexport const groupMarksByState = (marks: IMark[], states: string[]): Record<string, IMark[]> => {\n if (!states || !marks) {\n return null;\n }\n\n const res = {};\n\n marks.forEach(mark => {\n const markSpec = (mark && mark.getSpec()) as MarkSpec;\n const encode = markSpec && markSpec.encode;\n\n if (!encode) {\n return;\n }\n\n states.forEach(state => {\n if (state && encode[state]) {\n if (!res[state]) {\n res[state] = [];\n }\n\n res[state].push(mark);\n }\n });\n });\n\n return res;\n};\n"]}
package/es/view/View.js CHANGED
@@ -137,12 +137,17 @@ export default class View extends EventEmitter {
137
137
  }
138
138
  getMarksBySelector(selector) {
139
139
  if (!selector) return null;
140
- const selectors = array(selector);
141
- let res = [];
140
+ const selectors = array(selector), res = [];
142
141
  return selectors.forEach((selectorStr => {
143
- isGrammar(selectorStr) ? res = res.concat(selectorStr) : (selectorStr[0] === ID_PREFIX && (res = res.concat(this.getMarkById(selectorStr.slice(1)))),
144
- selectorStr[0] === NAME_PREFIX && (res = res.concat(this.getMarksByName(selectorStr.slice(1)))),
145
- isMarkType(selectorStr) && (res = res.concat(this.getMarksByType(selectorStr))));
142
+ if (isGrammar(selectorStr)) return void res.push(selectorStr);
143
+ if (selectorStr[0] === ID_PREFIX) {
144
+ const mark = this.getMarkById(selectorStr.slice(1));
145
+ return void (mark && res.push(mark));
146
+ }
147
+ const marks = selectorStr[0] === NAME_PREFIX ? this.getMarksByName(selectorStr.slice(1)) : isMarkType(selectorStr) ? this.getMarksByType(selectorStr) : null;
148
+ marks && marks.length && marks.forEach((mark => {
149
+ res.push(mark);
150
+ }));
146
151
  })), res;
147
152
  }
148
153
  updateSignal(signal, value) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/view/View.ts"],"names":[],"mappings":"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","file":"View.js","sourcesContent":["import type { IBounds, ILogger } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { EventEmitter, debounce, isObject, isString, getContainerSize, Logger, array, isNil } from '@visactor/vutils';\nimport type { IColor } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { vglobal } from '@visactor/vrender-core';\nimport type { CoordinateType } from '@visactor/vgrammar-coordinate';\nimport type { IElement } from './../types/element';\nimport type {\n MarkSpec,\n IData,\n ISignal,\n ViewSpec,\n IView,\n IViewOptions,\n IViewThemeConfig,\n IViewEventConfig,\n Hooks,\n IMark,\n EventSpec,\n GroupMarkSpec,\n BaseEventSpec,\n MarkType,\n GrammarScaleType,\n SignalFunctionType,\n IScale,\n IGrammarBase,\n IGroupMark,\n IGlyphMark,\n ICoordinate,\n BaseEventHandler,\n GlyphMarkSpec,\n IRecordedGrammars,\n IComponent,\n ComponentSpec,\n IRecordedTreeGrammars,\n IMarkTreeNode,\n IRunningConfig,\n IViewAnimate,\n ITheme,\n InteractionSpec,\n IInteraction\n} from '../types/';\nimport { Data } from './data';\nimport { initializeEventConfig, permit, prevent } from './events';\nimport Dataflow from './dataflow';\nimport { traverseMarkTree } from '../graph/mark-tree';\nimport { BridgeElementKey } from '../graph/constants';\nimport CanvasRenderer from '../graph/canvas-renderer';\nimport getExtendedEvents from '../graph/util/events-extend';\nimport {\n BROWSER,\n NO_TRAP,\n SIGNAL_WIDTH,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_AUTOFIT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_VIEW_HEIGHT,\n EVENT_SOURCE_VIEW,\n EVENT_SOURCE_WINDOW,\n SIGNAL_VIEW_BOX\n} from './constants';\nimport { Signal } from './signal';\nimport {\n BuiltInSignalID,\n builtInSignals,\n normalizeMarkTree,\n normalizeRunningConfig,\n normalizePadding\n} from '../parse/view';\nimport { parseHandler, parseEventSelector, generateFilterByMark, ID_PREFIX, NAME_PREFIX } from '../parse/event';\nimport { isGrammar, parseReference } from '../parse/util';\nimport { configureEnvironment } from '../graph/util/env';\nimport { GroupMark } from './group';\nimport { Mark } from './mark';\nimport { defaultDoLayout } from '../graph/layout/layout';\nimport { GlyphMark } from './glyph';\nimport type { IMorph } from '../types/morph';\nimport { Morph } from '../graph/animation/morph';\nimport { RecordedGrammars, RecordedTreeGrammars } from './grammar-record';\nimport { ViewAnimate } from './animate';\nimport type { IRenderer } from '../types/renderer';\nimport { ComponentEnum, HOOK_EVENT, LayoutState, GrammarMarkType } from '../graph/enums';\nimport type {\n IAxis,\n IDatazoom,\n IGrid,\n ILabel,\n ILegend,\n IPlayer,\n IScrollbar,\n ISlider,\n ITitle\n} from '../types/component';\nimport { Text } from '../semantic-marks/text';\nimport { ThemeManager } from '../theme/theme-manager';\nimport { Factory } from '../core/factory';\nimport { Component } from './component';\nimport { isMarkType, removeGraphicItem } from '../graph/util/graphic';\n\n/**\n * Create a new View instance from a VGrammar dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The VGrammar dataflow runtime specification.\n */\nexport default class View extends EventEmitter implements IView {\n /** render element */\n container: HTMLElement;\n\n /** renderer */\n renderer: IRenderer;\n animate: IViewAnimate;\n rootMark: IGroupMark;\n\n /** life circle hooks */\n hooks: Hooks;\n\n logger: ILogger;\n\n grammars: IRecordedGrammars;\n\n private _isReleased: boolean;\n private _spec: ViewSpec;\n private _config: IViewThemeConfig;\n private _options: IViewOptions;\n\n private _cachedGrammars: IRecordedTreeGrammars;\n private _willMorphMarks: { prev: IMark[]; next: IMark[] }[];\n\n /** morph animate */\n private _morph: IMorph;\n\n private _eventConfig: IViewEventConfig;\n private _eventListeners: Array<{\n type: string;\n source: any;\n handler: any;\n }>;\n\n private _theme: ITheme;\n\n private _dataflow: Dataflow;\n /** 正在执行的dataflow */\n private _currentDataflow?: Promise<any>;\n /** 正在执行的任务 */\n private _running?: Promise<this>;\n\n /** 初次渲染或者更新spec,需要构建布局树 */\n private _needBuildLayoutTree?: boolean;\n /** 布局阶段 */\n private _layoutState?: LayoutState;\n\n /** 布局树,存储所有需要计算布局的mark元素 */\n private _layoutMarks?: IMark[];\n\n private _background?: IColor;\n private _eventCache: Record<string, () => void>;\n /** 当前是否存在增量渲染元素 */\n private _progressiveMarks?: IMark[];\n private _progressiveRafId?: number;\n private _observer: ResizeObserver = null;\n private _boundInteractions?: IInteraction[];\n\n static useRegisters(comps: (() => void)[]) {\n comps.forEach((fn: () => void) => {\n fn();\n });\n }\n\n constructor(options: IViewOptions = {}, config: IViewThemeConfig = {}) {\n super();\n this._config = config;\n this._options = Object.assign(\n {\n mode: BROWSER\n },\n options\n );\n this.initialize();\n }\n // emit: <T extends EventEmitter.EventNames<string | symbol>>(\n // event: T,\n // ...args: EventEmitter.EventArgs<string | symbol, T>\n // ) => boolean;\n\n // --- Lookup Grammars ---\n\n getGrammarById(id: string) {\n return this.grammars.getGrammar(id);\n }\n getSignalById<T>(id: string): ISignal<T> | null {\n return this.grammars.getSignal(id);\n }\n getDataById(id: string): IData | null {\n return this.grammars.getData(id);\n }\n getScaleById(id: string): IScale | null {\n return this.grammars.getScale(id);\n }\n getCoordinateById(id: string) {\n return this.grammars.getCoordinate(id);\n }\n getMarkById(id: string): IMark | null {\n return this.grammars.getMark(id);\n }\n\n getCustomizedById(id: string): IGrammarBase | null {\n return this.grammars.getCustomized(id);\n }\n\n getGrammarsByName(name: string) {\n return this.grammars.filter(grammar => grammar.name() === name);\n }\n\n getGrammarsByType(grammarType: string) {\n return this.grammars.filter(grammar => grammar.grammarType === grammarType);\n }\n getMarksByType(markType: string) {\n return this.grammars.getAllMarks().filter(mark => mark.markType === markType);\n }\n getMarksByName(name: string): IMark[] | null {\n return this.grammars.getAllMarks().filter(mark => mark.name() === name);\n }\n getMarksBySelector(selector: string | string[] | IMark | IMark[]): IMark[] | null {\n if (!selector) {\n return null;\n }\n const selectors = array(selector);\n let res: IMark[] = [];\n\n selectors.forEach(selectorStr => {\n if (isGrammar(selectorStr)) {\n res = res.concat(selectorStr);\n return;\n }\n\n if (selectorStr[0] === ID_PREFIX) {\n res = res.concat(this.getMarkById(selectorStr.slice(1)));\n }\n\n if (selectorStr[0] === NAME_PREFIX) {\n res = res.concat(this.getMarksByName(selectorStr.slice(1)));\n }\n\n if (isMarkType(selectorStr)) {\n res = res.concat(this.getMarksByType(selectorStr));\n }\n });\n\n return res;\n }\n\n // --- Grammar ---\n\n private updateSignal<T>(signal: string | ISignal<T>, value: T) {\n if (isString(signal)) {\n signal = this.getSignalById<T>(signal);\n }\n signal.set(value);\n this.commit(signal);\n }\n\n signal<T>(value?: T, update?: SignalFunctionType<T>): ISignal<T> {\n const signal: ISignal<T> = new Signal<T>(this);\n if (arguments.length >= 1) {\n signal.value(value);\n }\n if (arguments.length >= 2) {\n signal.update(update);\n }\n this.grammars.record(signal);\n this._dataflow.add(signal);\n return signal;\n }\n\n data(values?: any[]): IData {\n const data: IData = new Data(this, values);\n this.grammars.record(data);\n this._dataflow.add(data);\n return data;\n }\n\n scale(type: GrammarScaleType) {\n const scale = Factory.createGrammar('scale', this, type) as IScale;\n\n if (scale) {\n this.grammars.record(scale);\n this._dataflow.add(scale);\n }\n return scale;\n }\n\n coordinate(type: CoordinateType) {\n const coordinate = Factory.createGrammar('coordinate', this, type) as ICoordinate;\n\n if (coordinate) {\n this.grammars.record(coordinate);\n this._dataflow.add(coordinate);\n }\n return coordinate;\n }\n\n mark(\n type: MarkType,\n group?: IGroupMark | string,\n markOptions?: { glyphType?: string; componentType?: string; mode?: '2d' | '3d' }\n ) {\n const groupMark = isString(group) ? (this.getMarkById(group) as IGroupMark) : group;\n\n let mark: IMark;\n switch (type) {\n case GrammarMarkType.group:\n mark = new GroupMark(this, groupMark);\n break;\n case GrammarMarkType.glyph:\n mark = new GlyphMark(this, markOptions?.glyphType, groupMark);\n break;\n // components\n case GrammarMarkType.component:\n mark = Factory.hasComponent(markOptions?.componentType)\n ? Factory.createComponent(markOptions?.componentType, this, groupMark, markOptions?.mode)\n : new Component(this, markOptions?.componentType, groupMark, markOptions?.mode);\n break;\n case GrammarMarkType.text:\n mark = new Text(this, type, groupMark);\n break;\n default:\n mark = Factory.hasMark(type) ? Factory.createMark(type, this, groupMark) : new Mark(this, type, groupMark);\n }\n this.grammars.record(mark);\n this._dataflow.add(mark);\n return mark;\n }\n\n group(group?: IGroupMark | string) {\n return this.mark(GrammarMarkType.group, group) as IGroupMark;\n }\n\n glyph(glyphType: string, group: IGroupMark | string) {\n return this.mark(GrammarMarkType.glyph, group, { glyphType }) as IGlyphMark;\n }\n\n component(componentType: string, group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType, mode }) as IComponent;\n }\n\n axis(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.axis, mode }) as IAxis;\n }\n\n grid(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.grid, mode }) as IGrid;\n }\n\n legend(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.legend }) as ILegend;\n }\n\n slider(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.slider }) as ISlider;\n }\n\n label(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.label }) as ILabel;\n }\n\n datazoom(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.datazoom }) as IDatazoom;\n }\n\n player(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.player }) as IPlayer;\n }\n\n title(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.title }) as ITitle;\n }\n\n scrollbar(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.scrollbar }) as IScrollbar;\n }\n\n customized(type: string, spec: any) {\n const grammar = Factory.createGrammar(type, this, spec?.type);\n\n if (grammar) {\n grammar.parse(spec);\n this.grammars.record(grammar);\n this._dataflow.add(grammar);\n return grammar;\n }\n }\n\n addGrammar(grammar: IGrammarBase) {\n if (this.grammars.find(storedGrammar => storedGrammar.uid === grammar.uid)) {\n return this;\n }\n this.grammars.record(grammar);\n this._dataflow.add(grammar);\n grammar.parse(grammar.getSpec());\n\n // update layout tree after grammar update\n this._needBuildLayoutTree = true;\n return this;\n }\n\n removeGrammar(grammar: string | IGrammarBase) {\n const recordedGrammar = isString(grammar) ? this.getGrammarById(grammar) : grammar;\n if (!recordedGrammar || !this.grammars.find(storedGrammar => storedGrammar.uid === recordedGrammar.uid)) {\n return this;\n }\n if (recordedGrammar.grammarType === 'mark') {\n (recordedGrammar as IMark).prepareRelease();\n }\n this._cachedGrammars.record(recordedGrammar);\n this._dataflow.remove(recordedGrammar);\n this.grammars.unrecord(recordedGrammar);\n\n // update layout tree after grammar update\n this._needBuildLayoutTree = true;\n return this;\n }\n\n removeAllGrammars() {\n this.grammars.traverse(grammar => {\n if (grammar.grammarType === 'signal' && BuiltInSignalID.includes(grammar.id())) {\n return;\n } else if (grammar.grammarType === 'mark' && grammar.id() === 'root') {\n return;\n }\n this.removeGrammar(grammar);\n });\n return this;\n }\n\n removeAllGraphicItems() {\n this.traverseMarkTree((mark: IMark) => {\n if (mark.graphicItem) {\n removeGraphicItem(mark.graphicItem);\n mark.elementMap.forEach(element => {\n element.resetGraphicItem();\n });\n mark.graphicItem = null;\n }\n });\n\n return this;\n }\n\n // --- Handle Spec ---\n\n parseSpec(spec: ViewSpec) {\n this.emit(HOOK_EVENT.BEFORE_PARSE_VIEW);\n this._spec = spec;\n normalizeMarkTree(spec);\n\n if (spec.theme) {\n this.theme(spec.theme);\n } else {\n this.theme(ThemeManager.getDefaultTheme());\n }\n\n if (spec.width) {\n this.width(spec.width);\n }\n\n if (spec.height) {\n this.height(spec.height);\n }\n\n this.padding(spec.padding ?? this._options.padding ?? this._theme.padding);\n\n if (!this.width() || !this.height()) {\n const size = this._getContainerSize();\n\n if (size) {\n this.updateSignal(SIGNAL_WIDTH, size.width);\n this.updateSignal(SIGNAL_HEIGHT, size.height);\n }\n }\n\n if (spec.signals?.length) {\n spec.signals.forEach(signal => {\n this.signal().parse(signal);\n });\n }\n\n if (spec.data?.length) {\n spec.data.forEach(data => {\n this.data(null).parse(data);\n });\n }\n\n if (spec.coordinates?.length) {\n spec.coordinates.forEach(coordinate => {\n this.coordinate(coordinate.type)?.parse(coordinate);\n });\n }\n\n if (spec.scales?.length) {\n spec.scales.forEach(scale => {\n this.scale(scale.type)?.parse(scale);\n });\n }\n\n const customizedGrammars = Factory.getGrammars();\n\n Object.keys(customizedGrammars).forEach(key => {\n const { specKey } = customizedGrammars[key];\n\n if (spec[specKey] && spec[specKey].length) {\n spec[specKey].forEach((specValue: any) => {\n this.customized(key, specValue);\n });\n }\n });\n\n if (spec.marks && spec.marks.length) {\n spec.marks.forEach(mark => {\n this.parseMarkSpec(mark);\n });\n }\n\n if (spec.events && spec.events.length) {\n spec.events.forEach(eventConfig => {\n this.event(eventConfig);\n });\n }\n\n if (spec.interactions && spec.interactions.length) {\n spec.interactions.forEach(interaction => {\n this.interaction(interaction.type, interaction);\n });\n }\n\n if (spec.animation === false) {\n this.animate.disable();\n } else {\n this.animate.enable();\n }\n\n this.emit(HOOK_EVENT.AFTER_PARSE_VIEW);\n\n // update layout tree after update spec\n this._needBuildLayoutTree = true;\n this._layoutState = LayoutState.before;\n\n return this;\n }\n\n updateSpec(spec: ViewSpec) {\n this.removeAllInteractions();\n this.removeAllGrammars();\n return this.parseSpec(spec);\n }\n\n private parseBuiltIn() {\n // 创建内置的 Signal\n builtInSignals(this._options, this._config, this.getCurrentTheme()).forEach(signalSpec => {\n const signal = this.signal().parse(signalSpec);\n if (signalSpec.value) {\n signal.set(signalSpec.value);\n }\n });\n\n const rootMark: GroupMarkSpec = {\n id: 'root',\n type: 'group',\n encode: {\n enter: { x: 0, y: 0 },\n update: {\n width: { signal: 'width' },\n height: { signal: 'height' }\n }\n }\n };\n this.parseMarkSpec(rootMark);\n this.rootMark = this.getMarkById('root') as IGroupMark;\n }\n\n private parseMarkSpec(spec: MarkSpec) {\n const markOptions =\n spec.type === GrammarMarkType.glyph\n ? { glyphType: (spec as GlyphMarkSpec).glyphType }\n : spec.type === GrammarMarkType.component\n ? { componentType: (spec as ComponentSpec).componentType, mode: (spec as ComponentSpec).mode }\n : null;\n this.mark(spec.type, spec.group, markOptions).parse(spec);\n (spec as GroupMarkSpec).marks?.forEach(childSpec => {\n this.parseMarkSpec(childSpec);\n });\n }\n\n // --- Theme API ---\n theme(theme: ITheme | string) {\n if (isString(theme)) {\n this._theme = ThemeManager.getTheme(theme) ?? ThemeManager.getDefaultTheme();\n } else {\n this._theme = theme;\n }\n const { background, padding } = this._spec ?? {};\n if (this._theme) {\n this.background(background ?? this._options.background ?? this._theme.background);\n this.padding(padding ?? this._options.padding ?? this._theme.padding);\n this.renderer.stage()?.setTheme?.(Object.assign({}, this._theme.marks));\n } else {\n this.background(background ?? this._options.background);\n this.padding(padding ?? this._options.padding);\n }\n\n return this;\n }\n\n getCurrentTheme() {\n return this._theme;\n }\n async setCurrentTheme(theme: ITheme | string, render: boolean = true) {\n if (this._isReleased) {\n return;\n }\n this.theme(theme);\n // trigger encode for all marks\n this.grammars.getAllMarks().forEach(mark => {\n mark.commit();\n });\n\n if (render) {\n await this.evaluate();\n\n if (this._isReleased) {\n return;\n }\n // FIXME: trigger render\n this.renderer.render(true);\n } else {\n await this._dataflow.evaluate();\n }\n\n return this;\n }\n\n // --- Global Configure ---\n\n background(value?: IColor) {\n if (arguments.length) {\n this._background = value;\n this.renderer.background(value);\n return value;\n }\n return this._background;\n }\n\n width(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_WIDTH);\n if (arguments.length) {\n this._options.width = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n height(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_HEIGHT);\n if (arguments.length) {\n this._options.height = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n viewWidth(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_VIEW_WIDTH);\n if (arguments.length) {\n // view width depends on canvas width\n const padding = this.padding();\n this.width(value + padding.left + padding.right);\n return value;\n }\n return signal.output() as number;\n }\n\n viewHeight(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_VIEW_HEIGHT);\n if (arguments.length) {\n // view height depends on canvas height\n const padding = this.padding();\n this.height(value + padding.top + padding.bottom);\n return value;\n }\n return signal.output() as number;\n }\n\n padding(value?: number | { top?: number; left?: number; right?: number; bottom?: number }) {\n const signal = this.getSignalById<{ top: number; left: number; right: number; bottom: number }>(SIGNAL_PADDING);\n if (arguments.length) {\n const padding = normalizePadding(value);\n this.updateSignal(signal, padding);\n return padding;\n }\n return normalizePadding(signal.output());\n }\n\n autoFit(value?: boolean) {\n const signal = this.getSignalById<boolean>(SIGNAL_AUTOFIT);\n if (arguments.length) {\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as boolean;\n }\n\n getViewBox() {\n const signal = this.getSignalById<IBounds>(SIGNAL_VIEW_BOX);\n\n return signal?.output() as IBounds;\n }\n\n // --- Layout ---\n\n updateLayoutTag() {\n this._layoutState = LayoutState.before;\n return this;\n }\n\n getLayoutState() {\n return this._layoutState;\n }\n\n private buildLayoutTree() {\n const markMap: Record<number, boolean> = {};\n const rootMarks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n markMap[mark.id()] = true;\n\n if (mark.group) {\n if (!markMap[mark.group.id()]) {\n rootMarks.push(mark);\n }\n } else {\n rootMarks.push(mark);\n }\n\n if (mark.markType === GrammarMarkType.group) {\n (mark as IGroupMark).updateLayoutChildren();\n }\n },\n (mark: IMark) => mark.needLayout()\n );\n\n this._layoutMarks = rootMarks;\n }\n\n private doLayout() {\n const doLayout = this._options.doLayout || defaultDoLayout;\n if (doLayout && this._layoutMarks?.length) {\n this.emit(HOOK_EVENT.BEFORE_DO_LAYOUT);\n doLayout(this._layoutMarks, this._options, this);\n this.emit(HOOK_EVENT.AFTER_DO_LAYOUT);\n }\n }\n\n private handleLayoutEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_LAYOUT_END);\n this._layoutMarks.forEach(layoutMark => {\n traverseMarkTree(\n layoutMark,\n 'layoutChildren',\n (mark: IMark) => {\n mark.handleLayoutEnd();\n },\n // 顶层节点,不需要重新执行了\n (mark: IMark) => mark !== layoutMark\n );\n });\n this.emit(HOOK_EVENT.AFTER_MARK_LAYOUT_END);\n }\n\n private handleRenderEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_RENDER_END);\n traverseMarkTree(this.rootMark, 'children', (mark: IMark) => {\n mark.handleRenderEnd();\n });\n this.emit(HOOK_EVENT.AFTER_MARK_RENDER_END);\n }\n\n // --- Dataflow ---\n\n commit(grammar: IGrammarBase) {\n this._dataflow.commit(grammar);\n return this;\n }\n\n run(runningConfig?: IRunningConfig) {\n this.evaluate(runningConfig);\n\n return this;\n }\n\n runSync(runningConfig?: IRunningConfig) {\n this.evaluateSync(runningConfig);\n\n return this;\n }\n\n isRunning() {\n return this._running;\n }\n\n async runAsync(runningConfig?: IRunningConfig) {\n if (this._isReleased) {\n return;\n }\n // await previously queued functions\n while (this._running) {\n await this._running;\n if (this._isReleased) {\n break;\n }\n }\n\n // run dataflow, manage running promise\n const clear = () => {\n this._running = null;\n };\n\n (this._running = this.evaluate(runningConfig)).then(clear, clear);\n\n return this._running;\n }\n\n async runNextTick(runningConfig?: IRunningConfig) {\n // delay the evaluate progress to next tick\n if (!this._currentDataflow) {\n this._currentDataflow = Promise.resolve().then(() => {\n return this.runAsync(runningConfig)\n .then(() => {\n this._currentDataflow = null;\n })\n .catch((e: any) => {\n this._currentDataflow = null;\n this.logger.error(e);\n });\n });\n }\n await this._currentDataflow;\n\n return this;\n }\n\n private doRender(immediately: boolean) {\n this.emit(HOOK_EVENT.BEFORE_DO_RENDER);\n // render as needed\n if (this.renderer) {\n if (!this._progressiveMarks) {\n this.animate.animate();\n }\n // 绘图 =>\n this.renderer.render(immediately);\n this.handleRenderEnd();\n }\n this.emit(HOOK_EVENT.AFTER_DO_RENDER);\n }\n\n private async evaluate(runningConfig?: IRunningConfig) {\n if (this._isReleased) {\n return;\n }\n const normalizedRunningConfig = normalizeRunningConfig(runningConfig);\n\n const grammarWillDetach = this._cachedGrammars.size() > 0;\n\n if (grammarWillDetach) {\n this.reuseCachedGrammars(normalizedRunningConfig);\n this.detachCachedGrammar();\n }\n // For most of time, width & height signal won't be modified duration dataflow,\n // so resizing before generating vRender graphic items should be faster.\n const hasResize = this._resizeRenderer();\n const hasUpdate = this._dataflow.hasCommitted();\n\n // if no grammar is update and layout is unnecessary, end evaluating\n if (!grammarWillDetach && !hasUpdate && !this._layoutState && !hasResize) {\n return this;\n }\n\n this.clearProgressive();\n // stop auto render of vrender to avoid the case that vrender auto render before the asynchronous task is done\n this.renderer?.preventRender(true);\n\n // evaluate dataflow\n await this._dataflow.evaluate();\n\n if (this._isReleased) {\n return;\n }\n\n if (this._needBuildLayoutTree) {\n this.buildLayoutTree();\n this._needBuildLayoutTree = false;\n }\n\n if (this._layoutState) {\n this._layoutState = LayoutState.layouting;\n this.doLayout();\n\n if (this._dataflow.hasCommitted()) {\n this._layoutState = LayoutState.reevaluate;\n await this._dataflow.evaluate();\n\n if (this._isReleased) {\n return;\n }\n }\n\n this._layoutState = LayoutState.after;\n if (this._layoutMarks?.length) {\n this.handleLayoutEnd();\n }\n }\n // enable auto render of vrender after the asynchronous task is done\n this.renderer?.preventRender(false);\n this._layoutState = null;\n\n this.findProgressiveMarks();\n\n // resize again if width/height signal is updated duration dataflow\n this._resizeRenderer();\n this.doRender(false);\n\n this._willMorphMarks?.forEach(morphMarks => {\n this._morph.morph(morphMarks.prev, morphMarks.next, normalizedRunningConfig);\n });\n this._willMorphMarks = null;\n\n this.releaseCachedGrammars(normalizedRunningConfig);\n\n this.doPreProgressive();\n\n return this;\n }\n\n private evaluateSync(runningConfig?: IRunningConfig) {\n const normalizedRunningConfig = normalizeRunningConfig(runningConfig);\n\n const grammarWillDetach = this._cachedGrammars.size() > 0;\n\n if (grammarWillDetach) {\n this.reuseCachedGrammars(normalizedRunningConfig);\n this.detachCachedGrammar();\n }\n\n const hasResize = this._resizeRenderer();\n const hasUpdate = this._dataflow.hasCommitted();\n\n if (!grammarWillDetach && !hasUpdate && !this._layoutState && !hasResize) {\n return this;\n }\n\n this.clearProgressive();\n // evaluate dataflow\n this._dataflow.evaluateSync();\n\n if (this._needBuildLayoutTree) {\n this.buildLayoutTree();\n this._needBuildLayoutTree = false;\n }\n\n if (this._layoutState) {\n this._layoutState = LayoutState.layouting;\n this.doLayout();\n\n if (this._dataflow.hasCommitted()) {\n this._layoutState = LayoutState.reevaluate;\n this._dataflow.evaluateSync();\n }\n\n this._layoutState = LayoutState.after;\n if (this._layoutMarks?.length) {\n this.handleLayoutEnd();\n }\n }\n this._layoutState = null;\n\n this.findProgressiveMarks();\n\n this._resizeRenderer();\n this.doRender(true);\n\n this._willMorphMarks?.forEach(morphMarks => {\n this._morph.morph(morphMarks.prev, morphMarks.next, normalizedRunningConfig);\n });\n this._willMorphMarks = null;\n\n this.releaseCachedGrammars(normalizedRunningConfig);\n\n this.doPreProgressive();\n\n return this;\n }\n\n private reuseCachedGrammars(runningConfig: IRunningConfig) {\n if (!this._willMorphMarks) {\n this._willMorphMarks = [];\n }\n\n if (runningConfig.reuse) {\n const reuseDiffUpdate = (diff: { prev: IGrammarBase; next: IGrammarBase }) => {\n diff.next.reuse(diff.prev);\n diff.prev.detachAll();\n diff.prev.clear();\n this._cachedGrammars.unrecord(diff.prev);\n };\n\n const diffedSignal = this._morph.diffGrammar(\n this._cachedGrammars.getAllSignals(),\n this.grammars.getAllSignals().filter(signal => !BuiltInSignalID.includes(signal.id()))\n );\n diffedSignal.update.forEach(reuseDiffUpdate);\n\n const diffedData = this._morph.diffGrammar(this._cachedGrammars.getAllData(), this.grammars.getAllData());\n diffedData.update.forEach(reuseDiffUpdate);\n\n const diffedScale = this._morph.diffGrammar(this._cachedGrammars.getAllScales(), this.grammars.getAllScales());\n diffedScale.update.forEach(reuseDiffUpdate);\n\n const diffedCoordinate = this._morph.diffGrammar(\n this._cachedGrammars.getAllCoordinates(),\n this.grammars.getAllCoordinates()\n );\n diffedCoordinate.update.forEach(reuseDiffUpdate);\n\n // TODO: reuse custom\n }\n\n const diffedMark = this._morph.diffMark(\n this._cachedGrammars.getAllMarks(),\n this.grammars.getAllMarks().filter(mark => mark.id() !== 'root'),\n runningConfig\n );\n diffedMark.update.forEach(diff => {\n const matched =\n diff.prev.length === 1 && diff.next.length === 1 && diff.prev[0].markType === diff.next[0].markType;\n const enableMarkMorphConfig =\n diff.prev.every(mark => mark.getMorphConfig().morph) && diff.next.every(mark => mark.getMorphConfig().morph);\n if (matched && runningConfig.reuse) {\n diff.next[0].reuse(diff.prev[0]);\n diff.prev[0].detachAll();\n diff.prev[0].clear();\n this._cachedGrammars.unrecord(diff.prev[0]);\n } else if ((runningConfig.morph && enableMarkMorphConfig) || runningConfig.morphAll) {\n this._willMorphMarks.push({ prev: diff.prev, next: diff.next });\n }\n });\n }\n\n private detachCachedGrammar() {\n this._cachedGrammars.traverse(grammar => {\n grammar.detachAll();\n if (grammar.grammarType === 'mark') {\n const mark = grammar as IMark;\n mark.group?.removeChild?.(mark);\n }\n });\n }\n\n private releaseCachedGrammars(runningConfig?: IRunningConfig) {\n // directly release all grammars except from marks\n this._cachedGrammars.traverse(grammar => {\n if (grammar.grammarType !== 'mark') {\n grammar.release();\n }\n });\n const markNodes = this._cachedGrammars.getAllMarkNodes();\n markNodes.forEach(node => {\n node.mark.animate.stop();\n if (runningConfig.enableExitAnimation) {\n this.animate.animateAddition(node.mark);\n }\n });\n const releaseUp = (node: IMarkTreeNode) => {\n // do nothing when mark is already released or is still animating\n if (!node.mark.view || node.mark.animate.getAnimatorCount() !== 0) {\n return;\n }\n // release when current node is leaf node\n if (!node.children || node.children.length === 0) {\n node.mark.release();\n // detach current node from tree and traverse above\n const parent = node.parent;\n if (parent) {\n node.parent.children = node.parent.children.filter(n => n !== node);\n node.parent = null;\n releaseUp(parent);\n }\n }\n };\n markNodes.forEach(node => {\n const mark = node.mark;\n if (mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n } else {\n mark.addEventListener('animationEnd', () => {\n if (mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n }\n });\n }\n });\n this._cachedGrammars.clear();\n }\n\n runAfter(callback: (view: IView) => void) {\n this._dataflow.runAfter(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n runBefore(callback: (view: IView) => void) {\n this._dataflow.runBefore(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer() {\n if (this._options.mode !== 'node') {\n this.logger.error(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n const stage = this.renderer?.stage?.();\n if (stage) {\n stage.render();\n const buffer = stage.window.getImageBuffer();\n return buffer;\n }\n this.logger.error(new ReferenceError(`render is not defined`));\n\n return null;\n }\n\n // --- Mark Tree ---\n\n traverseMarkTree(apply: (mark: IMark) => any, filter?: (mark: IMark) => boolean, leafFirst?: boolean) {\n traverseMarkTree(this.rootMark, 'children', apply, filter, leafFirst);\n return this;\n }\n\n // --- Resize ---\n\n private _bindResizeEvent() {\n if (this.autoFit()) {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n if (container) {\n const ResizeObserverWindow: any = window.ResizeObserver;\n this._observer = new ResizeObserverWindow(this._onResize);\n this._observer?.observe(container);\n }\n window.addEventListener('resize', this._onResize);\n }\n }\n\n private _unBindResizeEvent() {\n if (this.autoFit()) {\n window.removeEventListener('resize', this._onResize);\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n }\n }\n }\n\n private _getContainerSize() {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n\n if (container) {\n const { width: containerWidth, height: containerHeight } = getContainerSize(container!);\n const width = this._spec?.width ?? this._options.width ?? containerWidth;\n const height = this._spec?.height ?? this._options.height ?? containerHeight;\n\n return { width, height };\n }\n\n return null;\n }\n\n private _onResize = debounce((...args: any[]) => {\n const size = this._getContainerSize();\n\n if (size) {\n this.resize(size.width, size.height);\n }\n }, 100);\n\n async resize(width: number, height: number, render: boolean = true) {\n let needDataflow = false;\n\n // width value changed: update signal, skip resize op\n if (width !== this.width()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_WIDTH, width);\n }\n\n // height value changed: update signal, skip resize op\n if (height !== this.height()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_HEIGHT, height);\n }\n\n // run dataflow on width/height signal change\n if (needDataflow) {\n if (render) {\n await this.evaluate();\n } else {\n await this._dataflow.evaluate();\n }\n }\n\n return this;\n }\n\n private _resizeRenderer() {\n const width = this.width();\n const height = this.height();\n\n if (this.renderer.shouldResize(width, height)) {\n this.renderer.resize(width, height);\n this.emit('resize', {}, { width, height });\n return true;\n }\n\n return false;\n }\n\n // --- Event ---\n\n private bindEvents(eventSpec: BaseEventSpec) {\n if (this._eventConfig.disable) {\n return;\n }\n const { type: evtType, filter, callback, throttle, debounce, consume, target, dependency } = eventSpec;\n const eventSelector = parseEventSelector(evtType);\n\n if (!eventSelector) {\n return;\n }\n const { source, type } = eventSelector;\n\n const markFilter = generateFilterByMark(eventSelector);\n const targetSignals =\n Array.isArray(target) && target.length\n ? target.map(entry => {\n return {\n signal: this.getSignalById(entry.target),\n callback: entry.callback\n };\n })\n : [\n {\n signal: isString(target) ? this.getSignalById(target) : null,\n callback\n }\n ];\n const validateSignals = targetSignals.filter(entry => entry.signal || entry.callback);\n const refs = parseReference(dependency, this);\n\n const send = parseHandler(\n (evt?: any, element?: IElement) => {\n const needPreventDefault =\n (source === EVENT_SOURCE_VIEW && prevent(this._eventConfig, type)) ||\n (consume && (evt.cancelable === undefined || evt.cancelable));\n\n if (source === EVENT_SOURCE_WINDOW) {\n evt = getExtendedEvents(this, evt, element, type, EVENT_SOURCE_WINDOW);\n }\n\n let hasCommitted = false;\n\n if ((!filter || filter(evt)) && (!markFilter || markFilter(element)) && validateSignals.length) {\n const params = refs.reduce((params, ref) => {\n params[ref.id()] = ref.output();\n return params;\n }, {});\n validateSignals.forEach(entry => {\n if (entry.callback && entry.signal) {\n const changed = entry.signal.set(entry.callback(evt, params));\n\n if (changed) {\n this.commit(entry.signal);\n hasCommitted = true;\n }\n } else if (entry.callback) {\n entry.callback(evt, params);\n } else {\n this.commit(entry.signal);\n hasCommitted = true;\n }\n });\n }\n\n if (needPreventDefault) {\n evt.preventDefault();\n }\n\n if (consume) {\n evt.stopPropagation();\n }\n\n if (hasCommitted) {\n this.runAsync();\n }\n },\n { throttle, debounce }\n );\n\n if (source === EVENT_SOURCE_VIEW) {\n if (permit(this._eventConfig, EVENT_SOURCE_VIEW, type)) {\n // send traps errors, so use {trap: false} option\n this.addEventListener(type, send, NO_TRAP);\n\n return () => {\n this.removeEventListener(type, send);\n };\n }\n } else if (source === EVENT_SOURCE_WINDOW) {\n vglobal.addEventListener(type, send);\n this._eventListeners.push({\n type: type,\n source: vglobal,\n handler: send\n });\n\n return () => {\n vglobal.removeEventListener(type, send);\n\n const index = this._eventListeners.findIndex((entry: any) => {\n return entry.type === type && entry.source === vglobal && entry.handler === send;\n });\n\n if (index >= 0) {\n this._eventListeners.splice(index, 1);\n }\n };\n }\n }\n\n event(eventSpec: EventSpec) {\n if ('between' in eventSpec) {\n const [starEvent, endEvent] = eventSpec.between;\n // FIXME between需要生成唯一ID\n const id = `${starEvent.type}-${eventSpec.type}-${endEvent.type}`;\n\n let unbindEndEvent: any;\n\n this.bindEvents(\n Object.assign({}, starEvent, {\n callback: () => {\n if (!this._eventCache) {\n this._eventCache = {};\n }\n // 中间的事件绑定\n if (!this._eventCache[id]) {\n const unbindEvent = this.bindEvents(eventSpec);\n this._eventCache[id] = unbindEvent;\n }\n if (!unbindEndEvent) {\n // 结束的事件绑定\n unbindEndEvent = this.bindEvents(\n Object.assign({}, endEvent, {\n callback: () => {\n if (this._eventCache[id]) {\n this._eventCache[id]();\n this._eventCache[id] = null;\n }\n }\n })\n );\n }\n }\n })\n );\n } else if ('merge' in eventSpec) {\n eventSpec.merge.forEach(entry => {\n const singleEvent: Partial<BaseEventSpec> = Object.assign({}, eventSpec);\n\n if (isString(entry)) {\n singleEvent.type = entry;\n } else if (isObject(entry)) {\n Object.assign(singleEvent, entry);\n }\n singleEvent.debounce = 50;\n this.bindEvents(singleEvent as BaseEventSpec);\n });\n } else {\n this.bindEvents(eventSpec);\n }\n }\n\n interaction(type: string, spec: Partial<InteractionSpec>) {\n const interaction = Factory.createInteraction(type, this, spec);\n\n if (interaction) {\n interaction.bind();\n\n if (!this._boundInteractions) {\n this._boundInteractions = [];\n }\n\n this._boundInteractions.push(interaction);\n }\n return interaction;\n }\n\n removeInteraction(type: string | IInteraction, id?: string) {\n if (this._boundInteractions) {\n const instances = this._boundInteractions.filter(interaction => {\n if (!isNil(id)) {\n return interaction.options?.id === id;\n }\n\n if (isString(type)) {\n return interaction.type === type;\n }\n\n if (type) {\n return interaction === type;\n }\n });\n\n if (instances.length) {\n instances.forEach(instance => {\n instance.unbind();\n });\n }\n }\n\n return this;\n }\n\n removeAllInteractions() {\n if (this._boundInteractions) {\n this._boundInteractions.forEach(instance => {\n instance.unbind();\n });\n\n this._boundInteractions = null;\n }\n\n return this;\n }\n\n private initEvent() {\n // 基于 vRender 事件系统提供的委托机制\n const stage = this.renderer.stage();\n stage && stage.on('*', this.delegateEvent);\n }\n\n private delegateEvent = (event: any, type: string) => {\n const activeElement = event.target?.[BridgeElementKey];\n const extendedEvt = getExtendedEvents(this, event, activeElement, type, EVENT_SOURCE_VIEW);\n this.emit(type, extendedEvt, activeElement);\n };\n\n addEventListener(type: string, handler: BaseEventHandler, options?: any) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n callback = handler;\n (callback as any).raw = handler;\n }\n if (options && options.target) {\n (callback as any).target = options.target;\n }\n this.on(type, callback);\n return this;\n }\n\n removeEventListener(type: string, handler?: BaseEventHandler) {\n if (handler) {\n this.off(type, handler);\n } else {\n this.off(type);\n }\n return this;\n }\n\n // --- Initialization ---\n\n private initializeRenderer() {\n const width = this._options.width;\n const height = this._options.height;\n\n this.renderer = new CanvasRenderer(this);\n this.renderer.initialize(width, height, this._options, this._eventConfig).background(this._background);\n }\n\n private initialize() {\n this.grammars = new RecordedGrammars(\n grammar => grammar.id(),\n (key, grammar) => this.logger.warn(`Grammar id '${key}' has been occupied`, grammar)\n );\n this._cachedGrammars = new RecordedTreeGrammars(grammar => grammar.id());\n\n if (this._options.logger) {\n Logger.setInstance(this._options.logger);\n }\n this.logger = Logger.getInstance(this._options.logLevel ?? 0);\n\n this._dataflow = new Dataflow();\n\n this.animate = new ViewAnimate(this);\n\n this._morph = new Morph();\n\n // 执行钩子\n if (this._options.hooks) {\n Object.keys(this._options.hooks).forEach(key => {\n this.on(key, this._options.hooks[key]);\n });\n // 生命周期事件(包含原性能测试钩子)\n this.hooks = this._options.hooks;\n }\n this.container = null;\n\n // initialize renderer, handler and event management\n this.renderer = null;\n this._eventListeners = [];\n\n // initialize event configuration\n this._eventConfig = initializeEventConfig(this._options.eventConfig);\n\n // set default theme\n this._theme = this._options.disableTheme ? null : ThemeManager.getDefaultTheme();\n\n this.parseBuiltIn();\n\n // initialize DOM container(s) and renderer\n configureEnvironment(this._options);\n this.initializeRenderer();\n\n if (!this._eventConfig.disable) {\n this.initEvent();\n }\n this._bindResizeEvent();\n\n this._currentDataflow = null;\n // update layout tree after initialization\n this._needBuildLayoutTree = true;\n this._layoutState = LayoutState.before;\n\n // apply theme value after initialization\n this.theme(this._theme);\n }\n\n // --- Others ---\n\n pauseProgressive() {\n return false;\n }\n resumeProgressive() {\n return false;\n }\n restartProgressive() {\n return false;\n }\n\n private findProgressiveMarks() {\n const marks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n marks.push(mark);\n },\n (mark: IMark) => mark.markType !== GrammarMarkType.group && mark.isProgressive()\n );\n\n if (!marks.length) {\n this._progressiveMarks = null;\n return null;\n }\n\n this._progressiveMarks = marks;\n\n if (this.renderer) {\n this.renderer.combineIncrementalLayers();\n }\n\n return marks;\n }\n\n private doPreProgressive() {\n if (this._progressiveMarks && this._progressiveMarks.some(mark => mark.isDoingProgressive())) {\n const raf = vglobal.getRequestAnimationFrame();\n this._progressiveRafId = raf(this.handleProgressiveFrame);\n }\n }\n\n /** 监听frame事件,更新增量元素的mark */\n private handleProgressiveFrame = () => {\n if (this._progressiveMarks.length) {\n this._progressiveMarks.forEach(mark => {\n if (mark.isDoingProgressive()) {\n mark.evaluateProgressive();\n }\n });\n }\n\n this.doPreProgressive();\n };\n\n /** 清除 */\n private clearProgressive() {\n if (this._progressiveRafId) {\n const cancelRaf = vglobal.getCancelAnimationFrame();\n cancelRaf(this._progressiveRafId);\n }\n\n if (this._progressiveMarks && this._progressiveMarks.length) {\n this._progressiveMarks.forEach(entry => {\n entry.clearProgressive();\n });\n\n this._progressiveMarks = null;\n }\n }\n\n // --- release ---\n release() {\n this._isReleased = true;\n this._unBindResizeEvent();\n this.clearProgressive();\n Factory.unregisterRuntimeTransforms();\n\n this.animate.stop();\n\n this.grammars.release();\n this._cachedGrammars.release();\n\n this._dataflow.release();\n this._dataflow = null;\n\n this.renderer?.release?.();\n this.renderer = null;\n this._boundInteractions = null;\n\n // 卸载事件\n this.removeAllListeners();\n this._eventListeners?.forEach((listener: any) => {\n listener.source.removeEventListener(listener.type, listener.handler);\n });\n this._eventListeners = null;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/view/View.ts"],"names":[],"mappings":"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","file":"View.js","sourcesContent":["import type { IBounds, ILogger } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { EventEmitter, debounce, isObject, isString, getContainerSize, Logger, array, isNil } from '@visactor/vutils';\nimport type { IColor } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { vglobal } from '@visactor/vrender-core';\nimport type { CoordinateType } from '@visactor/vgrammar-coordinate';\nimport type { IElement } from './../types/element';\nimport type {\n MarkSpec,\n IData,\n ISignal,\n ViewSpec,\n IView,\n IViewOptions,\n IViewThemeConfig,\n IViewEventConfig,\n Hooks,\n IMark,\n EventSpec,\n GroupMarkSpec,\n BaseEventSpec,\n MarkType,\n GrammarScaleType,\n SignalFunctionType,\n IScale,\n IGrammarBase,\n IGroupMark,\n IGlyphMark,\n ICoordinate,\n BaseEventHandler,\n GlyphMarkSpec,\n IRecordedGrammars,\n IComponent,\n ComponentSpec,\n IRecordedTreeGrammars,\n IMarkTreeNode,\n IRunningConfig,\n IViewAnimate,\n ITheme,\n InteractionSpec,\n IInteraction\n} from '../types/';\nimport { Data } from './data';\nimport { initializeEventConfig, permit, prevent } from './events';\nimport Dataflow from './dataflow';\nimport { traverseMarkTree } from '../graph/mark-tree';\nimport { BridgeElementKey } from '../graph/constants';\nimport CanvasRenderer from '../graph/canvas-renderer';\nimport getExtendedEvents from '../graph/util/events-extend';\nimport {\n BROWSER,\n NO_TRAP,\n SIGNAL_WIDTH,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_AUTOFIT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_VIEW_HEIGHT,\n EVENT_SOURCE_VIEW,\n EVENT_SOURCE_WINDOW,\n SIGNAL_VIEW_BOX\n} from './constants';\nimport { Signal } from './signal';\nimport {\n BuiltInSignalID,\n builtInSignals,\n normalizeMarkTree,\n normalizeRunningConfig,\n normalizePadding\n} from '../parse/view';\nimport { parseHandler, parseEventSelector, generateFilterByMark, ID_PREFIX, NAME_PREFIX } from '../parse/event';\nimport { isGrammar, parseReference } from '../parse/util';\nimport { configureEnvironment } from '../graph/util/env';\nimport { GroupMark } from './group';\nimport { Mark } from './mark';\nimport { defaultDoLayout } from '../graph/layout/layout';\nimport { GlyphMark } from './glyph';\nimport type { IMorph } from '../types/morph';\nimport { Morph } from '../graph/animation/morph';\nimport { RecordedGrammars, RecordedTreeGrammars } from './grammar-record';\nimport { ViewAnimate } from './animate';\nimport type { IRenderer } from '../types/renderer';\nimport { ComponentEnum, HOOK_EVENT, LayoutState, GrammarMarkType } from '../graph/enums';\nimport type {\n IAxis,\n IDatazoom,\n IGrid,\n ILabel,\n ILegend,\n IPlayer,\n IScrollbar,\n ISlider,\n ITitle\n} from '../types/component';\nimport { Text } from '../semantic-marks/text';\nimport { ThemeManager } from '../theme/theme-manager';\nimport { Factory } from '../core/factory';\nimport { Component } from './component';\nimport { isMarkType, removeGraphicItem } from '../graph/util/graphic';\n\n/**\n * Create a new View instance from a VGrammar dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The VGrammar dataflow runtime specification.\n */\nexport default class View extends EventEmitter implements IView {\n /** render element */\n container: HTMLElement;\n\n /** renderer */\n renderer: IRenderer;\n animate: IViewAnimate;\n rootMark: IGroupMark;\n\n /** life circle hooks */\n hooks: Hooks;\n\n logger: ILogger;\n\n grammars: IRecordedGrammars;\n\n private _isReleased: boolean;\n private _spec: ViewSpec;\n private _config: IViewThemeConfig;\n private _options: IViewOptions;\n\n private _cachedGrammars: IRecordedTreeGrammars;\n private _willMorphMarks: { prev: IMark[]; next: IMark[] }[];\n\n /** morph animate */\n private _morph: IMorph;\n\n private _eventConfig: IViewEventConfig;\n private _eventListeners: Array<{\n type: string;\n source: any;\n handler: any;\n }>;\n\n private _theme: ITheme;\n\n private _dataflow: Dataflow;\n /** 正在执行的dataflow */\n private _currentDataflow?: Promise<any>;\n /** 正在执行的任务 */\n private _running?: Promise<this>;\n\n /** 初次渲染或者更新spec,需要构建布局树 */\n private _needBuildLayoutTree?: boolean;\n /** 布局阶段 */\n private _layoutState?: LayoutState;\n\n /** 布局树,存储所有需要计算布局的mark元素 */\n private _layoutMarks?: IMark[];\n\n private _background?: IColor;\n private _eventCache: Record<string, () => void>;\n /** 当前是否存在增量渲染元素 */\n private _progressiveMarks?: IMark[];\n private _progressiveRafId?: number;\n private _observer: ResizeObserver = null;\n private _boundInteractions?: IInteraction[];\n\n static useRegisters(comps: (() => void)[]) {\n comps.forEach((fn: () => void) => {\n fn();\n });\n }\n\n constructor(options: IViewOptions = {}, config: IViewThemeConfig = {}) {\n super();\n this._config = config;\n this._options = Object.assign(\n {\n mode: BROWSER\n },\n options\n );\n this.initialize();\n }\n // emit: <T extends EventEmitter.EventNames<string | symbol>>(\n // event: T,\n // ...args: EventEmitter.EventArgs<string | symbol, T>\n // ) => boolean;\n\n // --- Lookup Grammars ---\n\n getGrammarById(id: string) {\n return this.grammars.getGrammar(id);\n }\n getSignalById<T>(id: string): ISignal<T> | null {\n return this.grammars.getSignal(id);\n }\n getDataById(id: string): IData | null {\n return this.grammars.getData(id);\n }\n getScaleById(id: string): IScale | null {\n return this.grammars.getScale(id);\n }\n getCoordinateById(id: string) {\n return this.grammars.getCoordinate(id);\n }\n getMarkById(id: string): IMark | null {\n return this.grammars.getMark(id);\n }\n\n getCustomizedById(id: string): IGrammarBase | null {\n return this.grammars.getCustomized(id);\n }\n\n getGrammarsByName(name: string) {\n return this.grammars.filter(grammar => grammar.name() === name);\n }\n\n getGrammarsByType(grammarType: string) {\n return this.grammars.filter(grammar => grammar.grammarType === grammarType);\n }\n getMarksByType(markType: string) {\n return this.grammars.getAllMarks().filter(mark => mark.markType === markType);\n }\n getMarksByName(name: string): IMark[] | null {\n return this.grammars.getAllMarks().filter(mark => mark.name() === name);\n }\n getMarksBySelector(selector: string | string[] | IMark | IMark[]): IMark[] | null {\n if (!selector) {\n return null;\n }\n const selectors = array(selector);\n const res: IMark[] = [];\n selectors.forEach(selectorStr => {\n if (isGrammar(selectorStr)) {\n res.push(selectorStr);\n return;\n }\n\n if (selectorStr[0] === ID_PREFIX) {\n const mark = this.getMarkById(selectorStr.slice(1));\n\n mark && res.push(mark);\n\n return;\n }\n\n const marks =\n selectorStr[0] === NAME_PREFIX\n ? this.getMarksByName(selectorStr.slice(1))\n : isMarkType(selectorStr)\n ? this.getMarksByType(selectorStr)\n : null;\n\n if (marks && marks.length) {\n marks.forEach(mark => {\n res.push(mark);\n });\n }\n });\n\n return res;\n }\n\n // --- Grammar ---\n\n private updateSignal<T>(signal: string | ISignal<T>, value: T) {\n if (isString(signal)) {\n signal = this.getSignalById<T>(signal);\n }\n signal.set(value);\n this.commit(signal);\n }\n\n signal<T>(value?: T, update?: SignalFunctionType<T>): ISignal<T> {\n const signal: ISignal<T> = new Signal<T>(this);\n if (arguments.length >= 1) {\n signal.value(value);\n }\n if (arguments.length >= 2) {\n signal.update(update);\n }\n this.grammars.record(signal);\n this._dataflow.add(signal);\n return signal;\n }\n\n data(values?: any[]): IData {\n const data: IData = new Data(this, values);\n this.grammars.record(data);\n this._dataflow.add(data);\n return data;\n }\n\n scale(type: GrammarScaleType) {\n const scale = Factory.createGrammar('scale', this, type) as IScale;\n\n if (scale) {\n this.grammars.record(scale);\n this._dataflow.add(scale);\n }\n return scale;\n }\n\n coordinate(type: CoordinateType) {\n const coordinate = Factory.createGrammar('coordinate', this, type) as ICoordinate;\n\n if (coordinate) {\n this.grammars.record(coordinate);\n this._dataflow.add(coordinate);\n }\n return coordinate;\n }\n\n mark(\n type: MarkType,\n group?: IGroupMark | string,\n markOptions?: { glyphType?: string; componentType?: string; mode?: '2d' | '3d' }\n ) {\n const groupMark = isString(group) ? (this.getMarkById(group) as IGroupMark) : group;\n\n let mark: IMark;\n switch (type) {\n case GrammarMarkType.group:\n mark = new GroupMark(this, groupMark);\n break;\n case GrammarMarkType.glyph:\n mark = new GlyphMark(this, markOptions?.glyphType, groupMark);\n break;\n // components\n case GrammarMarkType.component:\n mark = Factory.hasComponent(markOptions?.componentType)\n ? Factory.createComponent(markOptions?.componentType, this, groupMark, markOptions?.mode)\n : new Component(this, markOptions?.componentType, groupMark, markOptions?.mode);\n break;\n case GrammarMarkType.text:\n mark = new Text(this, type, groupMark);\n break;\n default:\n mark = Factory.hasMark(type) ? Factory.createMark(type, this, groupMark) : new Mark(this, type, groupMark);\n }\n this.grammars.record(mark);\n this._dataflow.add(mark);\n return mark;\n }\n\n group(group?: IGroupMark | string) {\n return this.mark(GrammarMarkType.group, group) as IGroupMark;\n }\n\n glyph(glyphType: string, group: IGroupMark | string) {\n return this.mark(GrammarMarkType.glyph, group, { glyphType }) as IGlyphMark;\n }\n\n component(componentType: string, group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType, mode }) as IComponent;\n }\n\n axis(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.axis, mode }) as IAxis;\n }\n\n grid(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.grid, mode }) as IGrid;\n }\n\n legend(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.legend }) as ILegend;\n }\n\n slider(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.slider }) as ISlider;\n }\n\n label(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.label }) as ILabel;\n }\n\n datazoom(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.datazoom }) as IDatazoom;\n }\n\n player(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.player }) as IPlayer;\n }\n\n title(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.title }) as ITitle;\n }\n\n scrollbar(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.scrollbar }) as IScrollbar;\n }\n\n customized(type: string, spec: any) {\n const grammar = Factory.createGrammar(type, this, spec?.type);\n\n if (grammar) {\n grammar.parse(spec);\n this.grammars.record(grammar);\n this._dataflow.add(grammar);\n return grammar;\n }\n }\n\n addGrammar(grammar: IGrammarBase) {\n if (this.grammars.find(storedGrammar => storedGrammar.uid === grammar.uid)) {\n return this;\n }\n this.grammars.record(grammar);\n this._dataflow.add(grammar);\n grammar.parse(grammar.getSpec());\n\n // update layout tree after grammar update\n this._needBuildLayoutTree = true;\n return this;\n }\n\n removeGrammar(grammar: string | IGrammarBase) {\n const recordedGrammar = isString(grammar) ? this.getGrammarById(grammar) : grammar;\n if (!recordedGrammar || !this.grammars.find(storedGrammar => storedGrammar.uid === recordedGrammar.uid)) {\n return this;\n }\n if (recordedGrammar.grammarType === 'mark') {\n (recordedGrammar as IMark).prepareRelease();\n }\n this._cachedGrammars.record(recordedGrammar);\n this._dataflow.remove(recordedGrammar);\n this.grammars.unrecord(recordedGrammar);\n\n // update layout tree after grammar update\n this._needBuildLayoutTree = true;\n return this;\n }\n\n removeAllGrammars() {\n this.grammars.traverse(grammar => {\n if (grammar.grammarType === 'signal' && BuiltInSignalID.includes(grammar.id())) {\n return;\n } else if (grammar.grammarType === 'mark' && grammar.id() === 'root') {\n return;\n }\n this.removeGrammar(grammar);\n });\n return this;\n }\n\n removeAllGraphicItems() {\n this.traverseMarkTree((mark: IMark) => {\n if (mark.graphicItem) {\n removeGraphicItem(mark.graphicItem);\n mark.elementMap.forEach(element => {\n element.resetGraphicItem();\n });\n mark.graphicItem = null;\n }\n });\n\n return this;\n }\n\n // --- Handle Spec ---\n\n parseSpec(spec: ViewSpec) {\n this.emit(HOOK_EVENT.BEFORE_PARSE_VIEW);\n this._spec = spec;\n normalizeMarkTree(spec);\n\n if (spec.theme) {\n this.theme(spec.theme);\n } else {\n this.theme(ThemeManager.getDefaultTheme());\n }\n\n if (spec.width) {\n this.width(spec.width);\n }\n\n if (spec.height) {\n this.height(spec.height);\n }\n\n this.padding(spec.padding ?? this._options.padding ?? this._theme.padding);\n\n if (!this.width() || !this.height()) {\n const size = this._getContainerSize();\n\n if (size) {\n this.updateSignal(SIGNAL_WIDTH, size.width);\n this.updateSignal(SIGNAL_HEIGHT, size.height);\n }\n }\n\n if (spec.signals?.length) {\n spec.signals.forEach(signal => {\n this.signal().parse(signal);\n });\n }\n\n if (spec.data?.length) {\n spec.data.forEach(data => {\n this.data(null).parse(data);\n });\n }\n\n if (spec.coordinates?.length) {\n spec.coordinates.forEach(coordinate => {\n this.coordinate(coordinate.type)?.parse(coordinate);\n });\n }\n\n if (spec.scales?.length) {\n spec.scales.forEach(scale => {\n this.scale(scale.type)?.parse(scale);\n });\n }\n\n const customizedGrammars = Factory.getGrammars();\n\n Object.keys(customizedGrammars).forEach(key => {\n const { specKey } = customizedGrammars[key];\n\n if (spec[specKey] && spec[specKey].length) {\n spec[specKey].forEach((specValue: any) => {\n this.customized(key, specValue);\n });\n }\n });\n\n if (spec.marks && spec.marks.length) {\n spec.marks.forEach(mark => {\n this.parseMarkSpec(mark);\n });\n }\n\n if (spec.events && spec.events.length) {\n spec.events.forEach(eventConfig => {\n this.event(eventConfig);\n });\n }\n\n if (spec.interactions && spec.interactions.length) {\n spec.interactions.forEach(interaction => {\n this.interaction(interaction.type, interaction);\n });\n }\n\n if (spec.animation === false) {\n this.animate.disable();\n } else {\n this.animate.enable();\n }\n\n this.emit(HOOK_EVENT.AFTER_PARSE_VIEW);\n\n // update layout tree after update spec\n this._needBuildLayoutTree = true;\n this._layoutState = LayoutState.before;\n\n return this;\n }\n\n updateSpec(spec: ViewSpec) {\n this.removeAllInteractions();\n this.removeAllGrammars();\n return this.parseSpec(spec);\n }\n\n private parseBuiltIn() {\n // 创建内置的 Signal\n builtInSignals(this._options, this._config, this.getCurrentTheme()).forEach(signalSpec => {\n const signal = this.signal().parse(signalSpec);\n if (signalSpec.value) {\n signal.set(signalSpec.value);\n }\n });\n\n const rootMark: GroupMarkSpec = {\n id: 'root',\n type: 'group',\n encode: {\n enter: { x: 0, y: 0 },\n update: {\n width: { signal: 'width' },\n height: { signal: 'height' }\n }\n }\n };\n this.parseMarkSpec(rootMark);\n this.rootMark = this.getMarkById('root') as IGroupMark;\n }\n\n private parseMarkSpec(spec: MarkSpec) {\n const markOptions =\n spec.type === GrammarMarkType.glyph\n ? { glyphType: (spec as GlyphMarkSpec).glyphType }\n : spec.type === GrammarMarkType.component\n ? { componentType: (spec as ComponentSpec).componentType, mode: (spec as ComponentSpec).mode }\n : null;\n this.mark(spec.type, spec.group, markOptions).parse(spec);\n (spec as GroupMarkSpec).marks?.forEach(childSpec => {\n this.parseMarkSpec(childSpec);\n });\n }\n\n // --- Theme API ---\n theme(theme: ITheme | string) {\n if (isString(theme)) {\n this._theme = ThemeManager.getTheme(theme) ?? ThemeManager.getDefaultTheme();\n } else {\n this._theme = theme;\n }\n const { background, padding } = this._spec ?? {};\n if (this._theme) {\n this.background(background ?? this._options.background ?? this._theme.background);\n this.padding(padding ?? this._options.padding ?? this._theme.padding);\n this.renderer.stage()?.setTheme?.(Object.assign({}, this._theme.marks));\n } else {\n this.background(background ?? this._options.background);\n this.padding(padding ?? this._options.padding);\n }\n\n return this;\n }\n\n getCurrentTheme() {\n return this._theme;\n }\n async setCurrentTheme(theme: ITheme | string, render: boolean = true) {\n if (this._isReleased) {\n return;\n }\n this.theme(theme);\n // trigger encode for all marks\n this.grammars.getAllMarks().forEach(mark => {\n mark.commit();\n });\n\n if (render) {\n await this.evaluate();\n\n if (this._isReleased) {\n return;\n }\n // FIXME: trigger render\n this.renderer.render(true);\n } else {\n await this._dataflow.evaluate();\n }\n\n return this;\n }\n\n // --- Global Configure ---\n\n background(value?: IColor) {\n if (arguments.length) {\n this._background = value;\n this.renderer.background(value);\n return value;\n }\n return this._background;\n }\n\n width(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_WIDTH);\n if (arguments.length) {\n this._options.width = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n height(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_HEIGHT);\n if (arguments.length) {\n this._options.height = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n viewWidth(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_VIEW_WIDTH);\n if (arguments.length) {\n // view width depends on canvas width\n const padding = this.padding();\n this.width(value + padding.left + padding.right);\n return value;\n }\n return signal.output() as number;\n }\n\n viewHeight(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_VIEW_HEIGHT);\n if (arguments.length) {\n // view height depends on canvas height\n const padding = this.padding();\n this.height(value + padding.top + padding.bottom);\n return value;\n }\n return signal.output() as number;\n }\n\n padding(value?: number | { top?: number; left?: number; right?: number; bottom?: number }) {\n const signal = this.getSignalById<{ top: number; left: number; right: number; bottom: number }>(SIGNAL_PADDING);\n if (arguments.length) {\n const padding = normalizePadding(value);\n this.updateSignal(signal, padding);\n return padding;\n }\n return normalizePadding(signal.output());\n }\n\n autoFit(value?: boolean) {\n const signal = this.getSignalById<boolean>(SIGNAL_AUTOFIT);\n if (arguments.length) {\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as boolean;\n }\n\n getViewBox() {\n const signal = this.getSignalById<IBounds>(SIGNAL_VIEW_BOX);\n\n return signal?.output() as IBounds;\n }\n\n // --- Layout ---\n\n updateLayoutTag() {\n this._layoutState = LayoutState.before;\n return this;\n }\n\n getLayoutState() {\n return this._layoutState;\n }\n\n private buildLayoutTree() {\n const markMap: Record<number, boolean> = {};\n const rootMarks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n markMap[mark.id()] = true;\n\n if (mark.group) {\n if (!markMap[mark.group.id()]) {\n rootMarks.push(mark);\n }\n } else {\n rootMarks.push(mark);\n }\n\n if (mark.markType === GrammarMarkType.group) {\n (mark as IGroupMark).updateLayoutChildren();\n }\n },\n (mark: IMark) => mark.needLayout()\n );\n\n this._layoutMarks = rootMarks;\n }\n\n private doLayout() {\n const doLayout = this._options.doLayout || defaultDoLayout;\n if (doLayout && this._layoutMarks?.length) {\n this.emit(HOOK_EVENT.BEFORE_DO_LAYOUT);\n doLayout(this._layoutMarks, this._options, this);\n this.emit(HOOK_EVENT.AFTER_DO_LAYOUT);\n }\n }\n\n private handleLayoutEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_LAYOUT_END);\n this._layoutMarks.forEach(layoutMark => {\n traverseMarkTree(\n layoutMark,\n 'layoutChildren',\n (mark: IMark) => {\n mark.handleLayoutEnd();\n },\n // 顶层节点,不需要重新执行了\n (mark: IMark) => mark !== layoutMark\n );\n });\n this.emit(HOOK_EVENT.AFTER_MARK_LAYOUT_END);\n }\n\n private handleRenderEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_RENDER_END);\n traverseMarkTree(this.rootMark, 'children', (mark: IMark) => {\n mark.handleRenderEnd();\n });\n this.emit(HOOK_EVENT.AFTER_MARK_RENDER_END);\n }\n\n // --- Dataflow ---\n\n commit(grammar: IGrammarBase) {\n this._dataflow.commit(grammar);\n return this;\n }\n\n run(runningConfig?: IRunningConfig) {\n this.evaluate(runningConfig);\n\n return this;\n }\n\n runSync(runningConfig?: IRunningConfig) {\n this.evaluateSync(runningConfig);\n\n return this;\n }\n\n isRunning() {\n return this._running;\n }\n\n async runAsync(runningConfig?: IRunningConfig) {\n if (this._isReleased) {\n return;\n }\n // await previously queued functions\n while (this._running) {\n await this._running;\n if (this._isReleased) {\n break;\n }\n }\n\n // run dataflow, manage running promise\n const clear = () => {\n this._running = null;\n };\n\n (this._running = this.evaluate(runningConfig)).then(clear, clear);\n\n return this._running;\n }\n\n async runNextTick(runningConfig?: IRunningConfig) {\n // delay the evaluate progress to next tick\n if (!this._currentDataflow) {\n this._currentDataflow = Promise.resolve().then(() => {\n return this.runAsync(runningConfig)\n .then(() => {\n this._currentDataflow = null;\n })\n .catch((e: any) => {\n this._currentDataflow = null;\n this.logger.error(e);\n });\n });\n }\n await this._currentDataflow;\n\n return this;\n }\n\n private doRender(immediately: boolean) {\n this.emit(HOOK_EVENT.BEFORE_DO_RENDER);\n // render as needed\n if (this.renderer) {\n if (!this._progressiveMarks) {\n this.animate.animate();\n }\n // 绘图 =>\n this.renderer.render(immediately);\n this.handleRenderEnd();\n }\n this.emit(HOOK_EVENT.AFTER_DO_RENDER);\n }\n\n private async evaluate(runningConfig?: IRunningConfig) {\n if (this._isReleased) {\n return;\n }\n const normalizedRunningConfig = normalizeRunningConfig(runningConfig);\n\n const grammarWillDetach = this._cachedGrammars.size() > 0;\n\n if (grammarWillDetach) {\n this.reuseCachedGrammars(normalizedRunningConfig);\n this.detachCachedGrammar();\n }\n // For most of time, width & height signal won't be modified duration dataflow,\n // so resizing before generating vRender graphic items should be faster.\n const hasResize = this._resizeRenderer();\n const hasUpdate = this._dataflow.hasCommitted();\n\n // if no grammar is update and layout is unnecessary, end evaluating\n if (!grammarWillDetach && !hasUpdate && !this._layoutState && !hasResize) {\n return this;\n }\n\n this.clearProgressive();\n // stop auto render of vrender to avoid the case that vrender auto render before the asynchronous task is done\n this.renderer?.preventRender(true);\n\n // evaluate dataflow\n await this._dataflow.evaluate();\n\n if (this._isReleased) {\n return;\n }\n\n if (this._needBuildLayoutTree) {\n this.buildLayoutTree();\n this._needBuildLayoutTree = false;\n }\n\n if (this._layoutState) {\n this._layoutState = LayoutState.layouting;\n this.doLayout();\n\n if (this._dataflow.hasCommitted()) {\n this._layoutState = LayoutState.reevaluate;\n await this._dataflow.evaluate();\n\n if (this._isReleased) {\n return;\n }\n }\n\n this._layoutState = LayoutState.after;\n if (this._layoutMarks?.length) {\n this.handleLayoutEnd();\n }\n }\n // enable auto render of vrender after the asynchronous task is done\n this.renderer?.preventRender(false);\n this._layoutState = null;\n\n this.findProgressiveMarks();\n\n // resize again if width/height signal is updated duration dataflow\n this._resizeRenderer();\n this.doRender(false);\n\n this._willMorphMarks?.forEach(morphMarks => {\n this._morph.morph(morphMarks.prev, morphMarks.next, normalizedRunningConfig);\n });\n this._willMorphMarks = null;\n\n this.releaseCachedGrammars(normalizedRunningConfig);\n\n this.doPreProgressive();\n\n return this;\n }\n\n private evaluateSync(runningConfig?: IRunningConfig) {\n const normalizedRunningConfig = normalizeRunningConfig(runningConfig);\n\n const grammarWillDetach = this._cachedGrammars.size() > 0;\n\n if (grammarWillDetach) {\n this.reuseCachedGrammars(normalizedRunningConfig);\n this.detachCachedGrammar();\n }\n\n const hasResize = this._resizeRenderer();\n const hasUpdate = this._dataflow.hasCommitted();\n\n if (!grammarWillDetach && !hasUpdate && !this._layoutState && !hasResize) {\n return this;\n }\n\n this.clearProgressive();\n // evaluate dataflow\n this._dataflow.evaluateSync();\n\n if (this._needBuildLayoutTree) {\n this.buildLayoutTree();\n this._needBuildLayoutTree = false;\n }\n\n if (this._layoutState) {\n this._layoutState = LayoutState.layouting;\n this.doLayout();\n\n if (this._dataflow.hasCommitted()) {\n this._layoutState = LayoutState.reevaluate;\n this._dataflow.evaluateSync();\n }\n\n this._layoutState = LayoutState.after;\n if (this._layoutMarks?.length) {\n this.handleLayoutEnd();\n }\n }\n this._layoutState = null;\n\n this.findProgressiveMarks();\n\n this._resizeRenderer();\n this.doRender(true);\n\n this._willMorphMarks?.forEach(morphMarks => {\n this._morph.morph(morphMarks.prev, morphMarks.next, normalizedRunningConfig);\n });\n this._willMorphMarks = null;\n\n this.releaseCachedGrammars(normalizedRunningConfig);\n\n this.doPreProgressive();\n\n return this;\n }\n\n private reuseCachedGrammars(runningConfig: IRunningConfig) {\n if (!this._willMorphMarks) {\n this._willMorphMarks = [];\n }\n\n if (runningConfig.reuse) {\n const reuseDiffUpdate = (diff: { prev: IGrammarBase; next: IGrammarBase }) => {\n diff.next.reuse(diff.prev);\n diff.prev.detachAll();\n diff.prev.clear();\n this._cachedGrammars.unrecord(diff.prev);\n };\n\n const diffedSignal = this._morph.diffGrammar(\n this._cachedGrammars.getAllSignals(),\n this.grammars.getAllSignals().filter(signal => !BuiltInSignalID.includes(signal.id()))\n );\n diffedSignal.update.forEach(reuseDiffUpdate);\n\n const diffedData = this._morph.diffGrammar(this._cachedGrammars.getAllData(), this.grammars.getAllData());\n diffedData.update.forEach(reuseDiffUpdate);\n\n const diffedScale = this._morph.diffGrammar(this._cachedGrammars.getAllScales(), this.grammars.getAllScales());\n diffedScale.update.forEach(reuseDiffUpdate);\n\n const diffedCoordinate = this._morph.diffGrammar(\n this._cachedGrammars.getAllCoordinates(),\n this.grammars.getAllCoordinates()\n );\n diffedCoordinate.update.forEach(reuseDiffUpdate);\n\n // TODO: reuse custom\n }\n\n const diffedMark = this._morph.diffMark(\n this._cachedGrammars.getAllMarks(),\n this.grammars.getAllMarks().filter(mark => mark.id() !== 'root'),\n runningConfig\n );\n diffedMark.update.forEach(diff => {\n const matched =\n diff.prev.length === 1 && diff.next.length === 1 && diff.prev[0].markType === diff.next[0].markType;\n const enableMarkMorphConfig =\n diff.prev.every(mark => mark.getMorphConfig().morph) && diff.next.every(mark => mark.getMorphConfig().morph);\n if (matched && runningConfig.reuse) {\n diff.next[0].reuse(diff.prev[0]);\n diff.prev[0].detachAll();\n diff.prev[0].clear();\n this._cachedGrammars.unrecord(diff.prev[0]);\n } else if ((runningConfig.morph && enableMarkMorphConfig) || runningConfig.morphAll) {\n this._willMorphMarks.push({ prev: diff.prev, next: diff.next });\n }\n });\n }\n\n private detachCachedGrammar() {\n this._cachedGrammars.traverse(grammar => {\n grammar.detachAll();\n if (grammar.grammarType === 'mark') {\n const mark = grammar as IMark;\n mark.group?.removeChild?.(mark);\n }\n });\n }\n\n private releaseCachedGrammars(runningConfig?: IRunningConfig) {\n // directly release all grammars except from marks\n this._cachedGrammars.traverse(grammar => {\n if (grammar.grammarType !== 'mark') {\n grammar.release();\n }\n });\n const markNodes = this._cachedGrammars.getAllMarkNodes();\n markNodes.forEach(node => {\n node.mark.animate.stop();\n if (runningConfig.enableExitAnimation) {\n this.animate.animateAddition(node.mark);\n }\n });\n const releaseUp = (node: IMarkTreeNode) => {\n // do nothing when mark is already released or is still animating\n if (!node.mark.view || node.mark.animate.getAnimatorCount() !== 0) {\n return;\n }\n // release when current node is leaf node\n if (!node.children || node.children.length === 0) {\n node.mark.release();\n // detach current node from tree and traverse above\n const parent = node.parent;\n if (parent) {\n node.parent.children = node.parent.children.filter(n => n !== node);\n node.parent = null;\n releaseUp(parent);\n }\n }\n };\n markNodes.forEach(node => {\n const mark = node.mark;\n if (mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n } else {\n mark.addEventListener('animationEnd', () => {\n if (mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n }\n });\n }\n });\n this._cachedGrammars.clear();\n }\n\n runAfter(callback: (view: IView) => void) {\n this._dataflow.runAfter(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n runBefore(callback: (view: IView) => void) {\n this._dataflow.runBefore(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer() {\n if (this._options.mode !== 'node') {\n this.logger.error(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n const stage = this.renderer?.stage?.();\n if (stage) {\n stage.render();\n const buffer = stage.window.getImageBuffer();\n return buffer;\n }\n this.logger.error(new ReferenceError(`render is not defined`));\n\n return null;\n }\n\n // --- Mark Tree ---\n\n traverseMarkTree(apply: (mark: IMark) => any, filter?: (mark: IMark) => boolean, leafFirst?: boolean) {\n traverseMarkTree(this.rootMark, 'children', apply, filter, leafFirst);\n return this;\n }\n\n // --- Resize ---\n\n private _bindResizeEvent() {\n if (this.autoFit()) {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n if (container) {\n const ResizeObserverWindow: any = window.ResizeObserver;\n this._observer = new ResizeObserverWindow(this._onResize);\n this._observer?.observe(container);\n }\n window.addEventListener('resize', this._onResize);\n }\n }\n\n private _unBindResizeEvent() {\n if (this.autoFit()) {\n window.removeEventListener('resize', this._onResize);\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n }\n }\n }\n\n private _getContainerSize() {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n\n if (container) {\n const { width: containerWidth, height: containerHeight } = getContainerSize(container!);\n const width = this._spec?.width ?? this._options.width ?? containerWidth;\n const height = this._spec?.height ?? this._options.height ?? containerHeight;\n\n return { width, height };\n }\n\n return null;\n }\n\n private _onResize = debounce((...args: any[]) => {\n const size = this._getContainerSize();\n\n if (size) {\n this.resize(size.width, size.height);\n }\n }, 100);\n\n async resize(width: number, height: number, render: boolean = true) {\n let needDataflow = false;\n\n // width value changed: update signal, skip resize op\n if (width !== this.width()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_WIDTH, width);\n }\n\n // height value changed: update signal, skip resize op\n if (height !== this.height()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_HEIGHT, height);\n }\n\n // run dataflow on width/height signal change\n if (needDataflow) {\n if (render) {\n await this.evaluate();\n } else {\n await this._dataflow.evaluate();\n }\n }\n\n return this;\n }\n\n private _resizeRenderer() {\n const width = this.width();\n const height = this.height();\n\n if (this.renderer.shouldResize(width, height)) {\n this.renderer.resize(width, height);\n this.emit('resize', {}, { width, height });\n return true;\n }\n\n return false;\n }\n\n // --- Event ---\n\n private bindEvents(eventSpec: BaseEventSpec) {\n if (this._eventConfig.disable) {\n return;\n }\n const { type: evtType, filter, callback, throttle, debounce, consume, target, dependency } = eventSpec;\n const eventSelector = parseEventSelector(evtType);\n\n if (!eventSelector) {\n return;\n }\n const { source, type } = eventSelector;\n\n const markFilter = generateFilterByMark(eventSelector);\n const targetSignals =\n Array.isArray(target) && target.length\n ? target.map(entry => {\n return {\n signal: this.getSignalById(entry.target),\n callback: entry.callback\n };\n })\n : [\n {\n signal: isString(target) ? this.getSignalById(target) : null,\n callback\n }\n ];\n const validateSignals = targetSignals.filter(entry => entry.signal || entry.callback);\n const refs = parseReference(dependency, this);\n\n const send = parseHandler(\n (evt?: any, element?: IElement) => {\n const needPreventDefault =\n (source === EVENT_SOURCE_VIEW && prevent(this._eventConfig, type)) ||\n (consume && (evt.cancelable === undefined || evt.cancelable));\n\n if (source === EVENT_SOURCE_WINDOW) {\n evt = getExtendedEvents(this, evt, element, type, EVENT_SOURCE_WINDOW);\n }\n\n let hasCommitted = false;\n\n if ((!filter || filter(evt)) && (!markFilter || markFilter(element)) && validateSignals.length) {\n const params = refs.reduce((params, ref) => {\n params[ref.id()] = ref.output();\n return params;\n }, {});\n validateSignals.forEach(entry => {\n if (entry.callback && entry.signal) {\n const changed = entry.signal.set(entry.callback(evt, params));\n\n if (changed) {\n this.commit(entry.signal);\n hasCommitted = true;\n }\n } else if (entry.callback) {\n entry.callback(evt, params);\n } else {\n this.commit(entry.signal);\n hasCommitted = true;\n }\n });\n }\n\n if (needPreventDefault) {\n evt.preventDefault();\n }\n\n if (consume) {\n evt.stopPropagation();\n }\n\n if (hasCommitted) {\n this.runAsync();\n }\n },\n { throttle, debounce }\n );\n\n if (source === EVENT_SOURCE_VIEW) {\n if (permit(this._eventConfig, EVENT_SOURCE_VIEW, type)) {\n // send traps errors, so use {trap: false} option\n this.addEventListener(type, send, NO_TRAP);\n\n return () => {\n this.removeEventListener(type, send);\n };\n }\n } else if (source === EVENT_SOURCE_WINDOW) {\n vglobal.addEventListener(type, send);\n this._eventListeners.push({\n type: type,\n source: vglobal,\n handler: send\n });\n\n return () => {\n vglobal.removeEventListener(type, send);\n\n const index = this._eventListeners.findIndex((entry: any) => {\n return entry.type === type && entry.source === vglobal && entry.handler === send;\n });\n\n if (index >= 0) {\n this._eventListeners.splice(index, 1);\n }\n };\n }\n }\n\n event(eventSpec: EventSpec) {\n if ('between' in eventSpec) {\n const [starEvent, endEvent] = eventSpec.between;\n // FIXME between需要生成唯一ID\n const id = `${starEvent.type}-${eventSpec.type}-${endEvent.type}`;\n\n let unbindEndEvent: any;\n\n this.bindEvents(\n Object.assign({}, starEvent, {\n callback: () => {\n if (!this._eventCache) {\n this._eventCache = {};\n }\n // 中间的事件绑定\n if (!this._eventCache[id]) {\n const unbindEvent = this.bindEvents(eventSpec);\n this._eventCache[id] = unbindEvent;\n }\n if (!unbindEndEvent) {\n // 结束的事件绑定\n unbindEndEvent = this.bindEvents(\n Object.assign({}, endEvent, {\n callback: () => {\n if (this._eventCache[id]) {\n this._eventCache[id]();\n this._eventCache[id] = null;\n }\n }\n })\n );\n }\n }\n })\n );\n } else if ('merge' in eventSpec) {\n eventSpec.merge.forEach(entry => {\n const singleEvent: Partial<BaseEventSpec> = Object.assign({}, eventSpec);\n\n if (isString(entry)) {\n singleEvent.type = entry;\n } else if (isObject(entry)) {\n Object.assign(singleEvent, entry);\n }\n singleEvent.debounce = 50;\n this.bindEvents(singleEvent as BaseEventSpec);\n });\n } else {\n this.bindEvents(eventSpec);\n }\n }\n\n interaction(type: string, spec: Partial<InteractionSpec>) {\n const interaction = Factory.createInteraction(type, this, spec);\n\n if (interaction) {\n interaction.bind();\n\n if (!this._boundInteractions) {\n this._boundInteractions = [];\n }\n\n this._boundInteractions.push(interaction);\n }\n return interaction;\n }\n\n removeInteraction(type: string | IInteraction, id?: string) {\n if (this._boundInteractions) {\n const instances = this._boundInteractions.filter(interaction => {\n if (!isNil(id)) {\n return interaction.options?.id === id;\n }\n\n if (isString(type)) {\n return interaction.type === type;\n }\n\n if (type) {\n return interaction === type;\n }\n });\n\n if (instances.length) {\n instances.forEach(instance => {\n instance.unbind();\n });\n }\n }\n\n return this;\n }\n\n removeAllInteractions() {\n if (this._boundInteractions) {\n this._boundInteractions.forEach(instance => {\n instance.unbind();\n });\n\n this._boundInteractions = null;\n }\n\n return this;\n }\n\n private initEvent() {\n // 基于 vRender 事件系统提供的委托机制\n const stage = this.renderer.stage();\n stage && stage.on('*', this.delegateEvent);\n }\n\n private delegateEvent = (event: any, type: string) => {\n const activeElement = event.target?.[BridgeElementKey];\n const extendedEvt = getExtendedEvents(this, event, activeElement, type, EVENT_SOURCE_VIEW);\n this.emit(type, extendedEvt, activeElement);\n };\n\n addEventListener(type: string, handler: BaseEventHandler, options?: any) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n callback = handler;\n (callback as any).raw = handler;\n }\n if (options && options.target) {\n (callback as any).target = options.target;\n }\n this.on(type, callback);\n return this;\n }\n\n removeEventListener(type: string, handler?: BaseEventHandler) {\n if (handler) {\n this.off(type, handler);\n } else {\n this.off(type);\n }\n return this;\n }\n\n // --- Initialization ---\n\n private initializeRenderer() {\n const width = this._options.width;\n const height = this._options.height;\n\n this.renderer = new CanvasRenderer(this);\n this.renderer.initialize(width, height, this._options, this._eventConfig).background(this._background);\n }\n\n private initialize() {\n this.grammars = new RecordedGrammars(\n grammar => grammar.id(),\n (key, grammar) => this.logger.warn(`Grammar id '${key}' has been occupied`, grammar)\n );\n this._cachedGrammars = new RecordedTreeGrammars(grammar => grammar.id());\n\n if (this._options.logger) {\n Logger.setInstance(this._options.logger);\n }\n this.logger = Logger.getInstance(this._options.logLevel ?? 0);\n\n this._dataflow = new Dataflow();\n\n this.animate = new ViewAnimate(this);\n\n this._morph = new Morph();\n\n // 执行钩子\n if (this._options.hooks) {\n Object.keys(this._options.hooks).forEach(key => {\n this.on(key, this._options.hooks[key]);\n });\n // 生命周期事件(包含原性能测试钩子)\n this.hooks = this._options.hooks;\n }\n this.container = null;\n\n // initialize renderer, handler and event management\n this.renderer = null;\n this._eventListeners = [];\n\n // initialize event configuration\n this._eventConfig = initializeEventConfig(this._options.eventConfig);\n\n // set default theme\n this._theme = this._options.disableTheme ? null : ThemeManager.getDefaultTheme();\n\n this.parseBuiltIn();\n\n // initialize DOM container(s) and renderer\n configureEnvironment(this._options);\n this.initializeRenderer();\n\n if (!this._eventConfig.disable) {\n this.initEvent();\n }\n this._bindResizeEvent();\n\n this._currentDataflow = null;\n // update layout tree after initialization\n this._needBuildLayoutTree = true;\n this._layoutState = LayoutState.before;\n\n // apply theme value after initialization\n this.theme(this._theme);\n }\n\n // --- Others ---\n\n pauseProgressive() {\n return false;\n }\n resumeProgressive() {\n return false;\n }\n restartProgressive() {\n return false;\n }\n\n private findProgressiveMarks() {\n const marks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n marks.push(mark);\n },\n (mark: IMark) => mark.markType !== GrammarMarkType.group && mark.isProgressive()\n );\n\n if (!marks.length) {\n this._progressiveMarks = null;\n return null;\n }\n\n this._progressiveMarks = marks;\n\n if (this.renderer) {\n this.renderer.combineIncrementalLayers();\n }\n\n return marks;\n }\n\n private doPreProgressive() {\n if (this._progressiveMarks && this._progressiveMarks.some(mark => mark.isDoingProgressive())) {\n const raf = vglobal.getRequestAnimationFrame();\n this._progressiveRafId = raf(this.handleProgressiveFrame);\n }\n }\n\n /** 监听frame事件,更新增量元素的mark */\n private handleProgressiveFrame = () => {\n if (this._progressiveMarks.length) {\n this._progressiveMarks.forEach(mark => {\n if (mark.isDoingProgressive()) {\n mark.evaluateProgressive();\n }\n });\n }\n\n this.doPreProgressive();\n };\n\n /** 清除 */\n private clearProgressive() {\n if (this._progressiveRafId) {\n const cancelRaf = vglobal.getCancelAnimationFrame();\n cancelRaf(this._progressiveRafId);\n }\n\n if (this._progressiveMarks && this._progressiveMarks.length) {\n this._progressiveMarks.forEach(entry => {\n entry.clearProgressive();\n });\n\n this._progressiveMarks = null;\n }\n }\n\n // --- release ---\n release() {\n this._isReleased = true;\n this._unBindResizeEvent();\n this.clearProgressive();\n Factory.unregisterRuntimeTransforms();\n\n this.animate.stop();\n\n this.grammars.release();\n this._cachedGrammars.release();\n\n this._dataflow.release();\n this._dataflow = null;\n\n this.renderer?.release?.();\n this.renderer = null;\n this._boundInteractions = null;\n\n // 卸载事件\n this.removeAllListeners();\n this._eventListeners?.forEach((listener: any) => {\n listener.source.removeEventListener(listener.type, listener.handler);\n });\n this._eventListeners = null;\n }\n}\n"]}