@visactor/vgrammar-core 0.14.0-alpha.0 → 0.14.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/cjs/graph/animation/morph.d.ts +2 -12
  2. package/cjs/graph/animation/morph.js +76 -163
  3. package/cjs/graph/animation/morph.js.map +1 -1
  4. package/cjs/graph/element.d.ts +1 -0
  5. package/cjs/graph/element.js +12 -6
  6. package/cjs/graph/element.js.map +1 -1
  7. package/cjs/graph/glyph-element.js +1 -1
  8. package/cjs/graph/glyph-element.js.map +1 -1
  9. package/cjs/graph/view-diff.d.ts +8 -0
  10. package/cjs/graph/view-diff.js +93 -0
  11. package/cjs/graph/view-diff.js.map +1 -0
  12. package/cjs/index.d.ts +3 -1
  13. package/cjs/index.js +17 -2
  14. package/cjs/index.js.map +1 -1
  15. package/cjs/interactions/brush-base.js +1 -2
  16. package/cjs/interactions/brush-filter.js +2 -1
  17. package/cjs/interactions/fish-eye.js +1 -2
  18. package/cjs/interactions/index.js +2 -1
  19. package/cjs/interactions/tooltip.js +1 -1
  20. package/cjs/parse/util.js.map +1 -1
  21. package/cjs/types/morph.d.ts +1 -2
  22. package/cjs/types/morph.js.map +1 -1
  23. package/cjs/view/View.d.ts +1 -2
  24. package/cjs/view/View.js +32 -30
  25. package/cjs/view/View.js.map +1 -1
  26. package/cjs/view/animate.js +2 -1
  27. package/cjs/view/animate.js.map +1 -1
  28. package/cjs/view/mark-animate-mixin.d.ts +1 -0
  29. package/cjs/view/mark-animate-mixin.js +29 -0
  30. package/cjs/view/mark-animate-mixin.js.map +1 -0
  31. package/cjs/view/mark.js +18 -14
  32. package/cjs/view/mark.js.map +1 -1
  33. package/cjs/view/view-animate-mixin.d.ts +1 -0
  34. package/cjs/view/view-animate-mixin.js +26 -0
  35. package/cjs/view/view-animate-mixin.js.map +1 -0
  36. package/cjs/view/view-morph-mixin.d.ts +1 -0
  37. package/cjs/view/view-morph-mixin.js +32 -0
  38. package/cjs/view/view-morph-mixin.js.map +1 -0
  39. package/es/graph/animation/morph.d.ts +2 -12
  40. package/es/graph/animation/morph.js +72 -159
  41. package/es/graph/animation/morph.js.map +1 -1
  42. package/es/graph/element.d.ts +1 -0
  43. package/es/graph/element.js +12 -6
  44. package/es/graph/element.js.map +1 -1
  45. package/es/graph/glyph-element.js +1 -1
  46. package/es/graph/glyph-element.js.map +1 -1
  47. package/es/graph/view-diff.d.ts +8 -0
  48. package/es/graph/view-diff.js +89 -0
  49. package/es/graph/view-diff.js.map +1 -0
  50. package/es/index.d.ts +3 -1
  51. package/es/index.js +11 -1
  52. package/es/index.js.map +1 -1
  53. package/es/interactions/element-active.js +1 -2
  54. package/es/interactions/element-highlight-by-group.js +2 -1
  55. package/es/interactions/fish-eye.js +1 -1
  56. package/es/parse/option.js +1 -2
  57. package/es/parse/scale.js +2 -1
  58. package/es/parse/util.js.map +1 -1
  59. package/es/types/morph.d.ts +1 -2
  60. package/es/types/morph.js.map +1 -1
  61. package/es/view/View.d.ts +1 -2
  62. package/es/view/View.js +33 -32
  63. package/es/view/View.js.map +1 -1
  64. package/es/view/animate.js +2 -1
  65. package/es/view/animate.js.map +1 -1
  66. package/es/view/mark-animate-mixin.d.ts +1 -0
  67. package/es/view/mark-animate-mixin.js +25 -0
  68. package/es/view/mark-animate-mixin.js.map +1 -0
  69. package/es/view/mark.js +17 -15
  70. package/es/view/mark.js.map +1 -1
  71. package/es/view/view-animate-mixin.d.ts +1 -0
  72. package/es/view/view-animate-mixin.js +16 -0
  73. package/es/view/view-animate-mixin.js.map +1 -0
  74. package/es/view/view-morph-mixin.d.ts +1 -0
  75. package/es/view/view-morph-mixin.js +22 -0
  76. package/es/view/view-morph-mixin.js.map +1 -0
  77. package/package.json +5 -5
