@visactor/vgrammar-core 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/view/View.ts"],"names":[],"mappings":"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","file":"View.js","sourcesContent":["import type { IBounds, ILogger } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { EventEmitter, debounce, isObject, isString, getContainerSize, Logger, array } from '@visactor/vutils';\nimport type { IColor } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { vglobal } from '@visactor/vrender-core';\nimport type { CoordinateType } from '@visactor/vgrammar-coordinate';\nimport type { IElement } from './../types/element';\nimport type {\n MarkSpec,\n IData,\n ISignal,\n ViewSpec,\n IView,\n IViewOptions,\n IViewThemeConfig,\n IViewEventConfig,\n Hooks,\n IMark,\n EventSpec,\n GroupMarkSpec,\n BaseEventSpec,\n MarkType,\n GrammarScaleType,\n SignalFunctionType,\n IScale,\n IGrammarBase,\n IGroupMark,\n IGlyphMark,\n ICoordinate,\n BaseEventHandler,\n GlyphMarkSpec,\n IRecordedGrammars,\n IComponent,\n ComponentSpec,\n IRecordedTreeGrammars,\n IMarkTreeNode,\n IRunningConfig,\n IViewAnimate,\n ITheme,\n InteractionSpec,\n IInteraction\n} from '../types/';\nimport { Data } from './data';\nimport { initializeEventConfig, permit, prevent } from './events';\nimport Dataflow from './dataflow';\nimport { traverseMarkTree } from '../graph/mark-tree';\nimport { BridgeElementKey } from '../graph/constants';\nimport CanvasRenderer from '../graph/canvas-renderer';\nimport getExtendedEvents from '../graph/util/events-extend';\nimport {\n BROWSER,\n NO_TRAP,\n SIGNAL_WIDTH,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_AUTOFIT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_VIEW_HEIGHT,\n EVENT_SOURCE_VIEW,\n EVENT_SOURCE_WINDOW,\n SIGNAL_VIEW_BOX\n} from './constants';\nimport { Signal } from './signal';\nimport { Scale } from './scale';\nimport {\n BuiltInSignalID,\n builtInSignals,\n normalizeMarkTree,\n normalizeRunningConfig,\n normalizePadding\n} from '../parse/view';\nimport { parseHandler, parseEventSelector, generateFilterByMark, ID_PREFIX, NAME_PREFIX } from '../parse/event';\nimport { isGrammar, parseReference } from '../parse/util';\nimport { configureEnvironment } from '../graph/util/env';\nimport { GroupMark } from './group';\nimport { Mark } from './mark';\nimport { defaultDoLayout } from '../graph/layout/layout';\nimport { GlyphMark } from './glyph';\nimport { Coordinate } from './coordinate';\nimport type { IMorph } from '../types/morph';\nimport { Morph } from '../graph/animation/morph';\nimport { RecordedGrammars, RecordedTreeGrammars } from './grammar-record';\nimport { ViewAnimate } from './animate';\nimport type { IRenderer } from '../types/renderer';\nimport { ComponentEnum, HOOK_EVENT, LayoutState, GrammarMarkType } from '../graph/enums';\nimport type {\n IAxis,\n IDatazoom,\n IGrid,\n ILabel,\n ILegend,\n IPlayer,\n IScrollbar,\n ISlider,\n ITitle\n} from '../types/component';\nimport { Text } from '../semantic-marks/text';\nimport { ThemeManager } from '../theme/theme-manager';\nimport { Factory } from '../core/factory';\nimport { Component } from './component';\nimport { isMarkType, removeGraphicItem } from '../graph/util/graphic';\n\n/**\n * Create a new View instance from a VGrammar dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The VGrammar dataflow runtime specification.\n */\nexport default class View extends EventEmitter implements IView {\n /** render element */\n container: HTMLElement;\n\n /** renderer */\n renderer: IRenderer;\n animate: IViewAnimate;\n rootMark: IGroupMark;\n\n /** life circle hooks */\n hooks: Hooks;\n\n logger: ILogger;\n\n grammars: IRecordedGrammars;\n\n private _isReleased: boolean;\n private _spec: ViewSpec;\n private _config: IViewThemeConfig;\n private _options: IViewOptions;\n\n private _cachedGrammars: IRecordedTreeGrammars;\n private _willMorphMarks: { prev: IMark[]; next: IMark[] }[];\n\n /** morph animate */\n private _morph: IMorph;\n\n private _eventConfig: IViewEventConfig;\n private _eventListeners: Array<{\n type: string;\n source: any;\n handler: any;\n }>;\n\n private _theme: ITheme;\n\n private _dataflow: Dataflow;\n /** 正在执行的dataflow */\n private _currentDataflow?: Promise<any>;\n /** 正在执行的任务 */\n private _running?: Promise<this>;\n\n /** 初次渲染或者更新spec,需要构建布局树 */\n private _needBuildLayoutTree?: boolean;\n /** 布局阶段 */\n private _layoutState?: LayoutState;\n\n /** 布局树,存储所有需要计算布局的mark元素 */\n private _layoutMarks?: IMark[];\n\n private _background?: IColor;\n private _eventCache: Record<string, () => void>;\n /** 当前是否存在增量渲染元素 */\n private _progressiveMarks?: IMark[];\n private _progressiveRafId?: number;\n private _observer: ResizeObserver = null;\n private _boundInteractions?: IInteraction[];\n\n static useRegisters(comps: (() => void)[]) {\n comps.forEach((fn: () => void) => {\n fn();\n });\n }\n\n constructor(options: IViewOptions = {}, config: IViewThemeConfig = {}) {\n super();\n this._config = config;\n this._options = Object.assign(\n {\n mode: BROWSER\n },\n options\n );\n this.initialize();\n }\n // emit: <T extends EventEmitter.EventNames<string | symbol>>(\n // event: T,\n // ...args: EventEmitter.EventArgs<string | symbol, T>\n // ) => boolean;\n\n // --- Lookup Grammars ---\n\n getGrammarById(id: string) {\n return this.grammars.getGrammar(id);\n }\n getSignalById<T>(id: string): ISignal<T> | null {\n return this.grammars.getSignal(id);\n }\n getDataById(id: string): IData | null {\n return this.grammars.getData(id);\n }\n getScaleById(id: string): IScale | null {\n return this.grammars.getScale(id);\n }\n getCoordinateById(id: string) {\n return this.grammars.getCoordinate(id);\n }\n getMarkById(id: string): IMark | null {\n return this.grammars.getMark(id);\n }\n\n getCustomizedById(id: string): IGrammarBase | null {\n return this.grammars.getCustomized(id);\n }\n\n getGrammarsByName(name: string) {\n return this.grammars.filter(grammar => grammar.name() === name);\n }\n\n getGrammarsByType(grammarType: string) {\n return this.grammars.filter(grammar => grammar.grammarType === grammarType);\n }\n getMarksByType(markType: string) {\n return this.grammars.getAllMarks().filter(mark => mark.markType === markType);\n }\n getMarksByName(name: string): IMark[] | null {\n return this.grammars.getAllMarks().filter(mark => mark.name() === name);\n }\n getMarksBySelector(selector: string | string[] | IMark | IMark[]): IMark[] | null {\n if (!selector) {\n return null;\n }\n const selectors = array(selector);\n let res: IMark[] = [];\n\n selectors.forEach(selectorStr => {\n if (isGrammar(selectorStr)) {\n res = res.concat(selectorStr);\n return;\n }\n\n if (selectorStr[0] === ID_PREFIX) {\n res = res.concat(this.getMarkById(selectorStr.slice(1)));\n }\n\n if (selectorStr[0] === NAME_PREFIX) {\n res = res.concat(this.getMarksByName(selectorStr.slice(1)));\n }\n\n if (isMarkType(selectorStr)) {\n res = res.concat(this.getMarksByType(selectorStr));\n }\n });\n\n return res;\n }\n\n // --- Grammar ---\n\n private updateSignal<T>(signal: string | ISignal<T>, value: T) {\n if (isString(signal)) {\n signal = this.getSignalById<T>(signal);\n }\n signal.set(value);\n this.commit(signal);\n }\n\n signal<T>(value?: T, update?: SignalFunctionType<T>): ISignal<T> {\n const signal: ISignal<T> = new Signal<T>(this);\n if (arguments.length >= 1) {\n signal.value(value);\n }\n if (arguments.length >= 2) {\n signal.update(update);\n }\n this.grammars.record(signal);\n this._dataflow.add(signal);\n return signal;\n }\n\n data(values?: any[]): IData {\n const data: IData = new Data(this, values);\n this.grammars.record(data);\n this._dataflow.add(data);\n return data;\n }\n\n scale(type: GrammarScaleType) {\n const scale: IScale = new Scale(this, type);\n this.grammars.record(scale);\n this._dataflow.add(scale);\n return scale;\n }\n\n coordinate(type: CoordinateType) {\n const coordinate: ICoordinate = new Coordinate(this, type);\n this.grammars.record(coordinate);\n this._dataflow.add(coordinate);\n return coordinate;\n }\n\n mark(\n type: MarkType,\n group?: IGroupMark | string,\n markOptions?: { glyphType?: string; componentType?: string; mode?: '2d' | '3d' }\n ) {\n const groupMark = isString(group) ? (this.getMarkById(group) as IGroupMark) : group;\n\n let mark: IMark;\n switch (type) {\n case GrammarMarkType.group:\n mark = new GroupMark(this, groupMark);\n break;\n case GrammarMarkType.glyph:\n mark = new GlyphMark(this, markOptions?.glyphType, groupMark);\n break;\n // components\n case GrammarMarkType.component:\n mark = Factory.hasComponent(markOptions?.componentType)\n ? Factory.createComponent(markOptions?.componentType, this, groupMark, markOptions?.mode)\n : new Component(this, markOptions?.componentType, groupMark, markOptions?.mode);\n break;\n case GrammarMarkType.text:\n mark = new Text(this, type, groupMark);\n break;\n default:\n mark = Factory.hasMark(type) ? Factory.createMark(type, this, groupMark) : new Mark(this, type, groupMark);\n }\n this.grammars.record(mark);\n this._dataflow.add(mark);\n return mark;\n }\n\n group(group?: IGroupMark | string) {\n return this.mark(GrammarMarkType.group, group) as IGroupMark;\n }\n\n glyph(glyphType: string, group: IGroupMark | string) {\n return this.mark(GrammarMarkType.glyph, group, { glyphType }) as IGlyphMark;\n }\n\n component(componentType: string, group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType, mode }) as IComponent;\n }\n\n axis(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.axis, mode }) as IAxis;\n }\n\n grid(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.grid, mode }) as IGrid;\n }\n\n legend(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.legend }) as ILegend;\n }\n\n slider(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.slider }) as ISlider;\n }\n\n label(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.label }) as ILabel;\n }\n\n datazoom(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.datazoom }) as IDatazoom;\n }\n\n player(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.player }) as IPlayer;\n }\n\n title(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.title }) as ITitle;\n }\n\n scrollbar(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.scrollbar }) as IScrollbar;\n }\n\n customized(type: string, spec: any) {\n const grammar = Factory.createGrammar(type, this);\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 }\n mark.graphicItem = null;\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]?.length) {\n spec[specKey].forEach((specValue: any) => {\n this.customized(key, specValue);\n });\n }\n });\n\n if (spec.marks?.length) {\n spec.marks.forEach(mark => {\n this.parseMarkSpec(mark);\n });\n }\n\n if (spec.events?.length) {\n spec.events.forEach(eventConfig => {\n this.event(eventConfig);\n });\n }\n\n if (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\n if (this._theme) {\n this.background(this._spec?.background ?? this._options.background ?? this._theme.background);\n this.padding(this._spec?.padding ?? this._options.padding ?? this._theme.padding);\n this.renderer.stage()?.setTheme?.(Object.assign({}, this._theme.marks));\n } else {\n this.background(this._spec?.background ?? this._options.background);\n this.padding(this._spec?.padding ?? this._options.padding);\n }\n\n return this;\n }\n\n getCurrentTheme() {\n return this._theme;\n }\n async setCurrentTheme(theme: ITheme | string, render: boolean = true) {\n if (this._isReleased) {\n return;\n }\n this.theme(theme);\n // trigger encode for all marks\n this.grammars.getAllMarks().forEach(mark => {\n mark.commit();\n });\n\n if (render) {\n await this.evaluate();\n\n if (this._isReleased) {\n return;\n }\n // FIXME: trigger render\n this.renderer.render(true);\n } else {\n await this._dataflow.evaluate();\n }\n\n return this;\n }\n\n // --- Global Configure ---\n\n background(value?: IColor) {\n if (arguments.length) {\n this._background = value;\n this.renderer.background(value);\n return value;\n }\n return this._background;\n }\n\n width(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_WIDTH);\n if (arguments.length) {\n this._options.width = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n height(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_HEIGHT);\n if (arguments.length) {\n this._options.height = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n viewWidth(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_VIEW_WIDTH);\n if (arguments.length) {\n // view width depends on canvas width\n const padding = this.padding();\n this.width(value + padding.left + padding.right);\n return value;\n }\n return signal.output() as number;\n }\n\n viewHeight(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_VIEW_HEIGHT);\n if (arguments.length) {\n // view height depends on canvas height\n const padding = this.padding();\n this.height(value + padding.top + padding.bottom);\n return value;\n }\n return signal.output() as number;\n }\n\n padding(value?: number | { top?: number; left?: number; right?: number; bottom?: number }) {\n const signal = this.getSignalById<{ top: number; left: number; right: number; bottom: number }>(SIGNAL_PADDING);\n if (arguments.length) {\n const padding = normalizePadding(value);\n this.updateSignal(signal, padding);\n return padding;\n }\n return normalizePadding(signal.output());\n }\n\n autoFit(value?: boolean) {\n const signal = this.getSignalById<boolean>(SIGNAL_AUTOFIT);\n if (arguments.length) {\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as boolean;\n }\n\n getViewBox() {\n const signal = this.getSignalById<IBounds>(SIGNAL_VIEW_BOX);\n\n return signal?.output() as IBounds;\n }\n\n // --- Layout ---\n\n updateLayoutTag() {\n this._layoutState = LayoutState.before;\n return this;\n }\n\n getLayoutState() {\n return this._layoutState;\n }\n\n private buildLayoutTree() {\n const markMap: Record<number, boolean> = {};\n const rootMarks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n markMap[mark.id()] = true;\n\n if (mark.group) {\n if (!markMap[mark.group.id()]) {\n rootMarks.push(mark);\n }\n } else {\n rootMarks.push(mark);\n }\n\n if (mark.markType === GrammarMarkType.group) {\n (mark as IGroupMark).updateLayoutChildren();\n }\n },\n (mark: IMark) => mark.needLayout()\n );\n\n this._layoutMarks = rootMarks;\n }\n\n private doLayout() {\n const doLayout = this._options.doLayout || defaultDoLayout;\n if (doLayout && this._layoutMarks?.length) {\n this.emit(HOOK_EVENT.BEFORE_DO_LAYOUT);\n doLayout(this._layoutMarks, this._options, this);\n this.emit(HOOK_EVENT.AFTER_DO_LAYOUT);\n }\n }\n\n private handleLayoutEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_LAYOUT_END);\n this._layoutMarks.forEach(layoutMark => {\n traverseMarkTree(\n layoutMark,\n 'layoutChildren',\n (mark: IMark) => {\n mark.handleLayoutEnd();\n },\n // 顶层节点,不需要重新执行了\n (mark: IMark) => mark !== layoutMark\n );\n });\n this.emit(HOOK_EVENT.AFTER_MARK_LAYOUT_END);\n }\n\n private handleRenderEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_RENDER_END);\n traverseMarkTree(this.rootMark, 'children', (mark: IMark) => {\n mark.handleRenderEnd();\n });\n this.emit(HOOK_EVENT.AFTER_MARK_RENDER_END);\n }\n\n // --- Dataflow ---\n\n commit(grammar: IGrammarBase) {\n this._dataflow.commit(grammar);\n return this;\n }\n\n run(runningConfig?: IRunningConfig) {\n this.evaluate(runningConfig);\n\n return this;\n }\n\n runSync(runningConfig?: IRunningConfig) {\n this.evaluateSync(runningConfig);\n\n return this;\n }\n\n isRunning() {\n return this._running;\n }\n\n async runAsync(runningConfig?: IRunningConfig) {\n if (this._isReleased) {\n return;\n }\n // await previously queued functions\n while (this._running) {\n await this._running;\n if (this._isReleased) {\n break;\n }\n }\n\n // run dataflow, manage running promise\n const clear = () => {\n this._running = null;\n };\n\n (this._running = this.evaluate(runningConfig)).then(clear, clear);\n\n return this._running;\n }\n\n async runNextTick(runningConfig?: IRunningConfig) {\n // delay the evaluate progress to next tick\n if (!this._currentDataflow) {\n this._currentDataflow = Promise.resolve().then(() => {\n return this.runAsync(runningConfig)\n .then(() => {\n this._currentDataflow = null;\n })\n .catch((e: any) => {\n this._currentDataflow = null;\n this.logger.error(e);\n });\n });\n }\n await this._currentDataflow;\n\n return this;\n }\n\n private doRender(immediately: boolean) {\n this.emit(HOOK_EVENT.BEFORE_DO_RENDER);\n // render as needed\n if (this.renderer) {\n if (!this._progressiveMarks) {\n this.animate.animate();\n }\n // 绘图 =>\n this.renderer.render(immediately);\n this.handleRenderEnd();\n }\n this.emit(HOOK_EVENT.AFTER_DO_RENDER);\n }\n\n private async evaluate(runningConfig?: IRunningConfig) {\n if (this._isReleased) {\n return;\n }\n const normalizedRunningConfig = normalizeRunningConfig(runningConfig);\n\n const grammarWillDetach = this._cachedGrammars.size() > 0;\n\n if (grammarWillDetach) {\n this.reuseCachedGrammars(normalizedRunningConfig);\n this.detachCachedGrammar();\n }\n // For most of time, width & height signal won't be modified duration dataflow,\n // so resizing before generating vRender graphic items should be faster.\n const hasResize = this._resizeRenderer();\n const hasUpdate = this._dataflow.hasCommitted();\n\n // if no grammar is update and layout is unnecessary, end evaluating\n if (!grammarWillDetach && !hasUpdate && !this._layoutState && !hasResize) {\n return this;\n }\n\n this.clearProgressive();\n // stop auto render of vrender to avoid the case that vrender auto render before the asynchronous task is done\n this.renderer?.preventRender(true);\n\n // evaluate dataflow\n await this._dataflow.evaluate();\n\n if (this._isReleased) {\n return;\n }\n\n if (this._needBuildLayoutTree) {\n this.buildLayoutTree();\n this._needBuildLayoutTree = false;\n }\n\n if (this._layoutState) {\n this._layoutState = LayoutState.layouting;\n this.doLayout();\n\n if (this._dataflow.hasCommitted()) {\n this._layoutState = LayoutState.reevaluate;\n await this._dataflow.evaluate();\n\n if (this._isReleased) {\n return;\n }\n }\n\n this._layoutState = LayoutState.after;\n if (this._layoutMarks?.length) {\n this.handleLayoutEnd();\n }\n }\n // enable auto render of vrender after the asynchronous task is done\n this.renderer?.preventRender(false);\n this._layoutState = null;\n\n this.findProgressiveMarks();\n\n // resize again if width/height signal is updated duration dataflow\n this._resizeRenderer();\n this.doRender(false);\n\n this._willMorphMarks?.forEach(morphMarks => {\n this._morph.morph(morphMarks.prev, morphMarks.next, normalizedRunningConfig);\n });\n this._willMorphMarks = null;\n\n this.releaseCachedGrammars(normalizedRunningConfig);\n\n this.doPreProgressive();\n\n return this;\n }\n\n private evaluateSync(runningConfig?: IRunningConfig) {\n const normalizedRunningConfig = normalizeRunningConfig(runningConfig);\n\n const grammarWillDetach = this._cachedGrammars.size() > 0;\n\n if (grammarWillDetach) {\n this.reuseCachedGrammars(normalizedRunningConfig);\n this.detachCachedGrammar();\n }\n\n const hasResize = this._resizeRenderer();\n const hasUpdate = this._dataflow.hasCommitted();\n\n if (!grammarWillDetach && !hasUpdate && !this._layoutState && !hasResize) {\n return this;\n }\n\n this.clearProgressive();\n // evaluate dataflow\n this._dataflow.evaluateSync();\n\n if (this._needBuildLayoutTree) {\n this.buildLayoutTree();\n this._needBuildLayoutTree = false;\n }\n\n if (this._layoutState) {\n this._layoutState = LayoutState.layouting;\n this.doLayout();\n\n if (this._dataflow.hasCommitted()) {\n this._layoutState = LayoutState.reevaluate;\n this._dataflow.evaluateSync();\n }\n\n this._layoutState = LayoutState.after;\n if (this._layoutMarks?.length) {\n this.handleLayoutEnd();\n }\n }\n this._layoutState = null;\n\n this.findProgressiveMarks();\n\n this._resizeRenderer();\n this.doRender(true);\n\n this._willMorphMarks?.forEach(morphMarks => {\n this._morph.morph(morphMarks.prev, morphMarks.next, normalizedRunningConfig);\n });\n this._willMorphMarks = null;\n\n this.releaseCachedGrammars(normalizedRunningConfig);\n\n this.doPreProgressive();\n\n return this;\n }\n\n private reuseCachedGrammars(runningConfig: IRunningConfig) {\n if (!this._willMorphMarks) {\n this._willMorphMarks = [];\n }\n\n if (runningConfig.reuse) {\n const reuseDiffUpdate = (diff: { prev: IGrammarBase; next: IGrammarBase }) => {\n diff.next.reuse(diff.prev);\n diff.prev.detachAll();\n diff.prev.clear();\n this._cachedGrammars.unrecord(diff.prev);\n };\n\n const diffedSignal = this._morph.diffGrammar(\n this._cachedGrammars.getAllSignals(),\n this.grammars.getAllSignals().filter(signal => !BuiltInSignalID.includes(signal.id()))\n );\n diffedSignal.update.forEach(reuseDiffUpdate);\n\n const diffedData = this._morph.diffGrammar(this._cachedGrammars.getAllData(), this.grammars.getAllData());\n diffedData.update.forEach(reuseDiffUpdate);\n\n const diffedScale = this._morph.diffGrammar(this._cachedGrammars.getAllScales(), this.grammars.getAllScales());\n diffedScale.update.forEach(reuseDiffUpdate);\n\n const diffedCoordinate = this._morph.diffGrammar(\n this._cachedGrammars.getAllCoordinates(),\n this.grammars.getAllCoordinates()\n );\n diffedCoordinate.update.forEach(reuseDiffUpdate);\n\n // TODO: reuse custom\n }\n\n const diffedMark = this._morph.diffMark(\n this._cachedGrammars.getAllMarks(),\n this.grammars.getAllMarks().filter(mark => mark.id() !== 'root'),\n runningConfig\n );\n diffedMark.update.forEach(diff => {\n const matched =\n diff.prev.length === 1 && diff.next.length === 1 && diff.prev[0].markType === diff.next[0].markType;\n const enableMarkMorphConfig =\n diff.prev.every(mark => mark.getMorphConfig().morph) && diff.next.every(mark => mark.getMorphConfig().morph);\n if (matched && runningConfig.reuse) {\n diff.next[0].reuse(diff.prev[0]);\n diff.prev[0].detachAll();\n diff.prev[0].clear();\n this._cachedGrammars.unrecord(diff.prev[0]);\n } else if ((runningConfig.morph && enableMarkMorphConfig) || runningConfig.morphAll) {\n this._willMorphMarks.push({ prev: diff.prev, next: diff.next });\n }\n });\n }\n\n private detachCachedGrammar() {\n this._cachedGrammars.traverse(grammar => {\n grammar.detachAll();\n if (grammar.grammarType === 'mark') {\n const mark = grammar as IMark;\n mark.group?.removeChild?.(mark);\n }\n });\n }\n\n private releaseCachedGrammars(runningConfig?: IRunningConfig) {\n // directly release all grammars except from marks\n this._cachedGrammars.traverse(grammar => {\n if (grammar.grammarType !== 'mark') {\n grammar.release();\n }\n });\n const markNodes = this._cachedGrammars.getAllMarkNodes();\n markNodes.forEach(node => {\n node.mark.animate.stop();\n if (runningConfig.enableExitAnimation) {\n this.animate.animateAddition(node.mark);\n }\n });\n const releaseUp = (node: IMarkTreeNode) => {\n // do nothing when mark is already released or is still animating\n if (!node.mark.view || node.mark.animate.getAnimatorCount() !== 0) {\n return;\n }\n // release when current node is leaf node\n if (!node.children || node.children.length === 0) {\n node.mark.release();\n // detach current node from tree and traverse above\n const parent = node.parent;\n if (parent) {\n node.parent.children = node.parent.children.filter(n => n !== node);\n node.parent = null;\n releaseUp(parent);\n }\n }\n };\n markNodes.forEach(node => {\n const mark = node.mark;\n if (mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n } else {\n mark.addEventListener('animationEnd', () => {\n if (mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n }\n });\n }\n });\n this._cachedGrammars.clear();\n }\n\n runAfter(callback: (view: IView) => void) {\n this._dataflow.runAfter(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n runBefore(callback: (view: IView) => void) {\n this._dataflow.runBefore(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer() {\n if (this._options.mode !== 'node') {\n this.logger.error(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n const stage = this.renderer?.stage?.();\n if (stage) {\n stage.render();\n const buffer = stage.window.getImageBuffer();\n return buffer;\n }\n this.logger.error(new ReferenceError(`render is not defined`));\n\n return null;\n }\n\n // --- Mark Tree ---\n\n traverseMarkTree(apply: (mark: IMark) => any, filter?: (mark: IMark) => boolean, leafFirst?: boolean) {\n traverseMarkTree(this.rootMark, 'children', apply, filter, leafFirst);\n return this;\n }\n\n // --- Resize ---\n\n private _bindResizeEvent() {\n if (this.autoFit()) {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n if (container) {\n const ResizeObserverWindow: any = window.ResizeObserver;\n this._observer = new ResizeObserverWindow(this._onResize);\n this._observer?.observe(container);\n }\n window.addEventListener('resize', this._onResize);\n }\n }\n\n private _unBindResizeEvent() {\n if (this.autoFit()) {\n window.removeEventListener('resize', this._onResize);\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n }\n }\n }\n\n private _getContainerSize() {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n\n if (container) {\n const { width: containerWidth, height: containerHeight } = getContainerSize(container!);\n const width = this._spec?.width ?? this._options.width ?? containerWidth;\n const height = this._spec?.height ?? this._options.height ?? containerHeight;\n\n return { width, height };\n }\n\n return null;\n }\n\n private _onResize = debounce((...args: any[]) => {\n const size = this._getContainerSize();\n\n if (size) {\n this.resize(size.width, size.height);\n }\n }, 100);\n\n async resize(width: number, height: number, render: boolean = true) {\n let needDataflow = false;\n\n // width value changed: update signal, skip resize op\n if (width !== this.width()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_WIDTH, width);\n }\n\n // height value changed: update signal, skip resize op\n if (height !== this.height()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_HEIGHT, height);\n }\n\n // run dataflow on width/height signal change\n if (needDataflow) {\n if (render) {\n await this.evaluate();\n } else {\n await this._dataflow.evaluate();\n }\n }\n\n return this;\n }\n\n private _resizeRenderer() {\n const width = this.width();\n const height = this.height();\n\n if (this.renderer.shouldResize(width, height)) {\n this.renderer.resize(width, height);\n this.emit('resize', {}, { width, height });\n return true;\n }\n\n return false;\n }\n\n // --- Event ---\n\n private bindEvents(eventSpec: BaseEventSpec) {\n if (this._eventConfig.disable) {\n return;\n }\n const { type: evtType, filter, callback, throttle, debounce, consume, target, dependency } = eventSpec;\n const eventSelector = parseEventSelector(evtType);\n\n if (!eventSelector) {\n return;\n }\n const { source, type } = eventSelector;\n\n const markFilter = generateFilterByMark(eventSelector);\n const targetSignals =\n Array.isArray(target) && target.length\n ? target.map(entry => {\n return {\n signal: this.getSignalById(entry.target),\n callback: entry.callback\n };\n })\n : [\n {\n signal: isString(target) ? this.getSignalById(target) : null,\n callback\n }\n ];\n const validateSignals = targetSignals.filter(entry => entry.signal || entry.callback);\n const refs = parseReference(dependency, this);\n\n const send = parseHandler(\n (evt?: any, element?: IElement) => {\n const needPreventDefault =\n (source === EVENT_SOURCE_VIEW && prevent(this._eventConfig, type)) ||\n (consume && (evt.cancelable === undefined || evt.cancelable));\n\n if (source === EVENT_SOURCE_WINDOW) {\n evt = getExtendedEvents(this, evt, element, type, EVENT_SOURCE_WINDOW);\n }\n\n let hasCommitted = false;\n\n if ((!filter || filter(evt)) && (!markFilter || markFilter(element)) && validateSignals.length) {\n const params = refs.reduce((params, ref) => {\n params[ref.id()] = ref.output();\n return params;\n }, {});\n validateSignals.forEach(entry => {\n if (entry.callback && entry.signal) {\n const changed = entry.signal.set(entry.callback(evt, params));\n\n if (changed) {\n this.commit(entry.signal);\n hasCommitted = true;\n }\n } else if (entry.callback) {\n entry.callback(evt, params);\n } else {\n this.commit(entry.signal);\n hasCommitted = true;\n }\n });\n }\n\n if (needPreventDefault) {\n evt.preventDefault();\n }\n\n if (consume) {\n evt.stopPropagation();\n }\n\n if (hasCommitted) {\n this.runAsync();\n }\n },\n { throttle, debounce }\n );\n\n if (source === EVENT_SOURCE_VIEW) {\n if (permit(this._eventConfig, EVENT_SOURCE_VIEW, type)) {\n // send traps errors, so use {trap: false} option\n this.addEventListener(type, send, NO_TRAP);\n\n return () => {\n this.removeEventListener(type, send);\n };\n }\n } else if (source === EVENT_SOURCE_WINDOW) {\n vglobal.addEventListener(type, send);\n this._eventListeners.push({\n type: type,\n source: vglobal,\n handler: send\n });\n\n return () => {\n vglobal.removeEventListener(type, send);\n\n const index = this._eventListeners.findIndex((entry: any) => {\n return entry.type === type && entry.source === vglobal && entry.handler === send;\n });\n\n if (index >= 0) {\n this._eventListeners.splice(index, 1);\n }\n };\n }\n }\n\n event(eventSpec: EventSpec) {\n if ('between' in eventSpec) {\n const [starEvent, endEvent] = eventSpec.between;\n // FIXME between需要生成唯一ID\n const id = `${starEvent.type}-${eventSpec.type}-${endEvent.type}`;\n\n let unbindEndEvent: any;\n\n this.bindEvents(\n Object.assign({}, starEvent, {\n callback: () => {\n if (!this._eventCache) {\n this._eventCache = {};\n }\n // 中间的事件绑定\n if (!this._eventCache[id]) {\n const unbindEvent = this.bindEvents(eventSpec);\n this._eventCache[id] = unbindEvent;\n }\n if (!unbindEndEvent) {\n // 结束的事件绑定\n unbindEndEvent = this.bindEvents(\n Object.assign({}, endEvent, {\n callback: () => {\n if (this._eventCache[id]) {\n this._eventCache[id]();\n this._eventCache[id] = null;\n }\n }\n })\n );\n }\n }\n })\n );\n } else if ('merge' in eventSpec) {\n eventSpec.merge.forEach(entry => {\n const singleEvent: Partial<BaseEventSpec> = Object.assign({}, eventSpec);\n\n if (isString(entry)) {\n singleEvent.type = entry;\n } else if (isObject(entry)) {\n Object.assign(singleEvent, entry);\n }\n singleEvent.debounce = 50;\n this.bindEvents(singleEvent as BaseEventSpec);\n });\n } else {\n this.bindEvents(eventSpec);\n }\n }\n\n interaction(type: string, spec: Partial<InteractionSpec>) {\n const interaction = Factory.createInteraction(type, this, spec);\n\n if (interaction) {\n interaction.bind();\n\n if (!this._boundInteractions) {\n this._boundInteractions = [];\n }\n\n this._boundInteractions.push(interaction);\n }\n return interaction;\n }\n\n removeInteraction(type: string | IInteraction) {\n if (this._boundInteractions) {\n const instances = this._boundInteractions.filter(\n interaction => (isString(type) && interaction.type === type) || interaction === type\n );\n\n if (instances.length) {\n instances.forEach(instance => {\n instance.unbind();\n });\n }\n }\n\n return this;\n }\n\n removeAllInteractions() {\n if (this._boundInteractions) {\n this._boundInteractions.forEach(instance => {\n instance.unbind();\n });\n\n this._boundInteractions = null;\n }\n\n return this;\n }\n\n private initEvent() {\n // 基于 vRender 事件系统提供的委托机制\n const stage = this.renderer.stage();\n stage && stage.on('*', this.delegateEvent);\n }\n\n private delegateEvent = (event: any, type: string) => {\n const activeElement = event.target?.[BridgeElementKey];\n const extendedEvt = getExtendedEvents(this, event, activeElement, type, EVENT_SOURCE_VIEW);\n this.emit(type, extendedEvt, activeElement);\n };\n\n addEventListener(type: string, handler: BaseEventHandler, options?: any) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n callback = handler;\n (callback as any).raw = handler;\n }\n if (options && options.target) {\n (callback as any).target = options.target;\n }\n this.on(type, callback);\n return this;\n }\n\n removeEventListener(type: string, handler?: BaseEventHandler) {\n if (handler) {\n this.off(type, handler);\n } else {\n this.off(type);\n }\n return this;\n }\n\n // --- Initialization ---\n\n private initializeRenderer() {\n const width = this._options.width;\n const height = this._options.height;\n\n this.renderer = new CanvasRenderer(this);\n this.renderer.initialize(width, height, this._options, this._eventConfig).background(this._background);\n }\n\n private initialize() {\n this.grammars = new RecordedGrammars(\n grammar => grammar.id(),\n (key, grammar) => this.logger.warn(`Grammar id '${key}' has been occupied`, grammar)\n );\n this._cachedGrammars = new RecordedTreeGrammars(grammar => grammar.id());\n\n if (this._options.logger) {\n Logger.setInstance(this._options.logger);\n }\n this.logger = Logger.getInstance(this._options.logLevel ?? 0);\n\n this._dataflow = new Dataflow();\n\n this.animate = new ViewAnimate(this);\n\n this._morph = new Morph();\n\n // 执行钩子\n if (this._options.hooks) {\n Object.keys(this._options.hooks).forEach(key => {\n this.on(key, this._options.hooks[key]);\n });\n // 生命周期事件(包含原性能测试钩子)\n this.hooks = this._options.hooks;\n }\n this.container = null;\n\n // initialize renderer, handler and event management\n this.renderer = null;\n this._eventListeners = [];\n\n // initialize event configuration\n this._eventConfig = initializeEventConfig(this._options.eventConfig);\n\n // set default theme\n this._theme = this._options.disableTheme ? null : ThemeManager.getDefaultTheme();\n\n this.parseBuiltIn();\n\n // initialize DOM container(s) and renderer\n configureEnvironment(this._options);\n this.initializeRenderer();\n\n if (!this._eventConfig.disable) {\n this.initEvent();\n }\n this._bindResizeEvent();\n\n this._currentDataflow = null;\n // update layout tree after initialization\n this._needBuildLayoutTree = true;\n this._layoutState = LayoutState.before;\n\n // apply theme value after initialization\n this.theme(this._theme);\n }\n\n // --- Others ---\n\n pauseProgressive() {\n return false;\n }\n resumeProgressive() {\n return false;\n }\n restartProgressive() {\n return false;\n }\n\n private findProgressiveMarks() {\n const marks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n marks.push(mark);\n },\n (mark: IMark) => mark.markType !== GrammarMarkType.group && mark.isProgressive()\n );\n\n if (!marks.length) {\n this._progressiveMarks = null;\n return null;\n }\n\n this._progressiveMarks = marks;\n\n if (this.renderer) {\n this.renderer.combineIncrementalLayers();\n }\n\n return marks;\n }\n\n private doPreProgressive() {\n if (this._progressiveMarks && this._progressiveMarks.some(mark => mark.isDoingProgressive())) {\n const raf = vglobal.getRequestAnimationFrame();\n this._progressiveRafId = raf(this.handleProgressiveFrame);\n }\n }\n\n /** 监听frame事件,更新增量元素的mark */\n private handleProgressiveFrame = () => {\n if (this._progressiveMarks.length) {\n this._progressiveMarks.forEach(mark => {\n if (mark.isDoingProgressive()) {\n mark.evaluateProgressive();\n }\n });\n }\n\n this.doPreProgressive();\n };\n\n /** 清除 */\n private clearProgressive() {\n if (this._progressiveRafId) {\n const cancelRaf = vglobal.getCancelAnimationFrame();\n cancelRaf(this._progressiveRafId);\n }\n\n if (this._progressiveMarks && this._progressiveMarks.length) {\n this._progressiveMarks.forEach(entry => {\n entry.clearProgressive();\n });\n\n this._progressiveMarks = null;\n }\n }\n\n // --- release ---\n release() {\n this._isReleased = true;\n this._unBindResizeEvent();\n this.clearProgressive();\n Factory.unregisterRuntimeTransforms();\n\n this.animate.stop();\n\n this.grammars.release();\n this._cachedGrammars.release();\n\n this._dataflow.release();\n this._dataflow = null;\n\n this.renderer?.release?.();\n this.renderer = null;\n this._boundInteractions = null;\n\n // 卸载事件\n this.removeAllListeners();\n this._eventListeners?.forEach((listener: any) => {\n listener.source.removeEventListener(listener.type, listener.handler);\n });\n this._eventListeners = null;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/view/View.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAEA,6CAA+G;AAG/G,yDAAiD;AAsCjD,iCAA8B;AAC9B,qCAAkE;AAClE,0DAAkC;AAClC,kDAAsD;AACtD,kDAAsD;AACtD,+EAAsD;AACtD,gFAA4D;AAC5D,2CAYqB;AACrB,qCAAkC;AAClC,mCAAgC;AAChC,wCAMuB;AACvB,0CAAgH;AAChH,wCAA0D;AAC1D,2CAAyD;AACzD,mCAAoC;AACpC,iCAA8B;AAC9B,mDAAyD;AACzD,mCAAoC;AACpC,6CAA0C;AAE1C,oDAAiD;AACjD,qDAA0E;AAC1E,uCAAwC;AAExC,0CAAyF;AAYzF,iDAA8C;AAC9C,0DAAsD;AACtD,6CAA0C;AAC1C,2CAAwC;AACxC,mDAAsE;AAYtE,MAAqB,IAAK,SAAQ,qBAAY;IA0D5C,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;QAogCjC,cAAS,GAAG,IAAA,iBAAQ,EAAC,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;QA+PA,kBAAa,GAAG,CAAC,KAAU,EAAE,IAAY,EAAE,EAAE;;YACnD,MAAM,aAAa,GAAG,MAAA,KAAK,CAAC,MAAM,0CAAG,4BAAgB,CAAC,CAAC;YACvD,MAAM,WAAW,GAAG,IAAA,uBAAiB,EAAC,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,6BAAiB,CAAC,CAAC;YAC3F,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;QAC9C,CAAC,CAAC;QAwIM,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;QAp5CA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAC3B;YACE,IAAI,EAAE,mBAAO;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,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,GAAG,GAAY,EAAE,CAAC;QAEtB,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YAC9B,IAAI,IAAA,gBAAS,EAAC,WAAW,CAAC,EAAE;gBAC1B,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBAC9B,OAAO;aACR;YAED,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,iBAAS,EAAE;gBAChC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1D;YAED,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,mBAAW,EAAE;gBAClC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7D;YAED,IAAI,IAAA,oBAAU,EAAC,WAAW,CAAC,EAAE;gBAC3B,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;aACpD;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACb,CAAC;IAIO,YAAY,CAAI,MAA2B,EAAE,KAAQ;QAC3D,IAAI,IAAA,iBAAQ,EAAC,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,eAAM,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,WAAI,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,GAAW,IAAI,aAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU,CAAC,IAAoB;QAC7B,MAAM,UAAU,GAAgB,IAAI,uBAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,CACF,IAAc,EACd,KAA2B,EAC3B,WAAgF;QAEhF,MAAM,SAAS,GAAG,IAAA,iBAAQ,EAAC,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,uBAAe,CAAC,KAAK;gBACxB,IAAI,GAAG,IAAI,iBAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBACtC,MAAM;YACR,KAAK,uBAAe,CAAC,KAAK;gBACxB,IAAI,GAAG,IAAI,iBAAS,CAAC,IAAI,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,SAAS,EAAE,SAAS,CAAC,CAAC;gBAC9D,MAAM;YAER,KAAK,uBAAe,CAAC,SAAS;gBAC5B,IAAI,GAAG,iBAAO,CAAC,YAAY,CAAC,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,aAAa,CAAC;oBACrD,CAAC,CAAC,iBAAO,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,qBAAS,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,uBAAe,CAAC,IAAI;gBACvB,IAAI,GAAG,IAAI,WAAI,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;gBACvC,MAAM;YACR;gBACE,IAAI,GAAG,iBAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAO,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,WAAI,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,uBAAe,CAAC,KAAK,EAAE,KAAK,CAAe,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,SAAiB,EAAE,KAA0B;QACjD,OAAO,IAAI,CAAC,IAAI,CAAC,uBAAe,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,uBAAe,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,uBAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,qBAAa,CAAC,IAAI,EAAE,IAAI,EAAE,CAAU,CAAC;IAC3G,CAAC;IAED,IAAI,CAAC,KAA0B,EAAE,OAAoB,IAAI;QACvD,OAAO,IAAI,CAAC,IAAI,CAAC,uBAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,qBAAa,CAAC,IAAI,EAAE,IAAI,EAAE,CAAU,CAAC;IAC3G,CAAC;IAED,MAAM,CAAC,KAA0B;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,uBAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,qBAAa,CAAC,MAAM,EAAE,CAAY,CAAC;IACzG,CAAC;IAED,MAAM,CAAC,KAA0B;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,uBAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,qBAAa,CAAC,MAAM,EAAE,CAAY,CAAC;IACzG,CAAC;IAED,KAAK,CAAC,KAA0B;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,uBAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,qBAAa,CAAC,KAAK,EAAE,CAAW,CAAC;IACvG,CAAC;IAED,QAAQ,CAAC,KAA0B;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,uBAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,qBAAa,CAAC,QAAQ,EAAE,CAAc,CAAC;IAC7G,CAAC;IAED,MAAM,CAAC,KAA0B;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,uBAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,qBAAa,CAAC,MAAM,EAAE,CAAY,CAAC;IACzG,CAAC;IAED,KAAK,CAAC,KAA0B;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,uBAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,qBAAa,CAAC,KAAK,EAAE,CAAW,CAAC;IACvG,CAAC;IAED,SAAS,CAAC,KAA0B;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,uBAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,qBAAa,CAAC,SAAS,EAAE,CAAe,CAAC;IAC/G,CAAC;IAED,UAAU,CAAC,IAAY,EAAE,IAAS;QAChC,MAAM,OAAO,GAAG,iBAAO,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAElD,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,IAAA,iBAAQ,EAAC,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,sBAAe,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,IAAA,2BAAiB,EAAC,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,kBAAU,CAAC,iBAAiB,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAA,wBAAiB,EAAC,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,4BAAY,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,wBAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5C,IAAI,CAAC,YAAY,CAAC,yBAAa,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,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;SACJ;QAED,MAAM,kBAAkB,GAAG,iBAAO,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,MAAA,IAAI,CAAC,OAAO,CAAC,0CAAE,MAAM,EAAE;gBACzB,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,MAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,EAAE;YACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACxB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBAChC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,MAAA,IAAI,CAAC,YAAY,0CAAE,MAAM,EAAE;YAC7B,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,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;SACxB;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;SACvB;QAED,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,gBAAgB,CAAC,CAAC;QAGvC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,mBAAW,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,IAAA,qBAAc,EAAC,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,uBAAe,CAAC,KAAK;YACjC,CAAC,CAAC,EAAE,SAAS,EAAG,IAAsB,CAAC,SAAS,EAAE;YAClD,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,uBAAe,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,IAAA,iBAAQ,EAAC,KAAK,CAAC,EAAE;YACnB,IAAI,CAAC,MAAM,GAAG,MAAA,4BAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,mCAAI,4BAAY,CAAC,eAAe,EAAE,CAAC;SAC9E;aAAM;YACL,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;SACrB;QAED,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,UAAU,CAAC,MAAA,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,UAAU,mCAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,mCAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC9F,IAAI,CAAC,OAAO,CAAC,MAAA,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,OAAO,mCAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,mCAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAClF,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,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,UAAU,mCAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACpE,IAAI,CAAC,OAAO,CAAC,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,OAAO,mCAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SAC5D;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACK,eAAe,CAAC,KAAsB,EAAE,SAAkB,IAAI;;YAClE,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,OAAO;aACR;YACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAElB,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACzC,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,IAAI,MAAM,EAAE;gBACV,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAEtB,IAAI,IAAI,CAAC,WAAW,EAAE;oBACpB,OAAO;iBACR;gBAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aAC5B;iBAAM;gBACL,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;aACjC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;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,wBAAY,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,yBAAa,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,6BAAiB,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,8BAAkB,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,0BAAc,CAAC,CAAC;QAChH,IAAI,SAAS,CAAC,MAAM,EAAE;YACpB,MAAM,OAAO,GAAG,IAAA,uBAAgB,EAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACnC,OAAO,OAAO,CAAC;SAChB;QACD,OAAO,IAAA,uBAAgB,EAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,CAAC,KAAe;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAU,0BAAc,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,2BAAe,CAAC,CAAC;QAE5D,OAAO,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,EAAa,CAAC;IACrC,CAAC;IAID,eAAe;QACb,IAAI,CAAC,YAAY,GAAG,mBAAW,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,uBAAe,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,wBAAe,CAAC;QAC3D,IAAI,QAAQ,KAAI,MAAA,IAAI,CAAC,YAAY,0CAAE,MAAM,CAAA,EAAE;YACzC,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,gBAAgB,CAAC,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,eAAe,CAAC,CAAC;SACvC;IACH,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,sBAAsB,CAAC,CAAC;QAC7C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YACrC,IAAA,4BAAgB,EACd,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,kBAAU,CAAC,qBAAqB,CAAC,CAAC;IAC9C,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,sBAAsB,CAAC,CAAC;QAC7C,IAAA,4BAAgB,EAAC,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,kBAAU,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;IAED,OAAO,CAAC,aAA8B;QACpC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAEjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEK,QAAQ,CAAC,aAA8B;;YAC3C,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,OAAO;aACR;YAED,OAAO,IAAI,CAAC,QAAQ,EAAE;gBACpB,MAAM,IAAI,CAAC,QAAQ,CAAC;gBACpB,IAAI,IAAI,CAAC,WAAW,EAAE;oBACpB,MAAM;iBACP;aACF;YAGD,MAAM,KAAK,GAAG,GAAG,EAAE;gBACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,CAAC,CAAC;YAEF,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAElE,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;KAAA;IAEK,WAAW,CAAC,aAA8B;;YAE9C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC1B,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;oBAClD,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;yBAChC,IAAI,CAAC,GAAG,EAAE;wBACT,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;oBAC/B,CAAC,CAAC;yBACD,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE;wBAChB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;wBAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACvB,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;aACJ;YACD,MAAM,IAAI,CAAC,gBAAgB,CAAC;YAE5B,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAEO,QAAQ,CAAC,WAAoB;QACnC,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,gBAAgB,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC3B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;aACxB;YAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAClC,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;QACD,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAEa,QAAQ,CAAC,aAA8B;;;YACnD,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,OAAO;aACR;YACD,MAAM,uBAAuB,GAAG,IAAA,6BAAsB,EAAC,aAAa,CAAC,CAAC;YAEtE,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAE1D,IAAI,iBAAiB,EAAE;gBACrB,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;gBAClD,IAAI,CAAC,mBAAmB,EAAE,CAAC;aAC5B;YAGD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YAGhD,IAAI,CAAC,iBAAiB,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,EAAE;gBACxE,OAAO,IAAI,CAAC;aACb;YAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAExB,MAAA,IAAI,CAAC,QAAQ,0CAAE,aAAa,CAAC,IAAI,CAAC,CAAC;YAGnC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YAEhC,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,OAAO;aACR;YAED,IAAI,IAAI,CAAC,oBAAoB,EAAE;gBAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;aACnC;YAED,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,IAAI,CAAC,YAAY,GAAG,mBAAW,CAAC,SAAS,CAAC;gBAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAEhB,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE;oBACjC,IAAI,CAAC,YAAY,GAAG,mBAAW,CAAC,UAAU,CAAC;oBAC3C,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;oBAEhC,IAAI,IAAI,CAAC,WAAW,EAAE;wBACpB,OAAO;qBACR;iBACF;gBAED,IAAI,CAAC,YAAY,GAAG,mBAAW,CAAC,KAAK,CAAC;gBACtC,IAAI,MAAA,IAAI,CAAC,YAAY,0CAAE,MAAM,EAAE;oBAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;iBACxB;aACF;YAED,MAAA,IAAI,CAAC,QAAQ,0CAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAEzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAG5B,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAErB,MAAA,IAAI,CAAC,eAAe,0CAAE,OAAO,CAAC,UAAU,CAAC,EAAE;gBACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;YAC/E,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAE5B,IAAI,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,CAAC;YAEpD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAExB,OAAO,IAAI,CAAC;;KACb;IAEO,YAAY,CAAC,aAA8B;;QACjD,MAAM,uBAAuB,GAAG,IAAA,6BAAsB,EAAC,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;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAEhD,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;QAExB,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAE9B,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,mBAAW,CAAC,SAAS,CAAC;YAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEhB,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE;gBACjC,IAAI,CAAC,YAAY,GAAG,mBAAW,CAAC,UAAU,CAAC;gBAC3C,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;aAC/B;YAED,IAAI,CAAC,YAAY,GAAG,mBAAW,CAAC,KAAK,CAAC;YACtC,IAAI,MAAA,IAAI,CAAC,YAAY,0CAAE,MAAM,EAAE;gBAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;aACxB;SACF;QACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEpB,MAAA,IAAI,CAAC,eAAe,0CAAE,OAAO,CAAC,UAAU,CAAC,EAAE;YACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,IAAI,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,CAAC;QAEpD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,mBAAmB,CAAC,aAA6B;QACvD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;SAC3B;QAED,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,MAAM,CAAC,WAAW,CAC1C,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,EACpC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,sBAAe,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,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAC1G,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAE3C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;YAC/G,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAE5C,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAC9C,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,MAAM,CAAC,QAAQ,CACrC,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,OAAO,IAAI,aAAa,CAAC,KAAK,EAAE;gBAClC,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;iBAAM,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,qBAAqB,CAAC,IAAI,aAAa,CAAC,QAAQ,EAAE;gBACnF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;aACjE;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,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACzB,IAAI,aAAa,CAAC,mBAAmB,EAAE;gBACrC,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,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE;gBACjE,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,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE;gBACzC,SAAS,CAAC,IAAI,CAAC,CAAC;aACjB;iBAAM;gBACL,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE;oBACzC,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE;wBACzC,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,IAAA,4BAAgB,EAAC,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,IAAA,yBAAgB,EAAC,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;IAUK,MAAM,CAAC,KAAa,EAAE,MAAc,EAAE,SAAkB,IAAI;;YAChE,IAAI,YAAY,GAAG,KAAK,CAAC;YAGzB,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE;gBAC1B,YAAY,GAAG,IAAI,CAAC;gBACpB,IAAI,CAAC,YAAY,CAAC,wBAAY,EAAE,KAAK,CAAC,CAAC;aACxC;YAGD,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,EAAE;gBAC5B,YAAY,GAAG,IAAI,CAAC;gBACpB,IAAI,CAAC,YAAY,CAAC,yBAAa,EAAE,MAAM,CAAC,CAAC;aAC1C;YAGD,IAAI,YAAY,EAAE;gBAChB,IAAI,MAAM,EAAE;oBACV,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;iBACvB;qBAAM;oBACL,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;iBACjC;aACF;YAED,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;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;IAIO,UAAU,CAAC,SAAwB;QACzC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;YAC7B,OAAO;SACR;QACD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;QACvG,MAAM,aAAa,GAAG,IAAA,0BAAkB,EAAC,OAAO,CAAC,CAAC;QAElD,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO;SACR;QACD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC;QAEvC,MAAM,UAAU,GAAG,IAAA,4BAAoB,EAAC,aAAa,CAAC,CAAC;QACvD,MAAM,aAAa,GACjB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM;YACpC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBACjB,OAAO;oBACL,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;oBACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ;iBACzB,CAAC;YACJ,CAAC,CAAC;YACJ,CAAC,CAAC;gBACE;oBACE,MAAM,EAAE,IAAA,iBAAQ,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;oBAC5D,QAAQ;iBACT;aACF,CAAC;QACR,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtF,MAAM,IAAI,GAAG,IAAA,qBAAc,EAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAE9C,MAAM,IAAI,GAAG,IAAA,oBAAY,EACvB,CAAC,GAAS,EAAE,OAAkB,EAAE,EAAE;YAChC,MAAM,kBAAkB,GACtB,CAAC,MAAM,KAAK,6BAAiB,IAAI,IAAA,gBAAO,EAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBAClE,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;YAEhE,IAAI,MAAM,KAAK,+BAAmB,EAAE;gBAClC,GAAG,GAAG,IAAA,uBAAiB,EAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,+BAAmB,CAAC,CAAC;aACxE;YAED,IAAI,YAAY,GAAG,KAAK,CAAC;YAEzB,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,eAAe,CAAC,MAAM,EAAE;gBAC9F,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;oBACzC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;oBAChC,OAAO,MAAM,CAAC;gBAChB,CAAC,EAAE,EAAE,CAAC,CAAC;gBACP,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBAC9B,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE;wBAClC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;wBAE9D,IAAI,OAAO,EAAE;4BACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;4BAC1B,YAAY,GAAG,IAAI,CAAC;yBACrB;qBACF;yBAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;wBACzB,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;qBAC7B;yBAAM;wBACL,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBAC1B,YAAY,GAAG,IAAI,CAAC;qBACrB;gBACH,CAAC,CAAC,CAAC;aACJ;YAED,IAAI,kBAAkB,EAAE;gBACtB,GAAG,CAAC,cAAc,EAAE,CAAC;aACtB;YAED,IAAI,OAAO,EAAE;gBACX,GAAG,CAAC,eAAe,EAAE,CAAC;aACvB;YAED,IAAI,YAAY,EAAE;gBAChB,IAAI,CAAC,QAAQ,EAAE,CAAC;aACjB;QACH,CAAC,EACD,EAAE,QAAQ,EAAE,QAAQ,EAAE,CACvB,CAAC;QAEF,IAAI,MAAM,KAAK,6BAAiB,EAAE;YAChC,IAAI,IAAA,eAAM,EAAC,IAAI,CAAC,YAAY,EAAE,6BAAiB,EAAE,IAAI,CAAC,EAAE;gBAEtD,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAO,CAAC,CAAC;gBAE3C,OAAO,GAAG,EAAE;oBACV,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACvC,CAAC,CAAC;aACH;SACF;aAAM,IAAI,MAAM,KAAK,+BAAmB,EAAE;YACzC,sBAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;gBACxB,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,sBAAO;gBACf,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YAEH,OAAO,GAAG,EAAE;gBACV,sBAAO,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAExC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,KAAU,EAAE,EAAE;oBAC1D,OAAO,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,sBAAO,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC;gBACnF,CAAC,CAAC,CAAC;gBAEH,IAAI,KAAK,IAAI,CAAC,EAAE;oBACd,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBACvC;YACH,CAAC,CAAC;SACH;IACH,CAAC;IAED,KAAK,CAAC,SAAoB;QACxB,IAAI,SAAS,IAAI,SAAS,EAAE;YAC1B,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC;YAEhD,MAAM,EAAE,GAAG,GAAG,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAElE,IAAI,cAAmB,CAAC;YAExB,IAAI,CAAC,UAAU,CACb,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE;gBAC3B,QAAQ,EAAE,GAAG,EAAE;oBACb,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;wBACrB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;qBACvB;oBAED,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE;wBACzB,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;wBAC/C,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;qBACpC;oBACD,IAAI,CAAC,cAAc,EAAE;wBAEnB,cAAc,GAAG,IAAI,CAAC,UAAU,CAC9B,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE;4BAC1B,QAAQ,EAAE,GAAG,EAAE;gCACb,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE;oCACxB,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;oCACvB,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;iCAC7B;4BACH,CAAC;yBACF,CAAC,CACH,CAAC;qBACH;gBACH,CAAC;aACF,CAAC,CACH,CAAC;SACH;aAAM,IAAI,OAAO,IAAI,SAAS,EAAE;YAC/B,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBAC9B,MAAM,WAAW,GAA2B,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;gBAEzE,IAAI,IAAA,iBAAQ,EAAC,KAAK,CAAC,EAAE;oBACnB,WAAW,CAAC,IAAI,GAAG,KAAK,CAAC;iBAC1B;qBAAM,IAAI,IAAA,iBAAQ,EAAC,KAAK,CAAC,EAAE;oBAC1B,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;iBACnC;gBACD,WAAW,CAAC,QAAQ,GAAG,EAAE,CAAC;gBAC1B,IAAI,CAAC,UAAU,CAAC,WAA4B,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;SAC5B;IACH,CAAC;IAED,WAAW,CAAC,IAAY,EAAE,IAA8B;QACtD,MAAM,WAAW,GAAG,iBAAO,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;QAC3C,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAC9C,WAAW,CAAC,EAAE,CAAC,CAAC,IAAA,iBAAQ,EAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,WAAW,KAAK,IAAI,CACrF,CAAC;YAEF,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;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;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,yBAAc,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,iCAAgB,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,qCAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAEzE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACxB,eAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SAC1C;QACD,IAAI,CAAC,MAAM,GAAG,eAAM,CAAC,WAAW,CAAC,MAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,mCAAI,CAAC,CAAC,CAAC;QAE9D,IAAI,CAAC,SAAS,GAAG,IAAI,kBAAQ,EAAE,CAAC;QAEhC,IAAI,CAAC,OAAO,GAAG,IAAI,qBAAW,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,CAAC,MAAM,GAAG,IAAI,aAAK,EAAE,CAAC;QAG1B,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,IAAA,8BAAqB,EAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAGrE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,4BAAY,CAAC,eAAe,EAAE,CAAC;QAEjF,IAAI,CAAC,YAAY,EAAE,CAAC;QAGpB,IAAA,0BAAoB,EAAC,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;QAExB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,mBAAW,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,uBAAe,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,sBAAO,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,sBAAO,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,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,iBAAO,CAAC,2BAA2B,EAAE,CAAC;QAEtC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAEpB,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;AAlgDD,uBAkgDC","file":"View.js","sourcesContent":["import type { IBounds, ILogger } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { EventEmitter, debounce, isObject, isString, getContainerSize, Logger, array } from '@visactor/vutils';\nimport type { IColor } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { vglobal } from '@visactor/vrender-core';\nimport type { CoordinateType } from '@visactor/vgrammar-coordinate';\nimport type { IElement } from './../types/element';\nimport type {\n MarkSpec,\n IData,\n ISignal,\n ViewSpec,\n IView,\n IViewOptions,\n IViewThemeConfig,\n IViewEventConfig,\n Hooks,\n IMark,\n EventSpec,\n GroupMarkSpec,\n BaseEventSpec,\n MarkType,\n GrammarScaleType,\n SignalFunctionType,\n IScale,\n IGrammarBase,\n IGroupMark,\n IGlyphMark,\n ICoordinate,\n BaseEventHandler,\n GlyphMarkSpec,\n IRecordedGrammars,\n IComponent,\n ComponentSpec,\n IRecordedTreeGrammars,\n IMarkTreeNode,\n IRunningConfig,\n IViewAnimate,\n ITheme,\n InteractionSpec,\n IInteraction\n} from '../types/';\nimport { Data } from './data';\nimport { initializeEventConfig, permit, prevent } from './events';\nimport Dataflow from './dataflow';\nimport { traverseMarkTree } from '../graph/mark-tree';\nimport { BridgeElementKey } from '../graph/constants';\nimport CanvasRenderer from '../graph/canvas-renderer';\nimport getExtendedEvents from '../graph/util/events-extend';\nimport {\n BROWSER,\n NO_TRAP,\n SIGNAL_WIDTH,\n SIGNAL_HEIGHT,\n SIGNAL_PADDING,\n SIGNAL_AUTOFIT,\n SIGNAL_VIEW_WIDTH,\n SIGNAL_VIEW_HEIGHT,\n EVENT_SOURCE_VIEW,\n EVENT_SOURCE_WINDOW,\n SIGNAL_VIEW_BOX\n} from './constants';\nimport { Signal } from './signal';\nimport { Scale } from './scale';\nimport {\n BuiltInSignalID,\n builtInSignals,\n normalizeMarkTree,\n normalizeRunningConfig,\n normalizePadding\n} from '../parse/view';\nimport { parseHandler, parseEventSelector, generateFilterByMark, ID_PREFIX, NAME_PREFIX } from '../parse/event';\nimport { isGrammar, parseReference } from '../parse/util';\nimport { configureEnvironment } from '../graph/util/env';\nimport { GroupMark } from './group';\nimport { Mark } from './mark';\nimport { defaultDoLayout } from '../graph/layout/layout';\nimport { GlyphMark } from './glyph';\nimport { Coordinate } from './coordinate';\nimport type { IMorph } from '../types/morph';\nimport { Morph } from '../graph/animation/morph';\nimport { RecordedGrammars, RecordedTreeGrammars } from './grammar-record';\nimport { ViewAnimate } from './animate';\nimport type { IRenderer } from '../types/renderer';\nimport { ComponentEnum, HOOK_EVENT, LayoutState, GrammarMarkType } from '../graph/enums';\nimport type {\n IAxis,\n IDatazoom,\n IGrid,\n ILabel,\n ILegend,\n IPlayer,\n IScrollbar,\n ISlider,\n ITitle\n} from '../types/component';\nimport { Text } from '../semantic-marks/text';\nimport { ThemeManager } from '../theme/theme-manager';\nimport { Factory } from '../core/factory';\nimport { Component } from './component';\nimport { isMarkType, removeGraphicItem } from '../graph/util/graphic';\n\n/**\n * Create a new View instance from a VGrammar dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be performed upon dataflow runs.\n * @constructor\n * @param {object} spec - The VGrammar dataflow runtime specification.\n */\nexport default class View extends EventEmitter implements IView {\n /** render element */\n container: HTMLElement;\n\n /** renderer */\n renderer: IRenderer;\n animate: IViewAnimate;\n rootMark: IGroupMark;\n\n /** life circle hooks */\n hooks: Hooks;\n\n logger: ILogger;\n\n grammars: IRecordedGrammars;\n\n private _isReleased: boolean;\n private _spec: ViewSpec;\n private _config: IViewThemeConfig;\n private _options: IViewOptions;\n\n private _cachedGrammars: IRecordedTreeGrammars;\n private _willMorphMarks: { prev: IMark[]; next: IMark[] }[];\n\n /** morph animate */\n private _morph: IMorph;\n\n private _eventConfig: IViewEventConfig;\n private _eventListeners: Array<{\n type: string;\n source: any;\n handler: any;\n }>;\n\n private _theme: ITheme;\n\n private _dataflow: Dataflow;\n /** 正在执行的dataflow */\n private _currentDataflow?: Promise<any>;\n /** 正在执行的任务 */\n private _running?: Promise<this>;\n\n /** 初次渲染或者更新spec,需要构建布局树 */\n private _needBuildLayoutTree?: boolean;\n /** 布局阶段 */\n private _layoutState?: LayoutState;\n\n /** 布局树,存储所有需要计算布局的mark元素 */\n private _layoutMarks?: IMark[];\n\n private _background?: IColor;\n private _eventCache: Record<string, () => void>;\n /** 当前是否存在增量渲染元素 */\n private _progressiveMarks?: IMark[];\n private _progressiveRafId?: number;\n private _observer: ResizeObserver = null;\n private _boundInteractions?: IInteraction[];\n\n static useRegisters(comps: (() => void)[]) {\n comps.forEach((fn: () => void) => {\n fn();\n });\n }\n\n constructor(options: IViewOptions = {}, config: IViewThemeConfig = {}) {\n super();\n this._config = config;\n this._options = Object.assign(\n {\n mode: BROWSER\n },\n options\n );\n this.initialize();\n }\n // emit: <T extends EventEmitter.EventNames<string | symbol>>(\n // event: T,\n // ...args: EventEmitter.EventArgs<string | symbol, T>\n // ) => boolean;\n\n // --- Lookup Grammars ---\n\n getGrammarById(id: string) {\n return this.grammars.getGrammar(id);\n }\n getSignalById<T>(id: string): ISignal<T> | null {\n return this.grammars.getSignal(id);\n }\n getDataById(id: string): IData | null {\n return this.grammars.getData(id);\n }\n getScaleById(id: string): IScale | null {\n return this.grammars.getScale(id);\n }\n getCoordinateById(id: string) {\n return this.grammars.getCoordinate(id);\n }\n getMarkById(id: string): IMark | null {\n return this.grammars.getMark(id);\n }\n\n getCustomizedById(id: string): IGrammarBase | null {\n return this.grammars.getCustomized(id);\n }\n\n getGrammarsByName(name: string) {\n return this.grammars.filter(grammar => grammar.name() === name);\n }\n\n getGrammarsByType(grammarType: string) {\n return this.grammars.filter(grammar => grammar.grammarType === grammarType);\n }\n getMarksByType(markType: string) {\n return this.grammars.getAllMarks().filter(mark => mark.markType === markType);\n }\n getMarksByName(name: string): IMark[] | null {\n return this.grammars.getAllMarks().filter(mark => mark.name() === name);\n }\n getMarksBySelector(selector: string | string[] | IMark | IMark[]): IMark[] | null {\n if (!selector) {\n return null;\n }\n const selectors = array(selector);\n let res: IMark[] = [];\n\n selectors.forEach(selectorStr => {\n if (isGrammar(selectorStr)) {\n res = res.concat(selectorStr);\n return;\n }\n\n if (selectorStr[0] === ID_PREFIX) {\n res = res.concat(this.getMarkById(selectorStr.slice(1)));\n }\n\n if (selectorStr[0] === NAME_PREFIX) {\n res = res.concat(this.getMarksByName(selectorStr.slice(1)));\n }\n\n if (isMarkType(selectorStr)) {\n res = res.concat(this.getMarksByType(selectorStr));\n }\n });\n\n return res;\n }\n\n // --- Grammar ---\n\n private updateSignal<T>(signal: string | ISignal<T>, value: T) {\n if (isString(signal)) {\n signal = this.getSignalById<T>(signal);\n }\n signal.set(value);\n this.commit(signal);\n }\n\n signal<T>(value?: T, update?: SignalFunctionType<T>): ISignal<T> {\n const signal: ISignal<T> = new Signal<T>(this);\n if (arguments.length >= 1) {\n signal.value(value);\n }\n if (arguments.length >= 2) {\n signal.update(update);\n }\n this.grammars.record(signal);\n this._dataflow.add(signal);\n return signal;\n }\n\n data(values?: any[]): IData {\n const data: IData = new Data(this, values);\n this.grammars.record(data);\n this._dataflow.add(data);\n return data;\n }\n\n scale(type: GrammarScaleType) {\n const scale: IScale = new Scale(this, type);\n this.grammars.record(scale);\n this._dataflow.add(scale);\n return scale;\n }\n\n coordinate(type: CoordinateType) {\n const coordinate: ICoordinate = new Coordinate(this, type);\n this.grammars.record(coordinate);\n this._dataflow.add(coordinate);\n return coordinate;\n }\n\n mark(\n type: MarkType,\n group?: IGroupMark | string,\n markOptions?: { glyphType?: string; componentType?: string; mode?: '2d' | '3d' }\n ) {\n const groupMark = isString(group) ? (this.getMarkById(group) as IGroupMark) : group;\n\n let mark: IMark;\n switch (type) {\n case GrammarMarkType.group:\n mark = new GroupMark(this, groupMark);\n break;\n case GrammarMarkType.glyph:\n mark = new GlyphMark(this, markOptions?.glyphType, groupMark);\n break;\n // components\n case GrammarMarkType.component:\n mark = Factory.hasComponent(markOptions?.componentType)\n ? Factory.createComponent(markOptions?.componentType, this, groupMark, markOptions?.mode)\n : new Component(this, markOptions?.componentType, groupMark, markOptions?.mode);\n break;\n case GrammarMarkType.text:\n mark = new Text(this, type, groupMark);\n break;\n default:\n mark = Factory.hasMark(type) ? Factory.createMark(type, this, groupMark) : new Mark(this, type, groupMark);\n }\n this.grammars.record(mark);\n this._dataflow.add(mark);\n return mark;\n }\n\n group(group?: IGroupMark | string) {\n return this.mark(GrammarMarkType.group, group) as IGroupMark;\n }\n\n glyph(glyphType: string, group: IGroupMark | string) {\n return this.mark(GrammarMarkType.glyph, group, { glyphType }) as IGlyphMark;\n }\n\n component(componentType: string, group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType, mode }) as IComponent;\n }\n\n axis(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.axis, mode }) as IAxis;\n }\n\n grid(group: IGroupMark | string, mode: '2d' | '3d' = '2d') {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.grid, mode }) as IGrid;\n }\n\n legend(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.legend }) as ILegend;\n }\n\n slider(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.slider }) as ISlider;\n }\n\n label(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.label }) as ILabel;\n }\n\n datazoom(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.datazoom }) as IDatazoom;\n }\n\n player(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.player }) as IPlayer;\n }\n\n title(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.title }) as ITitle;\n }\n\n scrollbar(group: IGroupMark | string) {\n return this.mark(GrammarMarkType.component, group, { componentType: ComponentEnum.scrollbar }) as IScrollbar;\n }\n\n customized(type: string, spec: any) {\n const grammar = Factory.createGrammar(type, this);\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]?.length) {\n spec[specKey].forEach((specValue: any) => {\n this.customized(key, specValue);\n });\n }\n });\n\n if (spec.marks?.length) {\n spec.marks.forEach(mark => {\n this.parseMarkSpec(mark);\n });\n }\n\n if (spec.events?.length) {\n spec.events.forEach(eventConfig => {\n this.event(eventConfig);\n });\n }\n\n if (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\n if (this._theme) {\n this.background(this._spec?.background ?? this._options.background ?? this._theme.background);\n this.padding(this._spec?.padding ?? this._options.padding ?? this._theme.padding);\n this.renderer.stage()?.setTheme?.(Object.assign({}, this._theme.marks));\n } else {\n this.background(this._spec?.background ?? this._options.background);\n this.padding(this._spec?.padding ?? this._options.padding);\n }\n\n return this;\n }\n\n getCurrentTheme() {\n return this._theme;\n }\n async setCurrentTheme(theme: ITheme | string, render: boolean = true) {\n if (this._isReleased) {\n return;\n }\n this.theme(theme);\n // trigger encode for all marks\n this.grammars.getAllMarks().forEach(mark => {\n mark.commit();\n });\n\n if (render) {\n await this.evaluate();\n\n if (this._isReleased) {\n return;\n }\n // FIXME: trigger render\n this.renderer.render(true);\n } else {\n await this._dataflow.evaluate();\n }\n\n return this;\n }\n\n // --- Global Configure ---\n\n background(value?: IColor) {\n if (arguments.length) {\n this._background = value;\n this.renderer.background(value);\n return value;\n }\n return this._background;\n }\n\n width(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_WIDTH);\n if (arguments.length) {\n this._options.width = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n height(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_HEIGHT);\n if (arguments.length) {\n this._options.height = value;\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as number;\n }\n\n viewWidth(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_VIEW_WIDTH);\n if (arguments.length) {\n // view width depends on canvas width\n const padding = this.padding();\n this.width(value + padding.left + padding.right);\n return value;\n }\n return signal.output() as number;\n }\n\n viewHeight(value?: number) {\n const signal = this.getSignalById<number>(SIGNAL_VIEW_HEIGHT);\n if (arguments.length) {\n // view height depends on canvas height\n const padding = this.padding();\n this.height(value + padding.top + padding.bottom);\n return value;\n }\n return signal.output() as number;\n }\n\n padding(value?: number | { top?: number; left?: number; right?: number; bottom?: number }) {\n const signal = this.getSignalById<{ top: number; left: number; right: number; bottom: number }>(SIGNAL_PADDING);\n if (arguments.length) {\n const padding = normalizePadding(value);\n this.updateSignal(signal, padding);\n return padding;\n }\n return normalizePadding(signal.output());\n }\n\n autoFit(value?: boolean) {\n const signal = this.getSignalById<boolean>(SIGNAL_AUTOFIT);\n if (arguments.length) {\n this.updateSignal(signal, value);\n return value;\n }\n return signal.output() as boolean;\n }\n\n getViewBox() {\n const signal = this.getSignalById<IBounds>(SIGNAL_VIEW_BOX);\n\n return signal?.output() as IBounds;\n }\n\n // --- Layout ---\n\n updateLayoutTag() {\n this._layoutState = LayoutState.before;\n return this;\n }\n\n getLayoutState() {\n return this._layoutState;\n }\n\n private buildLayoutTree() {\n const markMap: Record<number, boolean> = {};\n const rootMarks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n markMap[mark.id()] = true;\n\n if (mark.group) {\n if (!markMap[mark.group.id()]) {\n rootMarks.push(mark);\n }\n } else {\n rootMarks.push(mark);\n }\n\n if (mark.markType === GrammarMarkType.group) {\n (mark as IGroupMark).updateLayoutChildren();\n }\n },\n (mark: IMark) => mark.needLayout()\n );\n\n this._layoutMarks = rootMarks;\n }\n\n private doLayout() {\n const doLayout = this._options.doLayout || defaultDoLayout;\n if (doLayout && this._layoutMarks?.length) {\n this.emit(HOOK_EVENT.BEFORE_DO_LAYOUT);\n doLayout(this._layoutMarks, this._options, this);\n this.emit(HOOK_EVENT.AFTER_DO_LAYOUT);\n }\n }\n\n private handleLayoutEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_LAYOUT_END);\n this._layoutMarks.forEach(layoutMark => {\n traverseMarkTree(\n layoutMark,\n 'layoutChildren',\n (mark: IMark) => {\n mark.handleLayoutEnd();\n },\n // 顶层节点,不需要重新执行了\n (mark: IMark) => mark !== layoutMark\n );\n });\n this.emit(HOOK_EVENT.AFTER_MARK_LAYOUT_END);\n }\n\n private handleRenderEnd() {\n this.emit(HOOK_EVENT.BEFORE_MARK_RENDER_END);\n traverseMarkTree(this.rootMark, 'children', (mark: IMark) => {\n mark.handleRenderEnd();\n });\n this.emit(HOOK_EVENT.AFTER_MARK_RENDER_END);\n }\n\n // --- Dataflow ---\n\n commit(grammar: IGrammarBase) {\n this._dataflow.commit(grammar);\n return this;\n }\n\n run(runningConfig?: IRunningConfig) {\n this.evaluate(runningConfig);\n\n return this;\n }\n\n runSync(runningConfig?: IRunningConfig) {\n this.evaluateSync(runningConfig);\n\n return this;\n }\n\n isRunning() {\n return this._running;\n }\n\n async runAsync(runningConfig?: IRunningConfig) {\n if (this._isReleased) {\n return;\n }\n // await previously queued functions\n while (this._running) {\n await this._running;\n if (this._isReleased) {\n break;\n }\n }\n\n // run dataflow, manage running promise\n const clear = () => {\n this._running = null;\n };\n\n (this._running = this.evaluate(runningConfig)).then(clear, clear);\n\n return this._running;\n }\n\n async runNextTick(runningConfig?: IRunningConfig) {\n // delay the evaluate progress to next tick\n if (!this._currentDataflow) {\n this._currentDataflow = Promise.resolve().then(() => {\n return this.runAsync(runningConfig)\n .then(() => {\n this._currentDataflow = null;\n })\n .catch((e: any) => {\n this._currentDataflow = null;\n this.logger.error(e);\n });\n });\n }\n await this._currentDataflow;\n\n return this;\n }\n\n private doRender(immediately: boolean) {\n this.emit(HOOK_EVENT.BEFORE_DO_RENDER);\n // render as needed\n if (this.renderer) {\n if (!this._progressiveMarks) {\n this.animate.animate();\n }\n // 绘图 =>\n this.renderer.render(immediately);\n this.handleRenderEnd();\n }\n this.emit(HOOK_EVENT.AFTER_DO_RENDER);\n }\n\n private async evaluate(runningConfig?: IRunningConfig) {\n if (this._isReleased) {\n return;\n }\n const normalizedRunningConfig = normalizeRunningConfig(runningConfig);\n\n const grammarWillDetach = this._cachedGrammars.size() > 0;\n\n if (grammarWillDetach) {\n this.reuseCachedGrammars(normalizedRunningConfig);\n this.detachCachedGrammar();\n }\n // For most of time, width & height signal won't be modified duration dataflow,\n // so resizing before generating vRender graphic items should be faster.\n const hasResize = this._resizeRenderer();\n const hasUpdate = this._dataflow.hasCommitted();\n\n // if no grammar is update and layout is unnecessary, end evaluating\n if (!grammarWillDetach && !hasUpdate && !this._layoutState && !hasResize) {\n return this;\n }\n\n this.clearProgressive();\n // stop auto render of vrender to avoid the case that vrender auto render before the asynchronous task is done\n this.renderer?.preventRender(true);\n\n // evaluate dataflow\n await this._dataflow.evaluate();\n\n if (this._isReleased) {\n return;\n }\n\n if (this._needBuildLayoutTree) {\n this.buildLayoutTree();\n this._needBuildLayoutTree = false;\n }\n\n if (this._layoutState) {\n this._layoutState = LayoutState.layouting;\n this.doLayout();\n\n if (this._dataflow.hasCommitted()) {\n this._layoutState = LayoutState.reevaluate;\n await this._dataflow.evaluate();\n\n if (this._isReleased) {\n return;\n }\n }\n\n this._layoutState = LayoutState.after;\n if (this._layoutMarks?.length) {\n this.handleLayoutEnd();\n }\n }\n // enable auto render of vrender after the asynchronous task is done\n this.renderer?.preventRender(false);\n this._layoutState = null;\n\n this.findProgressiveMarks();\n\n // resize again if width/height signal is updated duration dataflow\n this._resizeRenderer();\n this.doRender(false);\n\n this._willMorphMarks?.forEach(morphMarks => {\n this._morph.morph(morphMarks.prev, morphMarks.next, normalizedRunningConfig);\n });\n this._willMorphMarks = null;\n\n this.releaseCachedGrammars(normalizedRunningConfig);\n\n this.doPreProgressive();\n\n return this;\n }\n\n private evaluateSync(runningConfig?: IRunningConfig) {\n const normalizedRunningConfig = normalizeRunningConfig(runningConfig);\n\n const grammarWillDetach = this._cachedGrammars.size() > 0;\n\n if (grammarWillDetach) {\n this.reuseCachedGrammars(normalizedRunningConfig);\n this.detachCachedGrammar();\n }\n\n const hasResize = this._resizeRenderer();\n const hasUpdate = this._dataflow.hasCommitted();\n\n if (!grammarWillDetach && !hasUpdate && !this._layoutState && !hasResize) {\n return this;\n }\n\n this.clearProgressive();\n // evaluate dataflow\n this._dataflow.evaluateSync();\n\n if (this._needBuildLayoutTree) {\n this.buildLayoutTree();\n this._needBuildLayoutTree = false;\n }\n\n if (this._layoutState) {\n this._layoutState = LayoutState.layouting;\n this.doLayout();\n\n if (this._dataflow.hasCommitted()) {\n this._layoutState = LayoutState.reevaluate;\n this._dataflow.evaluateSync();\n }\n\n this._layoutState = LayoutState.after;\n if (this._layoutMarks?.length) {\n this.handleLayoutEnd();\n }\n }\n this._layoutState = null;\n\n this.findProgressiveMarks();\n\n this._resizeRenderer();\n this.doRender(true);\n\n this._willMorphMarks?.forEach(morphMarks => {\n this._morph.morph(morphMarks.prev, morphMarks.next, normalizedRunningConfig);\n });\n this._willMorphMarks = null;\n\n this.releaseCachedGrammars(normalizedRunningConfig);\n\n this.doPreProgressive();\n\n return this;\n }\n\n private reuseCachedGrammars(runningConfig: IRunningConfig) {\n if (!this._willMorphMarks) {\n this._willMorphMarks = [];\n }\n\n if (runningConfig.reuse) {\n const reuseDiffUpdate = (diff: { prev: IGrammarBase; next: IGrammarBase }) => {\n diff.next.reuse(diff.prev);\n diff.prev.detachAll();\n diff.prev.clear();\n this._cachedGrammars.unrecord(diff.prev);\n };\n\n const diffedSignal = this._morph.diffGrammar(\n this._cachedGrammars.getAllSignals(),\n this.grammars.getAllSignals().filter(signal => !BuiltInSignalID.includes(signal.id()))\n );\n diffedSignal.update.forEach(reuseDiffUpdate);\n\n const diffedData = this._morph.diffGrammar(this._cachedGrammars.getAllData(), this.grammars.getAllData());\n diffedData.update.forEach(reuseDiffUpdate);\n\n const diffedScale = this._morph.diffGrammar(this._cachedGrammars.getAllScales(), this.grammars.getAllScales());\n diffedScale.update.forEach(reuseDiffUpdate);\n\n const diffedCoordinate = this._morph.diffGrammar(\n this._cachedGrammars.getAllCoordinates(),\n this.grammars.getAllCoordinates()\n );\n diffedCoordinate.update.forEach(reuseDiffUpdate);\n\n // TODO: reuse custom\n }\n\n const diffedMark = this._morph.diffMark(\n this._cachedGrammars.getAllMarks(),\n this.grammars.getAllMarks().filter(mark => mark.id() !== 'root'),\n runningConfig\n );\n diffedMark.update.forEach(diff => {\n const matched =\n diff.prev.length === 1 && diff.next.length === 1 && diff.prev[0].markType === diff.next[0].markType;\n const enableMarkMorphConfig =\n diff.prev.every(mark => mark.getMorphConfig().morph) && diff.next.every(mark => mark.getMorphConfig().morph);\n if (matched && runningConfig.reuse) {\n diff.next[0].reuse(diff.prev[0]);\n diff.prev[0].detachAll();\n diff.prev[0].clear();\n this._cachedGrammars.unrecord(diff.prev[0]);\n } else if ((runningConfig.morph && enableMarkMorphConfig) || runningConfig.morphAll) {\n this._willMorphMarks.push({ prev: diff.prev, next: diff.next });\n }\n });\n }\n\n private detachCachedGrammar() {\n this._cachedGrammars.traverse(grammar => {\n grammar.detachAll();\n if (grammar.grammarType === 'mark') {\n const mark = grammar as IMark;\n mark.group?.removeChild?.(mark);\n }\n });\n }\n\n private releaseCachedGrammars(runningConfig?: IRunningConfig) {\n // directly release all grammars except from marks\n this._cachedGrammars.traverse(grammar => {\n if (grammar.grammarType !== 'mark') {\n grammar.release();\n }\n });\n const markNodes = this._cachedGrammars.getAllMarkNodes();\n markNodes.forEach(node => {\n node.mark.animate.stop();\n if (runningConfig.enableExitAnimation) {\n this.animate.animateAddition(node.mark);\n }\n });\n const releaseUp = (node: IMarkTreeNode) => {\n // do nothing when mark is already released or is still animating\n if (!node.mark.view || node.mark.animate.getAnimatorCount() !== 0) {\n return;\n }\n // release when current node is leaf node\n if (!node.children || node.children.length === 0) {\n node.mark.release();\n // detach current node from tree and traverse above\n const parent = node.parent;\n if (parent) {\n node.parent.children = node.parent.children.filter(n => n !== node);\n node.parent = null;\n releaseUp(parent);\n }\n }\n };\n markNodes.forEach(node => {\n const mark = node.mark;\n if (mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n } else {\n mark.addEventListener('animationEnd', () => {\n if (mark.animate.getAnimatorCount() === 0) {\n releaseUp(node);\n }\n });\n }\n });\n this._cachedGrammars.clear();\n }\n\n runAfter(callback: (view: IView) => void) {\n this._dataflow.runAfter(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n runBefore(callback: (view: IView) => void) {\n this._dataflow.runBefore(() => {\n callback.call(null, this);\n });\n return this;\n }\n\n /**\n * 目前仅支持 node 环境,用于 node 端的图片导出\n * @returns\n */\n getImageBuffer() {\n if (this._options.mode !== 'node') {\n this.logger.error(new TypeError('getImageBuffer() now only support node environment.'));\n return;\n }\n const stage = this.renderer?.stage?.();\n if (stage) {\n stage.render();\n const buffer = stage.window.getImageBuffer();\n return buffer;\n }\n this.logger.error(new ReferenceError(`render is not defined`));\n\n return null;\n }\n\n // --- Mark Tree ---\n\n traverseMarkTree(apply: (mark: IMark) => any, filter?: (mark: IMark) => boolean, leafFirst?: boolean) {\n traverseMarkTree(this.rootMark, 'children', apply, filter, leafFirst);\n return this;\n }\n\n // --- Resize ---\n\n private _bindResizeEvent() {\n if (this.autoFit()) {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n if (container) {\n const ResizeObserverWindow: any = window.ResizeObserver;\n this._observer = new ResizeObserverWindow(this._onResize);\n this._observer?.observe(container);\n }\n window.addEventListener('resize', this._onResize);\n }\n }\n\n private _unBindResizeEvent() {\n if (this.autoFit()) {\n window.removeEventListener('resize', this._onResize);\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n }\n }\n }\n\n private _getContainerSize() {\n const container = this.renderer?.stage?.()?.window?.getContainer?.();\n\n if (container) {\n const { width: containerWidth, height: containerHeight } = getContainerSize(container!);\n const width = this._spec?.width ?? this._options.width ?? containerWidth;\n const height = this._spec?.height ?? this._options.height ?? containerHeight;\n\n return { width, height };\n }\n\n return null;\n }\n\n private _onResize = debounce((...args: any[]) => {\n const size = this._getContainerSize();\n\n if (size) {\n this.resize(size.width, size.height);\n }\n }, 100);\n\n async resize(width: number, height: number, render: boolean = true) {\n let needDataflow = false;\n\n // width value changed: update signal, skip resize op\n if (width !== this.width()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_WIDTH, width);\n }\n\n // height value changed: update signal, skip resize op\n if (height !== this.height()) {\n needDataflow = true;\n this.updateSignal(SIGNAL_HEIGHT, height);\n }\n\n // run dataflow on width/height signal change\n if (needDataflow) {\n if (render) {\n await this.evaluate();\n } else {\n await this._dataflow.evaluate();\n }\n }\n\n return this;\n }\n\n private _resizeRenderer() {\n const width = this.width();\n const height = this.height();\n\n if (this.renderer.shouldResize(width, height)) {\n this.renderer.resize(width, height);\n this.emit('resize', {}, { width, height });\n return true;\n }\n\n return false;\n }\n\n // --- Event ---\n\n private bindEvents(eventSpec: BaseEventSpec) {\n if (this._eventConfig.disable) {\n return;\n }\n const { type: evtType, filter, callback, throttle, debounce, consume, target, dependency } = eventSpec;\n const eventSelector = parseEventSelector(evtType);\n\n if (!eventSelector) {\n return;\n }\n const { source, type } = eventSelector;\n\n const markFilter = generateFilterByMark(eventSelector);\n const targetSignals =\n Array.isArray(target) && target.length\n ? target.map(entry => {\n return {\n signal: this.getSignalById(entry.target),\n callback: entry.callback\n };\n })\n : [\n {\n signal: isString(target) ? this.getSignalById(target) : null,\n callback\n }\n ];\n const validateSignals = targetSignals.filter(entry => entry.signal || entry.callback);\n const refs = parseReference(dependency, this);\n\n const send = parseHandler(\n (evt?: any, element?: IElement) => {\n const needPreventDefault =\n (source === EVENT_SOURCE_VIEW && prevent(this._eventConfig, type)) ||\n (consume && (evt.cancelable === undefined || evt.cancelable));\n\n if (source === EVENT_SOURCE_WINDOW) {\n evt = getExtendedEvents(this, evt, element, type, EVENT_SOURCE_WINDOW);\n }\n\n let hasCommitted = false;\n\n if ((!filter || filter(evt)) && (!markFilter || markFilter(element)) && validateSignals.length) {\n const params = refs.reduce((params, ref) => {\n params[ref.id()] = ref.output();\n return params;\n }, {});\n validateSignals.forEach(entry => {\n if (entry.callback && entry.signal) {\n const changed = entry.signal.set(entry.callback(evt, params));\n\n if (changed) {\n this.commit(entry.signal);\n hasCommitted = true;\n }\n } else if (entry.callback) {\n entry.callback(evt, params);\n } else {\n this.commit(entry.signal);\n hasCommitted = true;\n }\n });\n }\n\n if (needPreventDefault) {\n evt.preventDefault();\n }\n\n if (consume) {\n evt.stopPropagation();\n }\n\n if (hasCommitted) {\n this.runAsync();\n }\n },\n { throttle, debounce }\n );\n\n if (source === EVENT_SOURCE_VIEW) {\n if (permit(this._eventConfig, EVENT_SOURCE_VIEW, type)) {\n // send traps errors, so use {trap: false} option\n this.addEventListener(type, send, NO_TRAP);\n\n return () => {\n this.removeEventListener(type, send);\n };\n }\n } else if (source === EVENT_SOURCE_WINDOW) {\n vglobal.addEventListener(type, send);\n this._eventListeners.push({\n type: type,\n source: vglobal,\n handler: send\n });\n\n return () => {\n vglobal.removeEventListener(type, send);\n\n const index = this._eventListeners.findIndex((entry: any) => {\n return entry.type === type && entry.source === vglobal && entry.handler === send;\n });\n\n if (index >= 0) {\n this._eventListeners.splice(index, 1);\n }\n };\n }\n }\n\n event(eventSpec: EventSpec) {\n if ('between' in eventSpec) {\n const [starEvent, endEvent] = eventSpec.between;\n // FIXME between需要生成唯一ID\n const id = `${starEvent.type}-${eventSpec.type}-${endEvent.type}`;\n\n let unbindEndEvent: any;\n\n this.bindEvents(\n Object.assign({}, starEvent, {\n callback: () => {\n if (!this._eventCache) {\n this._eventCache = {};\n }\n // 中间的事件绑定\n if (!this._eventCache[id]) {\n const unbindEvent = this.bindEvents(eventSpec);\n this._eventCache[id] = unbindEvent;\n }\n if (!unbindEndEvent) {\n // 结束的事件绑定\n unbindEndEvent = this.bindEvents(\n Object.assign({}, endEvent, {\n callback: () => {\n if (this._eventCache[id]) {\n this._eventCache[id]();\n this._eventCache[id] = null;\n }\n }\n })\n );\n }\n }\n })\n );\n } else if ('merge' in eventSpec) {\n eventSpec.merge.forEach(entry => {\n const singleEvent: Partial<BaseEventSpec> = Object.assign({}, eventSpec);\n\n if (isString(entry)) {\n singleEvent.type = entry;\n } else if (isObject(entry)) {\n Object.assign(singleEvent, entry);\n }\n singleEvent.debounce = 50;\n this.bindEvents(singleEvent as BaseEventSpec);\n });\n } else {\n this.bindEvents(eventSpec);\n }\n }\n\n interaction(type: string, spec: Partial<InteractionSpec>) {\n const interaction = Factory.createInteraction(type, this, spec);\n\n if (interaction) {\n interaction.bind();\n\n if (!this._boundInteractions) {\n this._boundInteractions = [];\n }\n\n this._boundInteractions.push(interaction);\n }\n return interaction;\n }\n\n removeInteraction(type: string | IInteraction) {\n if (this._boundInteractions) {\n const instances = this._boundInteractions.filter(\n interaction => (isString(type) && interaction.type === type) || interaction === type\n );\n\n if (instances.length) {\n instances.forEach(instance => {\n instance.unbind();\n });\n }\n }\n\n return this;\n }\n\n removeAllInteractions() {\n if (this._boundInteractions) {\n this._boundInteractions.forEach(instance => {\n instance.unbind();\n });\n\n this._boundInteractions = null;\n }\n\n return this;\n }\n\n private initEvent() {\n // 基于 vRender 事件系统提供的委托机制\n const stage = this.renderer.stage();\n stage && stage.on('*', this.delegateEvent);\n }\n\n private delegateEvent = (event: any, type: string) => {\n const activeElement = event.target?.[BridgeElementKey];\n const extendedEvt = getExtendedEvents(this, event, activeElement, type, EVENT_SOURCE_VIEW);\n this.emit(type, extendedEvt, activeElement);\n };\n\n addEventListener(type: string, handler: BaseEventHandler, options?: any) {\n let callback = handler;\n if (!(options && options.trap === false)) {\n callback = handler;\n (callback as any).raw = handler;\n }\n if (options && options.target) {\n (callback as any).target = options.target;\n }\n this.on(type, callback);\n return this;\n }\n\n removeEventListener(type: string, handler?: BaseEventHandler) {\n if (handler) {\n this.off(type, handler);\n } else {\n this.off(type);\n }\n return this;\n }\n\n // --- Initialization ---\n\n private initializeRenderer() {\n const width = this._options.width;\n const height = this._options.height;\n\n this.renderer = new CanvasRenderer(this);\n this.renderer.initialize(width, height, this._options, this._eventConfig).background(this._background);\n }\n\n private initialize() {\n this.grammars = new RecordedGrammars(\n grammar => grammar.id(),\n (key, grammar) => this.logger.warn(`Grammar id '${key}' has been occupied`, grammar)\n );\n this._cachedGrammars = new RecordedTreeGrammars(grammar => grammar.id());\n\n if (this._options.logger) {\n Logger.setInstance(this._options.logger);\n }\n this.logger = Logger.getInstance(this._options.logLevel ?? 0);\n\n this._dataflow = new Dataflow();\n\n this.animate = new ViewAnimate(this);\n\n this._morph = new Morph();\n\n // 执行钩子\n if (this._options.hooks) {\n Object.keys(this._options.hooks).forEach(key => {\n this.on(key, this._options.hooks[key]);\n });\n // 生命周期事件(包含原性能测试钩子)\n this.hooks = this._options.hooks;\n }\n this.container = null;\n\n // initialize renderer, handler and event management\n this.renderer = null;\n this._eventListeners = [];\n\n // initialize event configuration\n this._eventConfig = initializeEventConfig(this._options.eventConfig);\n\n // set default theme\n this._theme = this._options.disableTheme ? null : ThemeManager.getDefaultTheme();\n\n this.parseBuiltIn();\n\n // initialize DOM container(s) and renderer\n configureEnvironment(this._options);\n this.initializeRenderer();\n\n if (!this._eventConfig.disable) {\n this.initEvent();\n }\n this._bindResizeEvent();\n\n this._currentDataflow = null;\n // update layout tree after initialization\n this._needBuildLayoutTree = true;\n this._layoutState = LayoutState.before;\n\n // apply theme value after initialization\n this.theme(this._theme);\n }\n\n // --- Others ---\n\n pauseProgressive() {\n return false;\n }\n resumeProgressive() {\n return false;\n }\n restartProgressive() {\n return false;\n }\n\n private findProgressiveMarks() {\n const marks: IMark[] = [];\n\n this.traverseMarkTree(\n (mark: IMark) => {\n marks.push(mark);\n },\n (mark: IMark) => mark.markType !== GrammarMarkType.group && mark.isProgressive()\n );\n\n if (!marks.length) {\n this._progressiveMarks = null;\n return null;\n }\n\n this._progressiveMarks = marks;\n\n if (this.renderer) {\n this.renderer.combineIncrementalLayers();\n }\n\n return marks;\n }\n\n private doPreProgressive() {\n if (this._progressiveMarks && this._progressiveMarks.some(mark => mark.isDoingProgressive())) {\n const raf = vglobal.getRequestAnimationFrame();\n this._progressiveRafId = raf(this.handleProgressiveFrame);\n }\n }\n\n /** 监听frame事件,更新增量元素的mark */\n private handleProgressiveFrame = () => {\n if (this._progressiveMarks.length) {\n this._progressiveMarks.forEach(mark => {\n if (mark.isDoingProgressive()) {\n mark.evaluateProgressive();\n }\n });\n }\n\n this.doPreProgressive();\n };\n\n /** 清除 */\n private clearProgressive() {\n if (this._progressiveRafId) {\n const cancelRaf = vglobal.getCancelAnimationFrame();\n cancelRaf(this._progressiveRafId);\n }\n\n if (this._progressiveMarks && this._progressiveMarks.length) {\n this._progressiveMarks.forEach(entry => {\n entry.clearProgressive();\n });\n\n this._progressiveMarks = null;\n }\n }\n\n // --- release ---\n release() {\n this._isReleased = true;\n this._unBindResizeEvent();\n this.clearProgressive();\n Factory.unregisterRuntimeTransforms();\n\n this.animate.stop();\n\n this.grammars.release();\n this._cachedGrammars.release();\n\n this._dataflow.release();\n this._dataflow = null;\n\n this.renderer?.release?.();\n this.renderer = null;\n this._boundInteractions = null;\n\n // 卸载事件\n this.removeAllListeners();\n this._eventListeners?.forEach((listener: any) => {\n listener.source.removeEventListener(listener.type, listener.handler);\n });\n this._eventListeners = null;\n }\n}\n"]}
@@ -35,7 +35,7 @@ const vutils_1 = require("@visactor/vutils"), grammar_heap_1 = require("../util/
35
35
  class Dataflow {
36
36
  constructor() {
37
37
  this.grammars = [], this.logger = vutils_1.Logger.getInstance(), this._curRank = 0,
38
- this._committed = new unique_list_1.UniqueList((grammar => grammar.uid)), this._heap = new grammar_heap_1.Heap(((a, b) => a.qrank - b.qrank)),
38
+ this._committed = new unique_list_1.UniqueList((grammar => grammar.uid)), this._heap = new grammar_heap_1.Heap(((a, b) => (null == a ? void 0 : a.qrank) - (null == b ? void 0 : b.qrank))),
39
39
  this._beforeRunner = null, this._afterRunner = null, this._isRunning = !1, this._updateCounter = 0,
40
40
  this._finishFirstRender = !1;
41
41
  }
@@ -56,7 +56,7 @@ class Dataflow {
56
56
  grammar && (this._committed.remove(grammar), this._heap.remove(grammar), this.grammars = this.grammars.filter((storedGrammar => storedGrammar !== grammar)));
57
57
  }
58
58
  _setRankOfGrammar(grammar) {
59
- grammar.rank = ++this._curRank;
59
+ grammar && (grammar.rank = ++this._curRank);
60
60
  }
61
61
  _reRank(grammar) {
62
62
  const queue = [ grammar ];
@@ -70,7 +70,7 @@ class Dataflow {
70
70
  }
71
71
  }
72
72
  _enqueue(grammar) {
73
- grammar.qrank = grammar.rank, this._heap.push(grammar);
73
+ grammar && (grammar.qrank = grammar.rank, this._heap.push(grammar));
74
74
  }
75
75
  _logGrammarRunInfo(grammar) {
76
76
  if (this.logger.canLogError()) {
@@ -93,7 +93,7 @@ class Dataflow {
93
93
  }
94
94
  _beforeEvaluate() {
95
95
  this.grammars.forEach((grammar => {
96
- grammar.targets.some((target => target.rank < grammar.rank)) && this._reRank(grammar);
96
+ grammar.targets.some((target => (null == target ? void 0 : target.rank) < (null == grammar ? void 0 : grammar.rank))) && this._reRank(grammar);
97
97
  })), this._committed.forEach((grammar => this._enqueue(grammar))), this._committed = new unique_list_1.UniqueList((grammar => grammar.uid));
98
98
  }
99
99
  _enqueueTargets(grammar) {
@@ -110,7 +110,7 @@ class Dataflow {
110
110
  this._beforeEvaluate();
111
111
  try {
112
112
  for (;this._heap.size() > 0 && !this._isReleased; ) if (grammar = this._heap.pop(),
113
- grammar.rank === grammar.qrank) {
113
+ grammar) if (grammar.rank === grammar.qrank) {
114
114
  if (next = grammar.run(), next && next.then && (next = yield next), !this._isRunning) return !1;
115
115
  this._logGrammarRunInfo(grammar), this._enqueueTargets(grammar), count += 1;
116
116
  } else this._enqueue(grammar);
@@ -128,8 +128,8 @@ class Dataflow {
128
128
  this._isRunning = !0, this._updateCounter += 1;
129
129
  let grammar, dt, count = 0;
130
130
  for (this.logger.canLogInfo() && (dt = Date.now(), this.logger.debug(`-- START PROPAGATION (${this._updateCounter}) -----`)),
131
- this._beforeEvaluate(); this._heap.size() > 0; ) grammar = this._heap.pop(), grammar.rank === grammar.qrank ? (grammar.runSync(),
132
- this._logGrammarRunInfo(grammar), this._enqueueTargets(grammar), count += 1) : this._enqueue(grammar);
131
+ this._beforeEvaluate(); this._heap.size() > 0; ) grammar = this._heap.pop(), grammar && (grammar.rank === grammar.qrank ? (grammar.runSync(),
132
+ this._logGrammarRunInfo(grammar), this._enqueueTargets(grammar), count += 1) : this._enqueue(grammar));
133
133
  return this._isRunning = !1, this.logger.canLogInfo() && (dt = Date.now() - dt,
134
134
  this.logger.info(`> ${count} grammars updated; ${dt} ms`)), this._afterRunner && this._afterRunner(this),
135
135
  this._finishFirstRender = !0, !0;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/view/dataflow.ts"],"names":[],"mappings":"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","file":"dataflow.js","sourcesContent":["import type { ILogger } from '@visactor/vutils';\nimport type { IDataflow } from '../types/dataflow';\nimport { isNil, Logger } from '@visactor/vutils';\nimport { Heap } from '../util/grammar-heap';\nimport { UniqueList } from '../util/unique-list';\nimport type { IDataflowCallback, IGrammarBase } from '../types';\n\n/**\n * A dataflow to run all the grammar elements\n */\nexport default class Dataflow implements IDataflow {\n logger: ILogger;\n private grammars: IGrammarBase[] = [];\n /** 当前排序 */\n private _curRank: number;\n /** 发生了变更的元素 */\n private _committed?: UniqueList<IGrammarBase>;\n private _heap?: Heap;\n private _beforeRunner?: IDataflowCallback;\n private _afterRunner?: IDataflowCallback;\n /** 正在运行dataflow */\n private _isRunning?: boolean;\n private _updateCounter: number;\n /** 是否完成初次渲染 */\n private _finishFirstRender?: boolean;\n private _isReleased: boolean;\n\n constructor() {\n this.logger = Logger.getInstance();\n\n this._curRank = 0;\n\n this._committed = new UniqueList(grammar => grammar.uid);\n\n this._heap = new Heap((a, b) => a.qrank - b.qrank);\n this._beforeRunner = null;\n this._afterRunner = null;\n this._isRunning = false;\n this._updateCounter = 0;\n this._finishFirstRender = false;\n }\n\n async asyncCallback(callback: (context: IDataflow) => any) {\n try {\n await callback(this);\n } catch (err) {\n this.logger.error(err);\n }\n }\n\n add(grammar: IGrammarBase) {\n if (!grammar) {\n return;\n }\n this._setRankOfGrammar(grammar);\n this.commit(grammar);\n if (!this.grammars.includes(grammar)) {\n this.grammars.push(grammar);\n\n return true;\n }\n\n return false;\n }\n\n remove(grammar: IGrammarBase) {\n if (grammar) {\n this._committed.remove(grammar);\n this._heap.remove(grammar);\n this.grammars = this.grammars.filter(storedGrammar => storedGrammar !== grammar);\n }\n }\n\n private _setRankOfGrammar(grammar?: IGrammarBase) {\n grammar.rank = ++this._curRank;\n }\n\n private _reRank(grammar?: IGrammarBase) {\n const queue = [grammar];\n\n while (queue.length) {\n const cur = queue.pop();\n this._setRankOfGrammar(cur);\n const list = cur.targets;\n\n if (list) {\n list.forEach((entry: IGrammarBase) => {\n queue.push(entry);\n if (entry === grammar) {\n this.logger.error('Cycle detected in dataflow graph.');\n }\n });\n }\n }\n }\n\n private _enqueue(grammar: IGrammarBase) {\n (grammar as any).qrank = grammar.rank;\n // push and reRank in the heap\n this._heap.push(grammar);\n }\n\n private _logGrammarRunInfo(grammar: IGrammarBase) {\n if (this.logger.canLogError()) {\n const debugInfos = [\n { key: 'id', value: grammar.id() },\n { key: 'name', value: grammar.name() }\n ];\n const debugStr = debugInfos.reduce((str, entry, index) => {\n if (!isNil(entry.value)) {\n return `${str}${index ? ' , ' : ''}${entry.key}: ${entry.value}`;\n }\n\n return str;\n }, '');\n\n this.logger.debug('Run Operator: ', grammar, debugStr);\n }\n }\n\n hasCommitted() {\n return !!this._committed.length;\n }\n\n // OPERATOR UPDATES\n commit(grammar: IGrammarBase) {\n if (this._isRunning) {\n // this may lead to a problem, the same op may be added to the queue multiple times\n // if in midst of propagation, add to priority queue\n this._enqueue(grammar);\n } else {\n // otherwise, queue for next propagation\n this._committed.add(grammar);\n }\n\n return this;\n }\n\n private _beforeEvaluate() {\n // reRank grammar element which has higher rank than its targets\n this.grammars.forEach(grammar => {\n if (grammar.targets.some(target => target.rank < grammar.rank)) {\n this._reRank(grammar);\n }\n });\n // initialize priority queue, reset committed grammars\n this._committed.forEach(grammar => this._enqueue(grammar));\n this._committed = new UniqueList(grammar => grammar.uid);\n }\n\n private _enqueueTargets(grammar: IGrammarBase) {\n if (grammar.targets && grammar.targets.length && this._finishFirstRender) {\n grammar.targets.forEach((target: IGrammarBase) => this._enqueue(target));\n }\n }\n\n async evaluate() {\n if (this._isReleased) {\n return;\n }\n // invoke prerun function, if provided\n if (this._beforeRunner) {\n await this.asyncCallback(this._beforeRunner);\n }\n\n // exit early if there are no updates\n if (!this._committed.length) {\n this.logger.info('Dataflow invoked, but nothing to do.');\n return false;\n }\n\n this._isRunning = true;\n this._updateCounter += 1;\n let count = 0;\n let grammar;\n let next;\n let dt;\n let error;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now();\n this.logger.debug(`-- START PROPAGATION (${this._updateCounter}) -----`);\n }\n\n this._beforeEvaluate();\n\n try {\n while (this._heap.size() > 0) {\n if (this._isReleased) {\n break;\n }\n // dequeue grammar with highest priority\n grammar = this._heap.pop();\n\n // re-queue if rank changed\n if (grammar.rank !== grammar.qrank) {\n this._enqueue(grammar);\n continue;\n }\n\n next = grammar.run();\n\n // await if grammar returned a promise\n if (next && next.then) {\n next = await next;\n }\n\n // finish evaluation if dataflow is stopped during asynchronous process\n if (!this._isRunning) {\n return false;\n }\n\n this._logGrammarRunInfo(grammar);\n this._enqueueTargets(grammar);\n count += 1;\n }\n } catch (err) {\n this._heap.clear();\n error = err;\n }\n if (this._isReleased) {\n return false;\n }\n\n this._isRunning = false;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now() - dt;\n this.logger.info(`> ${count} grammars; ${dt} ms`);\n }\n\n if (error) {\n this.logger.error(error);\n } else if (this._afterRunner) {\n // invoke callbacks queued via runAfter\n await this.asyncCallback(this._afterRunner);\n }\n\n this._finishFirstRender = true;\n\n return true;\n }\n\n evaluateSync() {\n // invoke prerun function, if provided\n if (this._beforeRunner) {\n this._beforeRunner(this);\n }\n\n // exit early if there are no updates\n if (!this._committed.length) {\n this.logger.info('Dataflow invoked, but nothing to do.');\n return false;\n }\n\n this._isRunning = true;\n this._updateCounter += 1;\n let count = 0;\n let grammar;\n let dt;\n let error;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now();\n this.logger.debug(`-- START PROPAGATION (${this._updateCounter}) -----`);\n }\n\n this._beforeEvaluate();\n\n while (this._heap.size() > 0) {\n // dequeue grammar with highest priority\n grammar = this._heap.pop();\n\n // re-queue if rank changed\n if (grammar.rank !== grammar.qrank) {\n this._enqueue(grammar);\n continue;\n }\n\n grammar.runSync();\n\n this._logGrammarRunInfo(grammar);\n this._enqueueTargets(grammar);\n count += 1;\n }\n\n this._isRunning = false;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now() - dt;\n this.logger.info(`> ${count} grammars updated; ${dt} ms`);\n }\n\n if (error) {\n this.logger.error(error);\n } else if (this._afterRunner) {\n this._afterRunner(this);\n }\n\n this._finishFirstRender = true;\n\n return true;\n }\n\n private stop() {\n if (!this._isRunning) {\n return;\n }\n this._isRunning = false;\n }\n\n runBefore(callback?: IDataflowCallback) {\n this._beforeRunner = callback;\n }\n\n runAfter(callback?: IDataflowCallback) {\n this._afterRunner = callback;\n }\n\n release() {\n // stop asynchronous evaluation\n this.stop();\n this._isReleased = true;\n\n if (this._heap) {\n this._heap.clear();\n this._heap = null;\n }\n\n this.logger = null;\n this._committed = null;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/view/dataflow.ts"],"names":[],"mappings":"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","file":"dataflow.js","sourcesContent":["import type { ILogger } from '@visactor/vutils';\nimport type { IDataflow } from '../types/dataflow';\nimport { isNil, Logger } from '@visactor/vutils';\nimport { Heap } from '../util/grammar-heap';\nimport { UniqueList } from '../util/unique-list';\nimport type { IDataflowCallback, IGrammarBase } from '../types';\n\n/**\n * A dataflow to run all the grammar elements\n */\nexport default class Dataflow implements IDataflow {\n logger: ILogger;\n private grammars: IGrammarBase[] = [];\n /** 当前排序 */\n private _curRank: number;\n /** 发生了变更的元素 */\n private _committed?: UniqueList<IGrammarBase>;\n private _heap?: Heap;\n private _beforeRunner?: IDataflowCallback;\n private _afterRunner?: IDataflowCallback;\n /** 正在运行dataflow */\n private _isRunning?: boolean;\n private _updateCounter: number;\n /** 是否完成初次渲染 */\n private _finishFirstRender?: boolean;\n private _isReleased: boolean;\n\n constructor() {\n this.logger = Logger.getInstance();\n\n this._curRank = 0;\n\n this._committed = new UniqueList(grammar => grammar.uid);\n\n this._heap = new Heap((a, b) => a?.qrank - b?.qrank);\n this._beforeRunner = null;\n this._afterRunner = null;\n this._isRunning = false;\n this._updateCounter = 0;\n this._finishFirstRender = false;\n }\n\n async asyncCallback(callback: (context: IDataflow) => any) {\n try {\n await callback(this);\n } catch (err) {\n this.logger.error(err);\n }\n }\n\n add(grammar: IGrammarBase) {\n if (!grammar) {\n return;\n }\n this._setRankOfGrammar(grammar);\n this.commit(grammar);\n if (!this.grammars.includes(grammar)) {\n this.grammars.push(grammar);\n\n return true;\n }\n\n return false;\n }\n\n remove(grammar: IGrammarBase) {\n if (grammar) {\n this._committed.remove(grammar);\n this._heap.remove(grammar);\n this.grammars = this.grammars.filter(storedGrammar => storedGrammar !== grammar);\n }\n }\n\n private _setRankOfGrammar(grammar?: IGrammarBase) {\n if (!grammar) {\n return;\n }\n grammar.rank = ++this._curRank;\n }\n\n private _reRank(grammar?: IGrammarBase) {\n const queue = [grammar];\n\n while (queue.length) {\n const cur = queue.pop();\n this._setRankOfGrammar(cur);\n const list = cur.targets;\n\n if (list) {\n list.forEach((entry: IGrammarBase) => {\n queue.push(entry);\n if (entry === grammar) {\n this.logger.error('Cycle detected in dataflow graph.');\n }\n });\n }\n }\n }\n\n private _enqueue(grammar: IGrammarBase) {\n if (!grammar) {\n return;\n }\n\n (grammar as any).qrank = grammar.rank;\n // push and reRank in the heap\n this._heap.push(grammar);\n }\n\n private _logGrammarRunInfo(grammar: IGrammarBase) {\n if (this.logger.canLogError()) {\n const debugInfos = [\n { key: 'id', value: grammar.id() },\n { key: 'name', value: grammar.name() }\n ];\n const debugStr = debugInfos.reduce((str, entry, index) => {\n if (!isNil(entry.value)) {\n return `${str}${index ? ' , ' : ''}${entry.key}: ${entry.value}`;\n }\n\n return str;\n }, '');\n\n this.logger.debug('Run Operator: ', grammar, debugStr);\n }\n }\n\n hasCommitted() {\n return !!this._committed.length;\n }\n\n // OPERATOR UPDATES\n commit(grammar: IGrammarBase) {\n if (this._isRunning) {\n // this may lead to a problem, the same op may be added to the queue multiple times\n // if in midst of propagation, add to priority queue\n this._enqueue(grammar);\n } else {\n // otherwise, queue for next propagation\n this._committed.add(grammar);\n }\n\n return this;\n }\n\n private _beforeEvaluate() {\n // reRank grammar element which has higher rank than its targets\n this.grammars.forEach(grammar => {\n if (grammar.targets.some(target => target?.rank < grammar?.rank)) {\n this._reRank(grammar);\n }\n });\n // initialize priority queue, reset committed grammars\n this._committed.forEach(grammar => this._enqueue(grammar));\n this._committed = new UniqueList(grammar => grammar.uid);\n }\n\n private _enqueueTargets(grammar: IGrammarBase) {\n if (grammar.targets && grammar.targets.length && this._finishFirstRender) {\n grammar.targets.forEach((target: IGrammarBase) => this._enqueue(target));\n }\n }\n\n async evaluate() {\n if (this._isReleased) {\n return;\n }\n // invoke prerun function, if provided\n if (this._beforeRunner) {\n await this.asyncCallback(this._beforeRunner);\n }\n\n // exit early if there are no updates\n if (!this._committed.length) {\n this.logger.info('Dataflow invoked, but nothing to do.');\n return false;\n }\n\n this._isRunning = true;\n this._updateCounter += 1;\n let count = 0;\n let grammar;\n let next;\n let dt;\n let error;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now();\n this.logger.debug(`-- START PROPAGATION (${this._updateCounter}) -----`);\n }\n\n this._beforeEvaluate();\n\n try {\n while (this._heap.size() > 0) {\n if (this._isReleased) {\n break;\n }\n // dequeue grammar with highest priority\n grammar = this._heap.pop();\n\n if (!grammar) {\n continue;\n }\n\n // re-queue if rank changed\n if (grammar.rank !== grammar.qrank) {\n this._enqueue(grammar);\n continue;\n }\n\n next = grammar.run();\n\n // await if grammar returned a promise\n if (next && next.then) {\n next = await next;\n }\n\n // finish evaluation if dataflow is stopped during asynchronous process\n if (!this._isRunning) {\n return false;\n }\n\n this._logGrammarRunInfo(grammar);\n this._enqueueTargets(grammar);\n count += 1;\n }\n } catch (err) {\n this._heap.clear();\n error = err;\n }\n if (this._isReleased) {\n return false;\n }\n\n this._isRunning = false;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now() - dt;\n this.logger.info(`> ${count} grammars; ${dt} ms`);\n }\n\n if (error) {\n this.logger.error(error);\n } else if (this._afterRunner) {\n // invoke callbacks queued via runAfter\n await this.asyncCallback(this._afterRunner);\n }\n\n this._finishFirstRender = true;\n\n return true;\n }\n\n evaluateSync() {\n // invoke prerun function, if provided\n if (this._beforeRunner) {\n this._beforeRunner(this);\n }\n\n // exit early if there are no updates\n if (!this._committed.length) {\n this.logger.info('Dataflow invoked, but nothing to do.');\n return false;\n }\n\n this._isRunning = true;\n this._updateCounter += 1;\n let count = 0;\n let grammar;\n let dt;\n let error;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now();\n this.logger.debug(`-- START PROPAGATION (${this._updateCounter}) -----`);\n }\n\n this._beforeEvaluate();\n\n while (this._heap.size() > 0) {\n // dequeue grammar with highest priority\n grammar = this._heap.pop();\n\n if (!grammar) {\n continue;\n }\n\n // re-queue if rank changed\n if (grammar.rank !== grammar.qrank) {\n this._enqueue(grammar);\n continue;\n }\n\n grammar.runSync();\n\n this._logGrammarRunInfo(grammar);\n this._enqueueTargets(grammar);\n count += 1;\n }\n\n this._isRunning = false;\n\n if (this.logger.canLogInfo()) {\n dt = Date.now() - dt;\n this.logger.info(`> ${count} grammars updated; ${dt} ms`);\n }\n\n if (error) {\n this.logger.error(error);\n } else if (this._afterRunner) {\n this._afterRunner(this);\n }\n\n this._finishFirstRender = true;\n\n return true;\n }\n\n private stop() {\n if (!this._isRunning) {\n return;\n }\n this._isRunning = false;\n }\n\n runBefore(callback?: IDataflowCallback) {\n this._beforeRunner = callback;\n }\n\n runAfter(callback?: IDataflowCallback) {\n this._afterRunner = callback;\n }\n\n release() {\n // stop asynchronous evaluation\n this.stop();\n this._isReleased = true;\n\n if (this._heap) {\n this._heap.clear();\n this._heap = null;\n }\n\n this.logger = null;\n this._committed = null;\n }\n}\n"]}
@@ -51,7 +51,9 @@ export class Animator {
51
51
  this.isAnimating = !1, this.runnings = null, invokeCallback && (null === (_a = this.callbackFunction) || void 0 === _a || _a.call(null));
52
52
  }
53
53
  animateElement(animationParameters, parameters) {
54
- const graphicAnimate = this.element.getGraphicItem().animate();
54
+ const graphicItem = this.element.getGraphicItem();
55
+ if (!graphicItem) return;
56
+ const graphicAnimate = graphicItem.animate();
55
57
  this.runnings.push(graphicAnimate), graphicAnimate.startAt(this.unit.initialDelay),
56
58
  graphicAnimate.wait(this.unit.loopDelay), this.unit.timeSlices.forEach((timeSlice => {
57
59
  this.animateTimeSlice(graphicAnimate, timeSlice, animationParameters, parameters);