@visactor/vgrammar-core 0.9.1 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/component/title.d.ts +4 -3
- package/cjs/component/title.js.map +1 -1
- package/cjs/graph/animation/animate.js +5 -3
- package/cjs/graph/animation/animate.js.map +1 -1
- package/cjs/graph/animation/animator.js +2 -1
- package/cjs/graph/animation/animator.js.map +1 -1
- package/cjs/graph/animation/config.js +9 -7
- package/cjs/graph/animation/config.js.map +1 -1
- package/cjs/graph/attributes/transform.js +1 -1
- package/cjs/graph/attributes/transform.js.map +1 -1
- package/cjs/graph/constants.d.ts +1 -0
- package/cjs/graph/constants.js +3 -3
- package/cjs/graph/constants.js.map +1 -1
- package/cjs/graph/element.d.ts +1 -1
- package/cjs/graph/element.js +13 -15
- package/cjs/graph/element.js.map +1 -1
- package/cjs/graph/glyph-element.js +2 -3
- package/cjs/graph/glyph-element.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/parse/scale.js +1 -1
- package/cjs/parse/scale.js.map +1 -1
- package/cjs/semantic-marks/interval.js +4 -2
- package/cjs/semantic-marks/interval.js.map +1 -1
- package/cjs/transforms/data/contour.js +2 -1
- package/cjs/transforms/data/contour.js.map +1 -1
- package/cjs/transforms/data/sampling.js +3 -3
- package/cjs/transforms/data/sampling.js.map +1 -1
- package/cjs/transforms/data/unfold.js +2 -2
- package/cjs/transforms/data/unfold.js.map +1 -1
- package/cjs/transforms/mark/symmetry.js +2 -1
- package/cjs/transforms/mark/symmetry.js.map +1 -1
- package/cjs/transforms/util/util.d.ts +0 -2
- package/cjs/transforms/util/util.js +2 -11
- package/cjs/transforms/util/util.js.map +1 -1
- package/cjs/types/animate.d.ts +2 -0
- package/cjs/types/animate.js.map +1 -1
- package/cjs/types/component.d.ts +5 -5
- package/cjs/types/component.js.map +1 -1
- package/cjs/types/grammar.d.ts +2 -1
- package/cjs/types/grammar.js.map +1 -1
- package/cjs/types/mark.d.ts +1 -0
- package/cjs/types/mark.js.map +1 -1
- package/cjs/view/mark.d.ts +3 -1
- package/cjs/view/mark.js +9 -3
- package/cjs/view/mark.js.map +1 -1
- package/es/component/title.d.ts +4 -3
- package/es/component/title.js.map +1 -1
- package/es/graph/animation/animate.js +4 -3
- package/es/graph/animation/animate.js.map +1 -1
- package/es/graph/animation/animator.js +2 -1
- package/es/graph/animation/animator.js.map +1 -1
- package/es/graph/animation/config.js +10 -8
- package/es/graph/animation/config.js.map +1 -1
- package/es/graph/attributes/transform.js +1 -1
- package/es/graph/attributes/transform.js.map +1 -1
- package/es/graph/constants.d.ts +1 -0
- package/es/graph/constants.js +2 -0
- package/es/graph/constants.js.map +1 -1
- package/es/graph/element.d.ts +1 -1
- package/es/graph/element.js +13 -15
- package/es/graph/element.js.map +1 -1
- package/es/graph/glyph-element.js +2 -3
- package/es/graph/glyph-element.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/interactions/brush-filter.js +2 -1
- package/es/interactions/element-highlight-by-group.js +1 -2
- package/es/interactions/index.js +2 -1
- package/es/interactions/legend-filter.js +1 -1
- package/es/interactions/player-filter.js +1 -1
- package/es/interactions/roll-up.js +1 -1
- package/es/interactions/scrollbar-filter.js +1 -1
- package/es/interactions/slider-filter.js +1 -1
- package/es/interactions/tooltip.js +1 -1
- package/es/interactions/view-drag-mixin.js +1 -1
- package/es/parse/coordinate.js +1 -1
- package/es/parse/event.js +1 -1
- package/es/parse/mark.js +1 -1
- package/es/parse/option.js +1 -1
- package/es/parse/scale.js +3 -4
- package/es/parse/scale.js.map +1 -1
- package/es/parse/transform.js +1 -1
- package/es/parse/util.js +1 -1
- package/es/parse/view.js +1 -1
- package/es/semantic-marks/interval.js +3 -3
- package/es/semantic-marks/interval.js.map +1 -1
- package/es/transforms/data/contour.js +2 -2
- package/es/transforms/data/contour.js.map +1 -1
- package/es/transforms/data/sampling.js +5 -3
- package/es/transforms/data/sampling.js.map +1 -1
- package/es/transforms/data/unfold.js +3 -3
- package/es/transforms/data/unfold.js.map +1 -1
- package/es/transforms/mark/symmetry.js +2 -2
- package/es/transforms/mark/symmetry.js.map +1 -1
- package/es/transforms/util/util.d.ts +0 -2
- package/es/transforms/util/util.js +0 -8
- package/es/transforms/util/util.js.map +1 -1
- package/es/types/animate.d.ts +2 -0
- package/es/types/animate.js.map +1 -1
- package/es/types/component.d.ts +5 -5
- package/es/types/component.js.map +1 -1
- package/es/types/grammar.d.ts +2 -1
- package/es/types/grammar.js.map +1 -1
- package/es/types/mark.d.ts +1 -0
- package/es/types/mark.js.map +1 -1
- package/es/view/mark.d.ts +3 -1
- package/es/view/mark.js +9 -3
- package/es/view/mark.js.map +1 -1
- package/package.json +10 -10
package/cjs/view/mark.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/view/mark.ts"],"names":[],"mappings":"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","file":"mark.js","sourcesContent":["import type { IGroup, INode } from '@visactor/vrender-core';\nimport { isNil, isString } from '@visactor/vutils';\nimport { BridgeElementKey, CollectionMarkType, DefaultKey, DefaultMarkData, Mark3DType } from '../graph/constants';\nimport {\n DiffState,\n GrammarMarkType,\n LayoutState,\n HOOK_EVENT,\n GrammarTypeEnum,\n BuiltInEncodeNames\n} from '../graph/enums';\nimport { Differ, groupData } from '../graph/mark/differ';\nimport { Animate } from '../graph/animation/animate';\nimport { createGraphicItem, removeGraphicItem } from '../graph/util/graphic';\nimport { GrammarBase } from './grammar-base';\nimport type {\n GrammarType,\n ICoordinate,\n IData,\n IElement,\n IGrammarBase,\n IGroupMark,\n IMark,\n IMarkConfig,\n IView,\n MarkAnimationSpec,\n MarkBaseLayoutSpec,\n MarkFunctionType,\n MarkKeySpec,\n MarkLayoutCallback,\n MarkLayoutSpec,\n MarkSortSpec,\n MarkSpec,\n MarkStateSpec,\n MarkType,\n TransformSpec,\n ProgressiveContext,\n IProgressiveTransformResult,\n Nil,\n IAnimate,\n MarkStateSortSpec,\n BaseSignleEncodeSpec\n} from '../types';\nimport { isFieldEncode, isScaleEncode, parseEncodeType } from '../parse/mark';\nimport { getGrammarOutput, parseField, isFunctionType } from '../parse/util';\nimport { parseTransformSpec } from '../parse/transform';\nimport { createElement } from '../graph/util/element';\nimport { invokeEncoderToItems, splitEncoderInLarge } from '../graph/mark/encode';\nimport { isPositionOrSizeChannel, transformsByType } from '../graph/attributes';\nimport getExtendedEvents from '../graph/util/events-extend';\nimport type { IBaseScale } from '@visactor/vscale';\nimport { EVENT_SOURCE_VIEW } from './constants';\n\nexport class Mark extends GrammarBase implements IMark {\n readonly grammarType: GrammarType = 'mark';\n\n protected declare spec: MarkSpec;\n\n /**\n * only need to clear elements after join and render\n * but `handleRenderEnd` will be call after every render\n */\n protected needClear?: boolean;\n\n coord: ICoordinate;\n\n disableCoordinateTransform: boolean;\n\n // mark properties\n markType: MarkType;\n\n context: any;\n\n group: IGroupMark | undefined;\n /** 非group mark,对应的容器节点 */\n graphicItem?: IGroup;\n graphicIndex: number;\n /** mark下的element,对应的父节点 */\n graphicParent?: IGroup;\n\n elements: IElement[] = [];\n elementMap: Map<string, IElement> = new Map();\n\n isUpdated: boolean = true;\n\n private _groupKeys: string[];\n\n /** whether mark enter encode is updated */\n private _isReentered: boolean = false;\n\n private renderContext?: {\n large: boolean;\n parameters?: any;\n progressive?: ProgressiveContext;\n beforeTransformProgressive?: IProgressiveTransformResult;\n };\n animate: IAnimate = new Animate(this, {});\n\n protected differ = new Differ([]);\n\n private _delegateEvent: (event: any, type: string) => void;\n\n private _finalParameters: any;\n\n constructor(view: IView, markType: MarkType, group?: IGroupMark) {\n super(view);\n this.markType = markType;\n this.spec.type = markType;\n this.spec.encode = { update: {} };\n this.spec.group = group;\n if (group) {\n this.group = group;\n this.attach(group);\n group.appendChild(this);\n }\n }\n\n parse(spec: MarkSpec) {\n super.parse(spec);\n\n // TODO: add group api\n if (this.spec.group) {\n const groupMark = isString(this.spec.group) ? this.view.getMarkById(this.spec.group) : this.spec.group;\n this.detach(groupMark);\n }\n const groupMark = isString(spec.group) ? this.view.getMarkById(spec.group) : spec.group;\n this.attach(groupMark);\n\n this.join(spec.from?.data, spec.key, spec.sort, spec.groupBy, spec.groupSort);\n this.coordinate(spec.coordinate);\n this.state(spec.state, this.spec.stateSort);\n\n // remove old encode\n Object.keys(this.spec.encode ?? {}).forEach(state => {\n this.encodeState(state, {});\n });\n\n // add new encode\n Object.keys(spec.encode ?? {}).forEach(state => {\n this.encodeState(state, spec.encode[state]);\n });\n this.animation(spec.animation);\n this.animationState(spec.animationState);\n this.morph(spec.morph, spec.morphKey, spec.morphElementKey);\n this.layout(spec.layout);\n this.configure(spec);\n this.transform(spec.transform);\n\n this.parseAddition(spec);\n\n this.spec = spec;\n this.markType = spec.type as MarkType;\n\n this.commit();\n return this;\n }\n\n parameters() {\n // apply last parameters after prepareRelease\n return this._finalParameters ?? super.parameters();\n }\n\n protected parseAddition(spec: MarkSpec) {\n return this;\n }\n\n reuse(grammar: IGrammarBase) {\n if (grammar.grammarType !== this.grammarType) {\n return this;\n }\n const mark = grammar as Mark;\n this.markType = mark.markType;\n this.coord = mark.coord;\n\n this.elementMap = mark.elementMap;\n this.elements = mark.elements;\n this.elementMap.forEach(element => (element.mark = this));\n\n this.differ = mark.differ;\n this.animate = mark.animate;\n this.animate.mark = this;\n\n this.context = mark.context;\n // set group in later evaluate progress\n this.graphicItem = mark.graphicItem;\n this.graphicIndex = mark.graphicIndex;\n this.graphicParent = mark.graphicParent;\n\n this.needClear = mark.needClear;\n this.isUpdated = mark.isUpdated;\n\n return this;\n }\n\n needLayout() {\n // 后续可以加上Visible 判断等\n return !isNil(this.spec.layout);\n }\n\n handleLayoutEnd() {\n // if ((this.spec?.layout as MarkBaseLayoutSpec)?.skipBeforeLayouted) {\n // this.run();\n // }\n }\n\n handleRenderEnd() {\n /**\n * only need to clear elements after join and render\n * but `handleRenderEnd` will be call after every render\n */\n if (!this.needClear) {\n return;\n }\n // clear exit elements\n this.cleanExitElements();\n // clear element channels\n this.elementMap.forEach(element => {\n if (element.diffState === DiffState.exit) {\n element.clearGraphicAttributes();\n } else {\n element.clearChangedGraphicAttributes();\n }\n });\n this.differ.updateToCurrent();\n this.needClear = false;\n }\n\n evaluateMainTasks(data: any[], parameters: any) {\n if (this.needSkipBeforeLayout() && this.view.getLayoutState() === LayoutState.before) {\n return this;\n }\n\n const stage = this.view.renderer?.stage();\n\n this.init(stage, parameters);\n const transformData = this.evaluateTransformSync(\n this._getTransformsBeforeJoin(),\n data ?? DefaultMarkData,\n parameters\n );\n let inputData = transformData?.progressive ? data : (transformData as any[]);\n\n this.evaluateGroup(inputData);\n\n this.renderContext = this.parseRenderContext(inputData, parameters);\n if (!this.renderContext.progressive) {\n if (transformData?.progressive) {\n this.renderContext.parameters = parameters;\n this.renderContext.beforeTransformProgressive = transformData.progressive;\n inputData = transformData.progressive.output();\n }\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n // FIXME: better default upstream\n this.evaluateJoin(inputData);\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(this.elements, this.spec.state, parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n this.evaluateEncode(this.elements, this._getEncoders(), parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n } else {\n this.differ.reset();\n this.elementMap.clear();\n this.evaluateProgressive();\n }\n\n this.emit(HOOK_EVENT.BEFORE_MARK_UPDATE);\n this.update(this.spec);\n this.emit(HOOK_EVENT.AFTER_MARK_UPDATE);\n\n return this;\n }\n\n protected evaluateGroup(data: any[]) {\n if (this.markType === GrammarMarkType.group) {\n return;\n }\n const currentData = data ?? DefaultMarkData;\n const groupKeyGetter = parseField(this.spec.groupBy ?? (() => DefaultKey));\n const res = groupData(currentData, groupKeyGetter, this.spec.groupSort);\n const groupKeys = res.keys as string[];\n\n this._groupKeys = groupKeys;\n\n this.differ.setCurrentData(res);\n }\n\n private _getTransformsAfterEncodeItems() {\n return this.transforms && this.transforms.filter(entry => entry.markPhase === 'afterEncodeItems');\n }\n\n private _getTransformsAfterEncode() {\n return (\n this.transforms && this.transforms.filter(entry => isNil(entry.markPhase) || entry.markPhase === 'afterEncode')\n );\n }\n\n private _getTransformsBeforeJoin() {\n return this.transforms ? this.transforms.filter(entry => entry.markPhase === 'beforeJoin') : [];\n }\n\n async evaluate(data: any[], parameters: any) {\n this.evaluateMainTasks(data, parameters);\n if (!this.renderContext?.progressive) {\n await this.evaluateTransform(this._getTransformsAfterEncode(), this.elements, parameters);\n }\n\n return this;\n }\n\n evaluateSync = (data: any[], parameters: any) => {\n this.evaluateMainTasks(data, parameters);\n\n if (!this.renderContext?.progressive) {\n this.evaluateTransformSync(this._getTransformsAfterEncode(), this.elements, parameters);\n }\n\n return this;\n };\n\n output() {\n return this;\n }\n\n join(\n data: IData | string | Nil,\n key?: MarkKeySpec,\n sort?: MarkSortSpec,\n groupBy?: MarkKeySpec,\n groupSort?: MarkSortSpec\n ) {\n // set data source\n if (this.grammarSource) {\n this.detach(this.grammarSource);\n this.grammarSource = null;\n }\n this.spec.from = null;\n if (!isNil(data)) {\n if (isString(data)) {\n this.grammarSource = this.view.getDataById(data);\n } else {\n this.grammarSource = data;\n }\n this.spec.from = { data };\n this.attach(this.grammarSource);\n }\n\n // set key & sort\n this.spec.key = key;\n this.spec.sort = sort;\n this.spec.groupBy = groupBy;\n this.spec.groupSort = groupSort;\n\n this.commit();\n return this;\n }\n\n coordinate(coordinate: ICoordinate | string | Nil) {\n if (isString(coordinate)) {\n this.coord = this.view.getCoordinateById(coordinate);\n } else {\n this.coord = coordinate;\n }\n this.attach(this.coord);\n this.commit();\n return this;\n }\n\n state(state: MarkFunctionType<string | string[]> | Nil, stateSort?: MarkStateSortSpec) {\n this.spec.stateSort = stateSort;\n\n return this.setFunctionSpec(state, 'state');\n }\n\n encode(channel: string | BaseSignleEncodeSpec, value?: MarkFunctionType<any>): this {\n return this.encodeState(DiffState.update, channel, value);\n }\n\n encodeState(state: string, channel: string | BaseSignleEncodeSpec, value?: MarkFunctionType<any>): this {\n if (state === DiffState.enter) {\n this._isReentered = true;\n }\n\n if (!this.spec.encode[state]) {\n this.spec.encode[state] = {};\n } else {\n const lastEncoder = this.spec.encode[state];\n // detach last dependencies\n if (isFunctionType(lastEncoder)) {\n this.detach(parseEncodeType(lastEncoder, this.view));\n } else {\n if (isString(channel)) {\n this.detach(parseEncodeType(this.spec.encode[state][channel], this.view));\n } else {\n Object.keys(channel).forEach(c => {\n this.detach(parseEncodeType(this.spec.encode[state][c], this.view));\n });\n }\n }\n }\n // update encode & append new dependencies\n if (isString(channel)) {\n this.spec.encode[state][channel] = value;\n this.attach(parseEncodeType(value, this.view));\n } else if (isFunctionType(channel)) {\n this.spec.encode[state] = channel;\n this.attach(parseEncodeType(channel, this.view));\n } else {\n Object.assign(this.spec.encode[state], channel);\n if (channel) {\n Object.values(channel).forEach(channelEncoder => {\n this.attach(parseEncodeType(channelEncoder, this.view));\n });\n }\n }\n this.commit();\n return this;\n }\n\n protected _getEncoders() {\n return this.spec.encode ?? {};\n }\n\n animation(animationConfig: MarkAnimationSpec | Nil): this {\n this.spec.animation = animationConfig;\n return this;\n }\n\n animationState(animationState: MarkFunctionType<string> | Nil): this {\n return this.setFunctionSpec(animationState, 'animationState');\n }\n\n layout(layout: MarkLayoutSpec | MarkLayoutCallback | Nil): this {\n this.spec.layout = layout;\n this.commit();\n return this;\n }\n\n morph(enableMorph: boolean, morphKey?: string, morphElementKey?: string): this {\n this.spec.morph = enableMorph;\n this.spec.morphKey = morphKey;\n this.spec.morphElementKey = morphElementKey;\n return this;\n }\n\n transform(transforms: TransformSpec[] | Nil): this {\n const prevTransforms = parseTransformSpec(this.spec.transform, this.view);\n if (prevTransforms) {\n this.detach(prevTransforms.refs);\n this.transforms = [];\n }\n\n const nextTransforms = parseTransformSpec(transforms, this.view);\n if (nextTransforms) {\n this.attach(nextTransforms.refs);\n this.transforms = nextTransforms.transforms;\n }\n\n this.spec.transform = transforms;\n this.commit();\n return this;\n }\n\n configure(config: IMarkConfig | Nil): this {\n const keys = [\n 'clip',\n 'zIndex',\n 'interactive',\n 'context',\n 'setCustomizedShape',\n 'large',\n 'largeThreshold',\n 'progressiveStep',\n 'progressiveThreshold',\n 'support3d',\n 'morph',\n 'morphKey',\n 'morphElementKey',\n 'attributeTransforms',\n 'skipTheme'\n ];\n if (config === null) {\n keys.forEach(key => {\n if (!isNil(this.spec[key])) {\n this.spec[key] = undefined;\n }\n });\n return this;\n }\n\n keys.forEach(key => {\n if (!isNil(config[key])) {\n this.spec[key] = config[key];\n }\n });\n\n return this;\n }\n\n isCollectionMark(): boolean {\n return (CollectionMarkType as string[]).includes(this.markType);\n }\n\n needAnimate(): boolean {\n return !this.renderContext?.progressive && !isNil(this.spec.animation);\n }\n\n getAllElements(): IElement[] {\n const elements = this.elements.slice();\n this.elementMap.forEach(element => {\n // For most of time, exit elements will not be included in this.elements.\n // After prepareRelease is invoked, elements will all be marked as exited.\n if (element.diffState === DiffState.exit && !elements.includes(element)) {\n elements.push(element);\n }\n });\n if (this.spec.sort) {\n elements.sort((elementA, elementB) => {\n return this.spec.sort(elementA.getDatum(), elementB.getDatum());\n });\n }\n return elements;\n }\n\n getScales() {\n const scales = {};\n\n this.references.forEach((count, ref) => {\n if (ref.grammarType === GrammarTypeEnum.scale) {\n scales[ref.id() as string] = ref.output();\n }\n });\n\n return scales;\n }\n\n getScalesByChannel() {\n const encoders = this.spec.encode;\n\n if (!encoders) {\n return {};\n }\n\n const res: Record<string, IBaseScale> = {};\n const params = this.parameters();\n\n Object.keys(encoders).forEach(state => {\n const useEncoders = encoders[state];\n\n if (useEncoders && !isFunctionType(useEncoders)) {\n Object.keys(useEncoders).forEach(channel => {\n if (isScaleEncode(useEncoders[channel])) {\n res[channel] = getGrammarOutput(useEncoders[channel].scale, params);\n }\n });\n }\n });\n\n return res;\n }\n\n getFieldsByChannel() {\n const encoders = this.spec.encode;\n\n if (!encoders) {\n return {};\n }\n\n const res: Record<string, string> = {};\n Object.keys(encoders).forEach(state => {\n const useEncoders = encoders[state];\n\n if (!isFunctionType(useEncoders)) {\n Object.keys(useEncoders).forEach(channel => {\n if (isFieldEncode(useEncoders[channel])) {\n res[channel] = useEncoders[channel].field;\n }\n });\n }\n });\n\n return res;\n }\n\n protected init(stage: any, parameters: any) {\n if (!this._delegateEvent) {\n this._delegateEvent = (event: any, type: string) => {\n const activeElement = event.target?.[BridgeElementKey] as IElement;\n if (activeElement?.mark === this) {\n const extendedEvt = getExtendedEvents(this.view, event, activeElement, type, EVENT_SOURCE_VIEW);\n this.emitGrammarEvent(type, extendedEvt, activeElement);\n }\n };\n this.initEvent();\n }\n\n if (!this.animate) {\n this.animate = new Animate(this, this.spec.animation);\n if (this.needAnimate()) {\n this.animate.updateState(this.spec.animationState);\n }\n }\n\n if (!this.group) {\n // root mark will not be reused\n const group = getGrammarOutput(this.spec.group, parameters) as IGroupMark;\n this.group = group;\n if (group) {\n this.emit(HOOK_EVENT.BEFORE_ADD_VRENDER_MARK);\n group.appendChild(this);\n this.emit(HOOK_EVENT.AFTER_ADD_VRENDER_MARK);\n }\n }\n\n const groupGraphicItem = this.group ? this.group.getGroupGraphicItem() : stage.defaultLayer;\n const markIndex = this.group?.children?.indexOf(this) ?? 0;\n if (this.markType !== GrammarMarkType.group) {\n if (!this.graphicItem) {\n const graphicItem = createGraphicItem(this, GrammarMarkType.group, {\n pickable: false,\n zIndex: this.spec.zIndex ?? 0\n }) as IGroup;\n if (this.spec.support3d || (Mark3DType as string[]).includes(this.markType)) {\n graphicItem.setMode('3d');\n }\n graphicItem.name = `${this.id() || this.markType}`;\n this.graphicItem = graphicItem;\n }\n this.graphicParent = this.graphicItem;\n if (groupGraphicItem && (this.graphicIndex !== markIndex || this.graphicItem.parent !== groupGraphicItem)) {\n groupGraphicItem.insertIntoKeepIdx(this.graphicItem, markIndex);\n }\n } else {\n this.graphicParent = groupGraphicItem;\n }\n this.graphicIndex = markIndex;\n }\n\n protected update(spec: MarkSpec) {\n this.context = this.spec.context;\n this.isUpdated = true;\n\n if (!this.renderContext.progressive) {\n if (spec.animation) {\n this.animate.updateConfig(spec.animation);\n }\n this.animate.updateState(spec.animationState);\n }\n\n if (this.markType !== GrammarMarkType.group) {\n if (!isNil(spec.zIndex)) {\n this.graphicItem.setAttribute('zIndex', spec.zIndex);\n }\n if (!isNil(spec.clip)) {\n this.graphicItem.setAttribute('clip', spec.clip);\n }\n // only update interactive\n this.elementMap.forEach(element => {\n element.updateGraphicItem({\n interactive: spec.interactive\n });\n });\n } else {\n // update group element graphic item attributes\n this.elementMap.forEach(element => {\n element.updateGraphicItem({\n clip: spec.clip,\n zIndex: spec.zIndex,\n interactive: spec.interactive\n });\n });\n }\n }\n\n protected evaluateJoin(data: any[]) {\n this.needClear = true;\n const keyGetter = parseField(this.spec.key ?? (this.grammarSource as IData)?.getDataIDKey() ?? (() => DefaultKey));\n const groupKeyGetter = parseField(this.spec.groupBy ?? (() => DefaultKey));\n const sort = this.spec.sort;\n const isCollectionMark = this.isCollectionMark();\n\n const enterElements = new Set<IElement>(this.elements.filter(element => element.diffState === DiffState.enter));\n const elements: IElement[] = [];\n this.differ.setCallback((key, data, prevData) => {\n const elementKey: string = key as string;\n let element: IElement;\n if (isNil(data)) {\n // exit\n element = this.elementMap.get(elementKey);\n if (element) {\n element.diffState = DiffState.exit;\n }\n } else if (isNil(prevData)) {\n // enter\n element = this.elementMap.has(elementKey) ? this.elementMap.get(elementKey) : createElement(this);\n if (element.diffState === DiffState.exit) {\n // force element to stop exit animation if it is reentered\n element.diffState = DiffState.enter;\n const animators = this.animate.getElementAnimators(element, DiffState.exit);\n animators.forEach(animator => animator.stop('start'));\n }\n\n element.diffState = DiffState.enter;\n const groupKey: string = isCollectionMark ? key : groupKeyGetter(data[0]);\n element.updateData(groupKey, data, keyGetter, this.view);\n this.elementMap.set(elementKey, element);\n elements.push(element);\n } else {\n // update\n element = this.elementMap.get(elementKey);\n if (element) {\n element.diffState = DiffState.update;\n const groupKey: string = isCollectionMark ? key : groupKeyGetter(data[0]);\n element.updateData(groupKey, data, keyGetter, this.view);\n elements.push(element);\n }\n }\n enterElements.delete(element);\n });\n\n const currentData = data ?? DefaultMarkData;\n\n if (!isCollectionMark) {\n this.differ.setCurrentData(\n groupData(\n currentData,\n (datum: any) => {\n return `${groupKeyGetter(datum)}-${keyGetter(datum)}`;\n },\n undefined\n )\n );\n }\n this.differ.doDiff();\n\n // Enter elements between dataflow start data and end data should be removed directly.\n enterElements.forEach(element => {\n this.elementMap.delete(isCollectionMark ? element.groupKey : `${element.groupKey}-${element.key}`);\n element.remove();\n element.release();\n });\n\n this.elements = elements;\n if (sort && this.elements.length >= 2) {\n this.elements.sort((elementA, elementB) => {\n return sort(elementA.getDatum(), elementB.getDatum());\n });\n }\n }\n\n protected evaluateState(elements: IElement[], stateSpec: MarkStateSpec, parameters: any): void {\n if (!stateSpec) {\n return;\n }\n\n elements.forEach(element => {\n element.state(stateSpec, parameters);\n });\n }\n\n protected evaluateGroupEncode(elements: IElement[], groupEncode: any, parameters: any) {\n if (this.markType === GrammarMarkType.group) {\n const el = this.elements[0];\n const nextAttrs = {};\n const items = [Object.assign({}, el.items?.[0], { nextAttrs })];\n invokeEncoderToItems(el, items, groupEncode, parameters);\n return nextAttrs;\n }\n\n if (!this._groupKeys || !groupEncode) {\n return;\n }\n\n const res = {};\n\n this._groupKeys.forEach(key => {\n const el = elements.find(el => el.groupKey === key);\n\n if (!el) {\n return;\n }\n\n const nextAttrs = {};\n const items = [Object.assign({}, el.items?.[0], { nextAttrs })];\n invokeEncoderToItems(el, items, groupEncode, parameters);\n res[key] = nextAttrs;\n });\n\n return res;\n }\n\n protected evaluateEncode(elements: IElement[], encoders: any, parameters: any) {\n if (encoders) {\n this.emit(HOOK_EVENT.BEFORE_ELEMENT_ENCODE, { encoders, parameters }, this);\n const groupEncodeAttrs = this.evaluateGroupEncode(elements, encoders[BuiltInEncodeNames.group], parameters);\n\n elements.forEach(element => {\n if (this.markType === GrammarMarkType.group && groupEncodeAttrs) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, groupEncodeAttrs);\n });\n } else if (groupEncodeAttrs?.[element.groupKey] && !this.isCollectionMark()) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, groupEncodeAttrs[element.groupKey]);\n });\n }\n\n element.encodeItems(element.items, encoders, this._isReentered, parameters);\n });\n\n this._isReentered = false;\n\n this.evaluateTransformSync(this._getTransformsAfterEncodeItems(), elements, parameters);\n\n elements.forEach(element => {\n element.encodeGraphic(this.isCollectionMark() ? groupEncodeAttrs?.[element.groupKey] : null);\n });\n this.emit(HOOK_EVENT.AFTER_ELEMENT_ENCODE, { encoders, parameters }, this);\n } else {\n elements.forEach(element => {\n element.initGraphicItem();\n });\n }\n }\n\n addGraphicItem(attrs: any, groupKey?: string, newGraphicItem?: any) {\n const graphicItem: any = newGraphicItem ?? createGraphicItem(this, this.markType, attrs);\n\n if (!graphicItem) {\n return;\n }\n\n this.emit(HOOK_EVENT.BEFORE_ADD_VRENDER_MARK);\n if (this.markType === GrammarMarkType.group) {\n graphicItem.name = `${this.id() || this.markType}`;\n\n this.graphicParent.insertIntoKeepIdx(graphicItem as unknown as INode, this.graphicIndex);\n } else if (this.renderContext?.progressive) {\n let group: IGroup;\n\n if (this._groupKeys) {\n const index = this._groupKeys.indexOf(groupKey);\n\n if (index >= 0) {\n group = this.graphicParent.getChildAt(index) as IGroup;\n }\n } else {\n group = this.graphicParent.at(0) as IGroup;\n }\n\n if (this.isCollectionMark()) {\n graphicItem.incremental = 1;\n group.appendChild(graphicItem);\n } else {\n group.incrementalAppendChild(graphicItem);\n }\n } else {\n (this.graphicParent as any).appendChild(graphicItem);\n }\n this.emit(HOOK_EVENT.AFTER_ADD_VRENDER_MARK);\n\n return graphicItem;\n }\n\n parseRenderContext(data: any[], parameters: any) {\n const enableProgressive =\n this.markType !== GrammarMarkType.group &&\n this.spec.progressiveStep > 0 &&\n this.spec.progressiveThreshold > 0 &&\n this.spec.progressiveStep < this.spec.progressiveThreshold;\n const large = this.spec.large && this.spec.largeThreshold > 0 && data.length >= this.spec.largeThreshold;\n\n if (enableProgressive) {\n const groupedData = this.differ.getCurrentData();\n\n if (\n groupedData &&\n groupedData.keys &&\n groupedData.keys.some(key => groupedData.data.get(key).length > this.spec.progressiveThreshold)\n ) {\n return {\n large,\n parameters,\n progressive: {\n data,\n step: this.spec.progressiveStep,\n currentIndex: 0,\n totalStep: groupedData.keys.reduce((total, key) => {\n return Math.max(Math.ceil(groupedData.data.get(key).length / this.spec.progressiveStep), total);\n }, 1),\n groupedData: groupedData.data as Map<string, any[]>\n }\n };\n }\n\n return { large };\n }\n\n return {\n large\n };\n }\n\n isProgressive() {\n return this.renderContext && (!!this.renderContext.progressive || !!this.renderContext.beforeTransformProgressive);\n }\n\n isDoingProgressive() {\n return (\n this.renderContext &&\n ((this.renderContext.progressive &&\n this.renderContext.progressive.currentIndex < this.renderContext.progressive.totalStep) ||\n (this.renderContext.beforeTransformProgressive && this.renderContext.beforeTransformProgressive.unfinished()))\n );\n }\n\n clearProgressive() {\n if (this.renderContext?.progressive) {\n this.elements = [];\n\n (this.graphicParent as any).children.forEach((group: IGroup) => {\n group.incrementalClearChild();\n });\n (this.graphicParent as any).removeAllChild();\n }\n\n if (this.renderContext?.beforeTransformProgressive) {\n this.renderContext.beforeTransformProgressive.release();\n }\n\n this.renderContext = null;\n }\n\n restartProgressive() {\n if (this.renderContext?.progressive) {\n this.renderContext.progressive.currentIndex = 0;\n }\n }\n\n evaluateJoinProgressive() {\n const currentIndex = this.renderContext.progressive.currentIndex;\n const keyGetter = parseField(this.spec.key ?? (this.grammarSource as IData)?.getDataIDKey() ?? (() => DefaultKey));\n\n const elements: IElement[] = [];\n\n if (this.isCollectionMark()) {\n this._groupKeys.forEach((key, index) => {\n const data = this.renderContext.progressive.groupedData.get(key);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n\n if (currentIndex === 0) {\n const element = createElement(this);\n element.diffState = DiffState.enter;\n element.updateData(key, dataSlice, keyGetter, this.view);\n elements.push(element);\n } else {\n const element = this.elements[index];\n element.updateData(key, dataSlice, keyGetter, this.view);\n elements.push(element);\n }\n });\n\n return elements;\n }\n\n const groupElements: Record<string, IElement[]> = {};\n this._groupKeys.forEach(key => {\n const data = this.renderContext.progressive.groupedData.get(key);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n const group: IElement[] = [];\n\n dataSlice.forEach(entry => {\n const element = createElement(this);\n element.diffState = DiffState.enter;\n element.updateData(key, [entry], keyGetter, this.view);\n group.push(element);\n elements.push(element);\n });\n\n groupElements[key] = group;\n });\n\n return { groupElements, elements };\n }\n\n protected evaluateEncodeProgressive(elements: IElement[], encoders: any, parameters: any) {\n if (!encoders) {\n elements.forEach(element => {\n element.initGraphicItem();\n });\n\n return;\n }\n\n const positionEncoders = Object.keys(encoders).reduce((res, state) => {\n if (\n encoders[state] &&\n (state === BuiltInEncodeNames.enter || state === BuiltInEncodeNames.exit || state === BuiltInEncodeNames.update)\n ) {\n res[state] = splitEncoderInLarge(this.markType, encoders[state], (this as any).glyphType).positionEncoder;\n }\n return res;\n }, {});\n const progressiveIndex = this.renderContext.progressive.currentIndex;\n const isCollection = this.isCollectionMark();\n\n this.emit(HOOK_EVENT.BEFORE_ELEMENT_ENCODE, { encoders, parameters }, this);\n const groupEncodeAttrs = this.evaluateGroupEncode(elements, encoders[BuiltInEncodeNames.group], parameters);\n\n elements.forEach((element, index) => {\n const onlyPos = progressiveIndex > 0 || (!isCollection && index > 0);\n if (!onlyPos && groupEncodeAttrs?.[element.groupKey]) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, groupEncodeAttrs[element.groupKey]);\n });\n }\n\n element.encodeItems(element.items, onlyPos ? positionEncoders : encoders, this._isReentered, parameters);\n });\n this._isReentered = false;\n\n this.evaluateTransformSync(this._getTransformsAfterEncodeItems(), elements, parameters);\n\n elements.forEach(element => {\n element.encodeGraphic();\n });\n\n this.emit(HOOK_EVENT.AFTER_ELEMENT_ENCODE, { encoders, parameters }, this);\n\n if (progressiveIndex === 0 && !isCollection) {\n const firstElement = elements[0];\n const firstChild = firstElement.getGraphicItem();\n const group = firstChild?.parent;\n\n if (group) {\n const attrs = firstChild.attribute;\n const theme = {};\n const itemAttrs = {};\n\n Object.keys(attrs).forEach(key => {\n if (['pickable', 'zIndex'].includes(key)) {\n // do nothing\n } else if (isPositionOrSizeChannel(this.markType, key)) {\n itemAttrs[key] = attrs[key];\n } else {\n theme[key] = attrs[key];\n }\n });\n\n (group as IGroup).setTheme({ common: theme });\n firstChild.initAttributes(itemAttrs);\n }\n }\n }\n\n evaluateProgressive() {\n if (this.renderContext?.beforeTransformProgressive) {\n this.renderContext.beforeTransformProgressive.progressiveRun();\n const output = this.renderContext.beforeTransformProgressive.output();\n\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n // FIXME: better default upstream\n this.evaluateJoin(output);\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(this.elements, this.spec.state, this.renderContext.parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n this.evaluateEncode(this.elements, this._getEncoders(), this.renderContext.parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n return;\n }\n\n if (!this.renderContext?.progressive) {\n return;\n }\n const parameters = this.renderContext.parameters;\n\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n const result = this.evaluateJoinProgressive();\n const elements = Array.isArray(result) ? result : result.elements;\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n if (this.renderContext.progressive.currentIndex === 0) {\n (this.graphicParent as any).removeAllChild();\n\n this._groupKeys.forEach(key => {\n const graphicItem = createGraphicItem(this, GrammarMarkType.group, {\n pickable: false,\n zIndex: this.spec.zIndex\n });\n graphicItem.incremental = this.renderContext.progressive.step;\n (this.graphicParent as any).appendChild(graphicItem);\n });\n\n this.elements = elements;\n } else {\n this.elements = this.elements.concat(elements);\n }\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(elements, this.spec.state, parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n if (Array.isArray(result)) {\n this.evaluateEncodeProgressive(elements, this._getEncoders(), parameters);\n } else {\n const groupElements = result.groupElements;\n Object.keys(groupElements).forEach(key => {\n this.evaluateEncodeProgressive(groupElements[key], this._getEncoders(), parameters);\n });\n }\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n\n const progressiveTransforms = this._getTransformsAfterEncode()?.filter(entry => entry.canProgressive === true);\n\n if (progressiveTransforms?.length) {\n this.evaluateTransformSync(progressiveTransforms, this.elements, parameters);\n }\n\n this.renderContext.progressive.currentIndex += 1;\n }\n\n isLargeMode() {\n return this.renderContext && this.renderContext.large;\n }\n\n cleanExitElements() {\n this.elementMap.forEach((element, key) => {\n if (element.diffState === DiffState.exit && !element.isReserved) {\n this.elementMap.delete(key);\n element.remove();\n element.release();\n }\n });\n }\n\n getGroupGraphicItem() {\n return this.elements?.[0]?.getGraphicItem?.();\n }\n\n getBounds() {\n return this.graphicItem ? this.graphicItem.AABBBounds : this.elements?.[0]?.getGraphicItem()?.AABBBounds;\n }\n\n getMorphConfig(): { morph: boolean; morphKey: string; morphElementKey: string } {\n return {\n morph: this.spec.morph ?? false,\n morphKey: this.spec.morphKey,\n morphElementKey: this.spec.morphElementKey\n };\n }\n\n getAttributeTransforms() {\n return this.spec.attributeTransforms ?? transformsByType[this.markType];\n }\n\n protected needSkipBeforeLayout(): boolean {\n if ((this.spec.layout as MarkBaseLayoutSpec)?.skipBeforeLayouted === true) {\n return true;\n }\n let group = this.group;\n // if parent mark has been skipped, child marks should skip\n while (group) {\n if (group.getSpec().layout?.skipBeforeLayouted === true) {\n return true;\n }\n group = group.group;\n }\n return false;\n }\n\n private initEvent() {\n if (this._delegateEvent) {\n const stage = this.view.renderer.stage();\n stage.on('*', this._delegateEvent);\n }\n }\n\n private releaseEvent() {\n if (this._delegateEvent) {\n const stage = this.view.renderer.stage();\n stage && stage.off('*', this._delegateEvent);\n }\n }\n\n clear() {\n super.clear();\n this.transforms = null;\n\n this.elementMap = null;\n this.elements = null;\n\n this.graphicItem = null;\n this.animate = null;\n\n this.group?.removeChild(this);\n this.group = null;\n }\n\n prepareRelease() {\n this.animate.stop();\n this.elementMap.forEach(element => (element.diffState = DiffState.exit));\n this._finalParameters = this.parameters();\n }\n\n release() {\n this.releaseEvent();\n this.elements.forEach(element => element.release());\n this.elementMap.clear();\n this._finalParameters = null;\n\n if (this.animate) {\n this.animate.release();\n }\n\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n }\n\n this.detachAll();\n\n super.release();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/view/mark.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,6CAAmD;AACnD,kDAAmH;AACnH,0CAOwB;AACxB,iDAAyD;AACzD,wDAAqD;AACrD,mDAA6E;AAC7E,iDAA6C;AA6B7C,wCAA8E;AAC9E,wCAA6E;AAC7E,kDAAwD;AACxD,mDAAsD;AACtD,iDAAiF;AACjF,oDAAgF;AAChF,gFAA4D;AAE5D,2CAAgD;AAEhD,MAAa,IAAK,SAAQ,0BAAW;IAmDnC,YAAY,IAAW,EAAE,QAAkB,EAAE,KAAkB;QAC7D,KAAK,CAAC,IAAI,CAAC,CAAC;QAnDL,gBAAW,GAAgB,MAAM,CAAC;QAwB3C,aAAQ,GAAe,EAAE,CAAC;QAC1B,eAAU,GAA0B,IAAI,GAAG,EAAE,CAAC;QAE9C,cAAS,GAAY,IAAI,CAAC;QAKlB,iBAAY,GAAY,KAAK,CAAC;QAUtC,YAAO,GAAa,IAAI,iBAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAEhC,WAAM,GAAG,IAAI,eAAM,CAAC,EAAE,CAAC,CAAC;QAuNlC,iBAAY,GAAG,CAAC,IAAW,EAAE,UAAe,EAAE,EAAE;;YAC9C,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAEzC,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,WAAW,CAAA,EAAE;gBACpC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;aACzF;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAvNA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACxB,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnB,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACzB;IACH,CAAC;IAED,KAAK,CAAC,IAAc;;QAClB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAGlB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACnB,MAAM,SAAS,GAAG,IAAA,iBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YACvG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SACxB;QACD,MAAM,SAAS,GAAG,IAAA,iBAAQ,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QACxF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEvB,IAAI,CAAC,IAAI,CAAC,MAAA,IAAI,CAAC,IAAI,0CAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAG5C,MAAM,CAAC,IAAI,CAAC,MAAA,IAAI,CAAC,IAAI,CAAC,MAAM,mCAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAClD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAGH,MAAM,CAAC,IAAI,CAAC,MAAA,IAAI,CAAC,MAAM,mCAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC7C,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAEzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAgB,CAAC;QAEtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU;;QAER,OAAO,MAAA,IAAI,CAAC,gBAAgB,mCAAI,KAAK,CAAC,UAAU,EAAE,CAAC;IACrD,CAAC;IAES,aAAa,CAAC,IAAc;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAqB;QACzB,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,EAAE;YAC5C,OAAO,IAAI,CAAC;SACb;QACD,MAAM,IAAI,GAAG,OAAe,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAExB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;QAE1D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QAEzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAExC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAEhC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU;QAER,OAAO,CAAC,IAAA,cAAK,EAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,eAAe;IAIf,CAAC;IAED,eAAe;QAKb,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO;SACR;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAChC,IAAI,OAAO,CAAC,SAAS,KAAK,iBAAS,CAAC,IAAI,EAAE;gBACxC,OAAO,CAAC,sBAAsB,EAAE,CAAC;aAClC;iBAAM;gBACL,OAAO,CAAC,6BAA6B,EAAE,CAAC;aACzC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,iBAAiB,CAAC,IAAW,EAAE,UAAe;;QAC5C,IAAI,IAAI,CAAC,oBAAoB,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,mBAAW,CAAC,MAAM,EAAE;YACpF,OAAO,IAAI,CAAC;SACb;QAED,MAAM,KAAK,GAAG,MAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,0CAAE,KAAK,EAAE,CAAC;QAE1C,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAC9C,IAAI,CAAC,wBAAwB,EAAE,EAC/B,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,2BAAe,EACvB,UAAU,CACX,CAAC;QACF,IAAI,SAAS,GAAG,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,WAAW,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,aAAuB,CAAC;QAE7E,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAE9B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YACnC,IAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,WAAW,EAAE;gBAC9B,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,UAAU,CAAC;gBAC3C,IAAI,CAAC,aAAa,CAAC,0BAA0B,GAAG,aAAa,CAAC,WAAW,CAAC;gBAC1E,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;aAChD;YACD,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,gBAAgB,CAAC,CAAC;YAEvC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,eAAe,CAAC,CAAC;YAEtC,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,iBAAiB,CAAC,CAAC;YACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAC/D,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,gBAAgB,CAAC,CAAC;YAEvC,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,kBAAkB,CAAC,CAAC;YACzC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,CAAC,CAAC;YACpE,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,iBAAiB,CAAC,CAAC;SACzC;aAAM;YACL,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B;QAED,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,kBAAkB,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,iBAAiB,CAAC,CAAC;QAExC,OAAO,IAAI,CAAC;IACd,CAAC;IAES,aAAa,CAAC,IAAW;;QACjC,IAAI,IAAI,CAAC,QAAQ,KAAK,uBAAe,CAAC,KAAK,EAAE;YAC3C,OAAO;SACR;QACD,MAAM,WAAW,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,2BAAe,CAAC;QAC5C,MAAM,cAAc,GAAG,IAAA,iBAAU,EAAC,MAAA,IAAI,CAAC,IAAI,CAAC,OAAO,mCAAI,CAAC,GAAG,EAAE,CAAC,sBAAU,CAAC,CAAC,CAAC;QAC3E,MAAM,GAAG,GAAG,IAAA,kBAAS,EAAC,WAAW,EAAE,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,GAAG,CAAC,IAAgB,CAAC;QAEvC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAEO,8BAA8B;QACpC,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,kBAAkB,CAAC,CAAC;IACpG,CAAC;IAEO,yBAAyB;QAC/B,OAAO,CACL,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAA,cAAK,EAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,SAAS,KAAK,aAAa,CAAC,CAChH,CAAC;IACJ,CAAC;IAEO,wBAAwB;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClG,CAAC;IAEK,QAAQ,CAAC,IAAW,EAAE,UAAe;;;YACzC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACzC,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,WAAW,CAAA,EAAE;gBACpC,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;aAC3F;YAED,OAAO,IAAI,CAAC;;KACb;IAYD,MAAM;QACJ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CACF,IAA0B,EAC1B,GAAiB,EACjB,IAAmB,EACnB,OAAqB,EACrB,SAAwB;QAGxB,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3B;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,IAAA,cAAK,EAAC,IAAI,CAAC,EAAE;YAChB,IAAI,IAAA,iBAAQ,EAAC,IAAI,CAAC,EAAE;gBAClB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aAClD;iBAAM;gBACL,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;aAC3B;YACD,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACjC;QAGD,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAEhC,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,UAAsC;QAC/C,IAAI,IAAA,iBAAQ,EAAC,UAAU,CAAC,EAAE;YACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;SACtD;aAAM;YACL,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;SACzB;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAgD,EAAE,SAA6B;QACnF,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAEhC,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,OAAsC,EAAE,KAA6B;QAC1E,OAAO,IAAI,CAAC,WAAW,CAAC,iBAAS,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED,WAAW,CAAC,KAAa,EAAE,OAAsC,EAAE,KAA6B;QAC9F,IAAI,KAAK,KAAK,iBAAS,CAAC,KAAK,EAAE;YAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC1B;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;SAC9B;aAAM;YACL,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAE5C,IAAI,IAAA,qBAAc,EAAC,WAAW,CAAC,EAAE;gBAC/B,IAAI,CAAC,MAAM,CAAC,IAAA,sBAAe,EAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aACtD;iBAAM;gBACL,IAAI,IAAA,iBAAQ,EAAC,OAAO,CAAC,EAAE;oBACrB,IAAI,CAAC,MAAM,CAAC,IAAA,sBAAe,EAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC3E;qBAAM;oBACL,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBAC/B,IAAI,CAAC,MAAM,CAAC,IAAA,sBAAe,EAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBACtE,CAAC,CAAC,CAAC;iBACJ;aACF;SACF;QAED,IAAI,IAAA,iBAAQ,EAAC,OAAO,CAAC,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,IAAA,sBAAe,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SAChD;aAAM,IAAI,IAAA,qBAAc,EAAC,OAAO,CAAC,EAAE;YAClC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,IAAA,sBAAe,EAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SAClD;aAAM;YACL,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;YAChD,IAAI,OAAO,EAAE;gBACX,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;oBAC9C,IAAI,CAAC,MAAM,CAAC,IAAA,sBAAe,EAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1D,CAAC,CAAC,CAAC;aACJ;SACF;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAES,YAAY;;QACpB,OAAO,MAAA,IAAI,CAAC,IAAI,CAAC,MAAM,mCAAI,EAAE,CAAC;IAChC,CAAC;IAED,SAAS,CAAC,eAAwC;QAChD,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,cAA8C;QAC3D,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,MAAiD;QACtD,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAC1B,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,WAAoB,EAAE,QAAiB,EAAE,eAAwB;QACrE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,UAAiC;QACzC,MAAM,cAAc,GAAG,IAAA,8BAAkB,EAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1E,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;SACtB;QAED,MAAM,cAAc,GAAG,IAAA,8BAAkB,EAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC;SAC7C;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,MAAyB;QACjC,MAAM,IAAI,GAAG;YACX,MAAM;YACN,QAAQ;YACR,aAAa;YACb,SAAS;YACT,oBAAoB;YACpB,OAAO;YACP,gBAAgB;YAChB,iBAAiB;YACjB,sBAAsB;YACtB,WAAW;YACX,OAAO;YACP,UAAU;YACV,iBAAiB;YACjB,qBAAqB;YACrB,WAAW;YACX,gBAAgB;SACjB,CAAC;QACF,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACjB,IAAI,CAAC,IAAA,cAAK,EAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;oBAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;iBAC5B;YACH,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;SACb;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACjB,IAAI,CAAC,IAAA,cAAK,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;gBACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;aAC9B;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,OAAY;QAClB,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB;QACd,OAAQ,8BAA+B,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;IAED,WAAW;;QACT,OAAO,CAAC,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,WAAW,CAAA,IAAI,CAAC,IAAA,cAAK,EAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzE,CAAC;IAED,cAAc;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAGhC,IAAI,OAAO,CAAC,SAAS,KAAK,iBAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;gBACvE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACxB;QACH,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAClB,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;gBACnC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YAClE,CAAC,CAAC,CAAC;SACJ;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,SAAS;QACP,MAAM,MAAM,GAAG,EAAE,CAAC;QAElB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACrC,IAAI,GAAG,CAAC,WAAW,KAAK,uBAAe,CAAC,KAAK,EAAE;gBAC7C,MAAM,CAAC,GAAG,CAAC,EAAE,EAAY,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;aAC3C;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,kBAAkB;QAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAElC,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,EAAE,CAAC;SACX;QAED,MAAM,GAAG,GAA+B,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAEjC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACpC,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEpC,IAAI,WAAW,IAAI,CAAC,IAAA,qBAAc,EAAC,WAAW,CAAC,EAAE;gBAC/C,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBACzC,IAAI,IAAA,oBAAa,EAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE;wBACvC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAA,uBAAgB,EAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;qBACrE;gBACH,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,kBAAkB;QAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAElC,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,EAAE,CAAC;SACX;QAED,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACpC,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEpC,IAAI,CAAC,IAAA,qBAAc,EAAC,WAAW,CAAC,EAAE;gBAChC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBACzC,IAAI,IAAA,oBAAa,EAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE;wBACvC,GAAG,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;qBAC3C;gBACH,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACb,CAAC;IAES,IAAI,CAAC,KAAU,EAAE,UAAe;;QACxC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,cAAc,GAAG,CAAC,KAAU,EAAE,IAAY,EAAE,EAAE;;gBACjD,MAAM,aAAa,GAAG,MAAA,KAAK,CAAC,MAAM,0CAAG,4BAAgB,CAAa,CAAC;gBACnE,IAAI,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,MAAK,IAAI,EAAE;oBAChC,MAAM,WAAW,GAAG,IAAA,uBAAiB,EAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,6BAAiB,CAAC,CAAC;oBAChG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;iBACzD;YACH,CAAC,CAAC;YACF,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtD,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;gBACtB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;aACpD;SACF;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YAEf,MAAM,KAAK,GAAG,IAAA,uBAAgB,EAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAe,CAAC;YAC1E,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,uBAAuB,CAAC,CAAC;gBAC9C,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACxB,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,sBAAsB,CAAC,CAAC;aAC9C;SACF;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;QAC5F,MAAM,SAAS,GAAG,MAAA,MAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,QAAQ,0CAAE,OAAO,CAAC,IAAI,CAAC,mCAAI,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,QAAQ,KAAK,uBAAe,CAAC,KAAK,EAAE;YAC3C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACrB,MAAM,WAAW,GAAG,IAAA,2BAAiB,EAAC,IAAI,EAAE,uBAAe,CAAC,KAAK,EAAE;oBACjE,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,MAAA,IAAI,CAAC,IAAI,CAAC,MAAM,mCAAI,CAAC;iBAC9B,CAAW,CAAC;gBACb,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,IAAK,sBAAuB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;oBAC3E,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBAC3B;gBACD,WAAW,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;aAChC;YACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC;YACtC,IAAI,gBAAgB,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,gBAAgB,CAAC,EAAE;gBACzG,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;aACjE;SACF;aAAM;YACL,IAAI,CAAC,aAAa,GAAG,gBAAgB,CAAC;SACvC;QACD,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAChC,CAAC;IAES,MAAM,CAAC,IAAc;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YACnC,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC3C;YACD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SAC/C;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,uBAAe,CAAC,KAAK,EAAE;YAC3C,IAAI,CAAC,IAAA,cAAK,EAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBACvB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;aACtD;YACD,IAAI,CAAC,IAAA,cAAK,EAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACrB,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;aAClD;YAED,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAChC,OAAO,CAAC,iBAAiB,CAAC;oBACxB,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;SACJ;aAAM;YAEL,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAChC,OAAO,CAAC,iBAAiB,CAAC;oBACxB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,WAAW,EAAE,IAAI,CAAC,WAAW;iBAC9B,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAES,YAAY,CAAC,IAAW;;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,MAAM,SAAS,GAAG,IAAA,iBAAU,EAAC,MAAA,MAAA,IAAI,CAAC,IAAI,CAAC,GAAG,mCAAI,MAAC,IAAI,CAAC,aAAuB,0CAAE,YAAY,EAAE,mCAAI,CAAC,GAAG,EAAE,CAAC,sBAAU,CAAC,CAAC,CAAC;QACnH,MAAM,cAAc,GAAG,IAAA,iBAAU,EAAC,MAAA,IAAI,CAAC,IAAI,CAAC,OAAO,mCAAI,CAAC,GAAG,EAAE,CAAC,sBAAU,CAAC,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEjD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAW,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,KAAK,iBAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAChH,MAAM,QAAQ,GAAe,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;YAC9C,MAAM,UAAU,GAAW,GAAa,CAAC;YACzC,IAAI,OAAiB,CAAC;YACtB,IAAI,IAAA,cAAK,EAAC,IAAI,CAAC,EAAE;gBAEf,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC1C,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,SAAS,GAAG,iBAAS,CAAC,IAAI,CAAC;iBACpC;aACF;iBAAM,IAAI,IAAA,cAAK,EAAC,QAAQ,CAAC,EAAE;gBAE1B,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAA,uBAAa,EAAC,IAAI,CAAC,CAAC;gBAClG,IAAI,OAAO,CAAC,SAAS,KAAK,iBAAS,CAAC,IAAI,EAAE;oBAExC,OAAO,CAAC,SAAS,GAAG,iBAAS,CAAC,KAAK,CAAC;oBACpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,iBAAS,CAAC,IAAI,CAAC,CAAC;oBAC5E,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;iBACvD;gBAED,OAAO,CAAC,SAAS,GAAG,iBAAS,CAAC,KAAK,CAAC;gBACpC,MAAM,QAAQ,GAAW,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1E,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACzC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACxB;iBAAM;gBAEL,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC1C,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,SAAS,GAAG,iBAAS,CAAC,MAAM,CAAC;oBACrC,MAAM,QAAQ,GAAW,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1E,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACxB;aACF;YACD,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,2BAAe,CAAC;QAE5C,IAAI,CAAC,gBAAgB,EAAE;YACrB,IAAI,CAAC,MAAM,CAAC,cAAc,CACxB,IAAA,kBAAS,EACP,WAAW,EACX,CAAC,KAAU,EAAE,EAAE;gBACb,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACxD,CAAC,EACD,SAAS,CACV,CACF,CAAC;SACH;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAGrB,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACnG,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;YACrC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;gBACxC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAES,aAAa,CAAC,QAAoB,EAAE,SAAwB,EAAE,UAAe;QACrF,IAAI,CAAC,SAAS,EAAE;YACd,OAAO;SACR;QAED,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAES,mBAAmB,CAAC,QAAoB,EAAE,WAAgB,EAAE,UAAe;;QACnF,IAAI,IAAI,CAAC,QAAQ,KAAK,uBAAe,CAAC,KAAK,EAAE;YAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,SAAS,GAAG,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAA,EAAE,CAAC,KAAK,0CAAG,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YAChE,IAAA,6BAAoB,EAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;YACzD,OAAO,SAAS,CAAC;SAClB;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,EAAE;YACpC,OAAO;SACR;QAED,MAAM,GAAG,GAAG,EAAE,CAAC;QAEf,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;;YAC5B,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC;YAEpD,IAAI,CAAC,EAAE,EAAE;gBACP,OAAO;aACR;YAED,MAAM,SAAS,GAAG,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAA,EAAE,CAAC,KAAK,0CAAG,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YAChE,IAAA,6BAAoB,EAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;YACzD,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACb,CAAC;IAES,cAAc,CAAC,QAAoB,EAAE,QAAa,EAAE,UAAe;QAC3E,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,CAAC;YAC5E,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,0BAAkB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;YAE5G,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACzB,IAAI,IAAI,CAAC,QAAQ,KAAK,uBAAe,CAAC,KAAK,IAAI,gBAAgB,EAAE;oBAC/D,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;wBAC3B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;oBACnE,CAAC,CAAC,CAAC;iBACJ;qBAAM,IAAI,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAG,OAAO,CAAC,QAAQ,CAAC,KAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;oBAC3E,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;wBAC3B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACrF,CAAC,CAAC,CAAC;iBACJ;gBAED,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YAC9E,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAE1B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YAExF,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACzB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/F,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,CAAC;SAC5E;aAAM;YACL,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACzB,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAED,cAAc,CAAC,KAAU,EAAE,QAAiB,EAAE,cAAoB;;QAChE,MAAM,WAAW,GAAQ,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,IAAA,2BAAiB,EAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEzF,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,uBAAuB,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAC,QAAQ,KAAK,uBAAe,CAAC,KAAK,EAAE;YAC3C,WAAW,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEnD,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,WAA+B,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;SAC1F;aAAM,IAAI,MAAA,IAAI,CAAC,aAAa,0CAAE,WAAW,EAAE;YAC1C,IAAI,KAAa,CAAC;YAElB,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAEhD,IAAI,KAAK,IAAI,CAAC,EAAE;oBACd,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAW,CAAC;iBACxD;aACF;iBAAM;gBACL,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAW,CAAC;aAC5C;YAED,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;gBAC3B,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC;gBAC5B,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;aAChC;iBAAM;gBACL,KAAK,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;aAC3C;SACF;aAAM;YACJ,IAAI,CAAC,aAAqB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;SACtD;QACD,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,sBAAsB,CAAC,CAAC;QAE7C,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,kBAAkB,CAAC,IAAW,EAAE,UAAe;QAC7C,MAAM,iBAAiB,GACrB,IAAI,CAAC,QAAQ,KAAK,uBAAe,CAAC,KAAK;YACvC,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,oBAAoB,GAAG,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;QAEzG,IAAI,iBAAiB,EAAE;YACrB,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAEjD,IACE,WAAW;gBACX,WAAW,CAAC,IAAI;gBAChB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAC/F;gBACA,OAAO;oBACL,KAAK;oBACL,UAAU;oBACV,WAAW,EAAE;wBACX,IAAI;wBACJ,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe;wBAC/B,YAAY,EAAE,CAAC;wBACf,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;4BAChD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,CAAC;wBAClG,CAAC,EAAE,CAAC,CAAC;wBACL,WAAW,EAAE,WAAW,CAAC,IAA0B;qBACpD;iBACF,CAAC;aACH;YAED,OAAO,EAAE,KAAK,EAAE,CAAC;SAClB;QAED,OAAO;YACL,KAAK;SACN,CAAC;IACJ,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC;IACrH,CAAC;IAED,kBAAkB;QAChB,OAAO,CACL,IAAI,CAAC,aAAa;YAClB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW;gBAC9B,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC;gBACvF,CAAC,IAAI,CAAC,aAAa,CAAC,0BAA0B,IAAI,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,UAAU,EAAE,CAAC,CAAC,CACjH,CAAC;IACJ,CAAC;IAED,gBAAgB;;QACd,IAAI,MAAA,IAAI,CAAC,aAAa,0CAAE,WAAW,EAAE;YACnC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YAElB,IAAI,CAAC,aAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,EAAE;gBAC7D,KAAK,CAAC,qBAAqB,EAAE,CAAC;YAChC,CAAC,CAAC,CAAC;YACF,IAAI,CAAC,aAAqB,CAAC,cAAc,EAAE,CAAC;SAC9C;QAED,IAAI,MAAA,IAAI,CAAC,aAAa,0CAAE,0BAA0B,EAAE;YAClD,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,OAAO,EAAE,CAAC;SACzD;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,kBAAkB;;QAChB,IAAI,MAAA,IAAI,CAAC,aAAa,0CAAE,WAAW,EAAE;YACnC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,GAAG,CAAC,CAAC;SACjD;IACH,CAAC;IAED,uBAAuB;;QACrB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC;QACjE,MAAM,SAAS,GAAG,IAAA,iBAAU,EAAC,MAAA,MAAA,IAAI,CAAC,IAAI,CAAC,GAAG,mCAAI,MAAC,IAAI,CAAC,aAAuB,0CAAE,YAAY,EAAE,mCAAI,CAAC,GAAG,EAAE,CAAC,sBAAU,CAAC,CAAC,CAAC;QAEnH,MAAM,QAAQ,GAAe,EAAE,CAAC;QAEhC,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACjE,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC;gBACtD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,SAAS,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;gBAEvF,IAAI,YAAY,KAAK,CAAC,EAAE;oBACtB,MAAM,OAAO,GAAG,IAAA,uBAAa,EAAC,IAAI,CAAC,CAAC;oBACpC,OAAO,CAAC,SAAS,GAAG,iBAAS,CAAC,KAAK,CAAC;oBACpC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACxB;qBAAM;oBACL,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACrC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACxB;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC;SACjB;QAED,MAAM,aAAa,GAA+B,EAAE,CAAC;QACrD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjE,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC;YACtD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,SAAS,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;YACvF,MAAM,KAAK,GAAe,EAAE,CAAC;YAE7B,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACxB,MAAM,OAAO,GAAG,IAAA,uBAAa,EAAC,IAAI,CAAC,CAAC;gBACpC,OAAO,CAAC,SAAS,GAAG,iBAAS,CAAC,KAAK,CAAC;gBACpC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,aAAa,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;IACrC,CAAC;IAES,yBAAyB,CAAC,QAAoB,EAAE,QAAa,EAAE,UAAe;QACtF,IAAI,CAAC,QAAQ,EAAE;YACb,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACzB,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,OAAO;SACR;QAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACnE,IACE,QAAQ,CAAC,KAAK,CAAC;gBACf,CAAC,KAAK,KAAK,0BAAkB,CAAC,KAAK,IAAI,KAAK,KAAK,0BAAkB,CAAC,IAAI,IAAI,KAAK,KAAK,0BAAkB,CAAC,MAAM,CAAC,EAChH;gBACA,GAAG,CAAC,KAAK,CAAC,GAAG,IAAA,4BAAmB,EAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAG,IAAY,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC;aAC3G;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC;QACrE,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE7C,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5E,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,0BAAkB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;QAE5G,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YAClC,MAAM,OAAO,GAAG,gBAAgB,GAAG,CAAC,IAAI,CAAC,CAAC,YAAY,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;YACrE,IAAI,CAAC,OAAO,KAAI,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAG,OAAO,CAAC,QAAQ,CAAC,CAAA,EAAE;gBACpD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBAC3B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACrF,CAAC,CAAC,CAAC;aACJ;YAED,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC3G,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAE1B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAExF,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,CAAC;QAE3E,IAAI,gBAAgB,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE;YAC3C,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,UAAU,GAAG,YAAY,CAAC,cAAc,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAC;YAEjC,IAAI,KAAK,EAAE;gBACT,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC;gBACnC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,EAAE,CAAC;gBAErB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBAC/B,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;qBAEzC;yBAAM,IAAI,IAAA,oCAAuB,EAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE;wBACtD,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;qBAC7B;yBAAM;wBACL,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;qBACzB;gBACH,CAAC,CAAC,CAAC;gBAEF,KAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC9C,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;aACtC;SACF;IACH,CAAC;IAED,mBAAmB;;QACjB,IAAI,MAAA,IAAI,CAAC,aAAa,0CAAE,0BAA0B,EAAE;YAClD,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,cAAc,EAAE,CAAC;YAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,MAAM,EAAE,CAAC;YAEtE,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,gBAAgB,CAAC,CAAC;YAEvC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,eAAe,CAAC,CAAC;YAEtC,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,iBAAiB,CAAC,CAAC;YACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAClF,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,gBAAgB,CAAC,CAAC;YAEvC,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,kBAAkB,CAAC,CAAC;YACzC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YACvF,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,iBAAiB,CAAC,CAAC;YACxC,OAAO;SACR;QAED,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,WAAW,CAAA,EAAE;YACpC,OAAO;SACR;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;QAEjD,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,gBAAgB,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAClE,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,eAAe,CAAC,CAAC;QAEtC,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,KAAK,CAAC,EAAE;YACpD,IAAI,CAAC,aAAqB,CAAC,cAAc,EAAE,CAAC;YAE7C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC5B,MAAM,WAAW,GAAG,IAAA,2BAAiB,EAAC,IAAI,EAAE,uBAAe,CAAC,KAAK,EAAE;oBACjE,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;iBACzB,CAAC,CAAC;gBACH,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC;gBAC7D,IAAI,CAAC,aAAqB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;SAC1B;aAAM;YACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SAChD;QAED,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,iBAAiB,CAAC,CAAC;QACxC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,gBAAgB,CAAC,CAAC;QAEvC,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,kBAAkB,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzB,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,CAAC,CAAC;SAC3E;aAAM;YACL,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACvC,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,CAAC,CAAC;YACtF,CAAC,CAAC,CAAC;SACJ;QACD,IAAI,CAAC,IAAI,CAAC,kBAAU,CAAC,iBAAiB,CAAC,CAAC;QAExC,MAAM,qBAAqB,GAAG,MAAA,IAAI,CAAC,yBAAyB,EAAE,0CAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC;QAE/G,IAAI,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAE,MAAM,EAAE;YACjC,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;SAC9E;QAED,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,YAAY,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;IACxD,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;YACvC,IAAI,OAAO,CAAC,SAAS,KAAK,iBAAS,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;gBAC/D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC5B,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjB,OAAO,CAAC,OAAO,EAAE,CAAC;aACnB;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB;;QACjB,OAAO,MAAA,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAG,CAAC,CAAC,0CAAE,cAAc,kDAAI,CAAC;IAChD,CAAC;IAED,SAAS;;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,MAAA,MAAA,MAAA,IAAI,CAAC,QAAQ,0CAAG,CAAC,CAAC,0CAAE,cAAc,EAAE,0CAAE,UAAU,CAAC;IAC3G,CAAC;IAED,cAAc;;QACZ,OAAO;YACL,KAAK,EAAE,MAAA,IAAI,CAAC,IAAI,CAAC,KAAK,mCAAI,KAAK;YAC/B,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAC5B,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe;SAC3C,CAAC;IACJ,CAAC;IAED,sBAAsB;;QACpB,OAAO,MAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,mCAAI,6BAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1E,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAES,oBAAoB;;QAC5B,IAAI,CAAA,MAAC,IAAI,CAAC,IAAI,CAAC,MAA6B,0CAAE,kBAAkB,MAAK,IAAI,EAAE;YACzE,OAAO,IAAI,CAAC;SACb;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEvB,OAAO,KAAK,EAAE;YACZ,IAAI,CAAA,MAAA,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,0CAAE,kBAAkB,MAAK,IAAI,EAAE;gBACvD,OAAO,IAAI,CAAC;aACb;YACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;SACrB;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,SAAS;QACf,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACzC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;SACpC;IACH,CAAC;IAEO,YAAY;QAClB,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACzC,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;SAC9C;IACH,CAAC;IAED,KAAK;;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,MAAA,IAAI,CAAC,KAAK,0CAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,iBAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAC5C,CAAC;IAED,OAAO;QACL,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;SACxB;QAED,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAA,2BAAiB,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACrC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;CACF;AAtqCD,oBAsqCC","file":"mark.js","sourcesContent":["import type { IGroup, INode } from '@visactor/vrender-core';\nimport { isNil, isString } from '@visactor/vutils';\nimport { BridgeElementKey, CollectionMarkType, DefaultKey, DefaultMarkData, Mark3DType } from '../graph/constants';\nimport {\n DiffState,\n GrammarMarkType,\n LayoutState,\n HOOK_EVENT,\n GrammarTypeEnum,\n BuiltInEncodeNames\n} from '../graph/enums';\nimport { Differ, groupData } from '../graph/mark/differ';\nimport { Animate } from '../graph/animation/animate';\nimport { createGraphicItem, removeGraphicItem } from '../graph/util/graphic';\nimport { GrammarBase } from './grammar-base';\nimport type {\n GrammarType,\n ICoordinate,\n IData,\n IElement,\n IGrammarBase,\n IGroupMark,\n IMark,\n IMarkConfig,\n IView,\n MarkAnimationSpec,\n MarkBaseLayoutSpec,\n MarkFunctionType,\n MarkKeySpec,\n MarkLayoutCallback,\n MarkLayoutSpec,\n MarkSortSpec,\n MarkSpec,\n MarkStateSpec,\n MarkType,\n TransformSpec,\n ProgressiveContext,\n IProgressiveTransformResult,\n Nil,\n IAnimate,\n MarkStateSortSpec,\n BaseSignleEncodeSpec\n} from '../types';\nimport { isFieldEncode, isScaleEncode, parseEncodeType } from '../parse/mark';\nimport { getGrammarOutput, parseField, isFunctionType } from '../parse/util';\nimport { parseTransformSpec } from '../parse/transform';\nimport { createElement } from '../graph/util/element';\nimport { invokeEncoderToItems, splitEncoderInLarge } from '../graph/mark/encode';\nimport { isPositionOrSizeChannel, transformsByType } from '../graph/attributes';\nimport getExtendedEvents from '../graph/util/events-extend';\nimport type { IBaseScale } from '@visactor/vscale';\nimport { EVENT_SOURCE_VIEW } from './constants';\n\nexport class Mark extends GrammarBase implements IMark {\n readonly grammarType: GrammarType = 'mark';\n\n protected declare spec: MarkSpec;\n\n /**\n * only need to clear elements after join and render\n * but `handleRenderEnd` will be call after every render\n */\n protected needClear?: boolean;\n\n coord: ICoordinate;\n\n disableCoordinateTransform: boolean;\n\n // mark properties\n markType: MarkType;\n\n group: IGroupMark | undefined;\n /** 非group mark,对应的容器节点 */\n graphicItem?: IGroup;\n graphicIndex: number;\n /** mark下的element,对应的父节点 */\n graphicParent?: IGroup;\n\n elements: IElement[] = [];\n elementMap: Map<string, IElement> = new Map();\n\n isUpdated: boolean = true;\n\n private _groupKeys: string[];\n\n /** whether mark enter encode is updated */\n private _isReentered: boolean = false;\n\n private _context: any;\n\n private renderContext?: {\n large: boolean;\n parameters?: any;\n progressive?: ProgressiveContext;\n beforeTransformProgressive?: IProgressiveTransformResult;\n };\n animate: IAnimate = new Animate(this, {});\n\n protected differ = new Differ([]);\n\n private _delegateEvent: (event: any, type: string) => void;\n\n private _finalParameters: any;\n\n constructor(view: IView, markType: MarkType, group?: IGroupMark) {\n super(view);\n this.markType = markType;\n this.spec.type = markType;\n this.spec.encode = { update: {} };\n this.spec.group = group;\n if (group) {\n this.group = group;\n this.attach(group);\n group.appendChild(this);\n }\n }\n\n parse(spec: MarkSpec) {\n super.parse(spec);\n\n // TODO: add group api\n if (this.spec.group) {\n const groupMark = isString(this.spec.group) ? this.view.getMarkById(this.spec.group) : this.spec.group;\n this.detach(groupMark);\n }\n const groupMark = isString(spec.group) ? this.view.getMarkById(spec.group) : spec.group;\n this.attach(groupMark);\n\n this.join(spec.from?.data, spec.key, spec.sort, spec.groupBy, spec.groupSort);\n this.coordinate(spec.coordinate);\n this.state(spec.state, this.spec.stateSort);\n\n // remove old encode\n Object.keys(this.spec.encode ?? {}).forEach(state => {\n this.encodeState(state, {});\n });\n\n // add new encode\n Object.keys(spec.encode ?? {}).forEach(state => {\n this.encodeState(state, spec.encode[state]);\n });\n this.animation(spec.animation);\n this.animationState(spec.animationState);\n this.morph(spec.morph, spec.morphKey, spec.morphElementKey);\n this.layout(spec.layout);\n this.configure(spec);\n this.transform(spec.transform);\n\n this.parseAddition(spec);\n\n this.spec = spec;\n this.markType = spec.type as MarkType;\n\n this.commit();\n return this;\n }\n\n parameters() {\n // apply last parameters after prepareRelease\n return this._finalParameters ?? super.parameters();\n }\n\n protected parseAddition(spec: MarkSpec) {\n return this;\n }\n\n reuse(grammar: IGrammarBase) {\n if (grammar.grammarType !== this.grammarType) {\n return this;\n }\n const mark = grammar as Mark;\n this.markType = mark.markType;\n this.coord = mark.coord;\n\n this.elementMap = mark.elementMap;\n this.elements = mark.elements;\n this.elementMap.forEach(element => (element.mark = this));\n\n this.differ = mark.differ;\n this.animate = mark.animate;\n this.animate.mark = this;\n\n this._context = mark._context;\n // set group in later evaluate progress\n this.graphicItem = mark.graphicItem;\n this.graphicIndex = mark.graphicIndex;\n this.graphicParent = mark.graphicParent;\n\n this.needClear = mark.needClear;\n this.isUpdated = mark.isUpdated;\n\n return this;\n }\n\n needLayout() {\n // 后续可以加上Visible 判断等\n return !isNil(this.spec.layout);\n }\n\n handleLayoutEnd() {\n // if ((this.spec?.layout as MarkBaseLayoutSpec)?.skipBeforeLayouted) {\n // this.run();\n // }\n }\n\n handleRenderEnd() {\n /**\n * only need to clear elements after join and render\n * but `handleRenderEnd` will be call after every render\n */\n if (!this.needClear) {\n return;\n }\n // clear exit elements\n this.cleanExitElements();\n // clear element channels\n this.elementMap.forEach(element => {\n if (element.diffState === DiffState.exit) {\n element.clearGraphicAttributes();\n } else {\n element.clearChangedGraphicAttributes();\n }\n });\n this.differ.updateToCurrent();\n this.needClear = false;\n }\n\n evaluateMainTasks(data: any[], parameters: any) {\n if (this.needSkipBeforeLayout() && this.view.getLayoutState() === LayoutState.before) {\n return this;\n }\n\n const stage = this.view.renderer?.stage();\n\n this.init(stage, parameters);\n const transformData = this.evaluateTransformSync(\n this._getTransformsBeforeJoin(),\n data ?? DefaultMarkData,\n parameters\n );\n let inputData = transformData?.progressive ? data : (transformData as any[]);\n\n this.evaluateGroup(inputData);\n\n this.renderContext = this.parseRenderContext(inputData, parameters);\n if (!this.renderContext.progressive) {\n if (transformData?.progressive) {\n this.renderContext.parameters = parameters;\n this.renderContext.beforeTransformProgressive = transformData.progressive;\n inputData = transformData.progressive.output();\n }\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n // FIXME: better default upstream\n this.evaluateJoin(inputData);\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(this.elements, this.spec.state, parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n this.evaluateEncode(this.elements, this._getEncoders(), parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n } else {\n this.differ.reset();\n this.elementMap.clear();\n this.evaluateProgressive();\n }\n\n this.emit(HOOK_EVENT.BEFORE_MARK_UPDATE);\n this.update(this.spec);\n this.emit(HOOK_EVENT.AFTER_MARK_UPDATE);\n\n return this;\n }\n\n protected evaluateGroup(data: any[]) {\n if (this.markType === GrammarMarkType.group) {\n return;\n }\n const currentData = data ?? DefaultMarkData;\n const groupKeyGetter = parseField(this.spec.groupBy ?? (() => DefaultKey));\n const res = groupData(currentData, groupKeyGetter, this.spec.groupSort);\n const groupKeys = res.keys as string[];\n\n this._groupKeys = groupKeys;\n\n this.differ.setCurrentData(res);\n }\n\n private _getTransformsAfterEncodeItems() {\n return this.transforms && this.transforms.filter(entry => entry.markPhase === 'afterEncodeItems');\n }\n\n private _getTransformsAfterEncode() {\n return (\n this.transforms && this.transforms.filter(entry => isNil(entry.markPhase) || entry.markPhase === 'afterEncode')\n );\n }\n\n private _getTransformsBeforeJoin() {\n return this.transforms ? this.transforms.filter(entry => entry.markPhase === 'beforeJoin') : [];\n }\n\n async evaluate(data: any[], parameters: any) {\n this.evaluateMainTasks(data, parameters);\n if (!this.renderContext?.progressive) {\n await this.evaluateTransform(this._getTransformsAfterEncode(), this.elements, parameters);\n }\n\n return this;\n }\n\n evaluateSync = (data: any[], parameters: any) => {\n this.evaluateMainTasks(data, parameters);\n\n if (!this.renderContext?.progressive) {\n this.evaluateTransformSync(this._getTransformsAfterEncode(), this.elements, parameters);\n }\n\n return this;\n };\n\n output() {\n return this;\n }\n\n join(\n data: IData | string | Nil,\n key?: MarkKeySpec,\n sort?: MarkSortSpec,\n groupBy?: MarkKeySpec,\n groupSort?: MarkSortSpec\n ) {\n // set data source\n if (this.grammarSource) {\n this.detach(this.grammarSource);\n this.grammarSource = null;\n }\n this.spec.from = null;\n if (!isNil(data)) {\n if (isString(data)) {\n this.grammarSource = this.view.getDataById(data);\n } else {\n this.grammarSource = data;\n }\n this.spec.from = { data };\n this.attach(this.grammarSource);\n }\n\n // set key & sort\n this.spec.key = key;\n this.spec.sort = sort;\n this.spec.groupBy = groupBy;\n this.spec.groupSort = groupSort;\n\n this.commit();\n return this;\n }\n\n coordinate(coordinate: ICoordinate | string | Nil) {\n if (isString(coordinate)) {\n this.coord = this.view.getCoordinateById(coordinate);\n } else {\n this.coord = coordinate;\n }\n this.attach(this.coord);\n this.commit();\n return this;\n }\n\n state(state: MarkFunctionType<string | string[]> | Nil, stateSort?: MarkStateSortSpec) {\n this.spec.stateSort = stateSort;\n\n return this.setFunctionSpec(state, 'state');\n }\n\n encode(channel: string | BaseSignleEncodeSpec, value?: MarkFunctionType<any>): this {\n return this.encodeState(DiffState.update, channel, value);\n }\n\n encodeState(state: string, channel: string | BaseSignleEncodeSpec, value?: MarkFunctionType<any>): this {\n if (state === DiffState.enter) {\n this._isReentered = true;\n }\n\n if (!this.spec.encode[state]) {\n this.spec.encode[state] = {};\n } else {\n const lastEncoder = this.spec.encode[state];\n // detach last dependencies\n if (isFunctionType(lastEncoder)) {\n this.detach(parseEncodeType(lastEncoder, this.view));\n } else {\n if (isString(channel)) {\n this.detach(parseEncodeType(this.spec.encode[state][channel], this.view));\n } else {\n Object.keys(channel).forEach(c => {\n this.detach(parseEncodeType(this.spec.encode[state][c], this.view));\n });\n }\n }\n }\n // update encode & append new dependencies\n if (isString(channel)) {\n this.spec.encode[state][channel] = value;\n this.attach(parseEncodeType(value, this.view));\n } else if (isFunctionType(channel)) {\n this.spec.encode[state] = channel;\n this.attach(parseEncodeType(channel, this.view));\n } else {\n Object.assign(this.spec.encode[state], channel);\n if (channel) {\n Object.values(channel).forEach(channelEncoder => {\n this.attach(parseEncodeType(channelEncoder, this.view));\n });\n }\n }\n this.commit();\n return this;\n }\n\n protected _getEncoders() {\n return this.spec.encode ?? {};\n }\n\n animation(animationConfig: MarkAnimationSpec | Nil): this {\n this.spec.animation = animationConfig;\n return this;\n }\n\n animationState(animationState: MarkFunctionType<string> | Nil): this {\n return this.setFunctionSpec(animationState, 'animationState');\n }\n\n layout(layout: MarkLayoutSpec | MarkLayoutCallback | Nil): this {\n this.spec.layout = layout;\n this.commit();\n return this;\n }\n\n morph(enableMorph: boolean, morphKey?: string, morphElementKey?: string): this {\n this.spec.morph = enableMorph;\n this.spec.morphKey = morphKey;\n this.spec.morphElementKey = morphElementKey;\n return this;\n }\n\n transform(transforms: TransformSpec[] | Nil): this {\n const prevTransforms = parseTransformSpec(this.spec.transform, this.view);\n if (prevTransforms) {\n this.detach(prevTransforms.refs);\n this.transforms = [];\n }\n\n const nextTransforms = parseTransformSpec(transforms, this.view);\n if (nextTransforms) {\n this.attach(nextTransforms.refs);\n this.transforms = nextTransforms.transforms;\n }\n\n this.spec.transform = transforms;\n this.commit();\n return this;\n }\n\n configure(config: IMarkConfig | Nil): this {\n const keys = [\n 'clip',\n 'zIndex',\n 'interactive',\n 'context',\n 'setCustomizedShape',\n 'large',\n 'largeThreshold',\n 'progressiveStep',\n 'progressiveThreshold',\n 'support3d',\n 'morph',\n 'morphKey',\n 'morphElementKey',\n 'attributeTransforms',\n 'skipTheme',\n 'enableSegments'\n ];\n if (config === null) {\n keys.forEach(key => {\n if (!isNil(this.spec[key])) {\n this.spec[key] = undefined;\n }\n });\n return this;\n }\n\n keys.forEach(key => {\n if (!isNil(config[key])) {\n this.spec[key] = config[key];\n }\n });\n\n return this;\n }\n\n context(context: any): this {\n this.spec.context = context;\n this._context = context;\n return this;\n }\n\n isCollectionMark(): boolean {\n return (CollectionMarkType as string[]).includes(this.markType);\n }\n\n needAnimate(): boolean {\n return !this.renderContext?.progressive && !isNil(this.spec.animation);\n }\n\n getAllElements(): IElement[] {\n const elements = this.elements.slice();\n this.elementMap.forEach(element => {\n // For most of time, exit elements will not be included in this.elements.\n // After prepareRelease is invoked, elements will all be marked as exited.\n if (element.diffState === DiffState.exit && !elements.includes(element)) {\n elements.push(element);\n }\n });\n if (this.spec.sort) {\n elements.sort((elementA, elementB) => {\n return this.spec.sort(elementA.getDatum(), elementB.getDatum());\n });\n }\n return elements;\n }\n\n getScales() {\n const scales = {};\n\n this.references.forEach((count, ref) => {\n if (ref.grammarType === GrammarTypeEnum.scale) {\n scales[ref.id() as string] = ref.output();\n }\n });\n\n return scales;\n }\n\n getScalesByChannel() {\n const encoders = this.spec.encode;\n\n if (!encoders) {\n return {};\n }\n\n const res: Record<string, IBaseScale> = {};\n const params = this.parameters();\n\n Object.keys(encoders).forEach(state => {\n const useEncoders = encoders[state];\n\n if (useEncoders && !isFunctionType(useEncoders)) {\n Object.keys(useEncoders).forEach(channel => {\n if (isScaleEncode(useEncoders[channel])) {\n res[channel] = getGrammarOutput(useEncoders[channel].scale, params);\n }\n });\n }\n });\n\n return res;\n }\n\n getFieldsByChannel() {\n const encoders = this.spec.encode;\n\n if (!encoders) {\n return {};\n }\n\n const res: Record<string, string> = {};\n Object.keys(encoders).forEach(state => {\n const useEncoders = encoders[state];\n\n if (!isFunctionType(useEncoders)) {\n Object.keys(useEncoders).forEach(channel => {\n if (isFieldEncode(useEncoders[channel])) {\n res[channel] = useEncoders[channel].field;\n }\n });\n }\n });\n\n return res;\n }\n\n protected init(stage: any, parameters: any) {\n if (!this._delegateEvent) {\n this._delegateEvent = (event: any, type: string) => {\n const activeElement = event.target?.[BridgeElementKey] as IElement;\n if (activeElement?.mark === this) {\n const extendedEvt = getExtendedEvents(this.view, event, activeElement, type, EVENT_SOURCE_VIEW);\n this.emitGrammarEvent(type, extendedEvt, activeElement);\n }\n };\n this.initEvent();\n }\n\n if (!this.animate) {\n this.animate = new Animate(this, this.spec.animation);\n if (this.needAnimate()) {\n this.animate.updateState(this.spec.animationState);\n }\n }\n\n if (!this.group) {\n // root mark will not be reused\n const group = getGrammarOutput(this.spec.group, parameters) as IGroupMark;\n this.group = group;\n if (group) {\n this.emit(HOOK_EVENT.BEFORE_ADD_VRENDER_MARK);\n group.appendChild(this);\n this.emit(HOOK_EVENT.AFTER_ADD_VRENDER_MARK);\n }\n }\n\n const groupGraphicItem = this.group ? this.group.getGroupGraphicItem() : stage.defaultLayer;\n const markIndex = this.group?.children?.indexOf(this) ?? 0;\n if (this.markType !== GrammarMarkType.group) {\n if (!this.graphicItem) {\n const graphicItem = createGraphicItem(this, GrammarMarkType.group, {\n pickable: false,\n zIndex: this.spec.zIndex ?? 0\n }) as IGroup;\n if (this.spec.support3d || (Mark3DType as string[]).includes(this.markType)) {\n graphicItem.setMode('3d');\n }\n graphicItem.name = `${this.id() || this.markType}`;\n this.graphicItem = graphicItem;\n }\n this.graphicParent = this.graphicItem;\n if (groupGraphicItem && (this.graphicIndex !== markIndex || this.graphicItem.parent !== groupGraphicItem)) {\n groupGraphicItem.insertIntoKeepIdx(this.graphicItem, markIndex);\n }\n } else {\n this.graphicParent = groupGraphicItem;\n }\n this.graphicIndex = markIndex;\n }\n\n protected update(spec: MarkSpec) {\n this._context = this.spec.context;\n this.isUpdated = true;\n\n if (!this.renderContext.progressive) {\n if (spec.animation) {\n this.animate.updateConfig(spec.animation);\n }\n this.animate.updateState(spec.animationState);\n }\n\n if (this.markType !== GrammarMarkType.group) {\n if (!isNil(spec.zIndex)) {\n this.graphicItem.setAttribute('zIndex', spec.zIndex);\n }\n if (!isNil(spec.clip)) {\n this.graphicItem.setAttribute('clip', spec.clip);\n }\n // only update interactive\n this.elementMap.forEach(element => {\n element.updateGraphicItem({\n interactive: spec.interactive\n });\n });\n } else {\n // update group element graphic item attributes\n this.elementMap.forEach(element => {\n element.updateGraphicItem({\n clip: spec.clip,\n zIndex: spec.zIndex,\n interactive: spec.interactive\n });\n });\n }\n }\n\n protected evaluateJoin(data: any[]) {\n this.needClear = true;\n const keyGetter = parseField(this.spec.key ?? (this.grammarSource as IData)?.getDataIDKey() ?? (() => DefaultKey));\n const groupKeyGetter = parseField(this.spec.groupBy ?? (() => DefaultKey));\n const sort = this.spec.sort;\n const isCollectionMark = this.isCollectionMark();\n\n const enterElements = new Set<IElement>(this.elements.filter(element => element.diffState === DiffState.enter));\n const elements: IElement[] = [];\n this.differ.setCallback((key, data, prevData) => {\n const elementKey: string = key as string;\n let element: IElement;\n if (isNil(data)) {\n // exit\n element = this.elementMap.get(elementKey);\n if (element) {\n element.diffState = DiffState.exit;\n }\n } else if (isNil(prevData)) {\n // enter\n element = this.elementMap.has(elementKey) ? this.elementMap.get(elementKey) : createElement(this);\n if (element.diffState === DiffState.exit) {\n // force element to stop exit animation if it is reentered\n element.diffState = DiffState.enter;\n const animators = this.animate.getElementAnimators(element, DiffState.exit);\n animators.forEach(animator => animator.stop('start'));\n }\n\n element.diffState = DiffState.enter;\n const groupKey: string = isCollectionMark ? key : groupKeyGetter(data[0]);\n element.updateData(groupKey, data, keyGetter, this.view);\n this.elementMap.set(elementKey, element);\n elements.push(element);\n } else {\n // update\n element = this.elementMap.get(elementKey);\n if (element) {\n element.diffState = DiffState.update;\n const groupKey: string = isCollectionMark ? key : groupKeyGetter(data[0]);\n element.updateData(groupKey, data, keyGetter, this.view);\n elements.push(element);\n }\n }\n enterElements.delete(element);\n });\n\n const currentData = data ?? DefaultMarkData;\n\n if (!isCollectionMark) {\n this.differ.setCurrentData(\n groupData(\n currentData,\n (datum: any) => {\n return `${groupKeyGetter(datum)}-${keyGetter(datum)}`;\n },\n undefined\n )\n );\n }\n this.differ.doDiff();\n\n // Enter elements between dataflow start data and end data should be removed directly.\n enterElements.forEach(element => {\n this.elementMap.delete(isCollectionMark ? element.groupKey : `${element.groupKey}-${element.key}`);\n element.remove();\n element.release();\n });\n\n this.elements = elements;\n if (sort && this.elements.length >= 2) {\n this.elements.sort((elementA, elementB) => {\n return sort(elementA.getDatum(), elementB.getDatum());\n });\n }\n }\n\n protected evaluateState(elements: IElement[], stateSpec: MarkStateSpec, parameters: any): void {\n if (!stateSpec) {\n return;\n }\n\n elements.forEach(element => {\n element.state(stateSpec, parameters);\n });\n }\n\n protected evaluateGroupEncode(elements: IElement[], groupEncode: any, parameters: any) {\n if (this.markType === GrammarMarkType.group) {\n const el = this.elements[0];\n const nextAttrs = {};\n const items = [Object.assign({}, el.items?.[0], { nextAttrs })];\n invokeEncoderToItems(el, items, groupEncode, parameters);\n return nextAttrs;\n }\n\n if (!this._groupKeys || !groupEncode) {\n return;\n }\n\n const res = {};\n\n this._groupKeys.forEach(key => {\n const el = elements.find(el => el.groupKey === key);\n\n if (!el) {\n return;\n }\n\n const nextAttrs = {};\n const items = [Object.assign({}, el.items?.[0], { nextAttrs })];\n invokeEncoderToItems(el, items, groupEncode, parameters);\n res[key] = nextAttrs;\n });\n\n return res;\n }\n\n protected evaluateEncode(elements: IElement[], encoders: any, parameters: any) {\n if (encoders) {\n this.emit(HOOK_EVENT.BEFORE_ELEMENT_ENCODE, { encoders, parameters }, this);\n const groupEncodeAttrs = this.evaluateGroupEncode(elements, encoders[BuiltInEncodeNames.group], parameters);\n\n elements.forEach(element => {\n if (this.markType === GrammarMarkType.group && groupEncodeAttrs) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, groupEncodeAttrs);\n });\n } else if (groupEncodeAttrs?.[element.groupKey] && !this.isCollectionMark()) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, groupEncodeAttrs[element.groupKey]);\n });\n }\n\n element.encodeItems(element.items, encoders, this._isReentered, parameters);\n });\n\n this._isReentered = false;\n\n this.evaluateTransformSync(this._getTransformsAfterEncodeItems(), elements, parameters);\n\n elements.forEach(element => {\n element.encodeGraphic(this.isCollectionMark() ? groupEncodeAttrs?.[element.groupKey] : null);\n });\n this.emit(HOOK_EVENT.AFTER_ELEMENT_ENCODE, { encoders, parameters }, this);\n } else {\n elements.forEach(element => {\n element.initGraphicItem();\n });\n }\n }\n\n addGraphicItem(attrs: any, groupKey?: string, newGraphicItem?: any) {\n const graphicItem: any = newGraphicItem ?? createGraphicItem(this, this.markType, attrs);\n\n if (!graphicItem) {\n return;\n }\n\n this.emit(HOOK_EVENT.BEFORE_ADD_VRENDER_MARK);\n if (this.markType === GrammarMarkType.group) {\n graphicItem.name = `${this.id() || this.markType}`;\n\n this.graphicParent.insertIntoKeepIdx(graphicItem as unknown as INode, this.graphicIndex);\n } else if (this.renderContext?.progressive) {\n let group: IGroup;\n\n if (this._groupKeys) {\n const index = this._groupKeys.indexOf(groupKey);\n\n if (index >= 0) {\n group = this.graphicParent.getChildAt(index) as IGroup;\n }\n } else {\n group = this.graphicParent.at(0) as IGroup;\n }\n\n if (this.isCollectionMark()) {\n graphicItem.incremental = 1;\n group.appendChild(graphicItem);\n } else {\n group.incrementalAppendChild(graphicItem);\n }\n } else {\n (this.graphicParent as any).appendChild(graphicItem);\n }\n this.emit(HOOK_EVENT.AFTER_ADD_VRENDER_MARK);\n\n return graphicItem;\n }\n\n parseRenderContext(data: any[], parameters: any) {\n const enableProgressive =\n this.markType !== GrammarMarkType.group &&\n this.spec.progressiveStep > 0 &&\n this.spec.progressiveThreshold > 0 &&\n this.spec.progressiveStep < this.spec.progressiveThreshold;\n const large = this.spec.large && this.spec.largeThreshold > 0 && data.length >= this.spec.largeThreshold;\n\n if (enableProgressive) {\n const groupedData = this.differ.getCurrentData();\n\n if (\n groupedData &&\n groupedData.keys &&\n groupedData.keys.some(key => groupedData.data.get(key).length > this.spec.progressiveThreshold)\n ) {\n return {\n large,\n parameters,\n progressive: {\n data,\n step: this.spec.progressiveStep,\n currentIndex: 0,\n totalStep: groupedData.keys.reduce((total, key) => {\n return Math.max(Math.ceil(groupedData.data.get(key).length / this.spec.progressiveStep), total);\n }, 1),\n groupedData: groupedData.data as Map<string, any[]>\n }\n };\n }\n\n return { large };\n }\n\n return {\n large\n };\n }\n\n isProgressive() {\n return this.renderContext && (!!this.renderContext.progressive || !!this.renderContext.beforeTransformProgressive);\n }\n\n isDoingProgressive() {\n return (\n this.renderContext &&\n ((this.renderContext.progressive &&\n this.renderContext.progressive.currentIndex < this.renderContext.progressive.totalStep) ||\n (this.renderContext.beforeTransformProgressive && this.renderContext.beforeTransformProgressive.unfinished()))\n );\n }\n\n clearProgressive() {\n if (this.renderContext?.progressive) {\n this.elements = [];\n\n (this.graphicParent as any).children.forEach((group: IGroup) => {\n group.incrementalClearChild();\n });\n (this.graphicParent as any).removeAllChild();\n }\n\n if (this.renderContext?.beforeTransformProgressive) {\n this.renderContext.beforeTransformProgressive.release();\n }\n\n this.renderContext = null;\n }\n\n restartProgressive() {\n if (this.renderContext?.progressive) {\n this.renderContext.progressive.currentIndex = 0;\n }\n }\n\n evaluateJoinProgressive() {\n const currentIndex = this.renderContext.progressive.currentIndex;\n const keyGetter = parseField(this.spec.key ?? (this.grammarSource as IData)?.getDataIDKey() ?? (() => DefaultKey));\n\n const elements: IElement[] = [];\n\n if (this.isCollectionMark()) {\n this._groupKeys.forEach((key, index) => {\n const data = this.renderContext.progressive.groupedData.get(key);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n\n if (currentIndex === 0) {\n const element = createElement(this);\n element.diffState = DiffState.enter;\n element.updateData(key, dataSlice, keyGetter, this.view);\n elements.push(element);\n } else {\n const element = this.elements[index];\n element.updateData(key, dataSlice, keyGetter, this.view);\n elements.push(element);\n }\n });\n\n return elements;\n }\n\n const groupElements: Record<string, IElement[]> = {};\n this._groupKeys.forEach(key => {\n const data = this.renderContext.progressive.groupedData.get(key);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n const group: IElement[] = [];\n\n dataSlice.forEach(entry => {\n const element = createElement(this);\n element.diffState = DiffState.enter;\n element.updateData(key, [entry], keyGetter, this.view);\n group.push(element);\n elements.push(element);\n });\n\n groupElements[key] = group;\n });\n\n return { groupElements, elements };\n }\n\n protected evaluateEncodeProgressive(elements: IElement[], encoders: any, parameters: any) {\n if (!encoders) {\n elements.forEach(element => {\n element.initGraphicItem();\n });\n\n return;\n }\n\n const positionEncoders = Object.keys(encoders).reduce((res, state) => {\n if (\n encoders[state] &&\n (state === BuiltInEncodeNames.enter || state === BuiltInEncodeNames.exit || state === BuiltInEncodeNames.update)\n ) {\n res[state] = splitEncoderInLarge(this.markType, encoders[state], (this as any).glyphType).positionEncoder;\n }\n return res;\n }, {});\n const progressiveIndex = this.renderContext.progressive.currentIndex;\n const isCollection = this.isCollectionMark();\n\n this.emit(HOOK_EVENT.BEFORE_ELEMENT_ENCODE, { encoders, parameters }, this);\n const groupEncodeAttrs = this.evaluateGroupEncode(elements, encoders[BuiltInEncodeNames.group], parameters);\n\n elements.forEach((element, index) => {\n const onlyPos = progressiveIndex > 0 || (!isCollection && index > 0);\n if (!onlyPos && groupEncodeAttrs?.[element.groupKey]) {\n element.items.forEach(item => {\n item.nextAttrs = Object.assign(item.nextAttrs, groupEncodeAttrs[element.groupKey]);\n });\n }\n\n element.encodeItems(element.items, onlyPos ? positionEncoders : encoders, this._isReentered, parameters);\n });\n this._isReentered = false;\n\n this.evaluateTransformSync(this._getTransformsAfterEncodeItems(), elements, parameters);\n\n elements.forEach(element => {\n element.encodeGraphic();\n });\n\n this.emit(HOOK_EVENT.AFTER_ELEMENT_ENCODE, { encoders, parameters }, this);\n\n if (progressiveIndex === 0 && !isCollection) {\n const firstElement = elements[0];\n const firstChild = firstElement.getGraphicItem();\n const group = firstChild?.parent;\n\n if (group) {\n const attrs = firstChild.attribute;\n const theme = {};\n const itemAttrs = {};\n\n Object.keys(attrs).forEach(key => {\n if (['pickable', 'zIndex'].includes(key)) {\n // do nothing\n } else if (isPositionOrSizeChannel(this.markType, key)) {\n itemAttrs[key] = attrs[key];\n } else {\n theme[key] = attrs[key];\n }\n });\n\n (group as IGroup).setTheme({ common: theme });\n firstChild.initAttributes(itemAttrs);\n }\n }\n }\n\n evaluateProgressive() {\n if (this.renderContext?.beforeTransformProgressive) {\n this.renderContext.beforeTransformProgressive.progressiveRun();\n const output = this.renderContext.beforeTransformProgressive.output();\n\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n // FIXME: better default upstream\n this.evaluateJoin(output);\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(this.elements, this.spec.state, this.renderContext.parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n this.evaluateEncode(this.elements, this._getEncoders(), this.renderContext.parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n return;\n }\n\n if (!this.renderContext?.progressive) {\n return;\n }\n const parameters = this.renderContext.parameters;\n\n this.emit(HOOK_EVENT.BEFORE_MARK_JOIN);\n const result = this.evaluateJoinProgressive();\n const elements = Array.isArray(result) ? result : result.elements;\n this.emit(HOOK_EVENT.AFTER_MARK_JOIN);\n\n if (this.renderContext.progressive.currentIndex === 0) {\n (this.graphicParent as any).removeAllChild();\n\n this._groupKeys.forEach(key => {\n const graphicItem = createGraphicItem(this, GrammarMarkType.group, {\n pickable: false,\n zIndex: this.spec.zIndex\n });\n graphicItem.incremental = this.renderContext.progressive.step;\n (this.graphicParent as any).appendChild(graphicItem);\n });\n\n this.elements = elements;\n } else {\n this.elements = this.elements.concat(elements);\n }\n\n this.emit(HOOK_EVENT.BEFORE_MARK_STATE);\n this.evaluateState(elements, this.spec.state, parameters);\n this.emit(HOOK_EVENT.AFTER_MARK_STATE);\n\n this.emit(HOOK_EVENT.BEFORE_MARK_ENCODE);\n if (Array.isArray(result)) {\n this.evaluateEncodeProgressive(elements, this._getEncoders(), parameters);\n } else {\n const groupElements = result.groupElements;\n Object.keys(groupElements).forEach(key => {\n this.evaluateEncodeProgressive(groupElements[key], this._getEncoders(), parameters);\n });\n }\n this.emit(HOOK_EVENT.AFTER_MARK_ENCODE);\n\n const progressiveTransforms = this._getTransformsAfterEncode()?.filter(entry => entry.canProgressive === true);\n\n if (progressiveTransforms?.length) {\n this.evaluateTransformSync(progressiveTransforms, this.elements, parameters);\n }\n\n this.renderContext.progressive.currentIndex += 1;\n }\n\n isLargeMode() {\n return this.renderContext && this.renderContext.large;\n }\n\n cleanExitElements() {\n this.elementMap.forEach((element, key) => {\n if (element.diffState === DiffState.exit && !element.isReserved) {\n this.elementMap.delete(key);\n element.remove();\n element.release();\n }\n });\n }\n\n getGroupGraphicItem() {\n return this.elements?.[0]?.getGraphicItem?.();\n }\n\n getBounds() {\n return this.graphicItem ? this.graphicItem.AABBBounds : this.elements?.[0]?.getGraphicItem()?.AABBBounds;\n }\n\n getMorphConfig(): { morph: boolean; morphKey: string; morphElementKey: string } {\n return {\n morph: this.spec.morph ?? false,\n morphKey: this.spec.morphKey,\n morphElementKey: this.spec.morphElementKey\n };\n }\n\n getAttributeTransforms() {\n return this.spec.attributeTransforms ?? transformsByType[this.markType];\n }\n\n getContext() {\n return this._context;\n }\n\n protected needSkipBeforeLayout(): boolean {\n if ((this.spec.layout as MarkBaseLayoutSpec)?.skipBeforeLayouted === true) {\n return true;\n }\n let group = this.group;\n // if parent mark has been skipped, child marks should skip\n while (group) {\n if (group.getSpec().layout?.skipBeforeLayouted === true) {\n return true;\n }\n group = group.group;\n }\n return false;\n }\n\n private initEvent() {\n if (this._delegateEvent) {\n const stage = this.view.renderer.stage();\n stage.on('*', this._delegateEvent);\n }\n }\n\n private releaseEvent() {\n if (this._delegateEvent) {\n const stage = this.view.renderer.stage();\n stage && stage.off('*', this._delegateEvent);\n }\n }\n\n clear() {\n super.clear();\n this.transforms = null;\n\n this.elementMap = null;\n this.elements = null;\n\n this.graphicItem = null;\n this.animate = null;\n\n this.group?.removeChild(this);\n this.group = null;\n }\n\n prepareRelease() {\n this.animate.stop();\n this.elementMap.forEach(element => (element.diffState = DiffState.exit));\n this._finalParameters = this.parameters();\n }\n\n release() {\n this.releaseEvent();\n this.elements.forEach(element => element.release());\n this.elementMap.clear();\n this._finalParameters = null;\n\n if (this.animate) {\n this.animate.release();\n }\n\n if (this.graphicItem) {\n removeGraphicItem(this.graphicItem);\n }\n\n this.detachAll();\n\n super.release();\n }\n}\n"]}
|
package/es/component/title.d.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
+
import type { IRichTextCharacter } from '@visactor/vrender-core';
|
|
1
2
|
import type { TitleAttrs } from '@visactor/vrender-components';
|
|
2
3
|
import type { IGroupMark, ITheme, IView, MarkFunctionType, Nil, RecursivePartial } from '../types';
|
|
3
4
|
import type { ITitle, TitleSpec } from '../types/component';
|
|
4
5
|
import { Component } from '../view/component';
|
|
5
|
-
export declare const generateTitleAttributes: (title?: string | number | number[] | string[], subTitle?: string | number | number[] | string[], theme?: ITheme, addition?: RecursivePartial<TitleAttrs>) => TitleAttrs;
|
|
6
|
+
export declare const generateTitleAttributes: (title?: string | number | number[] | string[] | IRichTextCharacter[], subTitle?: string | number | number[] | string[] | IRichTextCharacter[], theme?: ITheme, addition?: RecursivePartial<TitleAttrs>) => TitleAttrs;
|
|
6
7
|
export declare class Title extends Component implements ITitle {
|
|
7
8
|
static readonly componentType: string;
|
|
8
9
|
protected spec: TitleSpec;
|
|
9
10
|
constructor(view: IView, group?: IGroupMark);
|
|
10
11
|
protected parseAddition(spec: TitleSpec): this;
|
|
11
|
-
title(text: MarkFunctionType<string | number | number[] | string[]> | Nil): this;
|
|
12
|
-
subTitle(text: MarkFunctionType<string | number | number[] | string[]> | Nil): this;
|
|
12
|
+
title(text: MarkFunctionType<string | number | number[] | string[] | IRichTextCharacter[]> | Nil): this;
|
|
13
|
+
subTitle(text: MarkFunctionType<string | number | number[] | string[] | IRichTextCharacter[]> | Nil): this;
|
|
13
14
|
protected _updateComponentEncoders(): void;
|
|
14
15
|
}
|
|
15
16
|
export declare const registerTitle: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/title.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAIlD,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAYvE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,
|
|
1
|
+
{"version":3,"sources":["../src/component/title.ts"],"names":[],"mappings":"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","file":"title.js","sourcesContent":["import { isValid, merge } from '@visactor/vutils';\nimport type { IGraphic, IRichTextCharacter } from '@visactor/vrender-core';\nimport type { TitleAttrs } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { Title as TitleComponent } from '@visactor/vrender-components';\nimport type {\n BaseSignleEncodeSpec,\n IElement,\n IGroupMark,\n ITheme,\n IView,\n MarkFunctionType,\n Nil,\n RecursivePartial,\n StateEncodeSpec\n} from '../types';\nimport { ComponentEnum } from '../graph/enums';\nimport type { ITitle, TitleSpec } from '../types/component';\nimport { Component } from '../view/component';\nimport { invokeEncoder } from '../graph/mark/encode';\nimport { invokeFunctionType } from '../parse/util';\nimport { Factory } from '../core/factory';\n\nexport const generateTitleAttributes = (\n title?: string | number | number[] | string[] | IRichTextCharacter[],\n subTitle?: string | number | number[] | string[] | IRichTextCharacter[],\n theme?: ITheme,\n addition?: RecursivePartial<TitleAttrs>\n): TitleAttrs => {\n const titleTheme = theme?.components?.title;\n const attributes: Partial<TitleAttrs> = {};\n if (isValid(title)) {\n attributes.text = title;\n }\n if (isValid(subTitle)) {\n attributes.subtext = subTitle;\n }\n return merge({}, titleTheme, attributes, addition ?? {});\n};\n\nexport class Title extends Component implements ITitle {\n static readonly componentType: string = ComponentEnum.title;\n protected declare spec: TitleSpec;\n\n constructor(view: IView, group?: IGroupMark) {\n super(view, ComponentEnum.title, group);\n this.spec.componentType = ComponentEnum.title;\n }\n\n protected parseAddition(spec: TitleSpec) {\n super.parseAddition(spec);\n this.title(spec.title);\n this.subTitle(spec.subTitle);\n return this;\n }\n\n title(text: MarkFunctionType<string | number | number[] | string[] | IRichTextCharacter[]> | Nil) {\n return this.setFunctionSpec(text, 'title');\n }\n\n subTitle(text: MarkFunctionType<string | number | number[] | string[] | IRichTextCharacter[]> | Nil) {\n return this.setFunctionSpec(text, 'subTitle');\n }\n\n protected _updateComponentEncoders() {\n const encoders = Object.assign({ update: {} }, this.spec.encode);\n const componentEncoders: StateEncodeSpec = Object.keys(encoders).reduce((res, state) => {\n const encoder = encoders[state];\n if (encoder) {\n res[state] = {\n callback: (datum: any, element: IElement, parameters: any) => {\n const theme = this.spec.skipTheme ? null : this.view.getCurrentTheme();\n const title = invokeFunctionType(this.spec.title, parameters, datum, element);\n const subTitle = invokeFunctionType(this.spec.subTitle, parameters, datum, element);\n const addition = invokeEncoder(encoder as BaseSignleEncodeSpec, datum, element, parameters);\n return generateTitleAttributes(title, subTitle, theme, addition);\n }\n };\n }\n return res;\n }, {});\n this._encoders = componentEncoders;\n }\n}\n\nexport const registerTitle = () => {\n Factory.registerGraphicComponent(\n ComponentEnum.title,\n (attrs: TitleAttrs) => new TitleComponent(attrs) as unknown as IGraphic\n );\n\n Factory.registerComponent(ComponentEnum.title, Title);\n};\n"]}
|
|
@@ -198,14 +198,15 @@ export class Animate {
|
|
|
198
198
|
let loopTime = 0;
|
|
199
199
|
timeline.timeSlices.forEach((timeSlice => {
|
|
200
200
|
var _a;
|
|
201
|
-
const delay = invokeAnimateSpec(timeSlice.delay, element, parameters), duration = null !== (_a = invokeAnimateSpec(timeSlice.duration, element, parameters)) && void 0 !== _a ? _a : totalTime / elementCount, effects = array(timeSlice.effects).map((effect => Object.assign({}, effect, {
|
|
201
|
+
const delay = invokeAnimateSpec(timeSlice.delay, element, parameters), delayAfter = invokeAnimateSpec(timeSlice.delayAfter, element, parameters), duration = null !== (_a = invokeAnimateSpec(timeSlice.duration, element, parameters)) && void 0 !== _a ? _a : totalTime / elementCount, effects = array(timeSlice.effects).map((effect => Object.assign({}, effect, {
|
|
202
202
|
customParameters: invokeAnimateSpec(effect.customParameters, element, parameters)
|
|
203
203
|
})));
|
|
204
204
|
timeSlices.push({
|
|
205
205
|
effects: effects,
|
|
206
206
|
duration: duration,
|
|
207
|
-
delay: delay
|
|
208
|
-
|
|
207
|
+
delay: delay,
|
|
208
|
+
delayAfter: delayAfter
|
|
209
|
+
}), loopTime += delay + duration + delayAfter;
|
|
209
210
|
}));
|
|
210
211
|
const oneByOneDelay = isNumber(oneByOne) ? oneByOne : !0 === oneByOne ? loopTime : 0;
|
|
211
212
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graph/animation/animate.ts"],"names":[],"mappings":"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","file":"animate.js","sourcesContent":["import { array, isNil, isNumber } from '@visactor/vutils';\nimport type {\n IAnimate,\n IAnimationConfig,\n IAnimationParameters,\n IAnimationTimeline,\n IAnimationTimeSlice,\n IAnimationUnit,\n IAnimator,\n IParsedAnimationConfig\n} from '../../types/animate';\nimport { Animator } from './animator';\nimport { invokeAnimateSpec, normalizeAnimationConfig, normalizeStateAnimationConfig } from './config';\nimport { DefaultAnimationParameters, ImmediateAnimationState } from '../constants';\nimport type { AnimationEvent, IElement, IMark, MarkFunctionType } from '../../types';\nimport { invokeFunctionType } from '../../parse/util';\nimport { Arranger } from './arranger';\nimport { DiffState, HOOK_EVENT } from '../enums';\n\nexport class Animate implements IAnimate {\n mark: IMark;\n state: MarkFunctionType<string> | null = null;\n configs: Array<IParsedAnimationConfig>;\n immediateConfigs: Array<IParsedAnimationConfig> = [];\n\n private isEnabled: boolean = true;\n private disabledStates: string[] = [];\n // store animator by animation state\n private animators: Map<string, IAnimator[]> = new Map();\n // count animation for each elements\n private elementRecorder: WeakMap<\n IElement,\n {\n prevState: string;\n count: { [state: string]: number };\n }\n > = new WeakMap();\n private timelineCount: Record<string, number> = {};\n // record: IAnimationRecord;\n\n constructor(mark: IMark, config: Record<string, IAnimationConfig | IAnimationConfig[]>) {\n this.mark = mark;\n this.configs = normalizeAnimationConfig(config ?? {});\n }\n\n getAnimationConfigs(animationState: string) {\n if (!this.isEnabled) {\n return [];\n }\n return (this.configs ?? []).filter(config => config.state === animationState);\n }\n\n updateConfig(config: Record<string, IAnimationConfig | IAnimationConfig[]>) {\n this.configs = normalizeAnimationConfig(config ?? {});\n }\n\n updateState(state: MarkFunctionType<string> | null) {\n this.state = state;\n }\n\n animate() {\n if (!this.isEnabled || !this.configs || !this.configs.length) {\n return;\n }\n\n const elements = this.mark.getAllElements();\n const parameters = this.mark.parameters();\n\n elements.forEach(element => {\n // TODO: if element is restored, clear isReserved flag\n if (element.isReserved && element.diffState !== DiffState.exit) {\n element.isReserved = false;\n }\n // clear previous animation when animation state changed\n const prevElementState = this.elementRecorder.get(element)?.prevState;\n const needStopAnimation = this.configs.some(config => {\n return (\n prevElementState !== element.diffState &&\n config.state === prevElementState &&\n config.timeline.controlOptions.stopWhenStateChange\n );\n });\n if (needStopAnimation) {\n // do not clear exit element in case it will animate\n this.clearElementAnimation(element, false);\n }\n });\n\n this.configs.forEach(config => {\n this.animateByTimeline(config, elements, parameters);\n });\n\n this.mark.cleanExitElements();\n\n return this;\n }\n\n runAnimationByState(animationState: string) {\n if (!this.isEnabled) {\n return;\n }\n\n // FIXME: maybe do nothing if state animation is already running\n // if (this.animators.get(animationState)?.length > 0) { return; }\n\n const stateConfigs = this.configs.filter(config => config.state === animationState);\n const elements = this.mark.getAllElements();\n const parameters = this.mark.parameters();\n\n const animators = stateConfigs.reduce((animators, config) => {\n return animators.concat(this.animateByTimeline(config, elements, parameters, true));\n }, [] as IAnimator[]);\n\n return new Arranger(animators);\n }\n stopAnimationByState(animationState: string) {\n const animators = this.animators.get(animationState);\n if (animators) {\n animators.forEach(animator => animator.stop());\n }\n return this;\n }\n pauseAnimationByState(animationState: string) {\n const animators = this.animators.get(animationState);\n if (animators) {\n animators.forEach(animator => animator.pause());\n }\n return this;\n }\n resumeAnimationByState(animationState: string) {\n const animators = this.animators.get(animationState);\n if (animators) {\n animators.forEach(animator => animator.resume());\n }\n return this;\n }\n\n run(config: IAnimationConfig | IAnimationConfig[]) {\n if (!this.isEnabled) {\n return;\n }\n\n const parsedConfigs = normalizeStateAnimationConfig(ImmediateAnimationState, config, this.immediateConfigs.length);\n this.immediateConfigs = this.immediateConfigs.concat(parsedConfigs);\n const elements = this.mark.getAllElements();\n const parameters = this.mark.parameters();\n\n const animators = parsedConfigs.reduce((animators, config) => {\n return animators.concat(this.animateByTimeline(config, elements, parameters, true));\n }, [] as IAnimator[]);\n\n return new Arranger(animators);\n }\n stop() {\n // map will be cleared in animator callback\n this.animators.forEach(animators => {\n animators.forEach(animator => animator.stop());\n });\n return this;\n }\n pause() {\n this.animators.forEach(stateAnimators => stateAnimators.forEach(animator => animator.pause()));\n return this;\n }\n resume() {\n this.animators.forEach(stateAnimators => stateAnimators.forEach(animator => animator.resume()));\n return this;\n }\n reverse() {\n /** Animation scheduler api, resume the recorded animations */\n return this;\n }\n restart() {\n /** Animation scheduler api, resume current animations */\n return this;\n }\n record() {\n /** Animation scheduler api, start to record a timestamp */\n return this;\n }\n recordEnd() {\n /** Animation scheduler api, end to record a timestamp */\n return this;\n }\n\n isAnimating() {\n let isAnimating = false;\n this.animators.forEach(animators => {\n isAnimating = isAnimating || animators.some(animator => animator.isAnimating);\n });\n return isAnimating;\n }\n\n isElementAnimating(element: IElement) {\n const stateAnimationCounts = this.elementRecorder.get(element)?.count;\n return isNil(stateAnimationCounts) || Object.values(stateAnimationCounts).every(count => count === 0);\n }\n\n getAnimatorCount() {\n let count = 0;\n this.animators.forEach(animators => (count += animators.length));\n return count;\n }\n\n getAllAnimators() {\n const allAnimators: IAnimator[] = [];\n this.animators.forEach(animators => {\n allAnimators.push(...animators);\n });\n return allAnimators;\n }\n\n getElementAnimators(element: IElement | IElement[], animationState?: string) {\n const elements = array(element);\n let animators: IAnimator[] = [];\n if (animationState) {\n animators = this.animators.get(animationState) ?? [];\n } else {\n this.animators.forEach(stateAnimators => {\n animators = animators.concat(stateAnimators);\n });\n }\n return animators.filter(animator => elements.includes(animator.element));\n }\n\n enable() {\n this.isEnabled = true;\n return this;\n }\n disable() {\n this.isEnabled = false;\n this.stop();\n this.animators.clear();\n return this;\n }\n enableAnimationState(state: string | string[]) {\n const states = array(state);\n this.disabledStates = this.disabledStates.filter(state => !states.includes(state));\n return this;\n }\n disableAnimationState(state: string | string[]) {\n const states = array(state);\n this.disabledStates = this.disabledStates.concat(states);\n return this;\n }\n\n release() {\n this.stop();\n // we need to clear map\n this.animators.clear();\n\n this.configs = null;\n this.animators = null;\n this.elementRecorder = null;\n this.timelineCount = null;\n }\n\n private animateByTimeline(\n config: IParsedAnimationConfig,\n elements: IElement[],\n parameters: any,\n forceState: boolean = false\n ) {\n const animators: IAnimator[] = [];\n const animatedElements = elements.filter(element => {\n // do not animate on element which is running exit animation\n // if an element is reserved, it should be set for exit animation and will be removed\n const checkExit = !(element.isReserved && element.diffState === DiffState.exit);\n // do not check animation state if forceState is set\n const state = this.getAnimationState(element);\n const checkDisabled = !this.disabledStates.includes(state);\n const checkState = forceState || state === config.state;\n // filter elements by partitioner config\n const checkPartitioner =\n !config.timeline.partitioner || config.timeline.partitioner(element.getDatum(), element, parameters);\n return checkExit && checkDisabled && checkState && checkPartitioner;\n });\n\n if (animatedElements.length) {\n if (isNil(this.timelineCount[config.id])) {\n this.timelineCount[config.id] = 0;\n }\n\n if (config.timeline.sort) {\n animatedElements.sort((elementA, elementB) => {\n return config.timeline.sort(elementA.getDatum(), elementB.getDatum(), elementA, elementB, parameters);\n });\n }\n const width = this.mark.view.width();\n const height = this.mark.view.height();\n animatedElements.forEach((element, index) => {\n const animationParameters: IAnimationParameters = {\n width,\n height,\n group: this.mark.group ?? null,\n mark: this.mark,\n view: this.mark.view,\n elementCount: animatedElements.length,\n elementIndex: index\n };\n // add animation parameter into parameters\n const mergedParameters = Object.assign({ [DefaultAnimationParameters]: animationParameters }, parameters);\n const animationUnit = this.getAnimationUnit(\n config.timeline,\n element,\n index,\n animatedElements.length,\n mergedParameters\n );\n animators.push(this.animateElement(config, animationUnit, element, animationParameters, mergedParameters));\n });\n }\n return animators;\n }\n\n private animateElement(\n config: IParsedAnimationConfig,\n animationUnit: IAnimationUnit,\n element: IElement,\n animationParameters: IAnimationParameters,\n parameters: any\n ) {\n // create animator\n const animator = new Animator(element, animationUnit, config);\n\n // start animating\n animator.animate(animationParameters, parameters);\n // return when animator has no valid animation\n if (!animator.isAnimating) {\n return;\n }\n if (element.diffState === DiffState.exit) {\n element.isReserved = true;\n }\n\n const isFirstAnimator = this.timelineCount[config.id] === 0;\n\n this.timelineCount[config.id] += 1;\n const elementRecord = this.elementRecorder.get(element) ?? { prevState: config.state, count: {} };\n elementRecord.prevState = config.state;\n elementRecord.count[config.state] = (elementRecord.count[config.state] ?? 0) + 1;\n this.elementRecorder.set(element, elementRecord);\n const stateData = this.animators.get(config.state);\n if (!stateData) {\n this.animators.set(config.state, [animator]);\n } else {\n stateData.push(animator);\n }\n // this.animators.set(config.state, (this.animators.get(config.state) ?? []).concat(animator));\n // invoke callback when animation finish\n animator.callback(() => {\n this.handleAnimatorEnd(animator);\n });\n\n // FIXME: handle multiple timelines with same animation state\n // emit animation start event\n const animationEvent: AnimationEvent = {\n mark: this.mark,\n animationState: config.state,\n animationConfig: config.originConfig\n };\n if (isFirstAnimator) {\n this.mark.emit(HOOK_EVENT.ANIMATION_START, animationEvent);\n }\n this.mark.emit(HOOK_EVENT.ELEMENT_ANIMATION_START, animationEvent, element);\n\n return animator;\n }\n\n private getAnimationState(element: IElement): string {\n const customState = invokeFunctionType(this.state, this.mark.parameters(), element.getDatum(), element);\n return customState ?? element.diffState;\n }\n\n private getAnimationUnit(\n timeline: IAnimationTimeline,\n element: IElement,\n index: number,\n elementCount: number,\n parameters: any\n ): IAnimationUnit {\n const timeSlices: IAnimationTimeSlice[] = [];\n const startTime = invokeAnimateSpec(timeline.startTime, element, parameters);\n const totalTime = invokeAnimateSpec(timeline.totalTime, element, parameters);\n const oneByOne = invokeAnimateSpec(timeline.oneByOne, element, parameters);\n const loop = invokeAnimateSpec(timeline.loop, element, parameters);\n\n let loopTime = 0;\n (timeline.timeSlices as IAnimationTimeSlice[]).forEach(timeSlice => {\n const delay = invokeAnimateSpec(timeSlice.delay, element, parameters);\n const duration = invokeAnimateSpec(timeSlice.duration, element, parameters) ?? totalTime / elementCount;\n const effects = array(timeSlice.effects).map(effect =>\n Object.assign({}, effect, {\n customParameters: invokeAnimateSpec(effect.customParameters, element, parameters)\n })\n );\n timeSlices.push({\n effects,\n duration,\n delay\n });\n loopTime += delay + duration;\n });\n\n const oneByOneDelay = isNumber(oneByOne) ? oneByOne : oneByOne === true ? loopTime : 0;\n return {\n initialDelay: startTime,\n loopCount: isNumber(loop) ? loop : loop === true ? Infinity : 1,\n loopDelay: oneByOneDelay * index,\n loopDelayAfter: oneByOneDelay * (elementCount - index - 1),\n loopAnimateDuration: loopTime,\n loopDuration: loopTime + oneByOneDelay * (elementCount - 1),\n totalTime,\n timeSlices\n };\n }\n\n private clearElementAnimation(element: IElement, clearElement: boolean = true) {\n this.animators.forEach(animators => {\n animators.forEach(animator => {\n if (animator.element === element) {\n // if previous animation state is exit, modify graphic item channel to start\n if (animator.animationOptions.state === DiffState.exit) {\n animator.stop('start', false);\n } else {\n animator.stop('end', false);\n }\n this.handleAnimatorEnd(animator, clearElement);\n }\n });\n });\n this.elementRecorder.delete(element);\n }\n\n private clearAllElements() {\n const elements = this.mark.getAllElements();\n if (elements) {\n elements.forEach((element, i) => {\n // only update mark in previous invocation\n this.clearElement(element, i === elements.length - 1);\n });\n }\n }\n\n private clearElement(element: IElement, updateMark: boolean = true) {\n this.clearElementAnimation(element);\n // element might already be released\n if (element.getGraphicItem()) {\n // if element stops animating or needs to be removed, clear all cached attributes\n element.clearGraphicAttributes();\n // remove element from mark if exit animation is finished\n if (element.diffState === DiffState.exit) {\n element.isReserved = false;\n }\n if (updateMark) {\n this.mark.cleanExitElements();\n }\n // TODO: waiting for vRender to optimize bound cache logic, otherwise this line\n // will cause huge performance waste in multiple animation like appear & disappear.\n // if (updateMark) mark.updateBounds();\n }\n }\n\n private handleAnimatorEnd(animator: IAnimator, clearElement: boolean = true) {\n const element = animator.element;\n const animationOptions = animator.animationOptions;\n const animationState = animationOptions.state;\n const isImmediateAnimation = animationState === ImmediateAnimationState;\n\n // sub element animation count\n const stateAnimationCounts = this.elementRecorder.get(element).count;\n stateAnimationCounts[animationState] -= 1;\n // FIXME: maybe delete zero animationState\n // if (stateAnimationCounts[animationState] === 0) {\n // delete stateAnimationCounts[animationState];\n // }\n\n this.animators.set(\n animationState,\n this.animators.get(animationState).filter(ani => ani !== animator)\n );\n if (this.animators.get(animationState).length === 0) {\n this.animators.delete(animationState);\n }\n this.timelineCount[animationOptions.id] -= 1;\n const isLastAnimator = this.timelineCount[animationOptions.id] === 0;\n\n const originAnimationConfig = isImmediateAnimation\n ? this.immediateConfigs.find(config => config.id === animationOptions.id).originConfig\n : this.configs.find(config => config.id === animationOptions.id).originConfig;\n if (isLastAnimator) {\n delete this.timelineCount[animationOptions.id];\n // delete config when immediate executed animation is finished\n if (isImmediateAnimation) {\n this.immediateConfigs = this.immediateConfigs.filter(config => config.id !== animationOptions.id);\n }\n }\n\n if (clearElement) {\n if (Object.keys(this.timelineCount).length === 0) {\n this.clearAllElements();\n } else if (animationState === DiffState.exit && stateAnimationCounts[DiffState.exit] === 0) {\n // if all exit animations are finished\n this.clearElement(element);\n }\n }\n\n // emit animation end event\n const animationEvent: AnimationEvent = {\n mark: this.mark,\n animationState,\n animationConfig: originAnimationConfig\n };\n if (isLastAnimator) {\n this.mark.emit(HOOK_EVENT.ANIMATION_END, animationEvent);\n }\n this.mark.emit(HOOK_EVENT.ELEMENT_ANIMATION_END, animationEvent, element);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/graph/animation/animate.ts"],"names":[],"mappings":"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","file":"animate.js","sourcesContent":["import { array, isNil, isNumber } from '@visactor/vutils';\nimport type {\n IAnimate,\n IAnimationConfig,\n IAnimationParameters,\n IAnimationTimeline,\n IAnimationTimeSlice,\n IAnimationUnit,\n IAnimator,\n IParsedAnimationConfig\n} from '../../types/animate';\nimport { Animator } from './animator';\nimport { invokeAnimateSpec, normalizeAnimationConfig, normalizeStateAnimationConfig } from './config';\nimport { DefaultAnimationParameters, ImmediateAnimationState } from '../constants';\nimport type { AnimationEvent, IElement, IMark, MarkFunctionType } from '../../types';\nimport { invokeFunctionType } from '../../parse/util';\nimport { Arranger } from './arranger';\nimport { DiffState, HOOK_EVENT } from '../enums';\n\nexport class Animate implements IAnimate {\n mark: IMark;\n state: MarkFunctionType<string> | null = null;\n configs: Array<IParsedAnimationConfig>;\n immediateConfigs: Array<IParsedAnimationConfig> = [];\n\n private isEnabled: boolean = true;\n private disabledStates: string[] = [];\n // store animator by animation state\n private animators: Map<string, IAnimator[]> = new Map();\n // count animation for each elements\n private elementRecorder: WeakMap<\n IElement,\n {\n prevState: string;\n count: { [state: string]: number };\n }\n > = new WeakMap();\n private timelineCount: Record<string, number> = {};\n // record: IAnimationRecord;\n\n constructor(mark: IMark, config: Record<string, IAnimationConfig | IAnimationConfig[]>) {\n this.mark = mark;\n this.configs = normalizeAnimationConfig(config ?? {});\n }\n\n getAnimationConfigs(animationState: string) {\n if (!this.isEnabled) {\n return [];\n }\n return (this.configs ?? []).filter(config => config.state === animationState);\n }\n\n updateConfig(config: Record<string, IAnimationConfig | IAnimationConfig[]>) {\n this.configs = normalizeAnimationConfig(config ?? {});\n }\n\n updateState(state: MarkFunctionType<string> | null) {\n this.state = state;\n }\n\n animate() {\n if (!this.isEnabled || !this.configs || !this.configs.length) {\n return;\n }\n\n const elements = this.mark.getAllElements();\n const parameters = this.mark.parameters();\n\n elements.forEach(element => {\n // TODO: if element is restored, clear isReserved flag\n if (element.isReserved && element.diffState !== DiffState.exit) {\n element.isReserved = false;\n }\n // clear previous animation when animation state changed\n const prevElementState = this.elementRecorder.get(element)?.prevState;\n const needStopAnimation = this.configs.some(config => {\n return (\n prevElementState !== element.diffState &&\n config.state === prevElementState &&\n config.timeline.controlOptions.stopWhenStateChange\n );\n });\n if (needStopAnimation) {\n // do not clear exit element in case it will animate\n this.clearElementAnimation(element, false);\n }\n });\n\n this.configs.forEach(config => {\n this.animateByTimeline(config, elements, parameters);\n });\n\n this.mark.cleanExitElements();\n\n return this;\n }\n\n runAnimationByState(animationState: string) {\n if (!this.isEnabled) {\n return;\n }\n\n // FIXME: maybe do nothing if state animation is already running\n // if (this.animators.get(animationState)?.length > 0) { return; }\n\n const stateConfigs = this.configs.filter(config => config.state === animationState);\n const elements = this.mark.getAllElements();\n const parameters = this.mark.parameters();\n\n const animators = stateConfigs.reduce((animators, config) => {\n return animators.concat(this.animateByTimeline(config, elements, parameters, true));\n }, [] as IAnimator[]);\n\n return new Arranger(animators);\n }\n stopAnimationByState(animationState: string) {\n const animators = this.animators.get(animationState);\n if (animators) {\n animators.forEach(animator => animator.stop());\n }\n return this;\n }\n pauseAnimationByState(animationState: string) {\n const animators = this.animators.get(animationState);\n if (animators) {\n animators.forEach(animator => animator.pause());\n }\n return this;\n }\n resumeAnimationByState(animationState: string) {\n const animators = this.animators.get(animationState);\n if (animators) {\n animators.forEach(animator => animator.resume());\n }\n return this;\n }\n\n run(config: IAnimationConfig | IAnimationConfig[]) {\n if (!this.isEnabled) {\n return;\n }\n\n const parsedConfigs = normalizeStateAnimationConfig(ImmediateAnimationState, config, this.immediateConfigs.length);\n this.immediateConfigs = this.immediateConfigs.concat(parsedConfigs);\n const elements = this.mark.getAllElements();\n const parameters = this.mark.parameters();\n\n const animators = parsedConfigs.reduce((animators, config) => {\n return animators.concat(this.animateByTimeline(config, elements, parameters, true));\n }, [] as IAnimator[]);\n\n return new Arranger(animators);\n }\n stop() {\n // map will be cleared in animator callback\n this.animators.forEach(animators => {\n animators.forEach(animator => animator.stop());\n });\n return this;\n }\n pause() {\n this.animators.forEach(stateAnimators => stateAnimators.forEach(animator => animator.pause()));\n return this;\n }\n resume() {\n this.animators.forEach(stateAnimators => stateAnimators.forEach(animator => animator.resume()));\n return this;\n }\n reverse() {\n /** Animation scheduler api, resume the recorded animations */\n return this;\n }\n restart() {\n /** Animation scheduler api, resume current animations */\n return this;\n }\n record() {\n /** Animation scheduler api, start to record a timestamp */\n return this;\n }\n recordEnd() {\n /** Animation scheduler api, end to record a timestamp */\n return this;\n }\n\n isAnimating() {\n let isAnimating = false;\n this.animators.forEach(animators => {\n isAnimating = isAnimating || animators.some(animator => animator.isAnimating);\n });\n return isAnimating;\n }\n\n isElementAnimating(element: IElement) {\n const stateAnimationCounts = this.elementRecorder.get(element)?.count;\n return isNil(stateAnimationCounts) || Object.values(stateAnimationCounts).every(count => count === 0);\n }\n\n getAnimatorCount() {\n let count = 0;\n this.animators.forEach(animators => (count += animators.length));\n return count;\n }\n\n getAllAnimators() {\n const allAnimators: IAnimator[] = [];\n this.animators.forEach(animators => {\n allAnimators.push(...animators);\n });\n return allAnimators;\n }\n\n getElementAnimators(element: IElement | IElement[], animationState?: string) {\n const elements = array(element);\n let animators: IAnimator[] = [];\n if (animationState) {\n animators = this.animators.get(animationState) ?? [];\n } else {\n this.animators.forEach(stateAnimators => {\n animators = animators.concat(stateAnimators);\n });\n }\n return animators.filter(animator => elements.includes(animator.element));\n }\n\n enable() {\n this.isEnabled = true;\n return this;\n }\n disable() {\n this.isEnabled = false;\n this.stop();\n this.animators.clear();\n return this;\n }\n enableAnimationState(state: string | string[]) {\n const states = array(state);\n this.disabledStates = this.disabledStates.filter(state => !states.includes(state));\n return this;\n }\n disableAnimationState(state: string | string[]) {\n const states = array(state);\n this.disabledStates = this.disabledStates.concat(states);\n return this;\n }\n\n release() {\n this.stop();\n // we need to clear map\n this.animators.clear();\n\n this.configs = null;\n this.animators = null;\n this.elementRecorder = null;\n this.timelineCount = null;\n }\n\n private animateByTimeline(\n config: IParsedAnimationConfig,\n elements: IElement[],\n parameters: any,\n forceState: boolean = false\n ) {\n const animators: IAnimator[] = [];\n const animatedElements = elements.filter(element => {\n // do not animate on element which is running exit animation\n // if an element is reserved, it should be set for exit animation and will be removed\n const checkExit = !(element.isReserved && element.diffState === DiffState.exit);\n // do not check animation state if forceState is set\n const state = this.getAnimationState(element);\n const checkDisabled = !this.disabledStates.includes(state);\n const checkState = forceState || state === config.state;\n // filter elements by partitioner config\n const checkPartitioner =\n !config.timeline.partitioner || config.timeline.partitioner(element.getDatum(), element, parameters);\n return checkExit && checkDisabled && checkState && checkPartitioner;\n });\n\n if (animatedElements.length) {\n if (isNil(this.timelineCount[config.id])) {\n this.timelineCount[config.id] = 0;\n }\n\n if (config.timeline.sort) {\n animatedElements.sort((elementA, elementB) => {\n return config.timeline.sort(elementA.getDatum(), elementB.getDatum(), elementA, elementB, parameters);\n });\n }\n const width = this.mark.view.width();\n const height = this.mark.view.height();\n animatedElements.forEach((element, index) => {\n const animationParameters: IAnimationParameters = {\n width,\n height,\n group: this.mark.group ?? null,\n mark: this.mark,\n view: this.mark.view,\n elementCount: animatedElements.length,\n elementIndex: index\n };\n // add animation parameter into parameters\n const mergedParameters = Object.assign({ [DefaultAnimationParameters]: animationParameters }, parameters);\n const animationUnit = this.getAnimationUnit(\n config.timeline,\n element,\n index,\n animatedElements.length,\n mergedParameters\n );\n animators.push(this.animateElement(config, animationUnit, element, animationParameters, mergedParameters));\n });\n }\n return animators;\n }\n\n private animateElement(\n config: IParsedAnimationConfig,\n animationUnit: IAnimationUnit,\n element: IElement,\n animationParameters: IAnimationParameters,\n parameters: any\n ) {\n // create animator\n const animator = new Animator(element, animationUnit, config);\n\n // start animating\n animator.animate(animationParameters, parameters);\n // return when animator has no valid animation\n if (!animator.isAnimating) {\n return;\n }\n if (element.diffState === DiffState.exit) {\n element.isReserved = true;\n }\n\n const isFirstAnimator = this.timelineCount[config.id] === 0;\n\n this.timelineCount[config.id] += 1;\n const elementRecord = this.elementRecorder.get(element) ?? { prevState: config.state, count: {} };\n elementRecord.prevState = config.state;\n elementRecord.count[config.state] = (elementRecord.count[config.state] ?? 0) + 1;\n this.elementRecorder.set(element, elementRecord);\n const stateData = this.animators.get(config.state);\n if (!stateData) {\n this.animators.set(config.state, [animator]);\n } else {\n stateData.push(animator);\n }\n // this.animators.set(config.state, (this.animators.get(config.state) ?? []).concat(animator));\n // invoke callback when animation finish\n animator.callback(() => {\n this.handleAnimatorEnd(animator);\n });\n\n // FIXME: handle multiple timelines with same animation state\n // emit animation start event\n const animationEvent: AnimationEvent = {\n mark: this.mark,\n animationState: config.state,\n animationConfig: config.originConfig\n };\n if (isFirstAnimator) {\n this.mark.emit(HOOK_EVENT.ANIMATION_START, animationEvent);\n }\n this.mark.emit(HOOK_EVENT.ELEMENT_ANIMATION_START, animationEvent, element);\n\n return animator;\n }\n\n private getAnimationState(element: IElement): string {\n const customState = invokeFunctionType(this.state, this.mark.parameters(), element.getDatum(), element);\n return customState ?? element.diffState;\n }\n\n private getAnimationUnit(\n timeline: IAnimationTimeline,\n element: IElement,\n index: number,\n elementCount: number,\n parameters: any\n ): IAnimationUnit {\n const timeSlices: IAnimationTimeSlice[] = [];\n const startTime = invokeAnimateSpec(timeline.startTime, element, parameters);\n const totalTime = invokeAnimateSpec(timeline.totalTime, element, parameters);\n const oneByOne = invokeAnimateSpec(timeline.oneByOne, element, parameters);\n const loop = invokeAnimateSpec(timeline.loop, element, parameters);\n\n let loopTime = 0;\n (timeline.timeSlices as IAnimationTimeSlice[]).forEach(timeSlice => {\n const delay = invokeAnimateSpec(timeSlice.delay, element, parameters);\n const delayAfter = invokeAnimateSpec(timeSlice.delayAfter, element, parameters);\n const duration = invokeAnimateSpec(timeSlice.duration, element, parameters) ?? totalTime / elementCount;\n const effects = array(timeSlice.effects).map(effect =>\n Object.assign({}, effect, {\n customParameters: invokeAnimateSpec(effect.customParameters, element, parameters)\n })\n );\n timeSlices.push({\n effects,\n duration,\n delay,\n delayAfter\n });\n loopTime += delay + duration + delayAfter;\n });\n\n const oneByOneDelay = isNumber(oneByOne) ? oneByOne : oneByOne === true ? loopTime : 0;\n return {\n initialDelay: startTime,\n loopCount: isNumber(loop) ? loop : loop === true ? Infinity : 1,\n loopDelay: oneByOneDelay * index,\n loopDelayAfter: oneByOneDelay * (elementCount - index - 1),\n loopAnimateDuration: loopTime,\n loopDuration: loopTime + oneByOneDelay * (elementCount - 1),\n totalTime,\n timeSlices\n };\n }\n\n private clearElementAnimation(element: IElement, clearElement: boolean = true) {\n this.animators.forEach(animators => {\n animators.forEach(animator => {\n if (animator.element === element) {\n // if previous animation state is exit, modify graphic item channel to start\n if (animator.animationOptions.state === DiffState.exit) {\n animator.stop('start', false);\n } else {\n animator.stop('end', false);\n }\n this.handleAnimatorEnd(animator, clearElement);\n }\n });\n });\n this.elementRecorder.delete(element);\n }\n\n private clearAllElements() {\n const elements = this.mark.getAllElements();\n if (elements) {\n elements.forEach((element, i) => {\n // only update mark in previous invocation\n this.clearElement(element, i === elements.length - 1);\n });\n }\n }\n\n private clearElement(element: IElement, updateMark: boolean = true) {\n this.clearElementAnimation(element);\n // element might already be released\n if (element.getGraphicItem()) {\n // if element stops animating or needs to be removed, clear all cached attributes\n element.clearGraphicAttributes();\n // remove element from mark if exit animation is finished\n if (element.diffState === DiffState.exit) {\n element.isReserved = false;\n }\n if (updateMark) {\n this.mark.cleanExitElements();\n }\n // TODO: waiting for vRender to optimize bound cache logic, otherwise this line\n // will cause huge performance waste in multiple animation like appear & disappear.\n // if (updateMark) mark.updateBounds();\n }\n }\n\n private handleAnimatorEnd(animator: IAnimator, clearElement: boolean = true) {\n const element = animator.element;\n const animationOptions = animator.animationOptions;\n const animationState = animationOptions.state;\n const isImmediateAnimation = animationState === ImmediateAnimationState;\n\n // sub element animation count\n const stateAnimationCounts = this.elementRecorder.get(element).count;\n stateAnimationCounts[animationState] -= 1;\n // FIXME: maybe delete zero animationState\n // if (stateAnimationCounts[animationState] === 0) {\n // delete stateAnimationCounts[animationState];\n // }\n\n this.animators.set(\n animationState,\n this.animators.get(animationState).filter(ani => ani !== animator)\n );\n if (this.animators.get(animationState).length === 0) {\n this.animators.delete(animationState);\n }\n this.timelineCount[animationOptions.id] -= 1;\n const isLastAnimator = this.timelineCount[animationOptions.id] === 0;\n\n const originAnimationConfig = isImmediateAnimation\n ? this.immediateConfigs.find(config => config.id === animationOptions.id).originConfig\n : this.configs.find(config => config.id === animationOptions.id).originConfig;\n if (isLastAnimator) {\n delete this.timelineCount[animationOptions.id];\n // delete config when immediate executed animation is finished\n if (isImmediateAnimation) {\n this.immediateConfigs = this.immediateConfigs.filter(config => config.id !== animationOptions.id);\n }\n }\n\n if (clearElement) {\n if (Object.keys(this.timelineCount).length === 0) {\n this.clearAllElements();\n } else if (animationState === DiffState.exit && stateAnimationCounts[DiffState.exit] === 0) {\n // if all exit animations are finished\n this.clearElement(element);\n }\n }\n\n // emit animation end event\n const animationEvent: AnimationEvent = {\n mark: this.mark,\n animationState,\n animationConfig: originAnimationConfig\n };\n if (isLastAnimator) {\n this.mark.emit(HOOK_EVENT.ANIMATION_END, animationEvent);\n }\n this.mark.emit(HOOK_EVENT.ELEMENT_ANIMATION_END, animationEvent, element);\n }\n}\n"]}
|