@visactor/vgrammar-core 0.14.1 → 0.14.2

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/transform.ts"],"names":[],"mappings":"","file":"transform.js","sourcesContent":["import type { FieldGetterFunction, LayoutViewBox } from '@visactor/vgrammar-util';\nimport type { SignalFunction, SignalReference } from './signal';\nimport type { IView } from './view';\nimport type { IData } from './grammar';\nimport type { SortConfigSpec } from './data';\n\nexport type TransformSpecValue =\n | {\n /** transform will depend a signal grammar instance as params */\n signal?: string;\n /** transform will depend a scale grammar instance as params, this should only be used in the transform of mark */\n scale?: string;\n /** transform will depend a data grammar instance as params, this should only be used in the transform of mark */\n data?: string;\n /** transform will depend a customized grammar instance as params, this should only be used in the transform of mark */\n customized?: string;\n }\n | any;\n\nexport type TransformFunctionCallback<T> = (parameters: any) => T;\n\nexport type TransformFunctionType<T> = T | SignalReference<T> | SignalFunction<TransformFunctionCallback<T>, T>;\n\nexport type ConvertTransformOptionToSpec<TransformOptionType> = {\n [Key in keyof TransformOptionType]?: TransformFunctionType<TransformOptionType[Key]>;\n};\n\nexport interface BinTransformOption {\n field: string;\n extent: [number, number];\n step?: number;\n bins?: number;\n as?: [string, string];\n}\n\nexport interface ContourTransformOption {\n field: string;\n row: number;\n column: number;\n thresholds?: number[];\n levels?: number;\n asThreshold?: string;\n asPoints?: string;\n}\n\nexport interface FilterTransformOption {\n callback: (entry: any, params: any) => boolean;\n}\n\nexport interface FunnelTransformOption {\n /** the field to of measure */\n field: string;\n /** the filed of transform ration(the value of next level/ the value of current level)**/\n asTransformRatio?: string;\n /** the filed of reach ration(the value of current level/ the value of prev level))*/\n asReachRatio?: string;\n /** the field of height ratio **/\n asHeightRatio?: string;\n /** the field of value ration(this value of current level / this value of first level ) */\n asValueRatio?: string;\n /** the field of last value ratio(the value of last level / this value of first level) */\n asLastValueRatio?: string;\n /** the field of next value ratio(the value of next level / this value of first level) */\n asNextValueRatio?: string;\n /** the field of current value */\n asCurrentValue?: string;\n /** the field of last value **/\n asLastValue?: string;\n /** the field of next value **/\n asNextValue?: string;\n /** whether or not the last level of the funnel is a cone */\n isCone?: boolean;\n /** whether or not the height will be encode to value**/\n heightVisual?: boolean;\n\n /** the range of value */\n range?: { min: number; max: number };\n}\n\nexport interface JoinTransformOption {\n from?: any[];\n key: string;\n fields: string[];\n values?: string[];\n as?: string[];\n default?: any;\n}\n\nexport interface KDETransformOption {\n dimension?: '1d' | '2d';\n field: string | string[];\n bandwidth?: number;\n extent?: [number, number] | [{ x: number; y: number }, { x: number; y: number }];\n bins?: number | number[];\n as?: string[];\n}\n\nexport interface MapTransformOption {\n callback: (entry: any, params?: any) => any;\n as?: string;\n all?: boolean;\n}\n\nexport interface PickTransformOption {\n as?: string[];\n fields: string[] | FieldGetterFunction[];\n}\n\nexport interface PieTransformOption {\n field: string;\n startAngle?: number;\n endAngle?: number;\n asStartAngle?: string;\n asEndAngle?: string;\n asMiddleAngle?: string;\n asRadian?: string;\n asRatio?: string;\n asQuadrant?: string;\n asK?: string;\n}\n\nexport interface RangeTransformOptions {\n start: number;\n stop: number;\n step?: number;\n as?: string;\n}\n\nexport interface SortTransformOptions {\n sort: SortConfigSpec | ((a: any, b: any) => number);\n}\n\nexport interface FoldTransformOptions {\n fields: string[];\n asKey?: string;\n asValue?: string;\n retains?: string[];\n}\n\nexport interface UnfoldTransformOptions {\n groupBy?: string[] | string;\n keyField: string;\n valueField: string;\n aggregateType?: 'sum' | 'min' | 'max' | 'count' | 'mean';\n}\n\nexport interface StackTransformOptions {\n // TODO: provide more order option referring to d3-shape\n order?: 'positive' | 'negative';\n offset?: 'none' | 'diverging' | 'silhouette' | 'wiggle';\n stackField: string;\n dimensionField: string;\n asStack?: string;\n asPrevStack?: string;\n asPercent?: string;\n asPercentStack?: string;\n asPrevPercentStack?: string;\n asSum?: string;\n}\n\nexport interface DodgeTransformOptions {\n /**\n * the gap for two graphic elements\n */\n innerGap?: number | string;\n /**\n * only used for rect / interval mark\n */\n maxWidth?: number;\n minWidth?: number;\n /** the gap between two category */\n categoryGap?: number | string;\n /**\n * specify the field to dodge, if this field is not specified, we'll use the `groupKey` of Element to dodge\n */\n dodgeBy?: string | string[];\n /**\n * specify the channel to dodge, if this field is not specified, we'll use the channel which is associated to a band scale\n */\n dodgeChannel?: 'x' | 'y';\n}\n\nexport interface JitterTransformOptions {\n bandWidth?: number;\n bandHeight?: number;\n widthRatio?: number;\n heightRatio?: number;\n random?: (index?: number, total?: number) => number;\n}\n\nexport interface JitterXTransformOptions {\n bandWidth?: number;\n widthRatio?: number;\n random?: (index?: number, total?: number) => number;\n}\nexport interface JitterYTransformOptions {\n bandHeight?: number;\n heightRatio?: number;\n random?: (index?: number, total?: number) => number;\n}\n\nexport type CircularRelationTransformOptions = LayoutViewBox & {\n field: string;\n radiusField?: string;\n radiusRange?: [number, number];\n center?: [string | number, string | number];\n startAngle?: number;\n endAngle?: number;\n innerRadius?: string | number;\n outerRadius?: string | number;\n};\n\nexport interface CircularRelationItem {\n x: number;\n y: number;\n radius: number;\n datum: any;\n}\n\nexport interface IdentifierTransformOptions {\n as: string;\n}\n\nexport interface MarkOverlapTransformOptions {\n direction: number;\n delta?: number;\n deltaMul?: number;\n radius?: boolean;\n hideMode?: number;\n forceUpdate?: boolean;\n forceUpdateStamp?: number;\n groupBy?: string;\n sort?: boolean;\n}\n\nexport interface SampleTransformOptions {\n size: number;\n factor?: number;\n skipfirst?: boolean;\n yfield?: string;\n groupBy?: string;\n mode?: 'lttb' | 'min' | 'max' | 'average' | 'sum';\n}\n\nexport interface SymmetryTransformOptions {\n channel?: 'x' | 'y';\n align?: 'min' | 'max';\n}\n\nexport interface BinTransformSpec extends BinTransformOption {\n type: 'bin';\n}\n\nexport interface ContourTransformSpec extends ContourTransformOption {\n type: 'contour';\n}\n\nexport interface FilterTransformSpec extends ConvertTransformOptionToSpec<FilterTransformOption> {\n type: 'filter';\n}\n\nexport interface FunnelTransformSpec extends FunnelTransformOption {\n type: 'funnel';\n}\n\nexport interface PieTransformSpec extends PieTransformOption {\n type: 'pie';\n}\n\nexport interface JoinTransformSpec extends ConvertTransformOptionToSpec<Omit<JoinTransformOption, 'from'>> {\n type: 'join';\n from?: TransformFunctionType<JoinTransformOption['from']> | { data: string | IData };\n}\n\nexport interface KDETransformSpec extends KDETransformOption {\n type: 'kde';\n}\n\nexport interface MapTransformSpec extends ConvertTransformOptionToSpec<Omit<MapTransformOption, 'callback'>> {\n type: 'map';\n callback: MapTransformOption['callback'];\n}\n\nexport interface PickTransformSpec extends ConvertTransformOptionToSpec<PickTransformOption> {\n type: 'pick';\n}\nexport interface RangeTransformSpec extends ConvertTransformOptionToSpec<RangeTransformOptions> {\n type: 'range';\n}\n\nexport interface SortTransformSpec extends ConvertTransformOptionToSpec<SortTransformOptions> {\n type: 'sort';\n}\nexport interface StackTransformSpec extends ConvertTransformOptionToSpec<StackTransformOptions> {\n type: 'stack';\n}\nexport interface DodgeTransformSpec extends ConvertTransformOptionToSpec<DodgeTransformOptions> {\n type: 'dodge';\n}\n\nexport interface IdentifierTransformSpec extends ConvertTransformOptionToSpec<IdentifierTransformOptions> {\n type: 'identifier';\n}\n\nexport interface MarkOverlapTransformSpec extends ConvertTransformOptionToSpec<MarkOverlapTransformOptions> {\n type: 'markoverlap';\n}\nexport interface SampleTransformSpec extends ConvertTransformOptionToSpec<SampleTransformOptions> {\n type: 'sampling';\n}\n\nexport interface JitterTransformSpec extends ConvertTransformOptionToSpec<JitterTransformOptions> {\n type: 'jitter';\n}\n\nexport interface JitterXTransformSpec extends ConvertTransformOptionToSpec<JitterXTransformOptions> {\n type: 'jitterX';\n}\n\nexport interface JitterYTransformSpec extends ConvertTransformOptionToSpec<JitterYTransformOptions> {\n type: 'jitterY';\n}\n\nexport type CircularRelationTransformSpec = ConvertTransformOptionToSpec<CircularRelationTransformOptions> & {\n type: 'circularRelation';\n};\n\nexport interface FoldTransformSpec extends ConvertTransformOptionToSpec<FoldTransformOptions> {\n type: 'fold';\n}\n\nexport interface UnfoldTransformSpec extends ConvertTransformOptionToSpec<UnfoldTransformOptions> {\n type: 'unfold';\n}\n\nexport interface SymmetryTransformSpec extends ConvertTransformOptionToSpec<SymmetryTransformOptions> {\n type: 'symmetry';\n}\n\nexport interface BaseTransformSpec {\n /** the type of transform */\n type: string;\n [key: string]: TransformSpecValue | TransformSpecValue[];\n}\n\nexport type TransformSpec =\n | FilterTransformSpec\n | FunnelTransformSpec\n | PieTransformSpec\n | JoinTransformSpec\n | MapTransformSpec\n | PickTransformSpec\n | RangeTransformSpec\n | SortTransformSpec\n | StackTransformSpec\n | DodgeTransformSpec\n | IdentifierTransformSpec\n | BaseTransformSpec\n | MarkOverlapTransformSpec\n | SampleTransformSpec\n | JitterTransformSpec\n | JitterXTransformSpec\n | JitterYTransformSpec\n | CircularRelationTransformSpec\n | FoldTransformSpec\n | UnfoldTransformSpec;\n\nexport interface IProgressiveTransformResult<Output = any> {\n /** is progressive finished */\n unfinished: () => boolean;\n /** return all the result */\n output: () => Output;\n /** the output result of current progressive run */\n progressiveOutput: () => Output;\n /** run in progressive mode */\n progressiveRun: () => void;\n /** release the progressive context */\n release: () => void;\n}\n\nexport interface IProgressiveTransform<Output = any> {\n progressive: IProgressiveTransformResult<Output>;\n}\n\nexport type IFunctionTransform<Options = any, Input = any, Output = any> = (\n options?: Options,\n data?: Input,\n params?: Record<string, any>,\n view?: IView\n) => Output | IProgressiveTransformResult<Output>;\nexport interface ITransform<Options = any, Input = any, Output = any> {\n type: string;\n markPhase?: 'beforeJoin' | 'afterEncode' | 'afterEncodeItems';\n /** 是否支持渐进流程 */\n canProgressive?: boolean;\n /** transform function */\n transform: IFunctionTransform<Options, Input, Output>;\n isBuiltIn?: boolean;\n}\n"]}
1
+ {"version":3,"sources":["../src/types/transform.ts"],"names":[],"mappings":"","file":"transform.js","sourcesContent":["import type { FieldGetterFunction, LayoutViewBox } from '@visactor/vgrammar-util';\nimport type { SignalFunction, SignalReference } from './signal';\nimport type { IView } from './view';\nimport type { IData } from './grammar';\nimport type { SortConfigSpec } from './data';\n\nexport type TransformSpecValue =\n | {\n /** transform will depend a signal grammar instance as params */\n signal?: string;\n /** transform will depend a scale grammar instance as params, this should only be used in the transform of mark */\n scale?: string;\n /** transform will depend a data grammar instance as params, this should only be used in the transform of mark */\n data?: string;\n /** transform will depend a customized grammar instance as params, this should only be used in the transform of mark */\n customized?: string;\n }\n | any;\n\nexport type TransformFunctionCallback<T> = (parameters: any) => T;\n\nexport type TransformFunctionType<T> = T | SignalReference<T> | SignalFunction<TransformFunctionCallback<T>, T>;\n\nexport type ConvertTransformOptionToSpec<TransformOptionType> = {\n [Key in keyof TransformOptionType]?: TransformFunctionType<TransformOptionType[Key]>;\n};\n\nexport interface BinTransformOption {\n field: string;\n extent: [number, number];\n step?: number;\n bins?: number;\n as?: [string, string];\n}\n\nexport interface ContourTransformOption {\n field: string;\n row: number;\n column: number;\n thresholds?: number[];\n levels?: number;\n asThreshold?: string;\n asPoints?: string;\n}\n\nexport interface FilterTransformOption {\n callback: (entry: any, params: any) => boolean;\n}\n\nexport interface FunnelTransformOption {\n /** the field to of measure */\n field: string;\n /** the filed of transform ration(the value of next level/ the value of current level)**/\n asTransformRatio?: string;\n /** the filed of reach ration(the value of current level/ the value of prev level))*/\n asReachRatio?: string;\n /** the field of height ratio **/\n asHeightRatio?: string;\n /** the field of value ration(this value of current level / this value of first level ) */\n asValueRatio?: string;\n /** the field of last value ratio(the value of last level / this value of first level) */\n asLastValueRatio?: string;\n /** the field of next value ratio(the value of next level / this value of first level) */\n asNextValueRatio?: string;\n /** the field of current value */\n asCurrentValue?: string;\n /** the field of last value **/\n asLastValue?: string;\n /** the field of next value **/\n asNextValue?: string;\n /** whether or not the last level of the funnel is a cone */\n isCone?: boolean;\n /** whether or not the height will be encode to value**/\n heightVisual?: boolean;\n\n /** the range of value */\n range?: { min: number; max: number };\n}\n\nexport interface JoinTransformOption {\n from?: any[];\n key: string;\n fields: string[];\n values?: string[];\n as?: string[];\n default?: any;\n}\n\nexport interface KDETransformOption {\n dimension?: '1d' | '2d';\n field: string | string[];\n bandwidth?: number;\n extent?: [number, number] | [{ x: number; y: number }, { x: number; y: number }];\n bins?: number | number[];\n as?: string[];\n}\n\nexport interface MapTransformOption {\n callback: (entry: any, params?: any) => any;\n as?: string;\n all?: boolean;\n}\n\nexport interface PickTransformOption {\n as?: string[];\n fields: string[] | FieldGetterFunction[];\n}\n\nexport interface PieTransformOption {\n field: string;\n startAngle?: number;\n endAngle?: number;\n asStartAngle?: string;\n asEndAngle?: string;\n asMiddleAngle?: string;\n asRadian?: string;\n asRatio?: string;\n asQuadrant?: string;\n asK?: string;\n}\n\nexport interface RangeTransformOptions {\n start: number;\n stop: number;\n step?: number;\n as?: string;\n}\n\nexport interface SortTransformOptions {\n sort: SortConfigSpec | ((a: any, b: any) => number);\n}\n\nexport interface FoldTransformOptions {\n fields: string[];\n asKey?: string;\n asValue?: string;\n retains?: string[];\n}\n\nexport interface UnfoldTransformOptions {\n groupBy?: string[] | string;\n keyField: string;\n valueField: string;\n aggregateType?: 'sum' | 'min' | 'max' | 'count' | 'mean';\n}\n\nexport interface StackTransformOptions {\n // TODO: provide more order option referring to d3-shape\n order?: 'positive' | 'negative';\n offset?: 'none' | 'diverging' | 'silhouette' | 'wiggle';\n stackField: string;\n dimensionField: string;\n asStack?: string;\n asPrevStack?: string;\n asPercent?: string;\n asPercentStack?: string;\n asPrevPercentStack?: string;\n asSum?: string;\n}\n\nexport interface DodgeTransformOptions {\n /**\n * the gap for two graphic elements\n */\n innerGap?: number | string;\n /**\n * only used for rect / interval mark\n */\n maxWidth?: number;\n minWidth?: number;\n /** the gap between two category */\n categoryGap?: number | string;\n /**\n * specify the field to dodge, if this field is not specified, we'll use the `groupKey` of Element to dodge\n */\n dodgeBy?: string | string[];\n /**\n * specify the channel to dodge, if this field is not specified, we'll use the channel which is associated to a band scale\n */\n dodgeChannel?: 'x' | 'y';\n}\n\nexport interface JitterTransformOptions {\n bandWidth?: number;\n bandHeight?: number;\n widthRatio?: number;\n heightRatio?: number;\n random?: (index?: number, total?: number) => number;\n}\n\nexport interface JitterXTransformOptions {\n bandWidth?: number;\n widthRatio?: number;\n random?: (index?: number, total?: number) => number;\n}\nexport interface JitterYTransformOptions {\n bandHeight?: number;\n heightRatio?: number;\n random?: (index?: number, total?: number) => number;\n}\n\nexport type CircularRelationTransformOptions = LayoutViewBox & {\n field: string;\n radiusField?: string;\n radiusRange?: [number, number];\n center?: [string | number, string | number];\n startAngle?: number;\n endAngle?: number;\n innerRadius?: string | number;\n outerRadius?: string | number;\n};\n\nexport interface CircularRelationItem {\n x: number;\n y: number;\n radius: number;\n datum: any;\n}\n\nexport interface IdentifierTransformOptions {\n as: string;\n}\n\nexport interface MarkOverlapTransformOptions {\n direction: number;\n delta?: number;\n deltaMul?: number;\n radius?: boolean;\n hideMode?: number;\n forceUpdate?: boolean;\n forceUpdateStamp?: number;\n groupBy?: string;\n sort?: boolean;\n}\n\nexport interface SampleTransformOptions {\n size: number;\n factor?: number;\n skipfirst?: boolean;\n yfield?: string;\n groupBy?: string;\n mode?: 'lttb' | 'min' | 'max' | 'average' | 'sum';\n}\n\nexport interface SymmetryTransformOptions {\n channel?: 'x' | 'y';\n align?: 'min' | 'max';\n}\n\nexport interface BinTransformSpec extends BinTransformOption {\n type: 'bin';\n}\n\nexport interface ContourTransformSpec extends ContourTransformOption {\n type: 'contour';\n}\n\nexport interface FilterTransformSpec extends ConvertTransformOptionToSpec<FilterTransformOption> {\n type: 'filter';\n}\n\nexport interface FunnelTransformSpec extends FunnelTransformOption {\n type: 'funnel';\n}\n\nexport interface PieTransformSpec extends PieTransformOption {\n type: 'pie';\n}\n\nexport interface JoinTransformSpec extends ConvertTransformOptionToSpec<Omit<JoinTransformOption, 'from'>> {\n type: 'join';\n from?: TransformFunctionType<JoinTransformOption['from']> | { data: string | IData };\n}\n\nexport interface KDETransformSpec extends KDETransformOption {\n type: 'kde';\n}\n\nexport interface MapTransformSpec extends ConvertTransformOptionToSpec<Omit<MapTransformOption, 'callback'>> {\n type: 'map';\n callback: MapTransformOption['callback'];\n}\n\nexport interface PickTransformSpec extends ConvertTransformOptionToSpec<PickTransformOption> {\n type: 'pick';\n}\nexport interface RangeTransformSpec extends ConvertTransformOptionToSpec<RangeTransformOptions> {\n type: 'range';\n}\n\nexport interface SortTransformSpec extends ConvertTransformOptionToSpec<SortTransformOptions> {\n type: 'sort';\n}\nexport interface StackTransformSpec extends ConvertTransformOptionToSpec<StackTransformOptions> {\n type: 'stack';\n}\nexport interface DodgeTransformSpec extends ConvertTransformOptionToSpec<DodgeTransformOptions> {\n type: 'dodge';\n}\n\nexport interface IdentifierTransformSpec extends ConvertTransformOptionToSpec<IdentifierTransformOptions> {\n type: 'identifier';\n}\n\nexport interface MarkOverlapTransformSpec extends ConvertTransformOptionToSpec<MarkOverlapTransformOptions> {\n type: 'markoverlap';\n}\nexport interface SampleTransformSpec extends ConvertTransformOptionToSpec<SampleTransformOptions> {\n type: 'sampling';\n}\n\nexport interface JitterTransformSpec extends ConvertTransformOptionToSpec<JitterTransformOptions> {\n type: 'jitter';\n}\n\nexport interface JitterXTransformSpec extends ConvertTransformOptionToSpec<JitterXTransformOptions> {\n type: 'jitterX';\n}\n\nexport interface JitterYTransformSpec extends ConvertTransformOptionToSpec<JitterYTransformOptions> {\n type: 'jitterY';\n}\n\nexport type CircularRelationTransformSpec = ConvertTransformOptionToSpec<CircularRelationTransformOptions> & {\n type: 'circularRelation';\n};\n\nexport interface FoldTransformSpec extends ConvertTransformOptionToSpec<FoldTransformOptions> {\n type: 'fold';\n}\n\nexport interface UnfoldTransformSpec extends ConvertTransformOptionToSpec<UnfoldTransformOptions> {\n type: 'unfold';\n}\n\nexport interface SymmetryTransformSpec extends ConvertTransformOptionToSpec<SymmetryTransformOptions> {\n type: 'symmetry';\n}\n\nexport interface BaseTransformSpec {\n /** the type of transform */\n type: string;\n [key: string]: TransformSpecValue | TransformSpecValue[];\n}\n\nexport type TransformSpec =\n | FilterTransformSpec\n | FunnelTransformSpec\n | PieTransformSpec\n | JoinTransformSpec\n | MapTransformSpec\n | PickTransformSpec\n | RangeTransformSpec\n | SortTransformSpec\n | StackTransformSpec\n | DodgeTransformSpec\n | IdentifierTransformSpec\n | BaseTransformSpec\n | MarkOverlapTransformSpec\n | SampleTransformSpec\n | JitterTransformSpec\n | JitterXTransformSpec\n | JitterYTransformSpec\n | CircularRelationTransformSpec\n | FoldTransformSpec\n | UnfoldTransformSpec;\n\nexport interface IProgressiveTransformResult<Output = any> {\n /** is progressive finished */\n unfinished: () => boolean;\n /** return all the result */\n output: () => Output;\n /** the output result of current progressive run */\n progressiveOutput: () => Output;\n /** run in progressive mode */\n progressiveRun: () => void;\n /** release the progressive context */\n release: () => void;\n /**\n * can animate after progressive\n */\n canAnimate?: () => boolean;\n}\n\nexport interface IProgressiveTransform<Output = any> {\n progressive: IProgressiveTransformResult<Output>;\n}\n\nexport type IFunctionTransform<Options = any, Input = any, Output = any> = (\n options?: Options,\n data?: Input,\n params?: Record<string, any>,\n view?: IView\n) => Output | IProgressiveTransformResult<Output>;\nexport interface ITransform<Options = any, Input = any, Output = any> {\n type: string;\n markPhase?: 'beforeJoin' | 'afterEncode' | 'afterEncodeItems';\n /** 是否支持渐进流程 */\n canProgressive?: boolean;\n /** transform function */\n transform: IFunctionTransform<Options, Input, Output>;\n isBuiltIn?: boolean;\n}\n"]}
package/es/view/View.js CHANGED
@@ -653,7 +653,7 @@ export default class View extends EventEmitter {
653
653
  if (this._progressiveMarks && this._progressiveMarks.some((mark => mark.isDoingProgressive()))) {
654
654
  const raf = vglobal.getRequestAnimationFrame();
655
655
  this._progressiveRafId = raf(this.handleProgressiveFrame);
656
- }
656
+ } else this._progressiveMarks && this._progressiveMarks.every((mark => mark.canAnimateAfterProgressive())) ? this.animate.animate() : this._progressiveMarks && (this._progressiveMarks = null);
657
657
  }