@@ -99,5 +99,4 @@ exports.FishEye = FishEye, FishEye.type = "fish-eye", FishEye.defaultOptions = {
99
99
  distortionX: 2,
100
100
  distortionY: 2,
101
101
  throttle: 100
102
- };
103
- //# sourceMappingURL=fish-eye.js.map
102
+ };
@@ -387,4 +387,5 @@ const registerFishEye = () => {
387
387
  factory_1.Factory.registerInteraction(fish_eye_1.FishEye.type, fish_eye_1.FishEye);
388
388
  };
389
389
 
390
- exports.registerFishEye = registerFishEye;
390
+ exports.registerFishEye = registerFishEye;
391
+ //# sourceMappingURL=index.js.map
@@ -60,4 +60,4 @@ exports.Tooltip = Tooltip, Tooltip.type = "tooltip", Tooltip.defaultOptions = {
60
60
  trigger: "pointermove",
61
61
  triggerOff: "pointerleave"
62
62
  };
63
- //# sourceMappingURL=tooltip.js.map
63
+ //# sourceMappingURL=tooltip.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/parse/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import { isString, isFunction, isNil, array, Color } from '@visactor/vutils';\nimport type { IElement } from '../types/element';\nimport type {\n FunctionCallback,\n SignalDependency,\n SignalReference,\n IView,\n GenericFunctionType,\n SignalFunction,\n ParameterFunctionType,\n ParameterCallback,\n Nil\n} from '../types';\nimport type { IGrammarBase } from '../types/grammar';\n\nexport function parseReference(dependency: SignalDependency | SignalDependency[], view: IView): IGrammarBase[] {\n const dependencies: SignalDependency[] = array(dependency);\n return dependencies.reduce((refs: IGrammarBase[], dep: string | IGrammarBase) => {\n const ref = (isString(dep) ? view.getGrammarById(dep as string) : dep) as IGrammarBase;\n\n if (ref) {\n refs.push(ref);\n }\n return refs;\n }, []);\n}\n\nfunction isSignalReferenceType(signal: any): signal is SignalReference {\n return !isFunction(signal) && !!(signal as SignalReference)?.signal;\n}\n\nfunction isSignalFunctionType<Callback extends FunctionCallback<T>, T>(\n signal: any\n): signal is SignalFunction<Callback, T> {\n return !isFunction(signal) && !!(signal as SignalFunction<Callback, T>)?.callback;\n}\n\nexport function parseFunctionType<Callback extends FunctionCallback<T>, T>(\n spec: GenericFunctionType<Callback, T> | Nil,\n view: IView\n): IGrammarBase[] {\n if (isNil(spec)) {\n return [];\n }\n if (isSignalReferenceType(spec)) {\n const signal = spec.signal;\n if (isString(signal)) {\n return array<IGrammarBase>(view.getGrammarById(signal as string) as IGrammarBase);\n } else if ((signal as IGrammarBase)?.grammarType === 'signal') {\n return [signal as IGrammarBase];\n }\n } else if (isSignalFunctionType(spec)) {\n return parseReference((spec as SignalFunction<Callback, T>).dependency, view);\n }\n return [];\n}\n\nexport function isFunctionType<Callback extends FunctionCallback<T>, T>(\n spec: any\n): spec is Callback | SignalReference | SignalFunction<Callback, T> {\n return isFunction(spec) || spec?.signal || !!(spec as SignalFunction<Callback, T>)?.callback;\n}\n\nexport function invokeFunctionType<Callback extends FunctionCallback<T>, T>(\n spec: GenericFunctionType<Callback, T> | Nil,\n parameters: any,\n datumOrGrammarInstance?: any | IGrammarBase,\n element?: IElement | any\n): T {\n if (isNil(spec)) {\n return spec as T;\n }\n\n if (isFunction(spec)) {\n if (element) {\n return (spec as Callback).call(null, datumOrGrammarInstance, element, parameters);\n }\n return (spec as Callback).call(null, datumOrGrammarInstance, parameters);\n } else if ((spec as SignalReference).signal) {\n const signal = (spec as SignalReference).signal;\n if (isString(signal)) {\n return parameters?.[signal as string];\n }\n return (signal as IGrammarBase).output();\n } else if ((spec as SignalFunction<Callback, T>).callback) {\n if (element) {\n return (spec as SignalFunction<Callback, T>).callback.call(null, datumOrGrammarInstance, element, parameters);\n }\n return (spec as SignalFunction<Callback, T>).callback.call(null, datumOrGrammarInstance, parameters);\n }\n return spec as T;\n}\n\nexport function invokeParameterFunctionType<T>(spec: ParameterFunctionType<T>, parameters: any): T {\n if (isNil(spec)) {\n return spec as T;\n }\n\n if (isFunction(spec)) {\n return spec.call(null, parameters);\n } else if ((spec as SignalReference).signal) {\n const signal = (spec as SignalReference).signal;\n if (isString(signal)) {\n return parameters?.[signal as string];\n }\n return (signal as IGrammarBase).output();\n } else if ((spec as SignalFunction<ParameterCallback<T>, T>).callback) {\n return (spec as SignalFunction<ParameterCallback<T>, T>).callback.call(null, parameters);\n }\n return spec as T;\n}\n\nexport function getGrammarOutput(grammar: IGrammarBase | string, parameters: any) {\n return isGrammar(grammar) ? grammar.output() : parameters[grammar];\n}\n\n/**\n * 判断是否是依赖signal\n */\nexport function isSignal(obj: any) {\n return obj && (obj.signal || obj.callback);\n}\n\nexport const isGrammar = (el: any): el is IGrammarBase => {\n return el && !isNil(el.grammarType);\n};\n\nexport const parseField = <T>(field: ((datum: T) => symbol | string) | string | symbol) => {\n if (isFunction(field)) {\n return field;\n }\n return (datum: T) => datum[field];\n};\n\nexport const parseColor = (color: any): string | null => {\n if (isString(color) && Color.parseColorString(color)) {\n return color;\n }\n return null;\n};\n"]}
1
+ {"version":3,"sources":["../src/parse/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["import { isString, isFunction, isNil, array, Color } from '@visactor/vutils';\nimport type { IElement } from '../types/element';\nimport type {\n FunctionCallback,\n SignalDependency,\n SignalReference,\n IView,\n GenericFunctionType,\n SignalFunction,\n ParameterFunctionType,\n ParameterCallback,\n Nil\n} from '../types';\nimport type { IGrammarBase } from '../types/grammar';\n\nexport function parseReference(dependency: SignalDependency | SignalDependency[], view: IView): IGrammarBase[] {\n const dependencies: SignalDependency[] = array(dependency);\n return dependencies.reduce((refs: IGrammarBase[], dep: string | IGrammarBase) => {\n const ref = (isString(dep) ? view.getGrammarById(dep as string) : dep) as IGrammarBase;\n\n if (ref) {\n refs.push(ref);\n }\n return refs;\n }, []);\n}\n\nfunction isSignalReferenceType(signal: any): signal is SignalReference {\n return !isFunction(signal) && !!(signal as SignalReference)?.signal;\n}\n\nfunction isSignalFunctionType<Callback extends FunctionCallback<T>, T>(\n signal: any\n): signal is SignalFunction<Callback, T> {\n return !isFunction(signal) && !!(signal as SignalFunction<Callback, T>)?.callback;\n}\n\nexport function parseFunctionType<Callback extends FunctionCallback<T>, T>(\n spec: GenericFunctionType<Callback, T> | Nil,\n view: IView\n): IGrammarBase[] {\n if (isNil(spec)) {\n return [];\n }\n if (isSignalReferenceType(spec)) {\n const signal = spec.signal;\n if (isString(signal)) {\n return array<IGrammarBase>(view.getGrammarById(signal as string) as IGrammarBase);\n } else if ((signal as IGrammarBase)?.grammarType === 'signal') {\n return [signal as IGrammarBase];\n }\n } else if (isSignalFunctionType(spec)) {\n return parseReference((spec as SignalFunction<Callback, T>).dependency, view);\n }\n return [];\n}\n\nexport function isFunctionType<Callback extends FunctionCallback<T>, T>(\n spec: any\n): spec is Callback | SignalReference | SignalFunction<Callback, T> {\n return isFunction(spec) || spec?.signal || !!(spec as SignalFunction<Callback, T>)?.callback;\n}\n\nexport function invokeFunctionType<Callback extends FunctionCallback<T>, T>(\n spec: GenericFunctionType<Callback, T> | Nil,\n parameters: any,\n datumOrGrammarInstance?: any | IGrammarBase,\n element?: IElement | any\n): T {\n if (isNil(spec)) {\n return spec as T;\n }\n\n if (isFunction(spec)) {\n if (element) {\n return (spec as Callback).call(null, datumOrGrammarInstance, element, parameters);\n }\n return (spec as Callback).call(null, datumOrGrammarInstance, parameters);\n } else if ((spec as SignalReference).signal) {\n const signal = (spec as SignalReference).signal;\n if (isString(signal)) {\n return parameters?.[signal as string];\n }\n return (signal as IGrammarBase).output();\n } else if ((spec as SignalFunction<Callback, T>).callback) {\n if (element) {\n return (spec as SignalFunction<Callback, T>).callback.call(null, datumOrGrammarInstance, element, parameters);\n }\n return (spec as SignalFunction<Callback, T>).callback.call(null, datumOrGrammarInstance, parameters);\n }\n return spec as T;\n}\n\nexport function invokeParameterFunctionType<T>(spec: ParameterFunctionType<T>, parameters: any): T {\n if (isNil(spec)) {\n return spec as T;\n }\n\n if (isFunction(spec)) {\n return spec.call(null, parameters);\n } else if ((spec as SignalReference).signal) {\n const signal = (spec as SignalReference).signal;\n if (isString(signal)) {\n return parameters?.[signal as string];\n }\n return (signal as IGrammarBase).output();\n } else if ((spec as SignalFunction<ParameterCallback<T>, T>).callback) {\n return (spec as SignalFunction<ParameterCallback<T>, T>).callback.call(null, parameters);\n }\n return spec as T;\n}\n\nexport function getGrammarOutput(grammar: IGrammarBase | string, parameters: any) {\n return isGrammar(grammar) ? grammar.output() : parameters[grammar];\n}\n\n/**\n * 判断是否是依赖signal\n */\nexport function isSignal(obj: any) {\n return obj && (obj.signal || obj.callback);\n}\n\nexport const isGrammar = (el: any): el is IGrammarBase => {\n return el && !isNil(el.grammarType);\n};\n\nexport const parseField = <T>(field: ((datum: T) => symbol | string) | string | symbol) => {\n if (isFunction(field)) {\n return field as (datum: T) => symbol | string;\n }\n return (datum: T) => datum[field as string | symbol];\n};\n\nexport const parseColor = (color: any): string | null => {\n if (isString(color) && Color.parseColorString(color)) {\n return color;\n }\n return null;\n};\n"]}
@@ -22,8 +22,7 @@ export interface IMorphAnimationConfig {
22
22
  oneByOne?: MorphFunctionValueType<boolean | number>;
23
23
  splitPath?: MorphFunctionValueType<'clone' | Nil>;
24
24
  }
25
- export interface IMorph {
25
+ export interface IViewDiff {
26
26
  diffGrammar: <U extends IGrammarBase>(prevGrammars: U[], nextGrammars: U[]) => DiffResult<U, U>;
27
27
  diffMark: (prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) => DiffResult<IMark[], IMark[]>;
28
- morph: (prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) => void;
29
28
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/morph.ts"],"names":[],"mappings":"","file":"morph.js","sourcesContent":["import type { EasingType } from '@visactor/vrender-core';\nimport type { DiffResult, Nil } from './base';\nimport type { IElement } from './element';\nimport type { IGrammarBase, IMark } from './grammar';\nimport type { GenericFunctionType } from './signal';\nimport type { IRunningConfig } from './view';\n\nexport type MorphData = { prev: any[]; next: any[] };\nexport type MorphElements = { prev: IElement[]; next: IElement[] };\n\nexport type MorphFunctionCallback<T> = (datum: MorphData, element: MorphElements, parameters: any) => T;\n\nexport type MorphFunctionType<T> = GenericFunctionType<MorphFunctionCallback<T>, T>;\n\nexport type MorphFunctionValueType<T> = MorphFunctionType<T> | T;\n\nexport interface IMorphAnimationConfig {\n easing?: EasingType;\n delay?: MorphFunctionValueType<number>;\n duration?: MorphFunctionValueType<number>;\n oneByOne?: MorphFunctionValueType<boolean | number>;\n splitPath?: MorphFunctionValueType<'clone' | Nil>;\n}\n\nexport interface IMorph {\n diffGrammar: <U extends IGrammarBase>(prevGrammars: U[], nextGrammars: U[]) => DiffResult<U, U>;\n diffMark: (prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) => DiffResult<IMark[], IMark[]>;\n\n morph: (prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) => void;\n}\n"]}
1
+ {"version":3,"sources":["../src/types/morph.ts"],"names":[],"mappings":"","file":"morph.js","sourcesContent":["import type { EasingType } from '@visactor/vrender-core';\nimport type { DiffResult, Nil } from './base';\nimport type { IElement } from './element';\nimport type { IGrammarBase, IMark } from './grammar';\nimport type { GenericFunctionType } from './signal';\nimport type { IRunningConfig } from './view';\n\nexport type MorphData = { prev: any[]; next: any[] };\nexport type MorphElements = { prev: IElement[]; next: IElement[] };\n\nexport type MorphFunctionCallback<T> = (datum: MorphData, element: MorphElements, parameters: any) => T;\n\nexport type MorphFunctionType<T> = GenericFunctionType<MorphFunctionCallback<T>, T>;\n\nexport type MorphFunctionValueType<T> = MorphFunctionType<T> | T;\n\nexport interface IMorphAnimationConfig {\n easing?: EasingType;\n delay?: MorphFunctionValueType<number>;\n duration?: MorphFunctionValueType<number>;\n oneByOne?: MorphFunctionValueType<boolean | number>;\n splitPath?: MorphFunctionValueType<'clone' | Nil>;\n}\n\nexport interface IViewDiff {\n diffGrammar: <U extends IGrammarBase>(prevGrammars: U[], nextGrammars: U[]) => DiffResult<U, U>;\n diffMark: (prevMarks: IMark[], nextMarks: IMark[], runningConfig: IRunningConfig) => DiffResult<IMark[], IMark[]>;\n}\n"]}
@@ -18,8 +18,7 @@ export default class View extends EventEmitter implements IView {
18
18
  private _config;
19
19
  private _options;
20
20
  private _cachedGrammars;
21
- private _willMorphMarks;
22
- private _morph;
21
+ private _differ;
23
22
  private _eventConfig;
24
23
  private _eventListeners;
25
24
  private _theme;
package/cjs/view/View.js CHANGED
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "__esModule", {
10
10
  value: !0
11
11
  });
12
12
 
13
- const vutils_1 = require("@visactor/vutils"), vrender_core_1 = require("@visactor/vrender-core"), data_1 = require("./data"), dataflow_1 = __importDefault(require("./dataflow")), mark_tree_1 = require("../graph/mark-tree"), constants_1 = require("../graph/constants"), canvas_renderer_1 = __importDefault(require("../graph/canvas-renderer")), events_extend_1 = __importDefault(require("../graph/util/events-extend")), constants_2 = require("./constants"), signal_1 = require("./signal"), view_1 = require("../parse/view"), util_1 = require("../parse/util"), env_1 = require("../graph/util/env"), group_1 = require("./group"), mark_1 = require("./mark"), morph_1 = require("../graph/animation/morph"), grammar_record_1 = require("./grammar-record"), animate_1 = require("./animate"), enums_1 = require("../graph/enums"), text_1 = require("../semantic-marks/text"), theme_manager_1 = require("../theme/theme-manager"), factory_1 = require("../core/factory"), component_1 = require("./component"), graphic_1 = require("../graph/util/graphic");
13
+ const vutils_1 = require("@visactor/vutils"), vrender_core_1 = require("@visactor/vrender-core"), data_1 = require("./data"), dataflow_1 = __importDefault(require("./dataflow")), mark_tree_1 = require("../graph/mark-tree"), constants_1 = require("../graph/constants"), canvas_renderer_1 = __importDefault(require("../graph/canvas-renderer")), events_extend_1 = __importDefault(require("../graph/util/events-extend")), constants_2 = require("./constants"), signal_1 = require("./signal"), view_1 = require("../parse/view"), util_1 = require("../parse/util"), env_1 = require("../graph/util/env"), group_1 = require("./group"), mark_1 = require("./mark"), grammar_record_1 = require("./grammar-record"), enums_1 = require("../graph/enums"), text_1 = require("../semantic-marks/text"), theme_manager_1 = require("../theme/theme-manager"), factory_1 = require("../core/factory"), component_1 = require("./component"), graphic_1 = require("../graph/util/graphic"), view_diff_1 = require("../graph/view-diff");
14
14
 
15
15
  class View extends vutils_1.EventEmitter {
16
16
  static useRegisters(comps) {
@@ -222,7 +222,7 @@ class View extends vutils_1.EventEmitter {
222
222
  })), this;
223
223
  }
224
224
  parseSpec(spec) {
225
- var _a, _b, _c, _d, _e, _f;
225
+ var _a, _b, _c, _d, _e, _f, _g, _h;
226
226
  if (this.emit(enums_1.HOOK_EVENT.BEFORE_PARSE_VIEW), this._spec = spec, (0, view_1.normalizeMarkTree)(spec),
227
227
  spec.theme ? this.theme(spec.theme) : this.theme(theme_manager_1.ThemeManager.getDefaultTheme()),
228
228
  spec.width && this.width(spec.width), spec.height && this.height(spec.height), this.padding(null !== (_b = null !== (_a = spec.padding) && void 0 !== _a ? _a : this._options.padding) && void 0 !== _b ? _b : this._theme.padding),
@@ -254,9 +254,9 @@ class View extends vutils_1.EventEmitter {
254
254
  null === (_b = this.event) || void 0 === _b || _b.call(this, eventConfig);
255
255
  })), spec.interactions && spec.interactions.length && spec.interactions.forEach((interaction => {
256
256
  this.interaction(interaction.type, interaction);
257
- })), !1 === spec.animation ? this.animate.disable() : this.animate.enable(), this.emit(enums_1.HOOK_EVENT.AFTER_PARSE_VIEW),
258
- this._needBuildLayoutTree = !0, this._layoutState = enums_1.LayoutState.before,
259
- this;
257
+ })), !1 === spec.animation ? null === (_g = this.animate) || void 0 === _g || _g.disable() : null === (_h = this.animate) || void 0 === _h || _h.enable(),
258
+ this.emit(enums_1.HOOK_EVENT.AFTER_PARSE_VIEW), this._needBuildLayoutTree = !0,
259
+ this._layoutState = enums_1.LayoutState.before, this;
260
260
  }
261
261
  updateSpec(spec) {
262
262
  return this.removeAllInteractions(), this.removeAllGrammars(), this.parseSpec(spec);
@@ -399,11 +399,11 @@ class View extends vutils_1.EventEmitter {
399
399
  return this.evaluate(runningConfig), this;
400
400
  }
401
401
  doRender(immediately) {
402
- this.emit(enums_1.HOOK_EVENT.BEFORE_DO_RENDER), this.renderer && (this._progressiveMarks || this.animate.animate(),
402
+ this.emit(enums_1.HOOK_EVENT.BEFORE_DO_RENDER), this.renderer && (!this._progressiveMarks && this.animate && this.animate.animate(),
403
403
  this.renderer.render(immediately), this.handleRenderEnd()), this.emit(enums_1.HOOK_EVENT.AFTER_DO_RENDER);
404
404
  }
405
405
  evaluate(runningConfig) {
406
- var _a, _b;
406
+ var _a, _c;
407
407
  const normalizedRunningConfig = (0, view_1.normalizeRunningConfig)(runningConfig), grammarWillDetach = this._cachedGrammars.size() > 0;
408
408
  grammarWillDetach && (this.reuseCachedGrammars(normalizedRunningConfig), this.detachCachedGrammar());
409
409
  const hasResize = this._resizeRenderer(), hasUpdate = this._dataflow.hasCommitted();
@@ -412,28 +412,28 @@ class View extends vutils_1.EventEmitter {
412
412
  this._needBuildLayoutTree = !1), this._layoutState && (this._layoutState = enums_1.LayoutState.layouting,
413
413
  this.doLayout(), this._dataflow.hasCommitted() && (this._layoutState = enums_1.LayoutState.reevaluate,
414
414
  this._dataflow.evaluate()), this._layoutState = enums_1.LayoutState.after, (null === (_a = this._layoutMarks) || void 0 === _a ? void 0 : _a.length) && this.handleLayoutEnd()),
415
- this._layoutState = null, this.findProgressiveMarks(), this._resizeRenderer(), null === (_b = this._willMorphMarks) || void 0 === _b || _b.forEach((morphMarks => {
416
- this._morph.morph(morphMarks.prev, morphMarks.next, normalizedRunningConfig);
417
- })), this._willMorphMarks = null, this.releaseCachedGrammars(normalizedRunningConfig),
418
- this.doRender(!0), this.doPreProgressive(), this) : this;
415
+ this._layoutState = null, this.findProgressiveMarks(), this._resizeRenderer(), null === (_c = this.morph) || void 0 === _c || _c.call(this, normalizedRunningConfig),
416
+ this.releaseCachedGrammars(normalizedRunningConfig), this.doRender(!0), this.doPreProgressive(),
417
+ this) : this;
419
418
  }