658
658
  clearProgressive() {
659
659
  if (this._progressiveRafId) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/view/View.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGrH,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAmCjD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,cAAc,MAAM,0BAA0B,CAAC;AACtD,OAAO,iBAAiB,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EACL,OAAO,EACP,YAAY,EACZ,aAAa,EACb,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,WAAW,EACX,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAYzF,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAY9C,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,YAAY;IAmD5C,MAAM,CAAC,YAAY,CAAC,KAAqB;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAc,EAAE,EAAE;YAC/B,EAAE,EAAE,CAAC;QACP,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY,UAAwB,EAAE,EAAE,SAA2B,EAAE;QACnE,KAAK,EAAE,CAAC;QAVF,cAAS,GAAmB,IAAI,CAAC;QAu5BjC,cAAS,GAAG,QAAQ,CAAC,CAAC,GAAG,IAAW,EAAE,EAAE;YAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAEtC,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;aACtC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;QAoIA,kBAAa,GAAG,CAAC,KAAU,EAAE,IAAY,EAAE,EAAE;;YACnD,MAAM,aAAa,GAAG,MAAA,KAAK,CAAC,MAAM,0CAAG,gBAAgB,CAAC,CAAC;YACvD,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;YAC3F,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QAC9C,CAAC,CAAC;QAuIM,2BAAsB,GAAG,GAAG,EAAE;YACpC,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;gBACjC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACpC,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;wBAC7B,IAAI,CAAC,mBAAmB,EAAE,CAAC;qBAC5B;gBACH,CAAC,CAAC,CAAC;aACJ;YAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,CAAC,CAAC;QA3qCA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAC3B;YACE,IAAI,EAAE,OAAO;SACd,EACD,OAAO,CACR,CAAC;QACF,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAQD,cAAc,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,aAAa,CAAI,EAAU;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,WAAW,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IACD,YAAY,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,iBAAiB,CAAC,EAAU;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,WAAW,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,iBAAiB,CAAC,EAAU;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,iBAAiB,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC;IAClE,CAAC;IAED,iBAAiB,CAAC,WAAmB;QACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;IAC9E,CAAC;IACD,cAAc,CAAC,QAAgB;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAChF,CAAC;IACD,cAAc,CAAC,IAAY;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC;IAC1E,CAAC;IACD,kBAAkB,CAAC,QAA6C;QAC9D,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,IAAI,CAAC;SACb;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,GAAG,GAAY,EAAE,CAAC;QACxB,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YAC9B,IAAI,SAAS,CAAC,WAAW,CAAC,EAAE;gBAC1B,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACtB,OAAO;aACR;YAED,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;gBAChC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEpD,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEvB,OAAO;aACR;YAED,MAAM,KAAK,GACT,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW;gBAC5B,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3C,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC;oBACzB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;oBAClC,CAAC,CAAC,IAAI,CAAC;YAEX,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;gBACzB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACnB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACb,CAAC;IAIO,YAAY,CAAI,MAA2B,EAAE,KAAQ;QAC3D,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;YACpB,MAAM,GAAG,IAAI,CAAC,aAAa,CAAI,MAAM,CAAC,CAAC;SACxC;QACD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,CAAI,KAAS,EAAE,MAA8B;QACjD,MAAM,MAAM,GAAe,IAAI,MAAM,CAAI,IAAI,CAAC,CAAC;QAC/C,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;YACzB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACrB;QACD,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;YACzB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SACvB;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,MAAc;QACjB,MAAM,IAAI,GAAU,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAsB;QAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAW,CAAC;QAEnE,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAC3B;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU,CAAC,IAAoB;QAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAgB,CAAC;QAElF,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SAChC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,CACF,IAAc,EACd,KAA2B,EAC3B,WAAgF;QAEhF,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAgB,CAAC,CAAC,CAAC,KAAK,CAAC;QAEpF,IAAI,IAAW,CAAC;QAChB,QAAQ,IAAI,EAAE;YACZ,KAAK,eAAe,CAAC,KAAK;gBACxB,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBACtC,MAAM;YACR,KAAK,eAAe,CAAC,KAAK;gBACxB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBAEzD,IAAI,SAAS,EAAE;oBACb,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,SAAS,EAAE,SAAS,CAAC,CAAC;iBAC/D;gBACD,MAAM;YAER,KAAK,eAAe,CAAC,SAAS;gBAC5B,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,aAAa,CAAC;oBACrD,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,CAAC;oBACzF,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,aAAa,EAAE,SAAS,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,IAAI,CAAC,CAAC;gBAClF,MAAM;YACR,KAAK,eAAe,CAAC,IAAI;gBACvB,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;gBACvC,MAAM;YACR;gBACE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;SAC9G;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAA2B;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAe,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,SAAiB,EAAE,KAA0B;QACjD,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAe,CAAC;IAC9E,CAAC;IAED,SAAS,CAAC,aAAqB,EAAE,KAA0B,EAAE,OAAoB,IAAI;QACnF,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAe,CAAC;IAC5F,CAAC;IAED,IAAI,CAAC,KAA0B,EAAE,OAAoB,IAAI;QACvD,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,CAAU,CAAC;IAC3G,CAAC;IAED,IAAI,CAAC,KAA0B,EAAE,OAAoB,IAAI;QACvD,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,CAAU,CAAC;IAC3G,CAAC;IAED,MAAM,CAAC,KAA0B;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,aAAa,CAAC,MAAM,EAAE,CAAY,CAAC;IACzG,CAAC;IAED,MAAM,CAAC,KAA0B;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,aAAa,CAAC,MAAM,EAAE,CAAY,CAAC;IACzG,CAAC;IAED,KAAK,CAAC,KAA0B;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,aAAa,CAAC,KAAK,EAAE,CAAW,CAAC;IACvG,CAAC;IAED,QAAQ,CAAC,KAA0B;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAc,CAAC;IAC7G,CAAC;IAED,MAAM,CAAC,KAA0B;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,aAAa,CAAC,MAAM,EAAE,CAAY,CAAC;IACzG,CAAC;IAED,KAAK,CAAC,KAA0B;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,aAAa,CAAC,KAAK,EAAE,CAAW,CAAC;IACvG,CAAC;IAED,SAAS,CAAC,KAA0B;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,aAAa,CAAC,SAAS,EAAE,CAAe,CAAC;IAC/G,CAAC;IAED,UAAU,CAAC,IAAY,EAAE,IAAS;QAChC,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAC,CAAC;QAE9D,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,OAAO,CAAC;SAChB;IACH,CAAC;IAED,UAAU,CAAC,OAAqB;QAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE;YAC1E,OAAO,IAAI,CAAC;SACb;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAGjC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,OAA8B;QAC1C,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACnF,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,KAAK,eAAe,CAAC,GAAG,CAAC,EAAE;YACvG,OAAO,IAAI,CAAC;SACb;QACD,IAAI,eAAe,CAAC,WAAW,KAAK,MAAM,EAAE;YACzC,eAAyB,CAAC,cAAc,EAAE,CAAC;SAC7C;QACD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAGxC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC/B,IAAI,OAAO,CAAC,WAAW,KAAK,QAAQ,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE;gBAC9E,OAAO;aACR;iBAAM,IAAI,OAAO,CAAC,WAAW,KAAK,MAAM,IAAI,OAAO,CAAC,EAAE,EAAE,KAAK,MAAM,EAAE;gBACpE,OAAO;aACR;YACD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qBAAqB;QACnB,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAW,EAAE,EAAE;YACpC,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACpC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBAChC,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBAC7B,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;aACzB;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAID,SAAS,CAAC,IAAc;;QACtB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExB,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACxB;aAAM;YACL,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC;SAC5C;QAED,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACxB;QAED,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC1B;QAED,IAAI,CAAC,OAAO,CAAC,MAAA,MAAA,IAAI,CAAC,OAAO,mCAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,mCAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE3E,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAEtC,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5C,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;aAC/C;SACF;QAED,IAAI,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,EAAE;YACxB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBAC5B,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,MAAA,IAAI,CAAC,IAAI,0CAAE,MAAM,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACvB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,MAAA,IAAI,CAAC,WAAW,0CAAE,MAAM,EAAE;YAC5B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;;gBACpC,MAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,0CAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;;gBAC1B,MAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,0CAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;SACJ;QAED,MAAM,kBAAkB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAEjD,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC5C,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAE5C,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE;gBACzC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,SAAc,EAAE,EAAE;oBACvC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACxB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACrC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;;gBAChC,MAAA,MAAC,IAAY,EAAC,KAAK,mDAAG,WAAW,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YACjD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBACtC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;YAC5B,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,EAAE,CAAC;SACzB;aAAM;YACL,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,EAAE,CAAC;SACxB;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAGvC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC;QAEvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,IAAc;QACvB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAEO,YAAY;QAElB,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YACvF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/C,IAAI,UAAU,CAAC,KAAK,EAAE;gBACpB,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aAC9B;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAkB;YAC9B,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,OAAO;YACb,MAAM,EAAE;gBACN,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;gBACrB,MAAM,EAAE;oBACN,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;oBAC1B,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;iBAC7B;aACF;SACF,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAe,CAAC;IACzD,CAAC;IAEO,aAAa,CAAC,IAAc;;QAClC,MAAM,WAAW,GACf,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,KAAK;YACjC,CAAC,CAAC,EAAE,SAAS,EAAG,IAAsB,CAAC,SAAS,EAAE;YAClD,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,SAAS;gBACzC,CAAC,CAAC,EAAE,aAAa,EAAG,IAAsB,CAAC,aAAa,EAAE,IAAI,EAAG,IAAsB,CAAC,IAAI,EAAE;gBAC9F,CAAC,CAAC,IAAI,CAAC;QACX,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAC,IAAsB,CAAC,KAAK,0CAAE,OAAO,CAAC,SAAS,CAAC,EAAE;YACjD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAGD,KAAK,CAAC,KAAsB;;QAC1B,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;YACnB,IAAI,CAAC,MAAM,GAAG,MAAA,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,mCAAI,YAAY,CAAC,eAAe,EAAE,CAAC;SAC9E;aAAM;YACL,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;SACrB;QACD,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAA,IAAI,CAAC,KAAK,mCAAI,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,UAAU,CAAC,MAAA,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,mCAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAClF,IAAI,CAAC,OAAO,CAAC,MAAA,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,mCAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACtE,MAAA,MAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,0CAAE,QAAQ,mDAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;SACzE;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACxD,IAAI,CAAC,OAAO,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SAChD;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,eAAe,CAAC,KAAsB,EAAE,SAAkB,IAAI;QAC5D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAElB,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACzC,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,QAAQ,EAAE,CAAC;YAGhB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC5B;aAAM;YACL,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;SAC3B;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAID,UAAU,CAAC,KAAc;QACvB,IAAI,SAAS,CAAC,MAAM,EAAE;YACpB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,KAAc;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAS,YAAY,CAAC,CAAC;QACxD,IAAI,SAAS,CAAC,MAAM,EAAE;YACpB,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACjC,OAAO,KAAK,CAAC;SACd;QACD,OAAO,MAAM,CAAC,MAAM,EAAY,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,KAAc;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAS,aAAa,CAAC,CAAC;QACzD,IAAI,SAAS,CAAC,MAAM,EAAE;YACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACjC,OAAO,KAAK,CAAC;SACd;QACD,OAAO,MAAM,CAAC,MAAM,EAAY,CAAC;IACnC,CAAC;IAED,SAAS,CAAC,KAAc;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAS,iBAAiB,CAAC,CAAC;QAC7D,IAAI,SAAS,CAAC,MAAM,EAAE;YAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YACjD,OAAO,KAAK,CAAC;SACd;QACD,OAAO,MAAM,CAAC,MAAM,EAAY,CAAC;IACnC,CAAC;IAED,UAAU,CAAC,KAAc;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAS,kBAAkB,CAAC,CAAC;QAC9D,IAAI,SAAS,CAAC,MAAM,EAAE;YAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAClD,OAAO,KAAK,CAAC;SACd;QACD,OAAO,MAAM,CAAC,MAAM,EAAY,CAAC;IACnC,CAAC;IAED,OAAO,CAAC,KAAiF;QACvF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAA+D,cAAc,CAAC,CAAC;QAChH,IAAI,SAAS,CAAC,MAAM,EAAE;YACpB,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnC,OAAO,OAAO,CAAC;SAChB;QACD,OAAO,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,KAAe;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAU,cAAc,CAAC,CAAC;QAC3D,IAAI,SAAS,CAAC,MAAM,EAAE;YACpB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACjC,OAAO,KAAK,CAAC;SACd;QACD,OAAO,MAAM,CAAC,MAAM,EAAa,CAAC;IACpC,CAAC;IAED,UAAU;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAU,eAAe,CAAC,CAAC;QAE5D,OAAO,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,EAAa,CAAC;IACrC,CAAC;IAID,eAAe;QACb,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEO,eAAe;QACrB,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAY,EAAE,CAAC;QAE9B,IAAI,CAAC,gBAAgB,CACnB,CAAC,IAAW,EAAE,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;YAE1B,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE;oBAC7B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACtB;aACF;iBAAM;gBACL,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtB;YAED,IAAI,IAAI,CAAC,QAAQ,KAAK,eAAe,CAAC,KAAK,EAAE;gBAC1C,IAAmB,CAAC,oBAAoB,EAAE,CAAC;aAC7C;QACH,CAAC,EACD,CAAC,IAAW,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CACnC,CAAC;QAEF,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAChC,CAAC;IAEO,QAAQ;;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACtE,IAAI,QAAQ,KAAI,MAAA,IAAI,CAAC,YAAY,0CAAE,MAAM,CAAA,EAAE;YACzC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;SACvC;IACH,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QAC7C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YACrC,gBAAgB,CACd,UAAU,EACV,gBAAgB,EAChB,CAAC,IAAW,EAAE,EAAE;gBACd,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,CAAC,EAED,CAAC,IAAW,EAAE,EAAE,CAAC,IAAI,KAAK,UAAU,CACrC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAC9C,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QAC7C,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,IAAW,EAAE,EAAE;YAC1D,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAC9C,CAAC;IAID,MAAM,CAAC,OAAqB;QAC1B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,aAA8B;QAChC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAE7B,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,QAAQ,CAAC,WAAoB;QACnC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,EAAE;gBAC3C,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;aACxB;iBAAM;gBACL,IAAI,CAAC,gBAAgB,CACnB,IAAI,CAAC,EAAE;oBACL,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,CAAC,EACD,IAAI,EACJ,IAAI,CACL,CAAC;aACH;YAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAClC,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAEO,QAAQ,CAAC,aAA8B;;QAC7C,MAAM,uBAAuB,GAAG,sBAAsB,CAAC,aAAa,CAAC,CAAC;QAEtE,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAE1D,IAAI,iBAAiB,EAAE;YACrB,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;YAClD,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B;QAGD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAGhD,IAAI,CAAC,iBAAiB,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE;YACxE,OAAO,IAAI,CAAC;SACb;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAGxB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAE1B,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;SACnC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC;YAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEhB,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE;gBACjC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC;gBAC3C,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;aAC3B;YAED,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC;YACtC,IAAI,MAAA,IAAI,CAAC,YAAY,0CAAE,MAAM,EAAE;gBAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;aACxB;SACF;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAG5B,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,MAAA,MAAC,IAAY,EAAC,KAAK,mDAAG,uBAAuB,CAAC,CAAC;QAE/C,IAAI,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,CAAC;QAEpD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,mBAAmB,CAAC,aAA6B;QACvD,IAAI,aAAa,CAAC,KAAK,EAAE;YACvB,MAAM,eAAe,GAAG,CAAC,IAAgD,EAAE,EAAE;gBAC3E,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAClB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,CAAC,CAAC;YAEF,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAC3C,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,EACpC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CACvF,CAAC;YACF,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAE7C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAC3G,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAE3C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;YAChH,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAE5C,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAC/C,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,EACxC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAClC,CAAC;YACF,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;SAGlD;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CACtC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,EAClC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,MAAM,CAAC,EAChE,aAAa,CACd,CAAC;QACF,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;;YAC/B,MAAM,OAAO,GACX,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACtG,MAAM,qBAAqB,GACzB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC;YAC/G,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,qBAAqB,CAAC,IAAI,aAAa,CAAC,QAAQ,EAAE;gBAC5E,MAAA,MAAC,IAAY,EAAC,aAAa,mDAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;aACrE;iBAAM,IAAI,OAAO,IAAI,aAAa,CAAC,KAAK,EAAE;gBACzC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gBACrB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7C;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;;YACtC,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,OAAO,CAAC,WAAW,KAAK,MAAM,EAAE;gBAClC,MAAM,IAAI,GAAG,OAAgB,CAAC;gBAC9B,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,WAAW,mDAAG,IAAI,CAAC,CAAC;aACjC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,qBAAqB,CAAC,aAA8B;QAE1D,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACtC,IAAI,OAAO,CAAC,WAAW,KAAK,MAAM,EAAE;gBAClC,OAAO,CAAC,OAAO,EAAE,CAAC;aACnB;QACH,CAAC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;QACzD,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;;YACvB,MAAA,IAAI,CAAC,IAAI,CAAC,OAAO,0CAAE,IAAI,EAAE,CAAC;YAC1B,IAAI,aAAa,CAAC,mBAAmB,IAAI,IAAI,CAAC,OAAO,EAAE;gBACrD,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACzC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,CAAC,IAAmB,EAAE,EAAE;YAExC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,EAAE;gBACxF,OAAO;aACR;YAED,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBAChD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC3B,IAAI,MAAM,EAAE;oBACV,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;oBACpE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;oBACnB,SAAS,CAAC,MAAM,CAAC,CAAC;iBACnB;aACF;QACH,CAAC,CAAC;QACF,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE;gBACzD,SAAS,CAAC,IAAI,CAAC,CAAC;aACjB;iBAAM;gBACL,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE;oBACzC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE;wBACzD,SAAS,CAAC,IAAI,CAAC,CAAC;qBACjB;gBACH,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,QAAQ,CAAC,QAA+B;QACtC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC3B,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,QAA+B;QACvC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE;YAC5B,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,cAAc;;QACZ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE;YACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,qDAAqD,CAAC,CAAC,CAAC;YACxF,OAAO;SACR;QACD,MAAM,KAAK,GAAG,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,KAAK,kDAAI,CAAC;QACvC,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC7C,OAAO,MAAM,CAAC;SACf;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAE/D,OAAO,IAAI,CAAC;IACd,CAAC;IAID,gBAAgB,CAAC,KAA2B,EAAE,MAAiC,EAAE,SAAmB;QAClG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IAIO,gBAAgB;;QACtB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,MAAM,SAAS,GAAG,MAAA,MAAA,MAAA,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,KAAK,kDAAI,0CAAE,MAAM,0CAAE,YAAY,kDAAI,CAAC;YACrE,IAAI,SAAS,EAAE;gBACb,MAAM,oBAAoB,GAAQ,MAAM,CAAC,cAAc,CAAC;gBACxD,IAAI,CAAC,SAAS,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC1D,MAAA,IAAI,CAAC,SAAS,0CAAE,OAAO,CAAC,SAAS,CAAC,CAAC;aACpC;YACD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;SACnD;IACH,CAAC;IAEO,kBAAkB;QACxB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACrD,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;gBAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACvB;SACF;IACH,CAAC;IAEO,iBAAiB;;QACvB,MAAM,SAAS,GAAG,MAAA,MAAA,MAAA,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,KAAK,kDAAI,0CAAE,MAAM,0CAAE,YAAY,kDAAI,CAAC;QAErE,IAAI,SAAS,EAAE;YACb,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,gBAAgB,CAAC,SAAU,CAAC,CAAC;YACxF,MAAM,KAAK,GAAG,MAAA,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,KAAK,mCAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,mCAAI,cAAc,CAAC;YACzE,MAAM,MAAM,GAAG,MAAA,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,mCAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,mCAAI,eAAe,CAAC;YAE7E,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;SAC1B;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAUD,MAAM,CAAC,KAAa,EAAE,MAAc,EAAE,SAAkB,IAAI;QAC1D,IAAI,YAAY,GAAG,KAAK,CAAC;QAGzB,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE;YAC1B,YAAY,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;SACxC;QAGD,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,EAAE;YAC5B,YAAY,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;SAC1C;QAGD,IAAI,YAAY,EAAE;YAChB,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,QAAQ,EAAE,CAAC;aACjB;iBAAM;gBACL,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;aAC3B;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,eAAe;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAE7B,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;YAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC;SACb;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,WAAW,CAAC,IAAY,EAAE,IAA8B;QACtD,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAEhE,IAAI,WAAW,EAAE;YACf,WAAW,CAAC,IAAI,EAAE,CAAC;YAEnB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBAC5B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;aAC9B;YAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC3C;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,iBAAiB,CAAC,IAA2B,EAAE,EAAW;QACxD,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;;gBAC7D,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;oBACd,OAAO,CAAA,MAAA,WAAW,CAAC,OAAO,0CAAE,EAAE,MAAK,EAAE,CAAC;iBACvC;gBAED,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;oBAClB,OAAO,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC;iBAClC;gBAED,IAAI,IAAI,EAAE;oBACR,OAAO,WAAW,KAAK,IAAI,CAAC;iBAC7B;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,SAAS,CAAC,MAAM,EAAE;gBACpB,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oBAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpB,CAAC,CAAC,CAAC;aACJ;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qBAAqB;QACnB,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBACzC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;SAChC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAQD,qBAAqB,CAAC,MAAW;QAC/B,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAE7D,MAAM,MAAM,GAAG,CAAC,GAAQ,EAAE,IAAc,EAAE,EAAE;YAC1C,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACf,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;oBACnB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,GAAQ,EAAE,EAAE;wBAC5C,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;wBAChB,OAAO,GAAG,CAAC;oBACb,CAAC,EAAE,EAAE,CAAC,CAAC;iBACR;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,YAAY,EAAE,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAE/D,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,SAAS;QAEf,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpC,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7C,CAAC;IAEO,iBAAiB;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC;IAQD,gBAAgB,CAAC,IAAY,EAAE,OAAyB,EAAE,OAAa;QACrE,IAAI,QAAQ,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE;YACxC,QAAQ,GAAG,OAAO,CAAC;YAClB,QAAgB,CAAC,GAAG,GAAG,OAAO,CAAC;SACjC;QACD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;YAC5B,QAAgB,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;SAC3C;QACD,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mBAAmB,CAAC,IAAY,EAAE,OAA0B;QAC1D,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SACzB;aAAM;YACL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAChB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAIO,kBAAkB;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAEpC,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzG,CAAC;IAEO,UAAU;;QAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAClC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EACvB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,GAAG,qBAAqB,EAAE,OAAO,CAAC,CACrF,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,IAAI,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAEzE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACxB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SAC1C;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,mCAAI,CAAC,CAAC,CAAC;QAE9D,IAAI,CAAC,SAAS,GAAG,IAAI,QAAQ,EAAE,CAAC;QAEhC,IAAI,CAAC,OAAO,GAAG,MAAA,MAAC,IAAY,EAAC,WAAW,mDAAG,IAAI,CAAC,CAAC;QAEjD,IAAI,CAAC,OAAO,GAAG,IAAI,QAAQ,EAAE,CAAC;QAG9B,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;YACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC7C,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;SAClC;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAGtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAG1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAG1E,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;QAEjF,IAAI,CAAC,YAAY,EAAE,CAAC;QAGpB,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;YAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAGxB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC;QAGvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAID,gBAAgB;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IACD,iBAAiB;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IACD,kBAAkB;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,oBAAoB;QAC1B,MAAM,KAAK,GAAY,EAAE,CAAC;QAE1B,IAAI,CAAC,gBAAgB,CACnB,CAAC,IAAW,EAAE,EAAE;YACd,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC,EACD,CAAC,IAAW,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,eAAe,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CACjF,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,OAAO,IAAI,CAAC;SACb;QAED,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAE/B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,wBAAwB,EAAE,CAAC;SAC1C;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,gBAAgB;QACtB,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE;YAC5F,MAAM,GAAG,GAAG,OAAO,CAAC,wBAAwB,EAAE,CAAC;YAC/C,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;SAC3D;IACH,CAAC;IAgBO,gBAAgB;QACtB,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;YACpD,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SACnC;QAED,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;YAC3D,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACrC,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;SAC/B;IACH,CAAC;IAGD,OAAO;;QACL,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO,CAAC,2BAA2B,EAAE,CAAC;QACtC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEzB,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,EAAE,CAAC;QAErB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QAE/B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,OAAO,kDAAI,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAG/B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,MAAA,IAAI,CAAC,eAAe,0CAAE,OAAO,CAAC,CAAC,QAAa,EAAE,EAAE;YAC9C,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;CACF","file":"View.js","sourcesContent":["import type { IBounds, ILogger } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { EventEmitter, debounce, isString, getContainerSize, Logger, array, isNil, isArray } 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 {\n MarkSpec,\n IData,\n ISignal,\n ViewSpec,\n IView,\n IViewOptions,\n IViewThemeConfig,\n IViewEventConfig,\n Hooks,\n IMark,\n GroupMarkSpec,\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 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 SIGNAL_WIDTH,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_AUTOFIT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_VIEW_HEIGHT,\n EVENT_SOURCE_VIEW,\n SIGNAL_VIEW_BOX,\n ID_PREFIX,\n NAME_PREFIX,\n EVENT_SOURCE_WINDOW\n} from './constants';\nimport { Signal } from './signal';\nimport {\n BuiltInSignalID,\n builtInSignals,\n normalizeMarkTree,\n normalizeRunningConfig,\n normalizePadding\n} from '../parse/view';\nimport { isGrammar } from '../parse/util';\nimport { configureEnvironment } from '../graph/util/env';\nimport { GroupMark } from './group';\nimport { Mark } from './mark';\nimport type { IViewDiff } from '../types/morph';\nimport { RecordedGrammars, RecordedTreeGrammars } from './grammar-record';\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';\nimport { ViewDiff } from '../graph/view-diff';\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 _spec: ViewSpec;\n private _config: IViewThemeConfig;\n private _options: IViewOptions;\n\n private _cachedGrammars: IRecordedTreeGrammars;\n\n /** morph animate */\n private _differ: IViewDiff;\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\n /** 初次渲染或者更新spec,需要构建布局树 */\n private _needBuildLayoutTree?: boolean;\n /** 布局阶段 */\n private _layoutState?: LayoutState;\n\n /** 布局树,存储所有需要计算布局的mark元素 */\n private _layoutMarks?: IMark[];\n\n private _background?: IColor;\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 const GlyphMark = Factory.getMark(GrammarMarkType.glyph);\n\n if (GlyphMark) {\n mark = new GlyphMark(this, markOptions?.glyphType, groupMark);\n }\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 as any).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\n setCurrentTheme(theme: ITheme | string, render: boolean = true) {\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 this.evaluate();\n\n // FIXME: trigger render\n this.renderer.render(true);\n } else {\n 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 || Factory.getDefaultLayout();\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 private doRender(immediately: boolean) {\n this.emit(HOOK_EVENT.BEFORE_DO_RENDER);\n // render as needed\n if (this.renderer) {\n if (!this._progressiveMarks && this.animate) {\n this.animate.animate();\n } else {\n this.traverseMarkTree(\n mark => {\n mark.cleanExitElements();\n },\n null,\n true\n );\n }\n // 绘图 =>\n this.renderer.render(immediately);\n this.handleRenderEnd();\n }\n this.emit(HOOK_EVENT.AFTER_DO_RENDER);\n }\n\n private evaluate(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 // 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\n // evaluate dataflow\n this._dataflow.evaluate();\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.evaluate();\n }\n\n this._layoutState = LayoutState.after;\n if (this._layoutMarks?.length) {\n this.handleLayoutEnd();\n }\n }\n\n this._layoutState = null;\n\n this.findProgressiveMarks();\n\n // resize again if width/height signal is updated duration dataflow\n this._resizeRenderer();\n\n (this as any).morph?.(normalizedRunningConfig);\n\n this.releaseCachedGrammars(normalizedRunningConfig);\n\n this.doRender(true);\n\n this.doPreProgressive();\n\n return this;\n }\n\n private reuseCachedGrammars(runningConfig: IRunningConfig) {\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._differ.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._differ.diffGrammar(this._cachedGrammars.getAllData(), this.grammars.getAllData());\n diffedData.update.forEach(reuseDiffUpdate);\n\n const diffedScale = this._differ.diffGrammar(this._cachedGrammars.getAllScales(), this.grammars.getAllScales());\n diffedScale.update.forEach(reuseDiffUpdate);\n\n const diffedCoordinate = this._differ.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._differ.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 ((runningConfig.morph && enableMarkMorphConfig) || runningConfig.morphAll) {\n (this as any).addMorphMarks?.({ prev: diff.prev, next: diff.next });\n } else 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 }\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 && this.animate) {\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 && 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 && mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n } else {\n mark.addEventListener('animationEnd', () => {\n if (mark.animate && 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 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 this.evaluate();\n } else {\n 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 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 /**\n * 初始化事件配置,将所有配置转化为 {[key: string]: boolean } 格式。\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\n initializeEventConfig(config: any) {\n const eventsConfig = Object.assign({ defaults: {} }, config);\n\n const unpack = (obj: any, keys: string[]) => {\n keys.forEach(k => {\n if (isArray(obj[k])) {\n obj[k] = obj[k].reduce((set: any, key: any) => {\n set[key] = true;\n return set;\n }, {});\n }\n });\n };\n\n unpack(eventsConfig.defaults, ['prevent', 'allow']);\n unpack(eventsConfig, [EVENT_SOURCE_VIEW, EVENT_SOURCE_WINDOW]);\n\n return eventsConfig;\n }\n\n private initEvent() {\n // 基于 vRender 事件系统提供的委托机制\n const stage = this.renderer.stage();\n stage && stage.on('*', this.delegateEvent);\n }\n\n private releaseStageEvent() {\n const stage = this.renderer.stage();\n stage && stage.off('*', 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 = (this as any).initAnimate?.(this);\n\n this._differ = new ViewDiff();\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 = this.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 // 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.removeAllInteractions();\n this.releaseStageEvent();\n this._unBindResizeEvent();\n this.clearProgressive();\n Factory.unregisterRuntimeTransforms();\n Logger.setInstance(null);\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, isString, getContainerSize, Logger, array, isNil, isArray } 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 {\n MarkSpec,\n IData,\n ISignal,\n ViewSpec,\n IView,\n IViewOptions,\n IViewThemeConfig,\n IViewEventConfig,\n Hooks,\n IMark,\n GroupMarkSpec,\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 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 SIGNAL_WIDTH,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_AUTOFIT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_VIEW_HEIGHT,\n EVENT_SOURCE_VIEW,\n SIGNAL_VIEW_BOX,\n ID_PREFIX,\n NAME_PREFIX,\n EVENT_SOURCE_WINDOW\n} from './constants';\nimport { Signal } from './signal';\nimport {\n BuiltInSignalID,\n builtInSignals,\n normalizeMarkTree,\n normalizeRunningConfig,\n normalizePadding\n} from '../parse/view';\nimport { isGrammar } from '../parse/util';\nimport { configureEnvironment } from '../graph/util/env';\nimport { GroupMark } from './group';\nimport { Mark } from './mark';\nimport type { IViewDiff } from '../types/morph';\nimport { RecordedGrammars, RecordedTreeGrammars } from './grammar-record';\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';\nimport { ViewDiff } from '../graph/view-diff';\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 _spec: ViewSpec;\n private _config: IViewThemeConfig;\n private _options: IViewOptions;\n\n private _cachedGrammars: IRecordedTreeGrammars;\n\n /** morph animate */\n private _differ: IViewDiff;\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\n /** 初次渲染或者更新spec,需要构建布局树 */\n private _needBuildLayoutTree?: boolean;\n /** 布局阶段 */\n private _layoutState?: LayoutState;\n\n /** 布局树,存储所有需要计算布局的mark元素 */\n private _layoutMarks?: IMark[];\n\n private _background?: IColor;\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 const GlyphMark = Factory.getMark(GrammarMarkType.glyph);\n\n if (GlyphMark) {\n mark = new GlyphMark(this, markOptions?.glyphType, groupMark);\n }\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 as any).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\n setCurrentTheme(theme: ITheme | string, render: boolean = true) {\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 this.evaluate();\n\n // FIXME: trigger render\n this.renderer.render(true);\n } else {\n 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 || Factory.getDefaultLayout();\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 private doRender(immediately: boolean) {\n this.emit(HOOK_EVENT.BEFORE_DO_RENDER);\n // render as needed\n if (this.renderer) {\n if (!this._progressiveMarks && this.animate) {\n this.animate.animate();\n } else {\n this.traverseMarkTree(\n mark => {\n mark.cleanExitElements();\n },\n null,\n true\n );\n }\n // 绘图 =>\n this.renderer.render(immediately);\n this.handleRenderEnd();\n }\n this.emit(HOOK_EVENT.AFTER_DO_RENDER);\n }\n\n private evaluate(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 // 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\n // evaluate dataflow\n this._dataflow.evaluate();\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.evaluate();\n }\n\n this._layoutState = LayoutState.after;\n if (this._layoutMarks?.length) {\n this.handleLayoutEnd();\n }\n }\n\n this._layoutState = null;\n\n this.findProgressiveMarks();\n\n // resize again if width/height signal is updated duration dataflow\n this._resizeRenderer();\n\n (this as any).morph?.(normalizedRunningConfig);\n\n this.releaseCachedGrammars(normalizedRunningConfig);\n\n this.doRender(true);\n\n this.doPreProgressive();\n\n return this;\n }\n\n private reuseCachedGrammars(runningConfig: IRunningConfig) {\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._differ.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._differ.diffGrammar(this._cachedGrammars.getAllData(), this.grammars.getAllData());\n diffedData.update.forEach(reuseDiffUpdate);\n\n const diffedScale = this._differ.diffGrammar(this._cachedGrammars.getAllScales(), this.grammars.getAllScales());\n diffedScale.update.forEach(reuseDiffUpdate);\n\n const diffedCoordinate = this._differ.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._differ.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 ((runningConfig.morph && enableMarkMorphConfig) || runningConfig.morphAll) {\n (this as any).addMorphMarks?.({ prev: diff.prev, next: diff.next });\n } else 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 }\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 && this.animate) {\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 && 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 && mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n } else {\n mark.addEventListener('animationEnd', () => {\n if (mark.animate && 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 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 this.evaluate();\n } else {\n 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 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 /**\n * 初始化事件配置,将所有配置转化为 {[key: string]: boolean } 格式。\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\n initializeEventConfig(config: any) {\n const eventsConfig = Object.assign({ defaults: {} }, config);\n\n const unpack = (obj: any, keys: string[]) => {\n keys.forEach(k => {\n if (isArray(obj[k])) {\n obj[k] = obj[k].reduce((set: any, key: any) => {\n set[key] = true;\n return set;\n }, {});\n }\n });\n };\n\n unpack(eventsConfig.defaults, ['prevent', 'allow']);\n unpack(eventsConfig, [EVENT_SOURCE_VIEW, EVENT_SOURCE_WINDOW]);\n\n return eventsConfig;\n }\n\n private initEvent() {\n // 基于 vRender 事件系统提供的委托机制\n const stage = this.renderer.stage();\n stage && stage.on('*', this.delegateEvent);\n }\n\n private releaseStageEvent() {\n const stage = this.renderer.stage();\n stage && stage.off('*', 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 = (this as any).initAnimate?.(this);\n\n this._differ = new ViewDiff();\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 = this.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 // 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 } else if (this._progressiveMarks && this._progressiveMarks.every(mark => mark.canAnimateAfterProgressive())) {\n this.animate.animate();\n } else if (this._progressiveMarks) {\n this._progressiveMarks = null;\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.removeAllInteractions();\n this.releaseStageEvent();\n this._unBindResizeEvent();\n this.clearProgressive();\n Factory.unregisterRuntimeTransforms();\n Logger.setInstance(null);\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"]}
package/es/view/mark.d.ts CHANGED
@@ -91,6 +91,7 @@ export declare class Mark extends GrammarBase implements IMark {
91
91
  progressive?: undefined;
92
92
  };
93
93
  isProgressive(): boolean;
94
+ canAnimateAfterProgressive(): boolean;
94
95
  isDoingProgressive(): boolean;
95
96
  clearProgressive(): void;
96
97
  restartProgressive(): void;
package/es/view/mark.js CHANGED
@@ -404,6 +404,9 @@ export class Mark extends GrammarBase {
404
404
  isProgressive() {
405
405
  return this.renderContext && (!!this.renderContext.progressive || !!this.renderContext.beforeTransformProgressive);
406
406
  }
407
+ canAnimateAfterProgressive() {
408
+ return this.renderContext && this.renderContext.beforeTransformProgressive && this.renderContext.beforeTransformProgressive.canAnimate();
409
+ }
407
410
  isDoingProgressive() {
408
411
  return this.renderContext && (this.renderContext.progressive && this.renderContext.progressive.currentIndex < this.renderContext.progressive.totalStep || this.renderContext.beforeTransformProgressive && this.renderContext.beforeTransformProgressive.unfinished());
409
412
  }