420
419
  reuseCachedGrammars(runningConfig) {
421
- if (this._willMorphMarks || (this._willMorphMarks = []), runningConfig.reuse) {
420
+ if (runningConfig.reuse) {
422
421
  const reuseDiffUpdate = diff => {
423
422
  diff.next.reuse(diff.prev), diff.prev.detachAll(), diff.prev.clear(), this._cachedGrammars.unrecord(diff.prev);
424
423
  };
425
- this._morph.diffGrammar(this._cachedGrammars.getAllSignals(), this.grammars.getAllSignals().filter((signal => !view_1.BuiltInSignalID.includes(signal.id())))).update.forEach(reuseDiffUpdate);
426
- this._morph.diffGrammar(this._cachedGrammars.getAllData(), this.grammars.getAllData()).update.forEach(reuseDiffUpdate);
427
- this._morph.diffGrammar(this._cachedGrammars.getAllScales(), this.grammars.getAllScales()).update.forEach(reuseDiffUpdate);
428
- this._morph.diffGrammar(this._cachedGrammars.getAllCoordinates(), this.grammars.getAllCoordinates()).update.forEach(reuseDiffUpdate);
424
+ this._differ.diffGrammar(this._cachedGrammars.getAllSignals(), this.grammars.getAllSignals().filter((signal => !view_1.BuiltInSignalID.includes(signal.id())))).update.forEach(reuseDiffUpdate);
425
+ this._differ.diffGrammar(this._cachedGrammars.getAllData(), this.grammars.getAllData()).update.forEach(reuseDiffUpdate);
426
+ this._differ.diffGrammar(this._cachedGrammars.getAllScales(), this.grammars.getAllScales()).update.forEach(reuseDiffUpdate);
427
+ this._differ.diffGrammar(this._cachedGrammars.getAllCoordinates(), this.grammars.getAllCoordinates()).update.forEach(reuseDiffUpdate);
429
428
  }
430
- this._morph.diffMark(this._cachedGrammars.getAllMarks(), this.grammars.getAllMarks().filter((mark => "root" !== mark.id())), runningConfig).update.forEach((diff => {
429
+ this._differ.diffMark(this._cachedGrammars.getAllMarks(), this.grammars.getAllMarks().filter((mark => "root" !== mark.id())), runningConfig).update.forEach((diff => {
430
+ var _b;
431
431
  const matched = 1 === diff.prev.length && 1 === diff.next.length && diff.prev[0].markType === diff.next[0].markType, enableMarkMorphConfig = diff.prev.every((mark => mark.getMorphConfig().morph)) && diff.next.every((mark => mark.getMorphConfig().morph));
432
432
  matched && runningConfig.reuse ? (diff.next[0].reuse(diff.prev[0]), diff.prev[0].detachAll(),
433
- diff.prev[0].clear(), this._cachedGrammars.unrecord(diff.prev[0])) : (runningConfig.morph && enableMarkMorphConfig || runningConfig.morphAll) && this._willMorphMarks.push({
433
+ diff.prev[0].clear(), this._cachedGrammars.unrecord(diff.prev[0])) : (runningConfig.morph && enableMarkMorphConfig || runningConfig.morphAll) && (null === (_b = this.addMorphMarks) || void 0 === _b || _b.call(this, {
434
434
  prev: diff.prev,
435
435
  next: diff.next
436
- });
436
+ }));
437
437
  }));
438
438
  }
439
439
  detachCachedGrammar() {
@@ -451,10 +451,11 @@ class View extends vutils_1.EventEmitter {
451
451
  }));
452
452
  const markNodes = this._cachedGrammars.getAllMarkNodes();
453
453
  markNodes.forEach((node => {
454
- node.mark.animate.stop(), runningConfig.enableExitAnimation && this.animate.animateAddition(node.mark);
454
+ var _a;
455
+ null === (_a = node.mark.animate) || void 0 === _a || _a.stop(), runningConfig.enableExitAnimation && this.animate && this.animate.animateAddition(node.mark);
455
456
  }));
456
457
  const releaseUp = node => {
457
- if (node.mark.view && 0 === node.mark.animate.getAnimatorCount() && (!node.children || 0 === node.children.length)) {
458
+ if (node.mark.view && (!node.mark.animate || 0 === node.mark.animate.getAnimatorCount()) && (!node.children || 0 === node.children.length)) {
458
459
  node.mark.release();
459
460
  const parent = node.parent;
460
461
  parent && (node.parent.children = node.parent.children.filter((n => n !== node)),
@@ -463,8 +464,8 @@ class View extends vutils_1.EventEmitter {
463
464
  };
464
465
  markNodes.forEach((node => {
465
466
  const mark = node.mark;
466
- 0 === mark.animate.getAnimatorCount() ? releaseUp(node) : mark.addEventListener("animationEnd", (() => {
467
- 0 === mark.animate.getAnimatorCount() && releaseUp(node);
467
+ mark.animate && 0 === mark.animate.getAnimatorCount() ? releaseUp(node) : mark.addEventListener("animationEnd", (() => {
468
+ mark.animate && 0 === mark.animate.getAnimatorCount() && releaseUp(node);
468
469
  }));
469
470
  })), this._cachedGrammars.clear();
470
471
  }
@@ -589,12 +590,12 @@ class View extends vutils_1.EventEmitter {
589
590
  this.renderer = new canvas_renderer_1.default(this), this.renderer.initialize(width, height, this._options, this._eventConfig).background(this._background);
590
591
  }
591
592
  initialize() {
592
- var _a;
593
+ var _a, _c;
593
594
  this.grammars = new grammar_record_1.RecordedGrammars((grammar => grammar.id()), ((key, grammar) => this.logger.warn(`Grammar id '${key}' has been occupied`, grammar))),
594
595
  this._cachedGrammars = new grammar_record_1.RecordedTreeGrammars((grammar => grammar.id())),
595
596
  this._options.logger && vutils_1.Logger.setInstance(this._options.logger), this.logger = vutils_1.Logger.getInstance(null !== (_a = this._options.logLevel) && void 0 !== _a ? _a : 0),
596
- this._dataflow = new dataflow_1.default, this.animate = new animate_1.ViewAnimate(this),
597
- this._morph = new morph_1.Morph, this._options.hooks && (Object.keys(this._options.hooks).forEach((key => {
597
+ this._dataflow = new dataflow_1.default, this.animate = null === (_c = this.initAnimate) || void 0 === _c ? void 0 : _c.call(this, this),
598
+ this._differ = new view_diff_1.ViewDiff, this._options.hooks && (Object.keys(this._options.hooks).forEach((key => {
598
599
  this.on(key, this._options.hooks[key]);
599
600
  })), this.hooks = this._options.hooks), this.container = null, this.renderer = null,
600
601
  this._eventListeners = [], this._eventConfig = this.initializeEventConfig(this._options.eventConfig),
@@ -635,13 +636,14 @@ class View extends vutils_1.EventEmitter {
635
636
  })), this._progressiveMarks = null);
636
637
  }
637
638
  release() {
638
- var _a, _b, _c;
639
+ var _a, _b, _c, _d;
639
640
  this.removeAllInteractions(), this.releaseStageEvent(), this._unBindResizeEvent(),
640
641
  this.clearProgressive(), factory_1.Factory.unregisterRuntimeTransforms(), vutils_1.Logger.setInstance(null),
641
- this.animate.stop(), this.grammars.release(), this._cachedGrammars.release(), this._dataflow.release(),
642
- this._dataflow = null, null === (_b = null === (_a = this.renderer) || void 0 === _a ? void 0 : _a.release) || void 0 === _b || _b.call(_a),
642
+ null === (_a = this.animate) || void 0 === _a || _a.stop(), this.grammars.release(),
643
+ this._cachedGrammars.release(), this._dataflow.release(), this._dataflow = null,
644
+ null === (_c = null === (_b = this.renderer) || void 0 === _b ? void 0 : _b.release) || void 0 === _c || _c.call(_b),
643
645
  this.renderer = null, this._boundInteractions = null, this.removeAllListeners(),
644
- null === (_c = this._eventListeners) || void 0 === _c || _c.forEach((listener => {
646
+ null === (_d = this._eventListeners) || void 0 === _d || _d.forEach((listener => {
645
647
  listener.source.removeEventListener(listener.type, listener.handler);
646
648
  })), this._eventListeners = null;
647
649
  }