@visactor/vrender-core 0.17.20-alpha.3 → 0.17.20-alpha.6
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/graphic/graphic.js +2 -1
- package/cjs/graphic/graphic.js.map +1 -1
- package/cjs/graphic/group.d.ts +1 -1
- package/cjs/graphic/group.js +2 -2
- package/cjs/graphic/group.js.map +1 -1
- package/cjs/graphic/node-tree.d.ts +1 -1
- package/cjs/graphic/node-tree.js +1 -1
- package/cjs/graphic/node-tree.js.map +1 -1
- package/cjs/interface/node-tree.d.ts +1 -1
- package/cjs/interface/node-tree.js.map +1 -1
- package/cjs/plugins/builtin-plugin/html-attribute-plugin.js +24 -20
- package/cjs/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
- package/cjs/render/contributions/render/area-render.js +4 -2
- package/cjs/render/contributions/render/area-render.js.map +1 -1
- package/es/graphic/graphic.js +2 -1
- package/es/graphic/graphic.js.map +1 -1
- package/es/graphic/group.d.ts +1 -1
- package/es/graphic/group.js +2 -2
- package/es/graphic/group.js.map +1 -1
- package/es/graphic/node-tree.d.ts +1 -1
- package/es/graphic/node-tree.js +1 -1
- package/es/graphic/node-tree.js.map +1 -1
- package/es/interface/node-tree.d.ts +1 -1
- package/es/interface/node-tree.js.map +1 -1
- package/es/plugins/builtin-plugin/html-attribute-plugin.js +24 -20
- package/es/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
- package/es/render/contributions/render/area-render.js +4 -2
- package/es/render/contributions/render/area-render.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graphic/node-tree.ts"],"names":[],"mappings":"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","file":"node-tree.js","sourcesContent":["import type { Dict, LooseFunction } from '@visactor/vutils';\nimport { EventEmitter, Logger, isBoolean, isFunction, isObject } from '@visactor/vutils';\nimport { Generator } from '../common/generator';\nimport type { INode, IGroup } from '../interface';\n\nexport class Node extends EventEmitter<any, any> implements INode {\n parent: any;\n declare name: string;\n declare id: string | number;\n\n declare _uid: number;\n _prev?: INode;\n _next?: INode;\n protected _firstChild: INode | null;\n protected _lastChild: INode | null;\n protected _idMap?: Map<number, INode>;\n protected _count: number;\n // protected _dirty?: boolean; // dirty表示属性是否有修改\n protected _structEdit?: boolean; // 树的结构是否发生修改\n protected _nodeList?: INode[]; // 用于有顺序的插入(正常情况用不到)\n\n declare _ignoreWarn?: boolean;\n\n get previousSibling(): INode | null {\n return this._prev;\n }\n\n get nextSibling(): INode | null {\n return this._next;\n }\n\n get children(): INode[] {\n return this.getChildren();\n }\n get firstChild(): INode | null {\n return this._firstChild;\n }\n get lastChild(): INode | null {\n return this._lastChild;\n }\n get count(): number {\n return this._count;\n }\n get childrenCount(): number {\n if (!this._idMap) {\n return 0;\n }\n return this._idMap.size;\n }\n // get dirty(): boolean {\n // return !!this._dirty;\n // }\n\n constructor() {\n super();\n this._uid = Generator.GenAutoIncrementId();\n this._firstChild = null;\n this._lastChild = null;\n this.parent = null;\n this._count = 1;\n }\n\n forEachChildren<T extends INode = INode>(cb: (item: T, index: number) => void | boolean, reverse: boolean = false) {\n if (reverse) {\n let child = this._lastChild;\n let i = 0;\n while (child) {\n const breakTag = cb(child as T, i++);\n if (breakTag) {\n return;\n }\n child = child._prev;\n }\n } else {\n let child = this._firstChild;\n let i = 0;\n while (child) {\n const breakTag = cb(child as T, i++);\n if (breakTag) {\n return;\n }\n child = child._next;\n }\n }\n }\n\n async forEachChildrenAsync<T extends INode = INode>(\n cb: (item: T, index: number) => Promise<void | boolean> | void | boolean,\n reverse: boolean = false\n ) {\n if (reverse) {\n let child = this._lastChild;\n let i = 0;\n while (child) {\n let breakTag = cb(child as T, i++);\n if ((breakTag as any).then) {\n breakTag = await breakTag;\n }\n if (breakTag) {\n return;\n }\n child = child._prev;\n }\n } else {\n let child = this._firstChild;\n let i = 0;\n while (child) {\n let breakTag = cb(child as T, i++);\n if ((breakTag as any).then) {\n breakTag = await breakTag;\n }\n if (breakTag) {\n return;\n }\n child = child._next;\n }\n }\n }\n\n forEach<T extends INode = INode>(cb: (item: T, index: number) => void): void {\n return this.forEachChildren<T>(cb);\n }\n\n /**\n * 方法将一个节点附加到指定父节点的子节点列表的末尾处。\n * 如果将被插入的节点已经存在于当前文档的文档树中,那么 appendChild() 只会将它从原先的位置移动到新的位置(不需要事先移除要移动的节点)。\n * 不能append父级元素\n * @param node 要插入的节点\n */\n appendChild(node: INode, highPerformance: boolean = true): INode | null {\n if (this._uid === node._uid) {\n return null;\n }\n if (!highPerformance && node.isAncestorsOf(this)) {\n throw new Error('【Node::appendChild】不能将父辈元素append为子元素');\n }\n\n // 清理该节点的上次关系\n node.parent && node.parent.removeChild(node);\n node.parent = this as unknown as Node;\n\n if (!this._lastChild) {\n this._firstChild = this._lastChild = node;\n node._prev = node._next = null;\n } else {\n this._lastChild._next = node;\n node._prev = this._lastChild;\n this._lastChild = node;\n }\n if (!this._idMap) {\n this._idMap = new Map();\n }\n this._idMap.set(node._uid, node);\n\n this.setCount(node.count);\n\n this._structEdit = true;\n return node;\n }\n\n /**\n * 方法将一个节点数组附加到指定父节点的子节点列表的末尾处。\n * 不会判断元素是否是自身以及是否是父元素或者是否是其他节点的子元素\n * @param nodes 要插入的节点数组\n */\n appendChildArrHighPerformance(nodes: INode[], replace: boolean = false): INode[] | null {\n console.error('暂不支持该函数');\n\n return nodes;\n }\n\n /**\n * 方法在参考节点之前插入一个拥有指定父节点的子节点。\n * 如果给定的子节点是对文档中现有节点的引用,\n * insertBefore() 会将其从当前位置移动到新位置(在将节点附加到其他节点之前,不需要从其父节点删除该节点)。\n * 不能insert父级元素\n * @param newNode 要插入的节点\n * @param referenceNode 插入到referenceNode之前\n */\n insertBefore(newNode: INode, referenceNode: INode | undefined): INode | null {\n if (!referenceNode) {\n return this.appendChild(newNode);\n }\n if (this._uid === newNode._uid) {\n return null;\n }\n if (newNode.isAncestorsOf(this)) {\n throw new Error('【Node::insertBefore】不能将父辈元素insert为子元素');\n }\n if (referenceNode.parent !== (this as unknown as Node)) {\n return null;\n }\n\n newNode.parent && newNode.parent.removeChild(newNode);\n newNode.parent = this as unknown as Node;\n\n newNode._prev = referenceNode._prev;\n if (!referenceNode._prev) {\n this._firstChild = newNode;\n } else {\n referenceNode._prev._next = newNode;\n }\n referenceNode._prev = newNode;\n newNode._next = referenceNode;\n if (!this._idMap) {\n this._idMap = new Map();\n }\n this._idMap.set(newNode._uid, newNode);\n\n this._structEdit = true;\n this.setCount(newNode.count);\n\n return newNode;\n }\n\n /**\n * 方法在参考节点之后插入一个拥有指定父节点的子节点。\n * 如果给定的子节点是对文档中现有节点的引用,\n * insertAfter() 会将其从当前位置移动到新位置(在将节点附加到其他节点之前,不需要从其父节点删除该节点)。\n * 不能insert父级元素\n * @param newNode 要插入的节点\n * @param referenceNode 插入到referenceNode之后\n */\n insertAfter(newNode: INode, referenceNode: INode | undefined): INode | null {\n if (!referenceNode) {\n return this.appendChild(newNode);\n }\n if (this._uid === newNode._uid) {\n return null;\n }\n if (newNode.isAncestorsOf(this)) {\n throw new Error('【Node::insertAfter】不能将父辈元素insert为子元素');\n }\n if (referenceNode.parent !== (this as unknown as Node)) {\n return null;\n }\n\n newNode.parent && newNode.parent.removeChild(newNode);\n newNode.parent = this as unknown as Node;\n\n if (!referenceNode._next) {\n this._lastChild = newNode;\n } else {\n referenceNode._next._prev = newNode;\n newNode._next = referenceNode._next;\n }\n referenceNode._next = newNode;\n newNode._prev = referenceNode;\n if (!this._idMap) {\n this._idMap = new Map();\n }\n this._idMap.set(newNode._uid, newNode);\n\n this._structEdit = true;\n this.setCount(newNode.count);\n\n return newNode;\n }\n\n /**\n * 方法在参考节点之前插入一个拥有指定父节点的子节点。\n * 如果给定的子节点是对文档中现有节点的引用,\n * insertBefore() 会将其从当前位置移动到新位置(在将节点附加到其他节点之前,不需要从其父节点删除该节点)。\n * 不能insert父级元素\n * @param newNode 要插入的节点\n * @param referenceNode 插入到referenceNode之前\n */\n insertInto(newNode: INode, idx: number): INode | null {\n if (!this._ignoreWarn && this._nodeList) {\n Logger.getInstance().warn('insertIntoKeepIdx和insertInto混用可能会存在错误');\n }\n if (idx >= this.childrenCount) {\n return this.appendChild(newNode);\n }\n if (this._uid === newNode._uid) {\n return null;\n }\n if (newNode.isAncestorsOf(this)) {\n throw new Error('【Node::insertBefore】不能将父辈元素insert为子元素');\n }\n\n newNode.parent && newNode.parent.removeChild(newNode);\n newNode.parent = this as unknown as Node;\n\n if (idx === 0) {\n newNode._next = this._firstChild;\n this._firstChild && (this._firstChild._prev = newNode);\n newNode._prev = null;\n this._firstChild = newNode;\n } else {\n let child = this._firstChild;\n for (let i = 0; i < idx; i++) {\n if (!child) {\n return null;\n }\n if (i > 0) {\n child = child._next;\n }\n }\n if (!child) {\n return null;\n }\n newNode._next = child._next;\n newNode._prev = child;\n child._next = newNode;\n if (newNode._next) {\n newNode._next._prev = newNode;\n }\n }\n if (!this._idMap) {\n this._idMap = new Map();\n }\n this._idMap.set(newNode._uid, newNode);\n\n // // 预期不会执行\n // if (idx === this.childrenCount) {\n // this._lastChild = newNode;\n // }\n this._structEdit = true;\n this.setCount(newNode.count);\n\n return newNode;\n }\n\n /**\n * 相比于insertInto,会保持idx顺序,举例:\n * 先插入idx:6的元素,再插入idx:2的元素,此时idx:2的元素会放置在idx为6的元素之前\n */\n insertIntoKeepIdx(newNode: INode, idx: number): INode | null {\n if (!this._nodeList) {\n this._nodeList = this.children;\n }\n // 如果这个位置有了,那就将这个位置之前的元素向后移动\n if (this._nodeList[idx]) {\n const node = this._nodeList[idx];\n this._nodeList.splice(idx, 0, newNode);\n return this.insertBefore(newNode, node);\n }\n // 查找idx之前的元素,插入到其后面\n this._nodeList[idx] = newNode;\n let node: INode | undefined;\n for (let i = idx - 1; i >= 0; i--) {\n node = this._nodeList[i];\n if (node) {\n break;\n }\n }\n if (node) {\n return node._next ? this.insertBefore(newNode, node._next) : this.appendChild(newNode);\n }\n this._ignoreWarn = true;\n const data = this.insertInto(newNode, 0);\n this._ignoreWarn = false;\n return data;\n }\n\n /**\n * 方法从DOM中删除一个子节点。返回删除的节点。\n * @param child 要删除的子节点\n */\n removeChild(child: INode): INode | null {\n if (!this._idMap) {\n return null;\n }\n if (!this._idMap.has(child._uid)) {\n return null;\n }\n this._idMap.delete(child._uid);\n if (this._nodeList) {\n // 找到idx\n const idx = this._nodeList.findIndex(n => n === child);\n if (idx > 0) {\n this._nodeList.splice(idx, 1);\n }\n }\n\n if (!child._prev) {\n this._firstChild = child._next;\n } else {\n child._prev._next = child._next;\n }\n if (child._next) {\n child._next._prev = child._prev;\n } else {\n this._lastChild = child._prev;\n }\n\n // 重置属性\n child.parent = null;\n child._prev = null;\n child._next = null;\n\n this._structEdit = true;\n this.setCount(-child.count);\n\n return child;\n }\n\n /**\n * 从当前节点的父节点删除当前节点\n */\n delete() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n }\n\n /**\n * 删除所有的孩子节点\n */\n removeAllChild() {\n if (!this._idMap) {\n return;\n }\n let child = this._firstChild;\n while (child) {\n const next = child._next;\n child.parent = null;\n // child._rootNode = child;\n child._prev = null;\n child._next = null;\n child = child._next;\n child = next;\n }\n\n this._firstChild = null;\n this._lastChild = null;\n this._idMap.clear();\n\n this._structEdit = true;\n this.setCount(-this._count + 1);\n }\n\n /**\n * 方法用指定的节点替换当前节点的一个子节点,并返回被替换掉的节点。\n * 如果该节点已经存在于DOM树中,则它首先会被从原始位置删除。\n * 不能replace父级元素\n * @param newChild 新节点\n * @param oldChild 旧节点\n */\n replaceChild(newChild: INode, oldChild: INode): INode | null {\n throw new Error('暂不支持');\n }\n\n /**\n * 根据自定义逻辑查找元素,返回单一图形元素\n * @param callback 自定义查找过滤器\n * @param deep 是否进行深度查找,默认为 false\n * @returns 返回匹配的图形元素\n */\n find<T extends INode = INode>(callback: (node: T, index: number) => boolean, deep: boolean = false): T | null {\n let target: T | null = null;\n this.forEachChildren((node: T, index: number) => {\n if (node !== (this as unknown as INode) && callback(node, index)) {\n target = node;\n return true; // 提前退出循环\n }\n return false;\n });\n\n if (deep) {\n this.forEachChildren(child => {\n if ((child as IGroup).isContainer) {\n const node = (child as IGroup).find(callback, true) as T;\n if (node) {\n target = node;\n return true; // 提前退出循环\n }\n }\n return false;\n });\n }\n\n return target;\n }\n\n /**\n * 根据自定义逻辑查找元素,返回匹配的元素集合\n * @param callback 自定义查找过滤器\n * @param deep 是否进行深度查找,默认为 false\n * @returns 返回匹配的图形元素集合\n */\n findAll<T extends INode = INode>(callback: (node: T, index: number) => boolean, deep: boolean = false): T[] {\n let nodes: T[] = [];\n this.forEachChildren((node: T, index) => {\n if (node !== (this as unknown as INode) && callback(node, index)) {\n nodes.push(node);\n }\n });\n\n if (deep) {\n this.forEachChildren(child => {\n if ((child as IGroup).isContainer) {\n const targets = (child as IGroup).findAll(callback, true) as T[];\n if (targets.length) {\n nodes = nodes.concat(targets);\n }\n }\n });\n }\n return nodes;\n }\n\n /**\n * 通过用户设置的 id 查找对应的图形元素\n * @param id 子节点的 id\n */\n getElementById(id: string | number): INode | null {\n return this.find(node => node.id === id, true);\n }\n\n /**\n * @alias getElementById\n * 通过用户设置的 id 查找对应的图形元素\n * @param id 子节点的 id\n */\n findChildById(id: string | number): INode | null {\n return this.getElementById(id);\n }\n\n /**\n * 通过内部生成的节点 id:_uid 查找对应的图形元素\n * @param id 子节点的key\n */\n findChildByUid(uid: number): INode | null {\n if (!this._idMap) {\n return null;\n }\n return this._idMap.get(uid) || null;\n }\n\n /**\n * 根据用户传入的 name 查找元素,返回匹配的元素集合\n * @param name 用户设置的图形名称\n * @returns 匹配 name 的元素集合\n */\n getElementsByName(name: string) {\n return this.findAll(node => node.name === name, true);\n }\n\n /**\n * @alias getElementsByName\n * 根据用户传入的 name 查找元素,返回匹配的元素集合\n * @param name 用户设置的图形名称\n * @returns 匹配 name 的元素集合\n */\n findChildrenByName(name: string) {\n return this.getElementsByName(name);\n }\n /**\n * 根据用户传入的 type 查找元素,返回匹配的元素集合\n * @param type 用户设置的图形类型\n * @returns 匹配 type 的元素集合\n */\n getElementsByType(type: string) {\n return this.findAll(node => node.type === type, true);\n }\n\n /**\n * 根据名字查找元素,只返回第一个查找到的元素\n * @deprecated 待 vis-component & chartspace 修改之后删除\n * @param name\n * @param deep\n * @returns\n */\n getChildByName(name: string, deep: boolean = false) {\n return this.find(node => node.name === name, deep);\n }\n\n getChildAt(idx: number): INode | null {\n let c = this._firstChild;\n if (!c) {\n return null;\n }\n for (let i = 0; i < idx; i++) {\n if (!c._next) {\n return null;\n }\n c = c._next;\n }\n return c;\n }\n\n at(idx: number): INode | null {\n return this.getChildAt(idx);\n }\n\n /**\n * 返回的是一个布尔值,来表示传入的节点是否为该节点的后代节点。\n * @param node 判断是否包含的节点\n */\n containNode(node: INode): boolean {\n if (!this._idMap) {\n return false;\n }\n if (this._idMap.has(node._uid)) {\n return true;\n }\n let child = this._firstChild;\n while (child) {\n if (child.containNode(node)) {\n return true;\n }\n child = child._next;\n }\n return false;\n }\n\n /**\n * 方法返回上下文中的根节点,不常用\n */\n getRootNode(): INode {\n let parent = this.parent;\n while (parent?.parent) {\n parent = parent.parent;\n }\n return parent || this;\n }\n\n /**\n * 方法返回一个布尔值,表明当前节点是否包含有子节点.\n */\n hasChildNodes(): boolean {\n return this._firstChild !== null;\n }\n\n /* 语法糖 */\n addChild(node: INode): INode | null {\n return this.appendChild(node);\n }\n add(node: INode): INode | null {\n return this.appendChild(node);\n }\n getChildren(): INode[] {\n const nodes: INode[] = [];\n let child = this._firstChild;\n while (child) {\n nodes.push(child);\n child = child._next;\n }\n return nodes;\n }\n\n /**\n * 判断该节点是否是node的子节点\n * @param node\n */\n isChildOf(node: INode): boolean {\n if (!this.parent) {\n return false;\n }\n return this.parent._uid === node._uid;\n }\n\n /**\n * 判断该节点是否是node的父节点\n * @param node\n */\n isParentOf(node: INode): boolean {\n return node.isChildOf(this);\n }\n\n /**\n * 判断节点是否是node的后代节点\n * @param node\n */\n isDescendantsOf(node: INode): boolean {\n let parent = this.parent;\n if (!parent) {\n return false;\n }\n do {\n if (parent._uid === node._uid) {\n return true;\n }\n parent = parent.parent;\n } while (parent !== null);\n\n return false;\n }\n\n /**\n * 判断节点是否是node的祖先节点\n * @param node\n */\n isAncestorsOf(node: INode): boolean {\n return node.isDescendantsOf(this);\n }\n\n getAncestor(idx: number): INode {\n throw new Error('暂不支持');\n }\n\n /**\n * 设置该节点的所有后代节点某个属性\n * @param propsName 属性名\n * @param propsValue 属性值\n */\n setAllDescendantsProps(propsName: string, propsValue: any) {\n let child = this._firstChild;\n while (child) {\n child[propsName] = propsValue;\n child.setAllDescendantsProps(propsName, propsValue);\n child = child._next;\n }\n }\n /**\n * 设置当前节点的count属性,会更改父节点的count属性\n * @param deltaCount delta count\n */\n private setCount(deltaCount: number): void {\n this._count += deltaCount;\n let parent = this.parent;\n if (!parent) {\n return;\n }\n do {\n parent._count += deltaCount;\n parent = parent.parent;\n } while (parent !== null);\n }\n\n clone(): INode {\n throw new Error('暂不支持');\n }\n\n /**\n * clone to node\n * @param node\n */\n cloneTo(node: INode): void {\n throw new Error('暂不支持');\n }\n\n /***************语法糖***************/\n getParent(): INode | null {\n return this.parent;\n }\n\n del(child: INode): INode | null {\n return this.removeChild(child);\n }\n\n // 事件相关别名\n /**\n * @alias on\n * @param type\n * @param listener\n * @param options\n */\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject | LooseFunction,\n options?: AddEventListenerOptions | boolean\n ) {\n const capture =\n (isBoolean(options, true) && options) || (isObject(options) && (options as AddEventListenerOptions).capture);\n const once = isObject(options) && (options as AddEventListenerOptions).once;\n const context = isFunction(listener) ? undefined : listener;\n\n type = capture ? `${type}capture` : type;\n listener = isFunction(listener) ? (listener as LooseFunction) : (listener as EventListenerObject).handleEvent;\n\n if (once) {\n super.once(type, listener, context);\n } else {\n super.on(type, listener, context);\n }\n return this;\n }\n\n on(\n type: string,\n listener: EventListenerOrEventListenerObject | LooseFunction,\n options?: AddEventListenerOptions | boolean\n ) {\n return this.addEventListener(type, listener, options);\n }\n\n /**\n * @alias off\n * @param type\n * @param listener\n * @param options\n * @returns\n */\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject | LooseFunction,\n options?: AddEventListenerOptions | boolean\n ) {\n const capture =\n (isBoolean(options, true) && options) || (isObject(options) && (options as AddEventListenerOptions).capture);\n const context = isFunction(listener) ? undefined : listener;\n\n type = capture ? `${type}capture` : type;\n listener = isFunction(listener) ? (listener as LooseFunction) : (listener as EventListenerObject).handleEvent;\n\n const once = isObject(options) && (options as AddEventListenerOptions).once;\n super.off(type, listener, context, once);\n\n return this;\n }\n\n /**\n * @alias off\n * @param type\n * @param listener\n * @param options\n * @returns\n */\n off(\n type: string,\n listener: EventListenerOrEventListenerObject | LooseFunction,\n options?: AddEventListenerOptions | boolean\n ) {\n return this.removeEventListener(type, listener, options);\n }\n\n once(\n type: string,\n listener: EventListenerOrEventListenerObject | LooseFunction,\n options?: AddEventListenerOptions | boolean\n ) {\n if (isObject(options)) {\n options.once = true;\n return this.addEventListener(type, listener, options);\n }\n return this.addEventListener(type, listener, { once: true });\n }\n\n removeAllEventListeners() {\n super.removeAllListeners();\n return this;\n }\n\n removeAllListeners(): this {\n return this.removeAllEventListeners();\n }\n\n dispatchEvent(event: any, ...args: any) {\n super.emit(event.type, event, ...args);\n return !event.defaultPrevented;\n }\n\n emit(event: any, data?: Dict<any>) {\n return this.dispatchEvent(event, data);\n }\n\n release() {\n // 卸载事件\n this.removeAllListeners();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/graphic/node-tree.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,MAAM,OAAO,IAAK,SAAQ,YAAsB;IAkB9C,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IACD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IACD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,IAAI,aAAa;QACf,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO,CAAC,CAAC;SACV;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAKD;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,kBAAkB,EAAE,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,eAAe,CAA0B,EAA8C,EAAE,UAAmB,KAAK;QAC/G,IAAI,OAAO,EAAE;YACX,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO,KAAK,EAAE;gBACZ,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAU,EAAE,CAAC,EAAE,CAAC,CAAC;gBACrC,IAAI,QAAQ,EAAE;oBACZ,OAAO;iBACR;gBACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;aACrB;SACF;aAAM;YACL,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO,KAAK,EAAE;gBACZ,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAU,EAAE,CAAC,EAAE,CAAC,CAAC;gBACrC,IAAI,QAAQ,EAAE;oBACZ,OAAO;iBACR;gBACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;aACrB;SACF;IACH,CAAC;IAEK,oBAAoB,CACxB,EAAwE,EACxE,UAAmB,KAAK;;YAExB,IAAI,OAAO,EAAE;gBACX,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;gBAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,OAAO,KAAK,EAAE;oBACZ,IAAI,QAAQ,GAAG,EAAE,CAAC,KAAU,EAAE,CAAC,EAAE,CAAC,CAAC;oBACnC,IAAK,QAAgB,CAAC,IAAI,EAAE;wBAC1B,QAAQ,GAAG,MAAM,QAAQ,CAAC;qBAC3B;oBACD,IAAI,QAAQ,EAAE;wBACZ,OAAO;qBACR;oBACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;iBACrB;aACF;iBAAM;gBACL,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,OAAO,KAAK,EAAE;oBACZ,IAAI,QAAQ,GAAG,EAAE,CAAC,KAAU,EAAE,CAAC,EAAE,CAAC,CAAC;oBACnC,IAAK,QAAgB,CAAC,IAAI,EAAE;wBAC1B,QAAQ,GAAG,MAAM,QAAQ,CAAC;qBAC3B;oBACD,IAAI,QAAQ,EAAE;wBACZ,OAAO;qBACR;oBACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;iBACrB;aACF;QACH,CAAC;KAAA;IAED,OAAO,CAA0B,EAAoC;QACnE,OAAO,IAAI,CAAC,eAAe,CAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IAQD,WAAW,CAAC,IAAW,EAAE,kBAA2B,IAAI;QACtD,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;YAC3B,OAAO,IAAI,CAAC;SACb;QACD,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAChD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;SACzD;QAGD,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,IAAuB,CAAC;QAEtC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SAChC;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;YAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SACxB;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;SACzB;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAEjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAOD,6BAA6B,CAAC,KAAc,EAAE,UAAmB,KAAK;QACpE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEzB,OAAO,KAAK,CAAC;IACf,CAAC;IAUD,YAAY,CAAC,OAAc,EAAE,aAAgC;QAC3D,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SAClC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE;YAC9B,OAAO,IAAI,CAAC;SACb;QACD,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;SAC1D;QACD,IAAI,aAAa,CAAC,MAAM,KAAM,IAAwB,EAAE;YACtD,OAAO,IAAI,CAAC;SACb;QAED,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,CAAC,MAAM,GAAG,IAAuB,CAAC;QAEzC,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;QACpC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;YACxB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;SAC5B;aAAM;YACL,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;SACrC;QACD,aAAa,CAAC,KAAK,GAAG,OAAO,CAAC;QAC9B,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;SACzB;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE7B,OAAO,OAAO,CAAC;IACjB,CAAC;IAUD,WAAW,CAAC,OAAc,EAAE,aAAgC;QAC1D,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SAClC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE;YAC9B,OAAO,IAAI,CAAC;SACb;QACD,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;SACzD;QACD,IAAI,aAAa,CAAC,MAAM,KAAM,IAAwB,EAAE;YACtD,OAAO,IAAI,CAAC;SACb;QAED,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,CAAC,MAAM,GAAG,IAAuB,CAAC;QAEzC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;YACxB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;SAC3B;aAAM;YACL,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;YACpC,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;SACrC;QACD,aAAa,CAAC,KAAK,GAAG,OAAO,CAAC;QAC9B,OAAO,CAAC,KAAK,GAAG,aAAa,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;SACzB;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE7B,OAAO,OAAO,CAAC;IACjB,CAAC;IAUD,UAAU,CAAC,OAAc,EAAE,GAAW;QACpC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE;YACvC,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;SACpE;QACD,IAAI,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE;YAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SAClC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE;YAC9B,OAAO,IAAI,CAAC;SACb;QACD,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;SAC1D;QAED,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,CAAC,MAAM,GAAG,IAAuB,CAAC;QAEzC,IAAI,GAAG,KAAK,CAAC,EAAE;YACb,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;YACjC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC;YACvD,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;SAC5B;aAAM;YACL,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC5B,IAAI,CAAC,KAAK,EAAE;oBACV,OAAO,IAAI,CAAC;iBACb;gBACD,IAAI,CAAC,GAAG,CAAC,EAAE;oBACT,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;iBACrB;aACF;YACD,IAAI,CAAC,KAAK,EAAE;gBACV,OAAO,IAAI,CAAC;aACb;YACD,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAC5B,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;YACtB,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;YACtB,IAAI,OAAO,CAAC,KAAK,EAAE;gBACjB,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;aAC/B;SACF;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;SACzB;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAMvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE7B,OAAO,OAAO,CAAC;IACjB,CAAC;IAMD,iBAAiB,CAAC,OAAc,EAAE,GAAW;QAC3C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;SAChC;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SACzC;QAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;QAC9B,IAAI,IAAuB,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YACjC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,IAAI,EAAE;gBACR,MAAM;aACP;SACF;QACD,IAAI,IAAI,EAAE;YACR,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SACxF;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAMD,WAAW,CAAC,KAAY;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO,IAAI,CAAC;SACb;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAChC,OAAO,IAAI,CAAC;SACb;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,SAAS,EAAE;YAElB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;YACvD,IAAI,GAAG,GAAG,CAAC,EAAE;gBACX,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aAC/B;SACF;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YAChB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;SAChC;aAAM;YACL,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;SACjC;QACD,IAAI,KAAK,CAAC,KAAK,EAAE;YACf,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;SACjC;aAAM;YACL,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;SAC/B;QAGD,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QACnB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QAEnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAE5B,OAAO,KAAK,CAAC;IACf,CAAC;IAKD,MAAM;QACJ,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SAC/B;IACH,CAAC;IAKD,cAAc,CAAC,IAAc;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO;SACR;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;QAC7B,OAAO,KAAK,EAAE;YACZ,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;YACzB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;YAEpB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YACpB,KAAK,GAAG,IAAI,CAAC;SACd;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClC,CAAC;IASD,YAAY,CAAC,QAAe,EAAE,QAAe;QAC3C,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAQD,IAAI,CAA0B,QAA6C,EAAE,OAAgB,KAAK;QAChG,IAAI,MAAM,GAAa,IAAI,CAAC;QAC5B,IAAI,CAAC,eAAe,CAAC,CAAC,IAAO,EAAE,KAAa,EAAE,EAAE;YAC9C,IAAI,IAAI,KAAM,IAAyB,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;gBAChE,MAAM,GAAG,IAAI,CAAC;gBACd,OAAO,IAAI,CAAC;aACb;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;gBAC3B,IAAK,KAAgB,CAAC,WAAW,EAAE;oBACjC,MAAM,IAAI,GAAI,KAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAM,CAAC;oBACzD,IAAI,IAAI,EAAE;wBACR,MAAM,GAAG,IAAI,CAAC;wBACd,OAAO,IAAI,CAAC;qBACb;iBACF;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CAAC;SACJ;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAQD,OAAO,CAA0B,QAA6C,EAAE,OAAgB,KAAK;QACnG,IAAI,KAAK,GAAQ,EAAE,CAAC;QACpB,IAAI,CAAC,eAAe,CAAC,CAAC,IAAO,EAAE,KAAK,EAAE,EAAE;YACtC,IAAI,IAAI,KAAM,IAAyB,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;gBAChE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAClB;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;gBAC3B,IAAK,KAAgB,CAAC,WAAW,EAAE;oBACjC,MAAM,OAAO,GAAI,KAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAQ,CAAC;oBACjE,IAAI,OAAO,CAAC,MAAM,EAAE;wBAClB,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;qBAC/B;iBACF;YACH,CAAC,CAAC,CAAC;SACJ;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAMD,cAAc,CAAC,EAAmB;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAOD,aAAa,CAAC,EAAmB;QAC/B,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAMD,cAAc,CAAC,GAAW;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO,IAAI,CAAC;SACb;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACtC,CAAC;IAOD,iBAAiB,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAQD,kBAAkB,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAMD,iBAAiB,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IASD,cAAc,CAAC,IAAY,EAAE,OAAgB,KAAK;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QACzB,IAAI,CAAC,CAAC,EAAE;YACN,OAAO,IAAI,CAAC;SACb;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5B,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE;gBACZ,OAAO,IAAI,CAAC;aACb;YACD,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;SACb;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,EAAE,CAAC,GAAW;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAMD,WAAW,CAAC,IAAW;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO,KAAK,CAAC;SACd;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC9B,OAAO,IAAI,CAAC;SACb;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;QAC7B,OAAO,KAAK,EAAE;YACZ,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;gBAC3B,OAAO,IAAI,CAAC;aACb;YACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;SACrB;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAKD,WAAW;QACT,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,OAAO,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,EAAE;YACrB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;SACxB;QACD,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IAKD,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;IACnC,CAAC;IAGD,QAAQ,CAAC,IAAW;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IACD,GAAG,CAAC,IAAW;QACb,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IACD,WAAW;QACT,MAAM,KAAK,GAAY,EAAE,CAAC;QAC1B,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;QAC7B,OAAO,KAAK,EAAE;YACZ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;SACrB;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAMD,SAAS,CAAC,IAAW;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;IACxC,CAAC;IAMD,UAAU,CAAC,IAAW;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAMD,eAAe,CAAC,IAAW;QACzB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,KAAK,CAAC;SACd;QACD,GAAG;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;gBAC7B,OAAO,IAAI,CAAC;aACb;YACD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;SACxB,QAAQ,MAAM,KAAK,IAAI,EAAE;QAE1B,OAAO,KAAK,CAAC;IACf,CAAC;IAMD,aAAa,CAAC,IAAW;QACvB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,WAAW,CAAC,GAAW;QACrB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAOD,sBAAsB,CAAC,SAAiB,EAAE,UAAe;QACvD,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;QAC7B,OAAO,KAAK,EAAE;YACZ,KAAK,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC;YAC9B,KAAK,CAAC,sBAAsB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACpD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;SACrB;IACH,CAAC;IAKO,QAAQ,CAAC,UAAkB;QACjC,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC;QAC1B,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QACD,GAAG;YACD,MAAM,CAAC,MAAM,IAAI,UAAU,CAAC;YAC5B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;SACxB,QAAQ,MAAM,KAAK,IAAI,EAAE;IAC5B,CAAC;IAED,KAAK;QACH,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAMD,OAAO,CAAC,IAAW;QACjB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAGD,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,KAAY;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IASD,gBAAgB,CACd,IAAY,EACZ,QAA4D,EAC5D,OAA2C;QAE3C,MAAM,OAAO,GACX,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAK,OAAmC,CAAC,OAAO,CAAC,CAAC;QAC/G,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAK,OAAmC,CAAC,IAAI,CAAC;QAC5E,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QAE5D,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QACzC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,QAA0B,CAAC,CAAC,CAAE,QAAgC,CAAC,WAAW,CAAC;QAE9G,IAAI,IAAI,EAAE;YACR,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;SACrC;aAAM;YACL,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;SACnC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,EAAE,CACA,IAAY,EACZ,QAA4D,EAC5D,OAA2C;QAE3C,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IASD,mBAAmB,CACjB,IAAY,EACZ,QAA4D,EAC5D,OAA2C;QAE3C,MAAM,OAAO,GACX,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAK,OAAmC,CAAC,OAAO,CAAC,CAAC;QAC/G,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QAE5D,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QACzC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,QAA0B,CAAC,CAAC,CAAE,QAAgC,CAAC,WAAW,CAAC;QAE9G,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAK,OAAmC,CAAC,IAAI,CAAC;QAC5E,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAEzC,OAAO,IAAI,CAAC;IACd,CAAC;IASD,GAAG,CACD,IAAY,EACZ,QAA4D,EAC5D,OAA2C;QAE3C,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,CACF,IAAY,EACZ,QAA4D,EAC5D,OAA2C;QAE3C,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;YACrB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;YACpB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;SACvD;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,uBAAuB;QACrB,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACxC,CAAC;IAED,aAAa,CAAC,KAAU,EAAE,GAAG,IAAS;QACpC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,IAAI,CAAC,KAAU,EAAE,IAAgB;QAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,OAAO;QAEL,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;CACF","file":"node-tree.js","sourcesContent":["import type { Dict, LooseFunction } from '@visactor/vutils';\nimport { EventEmitter, Logger, isBoolean, isFunction, isObject } from '@visactor/vutils';\nimport { Generator } from '../common/generator';\nimport type { INode, IGroup } from '../interface';\n\nexport class Node extends EventEmitter<any, any> implements INode {\n parent: any;\n declare name: string;\n declare id: string | number;\n\n declare _uid: number;\n _prev?: INode;\n _next?: INode;\n protected _firstChild: INode | null;\n protected _lastChild: INode | null;\n protected _idMap?: Map<number, INode>;\n protected _count: number;\n // protected _dirty?: boolean; // dirty表示属性是否有修改\n protected _structEdit?: boolean; // 树的结构是否发生修改\n protected _nodeList?: INode[]; // 用于有顺序的插入(正常情况用不到)\n\n declare _ignoreWarn?: boolean;\n\n get previousSibling(): INode | null {\n return this._prev;\n }\n\n get nextSibling(): INode | null {\n return this._next;\n }\n\n get children(): INode[] {\n return this.getChildren();\n }\n get firstChild(): INode | null {\n return this._firstChild;\n }\n get lastChild(): INode | null {\n return this._lastChild;\n }\n get count(): number {\n return this._count;\n }\n get childrenCount(): number {\n if (!this._idMap) {\n return 0;\n }\n return this._idMap.size;\n }\n // get dirty(): boolean {\n // return !!this._dirty;\n // }\n\n constructor() {\n super();\n this._uid = Generator.GenAutoIncrementId();\n this._firstChild = null;\n this._lastChild = null;\n this.parent = null;\n this._count = 1;\n }\n\n forEachChildren<T extends INode = INode>(cb: (item: T, index: number) => void | boolean, reverse: boolean = false) {\n if (reverse) {\n let child = this._lastChild;\n let i = 0;\n while (child) {\n const breakTag = cb(child as T, i++);\n if (breakTag) {\n return;\n }\n child = child._prev;\n }\n } else {\n let child = this._firstChild;\n let i = 0;\n while (child) {\n const breakTag = cb(child as T, i++);\n if (breakTag) {\n return;\n }\n child = child._next;\n }\n }\n }\n\n async forEachChildrenAsync<T extends INode = INode>(\n cb: (item: T, index: number) => Promise<void | boolean> | void | boolean,\n reverse: boolean = false\n ) {\n if (reverse) {\n let child = this._lastChild;\n let i = 0;\n while (child) {\n let breakTag = cb(child as T, i++);\n if ((breakTag as any).then) {\n breakTag = await breakTag;\n }\n if (breakTag) {\n return;\n }\n child = child._prev;\n }\n } else {\n let child = this._firstChild;\n let i = 0;\n while (child) {\n let breakTag = cb(child as T, i++);\n if ((breakTag as any).then) {\n breakTag = await breakTag;\n }\n if (breakTag) {\n return;\n }\n child = child._next;\n }\n }\n }\n\n forEach<T extends INode = INode>(cb: (item: T, index: number) => void): void {\n return this.forEachChildren<T>(cb);\n }\n\n /**\n * 方法将一个节点附加到指定父节点的子节点列表的末尾处。\n * 如果将被插入的节点已经存在于当前文档的文档树中,那么 appendChild() 只会将它从原先的位置移动到新的位置(不需要事先移除要移动的节点)。\n * 不能append父级元素\n * @param node 要插入的节点\n */\n appendChild(node: INode, highPerformance: boolean = true): INode | null {\n if (this._uid === node._uid) {\n return null;\n }\n if (!highPerformance && node.isAncestorsOf(this)) {\n throw new Error('【Node::appendChild】不能将父辈元素append为子元素');\n }\n\n // 清理该节点的上次关系\n node.parent && node.parent.removeChild(node);\n node.parent = this as unknown as Node;\n\n if (!this._lastChild) {\n this._firstChild = this._lastChild = node;\n node._prev = node._next = null;\n } else {\n this._lastChild._next = node;\n node._prev = this._lastChild;\n this._lastChild = node;\n }\n if (!this._idMap) {\n this._idMap = new Map();\n }\n this._idMap.set(node._uid, node);\n\n this.setCount(node.count);\n\n this._structEdit = true;\n return node;\n }\n\n /**\n * 方法将一个节点数组附加到指定父节点的子节点列表的末尾处。\n * 不会判断元素是否是自身以及是否是父元素或者是否是其他节点的子元素\n * @param nodes 要插入的节点数组\n */\n appendChildArrHighPerformance(nodes: INode[], replace: boolean = false): INode[] | null {\n console.error('暂不支持该函数');\n\n return nodes;\n }\n\n /**\n * 方法在参考节点之前插入一个拥有指定父节点的子节点。\n * 如果给定的子节点是对文档中现有节点的引用,\n * insertBefore() 会将其从当前位置移动到新位置(在将节点附加到其他节点之前,不需要从其父节点删除该节点)。\n * 不能insert父级元素\n * @param newNode 要插入的节点\n * @param referenceNode 插入到referenceNode之前\n */\n insertBefore(newNode: INode, referenceNode: INode | undefined): INode | null {\n if (!referenceNode) {\n return this.appendChild(newNode);\n }\n if (this._uid === newNode._uid) {\n return null;\n }\n if (newNode.isAncestorsOf(this)) {\n throw new Error('【Node::insertBefore】不能将父辈元素insert为子元素');\n }\n if (referenceNode.parent !== (this as unknown as Node)) {\n return null;\n }\n\n newNode.parent && newNode.parent.removeChild(newNode);\n newNode.parent = this as unknown as Node;\n\n newNode._prev = referenceNode._prev;\n if (!referenceNode._prev) {\n this._firstChild = newNode;\n } else {\n referenceNode._prev._next = newNode;\n }\n referenceNode._prev = newNode;\n newNode._next = referenceNode;\n if (!this._idMap) {\n this._idMap = new Map();\n }\n this._idMap.set(newNode._uid, newNode);\n\n this._structEdit = true;\n this.setCount(newNode.count);\n\n return newNode;\n }\n\n /**\n * 方法在参考节点之后插入一个拥有指定父节点的子节点。\n * 如果给定的子节点是对文档中现有节点的引用,\n * insertAfter() 会将其从当前位置移动到新位置(在将节点附加到其他节点之前,不需要从其父节点删除该节点)。\n * 不能insert父级元素\n * @param newNode 要插入的节点\n * @param referenceNode 插入到referenceNode之后\n */\n insertAfter(newNode: INode, referenceNode: INode | undefined): INode | null {\n if (!referenceNode) {\n return this.appendChild(newNode);\n }\n if (this._uid === newNode._uid) {\n return null;\n }\n if (newNode.isAncestorsOf(this)) {\n throw new Error('【Node::insertAfter】不能将父辈元素insert为子元素');\n }\n if (referenceNode.parent !== (this as unknown as Node)) {\n return null;\n }\n\n newNode.parent && newNode.parent.removeChild(newNode);\n newNode.parent = this as unknown as Node;\n\n if (!referenceNode._next) {\n this._lastChild = newNode;\n } else {\n referenceNode._next._prev = newNode;\n newNode._next = referenceNode._next;\n }\n referenceNode._next = newNode;\n newNode._prev = referenceNode;\n if (!this._idMap) {\n this._idMap = new Map();\n }\n this._idMap.set(newNode._uid, newNode);\n\n this._structEdit = true;\n this.setCount(newNode.count);\n\n return newNode;\n }\n\n /**\n * 方法在参考节点之前插入一个拥有指定父节点的子节点。\n * 如果给定的子节点是对文档中现有节点的引用,\n * insertBefore() 会将其从当前位置移动到新位置(在将节点附加到其他节点之前,不需要从其父节点删除该节点)。\n * 不能insert父级元素\n * @param newNode 要插入的节点\n * @param referenceNode 插入到referenceNode之前\n */\n insertInto(newNode: INode, idx: number): INode | null {\n if (!this._ignoreWarn && this._nodeList) {\n Logger.getInstance().warn('insertIntoKeepIdx和insertInto混用可能会存在错误');\n }\n if (idx >= this.childrenCount) {\n return this.appendChild(newNode);\n }\n if (this._uid === newNode._uid) {\n return null;\n }\n if (newNode.isAncestorsOf(this)) {\n throw new Error('【Node::insertBefore】不能将父辈元素insert为子元素');\n }\n\n newNode.parent && newNode.parent.removeChild(newNode);\n newNode.parent = this as unknown as Node;\n\n if (idx === 0) {\n newNode._next = this._firstChild;\n this._firstChild && (this._firstChild._prev = newNode);\n newNode._prev = null;\n this._firstChild = newNode;\n } else {\n let child = this._firstChild;\n for (let i = 0; i < idx; i++) {\n if (!child) {\n return null;\n }\n if (i > 0) {\n child = child._next;\n }\n }\n if (!child) {\n return null;\n }\n newNode._next = child._next;\n newNode._prev = child;\n child._next = newNode;\n if (newNode._next) {\n newNode._next._prev = newNode;\n }\n }\n if (!this._idMap) {\n this._idMap = new Map();\n }\n this._idMap.set(newNode._uid, newNode);\n\n // // 预期不会执行\n // if (idx === this.childrenCount) {\n // this._lastChild = newNode;\n // }\n this._structEdit = true;\n this.setCount(newNode.count);\n\n return newNode;\n }\n\n /**\n * 相比于insertInto,会保持idx顺序,举例:\n * 先插入idx:6的元素,再插入idx:2的元素,此时idx:2的元素会放置在idx为6的元素之前\n */\n insertIntoKeepIdx(newNode: INode, idx: number): INode | null {\n if (!this._nodeList) {\n this._nodeList = this.children;\n }\n // 如果这个位置有了,那就将这个位置之前的元素向后移动\n if (this._nodeList[idx]) {\n const node = this._nodeList[idx];\n this._nodeList.splice(idx, 0, newNode);\n return this.insertBefore(newNode, node);\n }\n // 查找idx之前的元素,插入到其后面\n this._nodeList[idx] = newNode;\n let node: INode | undefined;\n for (let i = idx - 1; i >= 0; i--) {\n node = this._nodeList[i];\n if (node) {\n break;\n }\n }\n if (node) {\n return node._next ? this.insertBefore(newNode, node._next) : this.appendChild(newNode);\n }\n this._ignoreWarn = true;\n const data = this.insertInto(newNode, 0);\n this._ignoreWarn = false;\n return data;\n }\n\n /**\n * 方法从DOM中删除一个子节点。返回删除的节点。\n * @param child 要删除的子节点\n */\n removeChild(child: INode): INode | null {\n if (!this._idMap) {\n return null;\n }\n if (!this._idMap.has(child._uid)) {\n return null;\n }\n this._idMap.delete(child._uid);\n if (this._nodeList) {\n // 找到idx\n const idx = this._nodeList.findIndex(n => n === child);\n if (idx > 0) {\n this._nodeList.splice(idx, 1);\n }\n }\n\n if (!child._prev) {\n this._firstChild = child._next;\n } else {\n child._prev._next = child._next;\n }\n if (child._next) {\n child._next._prev = child._prev;\n } else {\n this._lastChild = child._prev;\n }\n\n // 重置属性\n child.parent = null;\n child._prev = null;\n child._next = null;\n\n this._structEdit = true;\n this.setCount(-child.count);\n\n return child;\n }\n\n /**\n * 从当前节点的父节点删除当前节点\n */\n delete() {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n }\n\n /**\n * 删除所有的孩子节点\n */\n removeAllChild(deep?: boolean) {\n if (!this._idMap) {\n return;\n }\n let child = this._firstChild;\n while (child) {\n const next = child._next;\n child.parent = null;\n // child._rootNode = child;\n child._prev = null;\n child._next = null;\n child = child._next;\n child = next;\n }\n\n this._firstChild = null;\n this._lastChild = null;\n this._idMap.clear();\n\n this._structEdit = true;\n this.setCount(-this._count + 1);\n }\n\n /**\n * 方法用指定的节点替换当前节点的一个子节点,并返回被替换掉的节点。\n * 如果该节点已经存在于DOM树中,则它首先会被从原始位置删除。\n * 不能replace父级元素\n * @param newChild 新节点\n * @param oldChild 旧节点\n */\n replaceChild(newChild: INode, oldChild: INode): INode | null {\n throw new Error('暂不支持');\n }\n\n /**\n * 根据自定义逻辑查找元素,返回单一图形元素\n * @param callback 自定义查找过滤器\n * @param deep 是否进行深度查找,默认为 false\n * @returns 返回匹配的图形元素\n */\n find<T extends INode = INode>(callback: (node: T, index: number) => boolean, deep: boolean = false): T | null {\n let target: T | null = null;\n this.forEachChildren((node: T, index: number) => {\n if (node !== (this as unknown as INode) && callback(node, index)) {\n target = node;\n return true; // 提前退出循环\n }\n return false;\n });\n\n if (deep) {\n this.forEachChildren(child => {\n if ((child as IGroup).isContainer) {\n const node = (child as IGroup).find(callback, true) as T;\n if (node) {\n target = node;\n return true; // 提前退出循环\n }\n }\n return false;\n });\n }\n\n return target;\n }\n\n /**\n * 根据自定义逻辑查找元素,返回匹配的元素集合\n * @param callback 自定义查找过滤器\n * @param deep 是否进行深度查找,默认为 false\n * @returns 返回匹配的图形元素集合\n */\n findAll<T extends INode = INode>(callback: (node: T, index: number) => boolean, deep: boolean = false): T[] {\n let nodes: T[] = [];\n this.forEachChildren((node: T, index) => {\n if (node !== (this as unknown as INode) && callback(node, index)) {\n nodes.push(node);\n }\n });\n\n if (deep) {\n this.forEachChildren(child => {\n if ((child as IGroup).isContainer) {\n const targets = (child as IGroup).findAll(callback, true) as T[];\n if (targets.length) {\n nodes = nodes.concat(targets);\n }\n }\n });\n }\n return nodes;\n }\n\n /**\n * 通过用户设置的 id 查找对应的图形元素\n * @param id 子节点的 id\n */\n getElementById(id: string | number): INode | null {\n return this.find(node => node.id === id, true);\n }\n\n /**\n * @alias getElementById\n * 通过用户设置的 id 查找对应的图形元素\n * @param id 子节点的 id\n */\n findChildById(id: string | number): INode | null {\n return this.getElementById(id);\n }\n\n /**\n * 通过内部生成的节点 id:_uid 查找对应的图形元素\n * @param id 子节点的key\n */\n findChildByUid(uid: number): INode | null {\n if (!this._idMap) {\n return null;\n }\n return this._idMap.get(uid) || null;\n }\n\n /**\n * 根据用户传入的 name 查找元素,返回匹配的元素集合\n * @param name 用户设置的图形名称\n * @returns 匹配 name 的元素集合\n */\n getElementsByName(name: string) {\n return this.findAll(node => node.name === name, true);\n }\n\n /**\n * @alias getElementsByName\n * 根据用户传入的 name 查找元素,返回匹配的元素集合\n * @param name 用户设置的图形名称\n * @returns 匹配 name 的元素集合\n */\n findChildrenByName(name: string) {\n return this.getElementsByName(name);\n }\n /**\n * 根据用户传入的 type 查找元素,返回匹配的元素集合\n * @param type 用户设置的图形类型\n * @returns 匹配 type 的元素集合\n */\n getElementsByType(type: string) {\n return this.findAll(node => node.type === type, true);\n }\n\n /**\n * 根据名字查找元素,只返回第一个查找到的元素\n * @deprecated 待 vis-component & chartspace 修改之后删除\n * @param name\n * @param deep\n * @returns\n */\n getChildByName(name: string, deep: boolean = false) {\n return this.find(node => node.name === name, deep);\n }\n\n getChildAt(idx: number): INode | null {\n let c = this._firstChild;\n if (!c) {\n return null;\n }\n for (let i = 0; i < idx; i++) {\n if (!c._next) {\n return null;\n }\n c = c._next;\n }\n return c;\n }\n\n at(idx: number): INode | null {\n return this.getChildAt(idx);\n }\n\n /**\n * 返回的是一个布尔值,来表示传入的节点是否为该节点的后代节点。\n * @param node 判断是否包含的节点\n */\n containNode(node: INode): boolean {\n if (!this._idMap) {\n return false;\n }\n if (this._idMap.has(node._uid)) {\n return true;\n }\n let child = this._firstChild;\n while (child) {\n if (child.containNode(node)) {\n return true;\n }\n child = child._next;\n }\n return false;\n }\n\n /**\n * 方法返回上下文中的根节点,不常用\n */\n getRootNode(): INode {\n let parent = this.parent;\n while (parent?.parent) {\n parent = parent.parent;\n }\n return parent || this;\n }\n\n /**\n * 方法返回一个布尔值,表明当前节点是否包含有子节点.\n */\n hasChildNodes(): boolean {\n return this._firstChild !== null;\n }\n\n /* 语法糖 */\n addChild(node: INode): INode | null {\n return this.appendChild(node);\n }\n add(node: INode): INode | null {\n return this.appendChild(node);\n }\n getChildren(): INode[] {\n const nodes: INode[] = [];\n let child = this._firstChild;\n while (child) {\n nodes.push(child);\n child = child._next;\n }\n return nodes;\n }\n\n /**\n * 判断该节点是否是node的子节点\n * @param node\n */\n isChildOf(node: INode): boolean {\n if (!this.parent) {\n return false;\n }\n return this.parent._uid === node._uid;\n }\n\n /**\n * 判断该节点是否是node的父节点\n * @param node\n */\n isParentOf(node: INode): boolean {\n return node.isChildOf(this);\n }\n\n /**\n * 判断节点是否是node的后代节点\n * @param node\n */\n isDescendantsOf(node: INode): boolean {\n let parent = this.parent;\n if (!parent) {\n return false;\n }\n do {\n if (parent._uid === node._uid) {\n return true;\n }\n parent = parent.parent;\n } while (parent !== null);\n\n return false;\n }\n\n /**\n * 判断节点是否是node的祖先节点\n * @param node\n */\n isAncestorsOf(node: INode): boolean {\n return node.isDescendantsOf(this);\n }\n\n getAncestor(idx: number): INode {\n throw new Error('暂不支持');\n }\n\n /**\n * 设置该节点的所有后代节点某个属性\n * @param propsName 属性名\n * @param propsValue 属性值\n */\n setAllDescendantsProps(propsName: string, propsValue: any) {\n let child = this._firstChild;\n while (child) {\n child[propsName] = propsValue;\n child.setAllDescendantsProps(propsName, propsValue);\n child = child._next;\n }\n }\n /**\n * 设置当前节点的count属性,会更改父节点的count属性\n * @param deltaCount delta count\n */\n private setCount(deltaCount: number): void {\n this._count += deltaCount;\n let parent = this.parent;\n if (!parent) {\n return;\n }\n do {\n parent._count += deltaCount;\n parent = parent.parent;\n } while (parent !== null);\n }\n\n clone(): INode {\n throw new Error('暂不支持');\n }\n\n /**\n * clone to node\n * @param node\n */\n cloneTo(node: INode): void {\n throw new Error('暂不支持');\n }\n\n /***************语法糖***************/\n getParent(): INode | null {\n return this.parent;\n }\n\n del(child: INode): INode | null {\n return this.removeChild(child);\n }\n\n // 事件相关别名\n /**\n * @alias on\n * @param type\n * @param listener\n * @param options\n */\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject | LooseFunction,\n options?: AddEventListenerOptions | boolean\n ) {\n const capture =\n (isBoolean(options, true) && options) || (isObject(options) && (options as AddEventListenerOptions).capture);\n const once = isObject(options) && (options as AddEventListenerOptions).once;\n const context = isFunction(listener) ? undefined : listener;\n\n type = capture ? `${type}capture` : type;\n listener = isFunction(listener) ? (listener as LooseFunction) : (listener as EventListenerObject).handleEvent;\n\n if (once) {\n super.once(type, listener, context);\n } else {\n super.on(type, listener, context);\n }\n return this;\n }\n\n on(\n type: string,\n listener: EventListenerOrEventListenerObject | LooseFunction,\n options?: AddEventListenerOptions | boolean\n ) {\n return this.addEventListener(type, listener, options);\n }\n\n /**\n * @alias off\n * @param type\n * @param listener\n * @param options\n * @returns\n */\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject | LooseFunction,\n options?: AddEventListenerOptions | boolean\n ) {\n const capture =\n (isBoolean(options, true) && options) || (isObject(options) && (options as AddEventListenerOptions).capture);\n const context = isFunction(listener) ? undefined : listener;\n\n type = capture ? `${type}capture` : type;\n listener = isFunction(listener) ? (listener as LooseFunction) : (listener as EventListenerObject).handleEvent;\n\n const once = isObject(options) && (options as AddEventListenerOptions).once;\n super.off(type, listener, context, once);\n\n return this;\n }\n\n /**\n * @alias off\n * @param type\n * @param listener\n * @param options\n * @returns\n */\n off(\n type: string,\n listener: EventListenerOrEventListenerObject | LooseFunction,\n options?: AddEventListenerOptions | boolean\n ) {\n return this.removeEventListener(type, listener, options);\n }\n\n once(\n type: string,\n listener: EventListenerOrEventListenerObject | LooseFunction,\n options?: AddEventListenerOptions | boolean\n ) {\n if (isObject(options)) {\n options.once = true;\n return this.addEventListener(type, listener, options);\n }\n return this.addEventListener(type, listener, { once: true });\n }\n\n removeAllEventListeners() {\n super.removeAllListeners();\n return this;\n }\n\n removeAllListeners(): this {\n return this.removeAllEventListeners();\n }\n\n dispatchEvent(event: any, ...args: any) {\n super.emit(event.type, event, ...args);\n return !event.defaultPrevented;\n }\n\n emit(event: any, data?: Dict<any>) {\n return this.dispatchEvent(event, data);\n }\n\n release() {\n // 卸载事件\n this.removeAllListeners();\n }\n}\n"]}
|
|
@@ -24,7 +24,7 @@ export interface INode extends Releaseable, IEventElement {
|
|
|
24
24
|
add: (node: INode, highPerformance?: boolean) => INode | null;
|
|
25
25
|
delete: () => void;
|
|
26
26
|
removeChild: (node: INode, highPerformance?: boolean) => INode | null;
|
|
27
|
-
removeAllChild: () => void;
|
|
27
|
+
removeAllChild: (deep?: boolean) => void;
|
|
28
28
|
isChildOf: (node: INode) => boolean;
|
|
29
29
|
isParentOf: (node: INode) => boolean;
|
|
30
30
|
isDescendantsOf: (node: INode) => boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interface/node-tree.ts"],"names":[],"mappings":"","file":"node-tree.js","sourcesContent":["import type { IEventElement, Releaseable } from './common';\n\nexport interface INode extends Releaseable, IEventElement {\n _prev?: INode;\n _next?: INode;\n /**\n * 内部图形的唯一标识\n */\n _uid: number;\n\n /**\n * 用户配置的图形唯一标识\n */\n id?: number | string;\n /** 图形名称标识 */\n name?: string;\n /**\n * 图形类型\n */\n type?: string;\n parent: INode | null;\n // dirty: boolean; // 脏位,标记当前节点和子节点是否有修改\n count: number;\n childrenCount: number;\n firstChild: INode | null;\n lastChild: INode | null;\n /**\n * 获取子节点数组\n */\n getChildren: () => INode[];\n /**\n * 获取某个idx的节点\n */\n getChildAt: (idx: number) => INode | null;\n at: (idx: number) => INode | null;\n\n insertBefore: (newNode: INode, referenceNode: INode) => INode | null;\n insertAfter: (newNode: INode, referenceNode: INode) => INode | null;\n\n /**\n * 向某个位置插入\n */\n insertInto: (ele: INode, idx: number) => INode | null;\n\n insertIntoKeepIdx: (ele: INode, idx: number) => INode | null;\n /**\n * 遍历子节点\n * @param cb 返回true则停止遍历\n */\n forEachChildren: (cb: (n: INode, i: number) => void | boolean, reverse?: boolean) => void;\n forEachChildrenAsync: (\n cb: (n: INode, i: number) => Promise<void | boolean> | void | boolean,\n reverse?: boolean\n ) => Promise<void>;\n /**\n * 添加子节点\n * @param node\n * @param highPerformance 是否高性能模式(不检查是否合法)\n */\n appendChild: (node: INode, highPerformance?: boolean) => INode | null;\n /**\n * 添加子节点\n * @param node\n * @param highPerformance 是否高性能模式(不检查是否合法)\n */\n add: (node: INode, highPerformance?: boolean) => INode | null;\n /**\n * 从当前节点的父节点删除当前节点\n */\n delete: () => void;\n /**\n * 删除节点\n * @param node\n * @param highPerformance 是否高性能模式(不检查是否合法)\n */\n removeChild: (node: INode, highPerformance?: boolean) => INode | null;\n /**\n * 移除所有节点\n */\n removeAllChild: () => void;\n /**\n * 判断该节点是否是node的子节点\n * @param node\n */\n isChildOf: (node: INode) => boolean;\n /**\n * 判断该节点是否是node的父节点\n * @param node\n */\n isParentOf: (node: INode) => boolean;\n /**\n * 判断节点是否是node的后代节点\n * @param node\n */\n isDescendantsOf: (node: INode) => boolean;\n /**\n * 判断节点是否是node的祖先节点\n * @param node\n */\n isAncestorsOf: (node: INode) => boolean;\n\n // 事件相关的别名\n /**\n * Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.\n * */\n dispatchEvent: (event: Event) => boolean;\n\n /**\n * 返回的是一个布尔值,来表示传入的节点是否为该节点的后代节点。\n * @param node 判断是否包含的节点\n */\n containNode: (node: INode) => boolean;\n\n /**\n * 设置该节点的所有后代节点某个属性\n * @param propsName 属性名\n * @param propsValue 属性值\n */\n setAllDescendantsProps: (propsName: string, propsValue: any) => any;\n\n // 查找相关的接口\n /**\n * 根据自定义逻辑查找元素,返回单一图形元素\n * @param callback 自定义查找过滤器\n * @param deep 是否进行深度查找,默认为 false\n * @returns 返回匹配的图形元素\n */\n find: (callback: (node: INode, index: number) => boolean, deep: boolean) => INode | null;\n /**\n * 根据自定义逻辑查找元素,返回匹配的元素集合\n * @param callback 自定义查找过滤器\n * @param deep 是否进行深度查找,默认为 false\n * @returns 返回匹配的图形元素集合\n */\n findAll: (callback: (node: INode, index: number) => boolean, deep: boolean) => INode[];\n /**\n * 通过用户设置的 id 查找对应的图形元素\n * @param id 子节点的 id\n */\n getElementById: (id: string | number) => INode | null;\n /**\n * @alias getElementById\n * 通过用户设置的 id 查找对应的图形元素\n * @param id 子节点的 id\n */\n findChildById: (id: string | number) => INode | null;\n /**\n * 通过内部生成的节点 id:_uid 查找对应的图形元素\n * @param id 子节点的key\n */\n findChildByUid: (uid: number) => INode | null;\n /**\n * 根据用户传入的 name 查找元素,返回匹配的元素集合\n * @param name 用户设置的图形名称\n * @returns 匹配 name 的元素集合\n */\n getElementsByName: (name: string) => INode[];\n /**\n * @alias getElementsByName\n * 根据用户传入的 name 查找元素,返回匹配的元素集合\n * @param name 用户设置的图形名称\n * @returns 匹配 name 的元素集合\n */\n findChildrenByName: (name: string) => INode[];\n /**\n * 根据用户传入的 name 查找元素,返回匹配的元素集合\n * @param name 用户设置的图形名称\n * @returns 匹配 name 的元素集合\n */\n getElementsByType: (type: string) => INode[];\n // 其他不常用\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/interface/node-tree.ts"],"names":[],"mappings":"","file":"node-tree.js","sourcesContent":["import type { IEventElement, Releaseable } from './common';\n\nexport interface INode extends Releaseable, IEventElement {\n _prev?: INode;\n _next?: INode;\n /**\n * 内部图形的唯一标识\n */\n _uid: number;\n\n /**\n * 用户配置的图形唯一标识\n */\n id?: number | string;\n /** 图形名称标识 */\n name?: string;\n /**\n * 图形类型\n */\n type?: string;\n parent: INode | null;\n // dirty: boolean; // 脏位,标记当前节点和子节点是否有修改\n count: number;\n childrenCount: number;\n firstChild: INode | null;\n lastChild: INode | null;\n /**\n * 获取子节点数组\n */\n getChildren: () => INode[];\n /**\n * 获取某个idx的节点\n */\n getChildAt: (idx: number) => INode | null;\n at: (idx: number) => INode | null;\n\n insertBefore: (newNode: INode, referenceNode: INode) => INode | null;\n insertAfter: (newNode: INode, referenceNode: INode) => INode | null;\n\n /**\n * 向某个位置插入\n */\n insertInto: (ele: INode, idx: number) => INode | null;\n\n insertIntoKeepIdx: (ele: INode, idx: number) => INode | null;\n /**\n * 遍历子节点\n * @param cb 返回true则停止遍历\n */\n forEachChildren: (cb: (n: INode, i: number) => void | boolean, reverse?: boolean) => void;\n forEachChildrenAsync: (\n cb: (n: INode, i: number) => Promise<void | boolean> | void | boolean,\n reverse?: boolean\n ) => Promise<void>;\n /**\n * 添加子节点\n * @param node\n * @param highPerformance 是否高性能模式(不检查是否合法)\n */\n appendChild: (node: INode, highPerformance?: boolean) => INode | null;\n /**\n * 添加子节点\n * @param node\n * @param highPerformance 是否高性能模式(不检查是否合法)\n */\n add: (node: INode, highPerformance?: boolean) => INode | null;\n /**\n * 从当前节点的父节点删除当前节点\n */\n delete: () => void;\n /**\n * 删除节点\n * @param node\n * @param highPerformance 是否高性能模式(不检查是否合法)\n */\n removeChild: (node: INode, highPerformance?: boolean) => INode | null;\n /**\n * 移除所有节点\n */\n removeAllChild: (deep?: boolean) => void;\n /**\n * 判断该节点是否是node的子节点\n * @param node\n */\n isChildOf: (node: INode) => boolean;\n /**\n * 判断该节点是否是node的父节点\n * @param node\n */\n isParentOf: (node: INode) => boolean;\n /**\n * 判断节点是否是node的后代节点\n * @param node\n */\n isDescendantsOf: (node: INode) => boolean;\n /**\n * 判断节点是否是node的祖先节点\n * @param node\n */\n isAncestorsOf: (node: INode) => boolean;\n\n // 事件相关的别名\n /**\n * Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise.\n * */\n dispatchEvent: (event: Event) => boolean;\n\n /**\n * 返回的是一个布尔值,来表示传入的节点是否为该节点的后代节点。\n * @param node 判断是否包含的节点\n */\n containNode: (node: INode) => boolean;\n\n /**\n * 设置该节点的所有后代节点某个属性\n * @param propsName 属性名\n * @param propsValue 属性值\n */\n setAllDescendantsProps: (propsName: string, propsValue: any) => any;\n\n // 查找相关的接口\n /**\n * 根据自定义逻辑查找元素,返回单一图形元素\n * @param callback 自定义查找过滤器\n * @param deep 是否进行深度查找,默认为 false\n * @returns 返回匹配的图形元素\n */\n find: (callback: (node: INode, index: number) => boolean, deep: boolean) => INode | null;\n /**\n * 根据自定义逻辑查找元素,返回匹配的元素集合\n * @param callback 自定义查找过滤器\n * @param deep 是否进行深度查找,默认为 false\n * @returns 返回匹配的图形元素集合\n */\n findAll: (callback: (node: INode, index: number) => boolean, deep: boolean) => INode[];\n /**\n * 通过用户设置的 id 查找对应的图形元素\n * @param id 子节点的 id\n */\n getElementById: (id: string | number) => INode | null;\n /**\n * @alias getElementById\n * 通过用户设置的 id 查找对应的图形元素\n * @param id 子节点的 id\n */\n findChildById: (id: string | number) => INode | null;\n /**\n * 通过内部生成的节点 id:_uid 查找对应的图形元素\n * @param id 子节点的key\n */\n findChildByUid: (uid: number) => INode | null;\n /**\n * 根据用户传入的 name 查找元素,返回匹配的元素集合\n * @param name 用户设置的图形名称\n * @returns 匹配 name 的元素集合\n */\n getElementsByName: (name: string) => INode[];\n /**\n * @alias getElementsByName\n * 根据用户传入的 name 查找元素,返回匹配的元素集合\n * @param name 用户设置的图形名称\n * @returns 匹配 name 的元素集合\n */\n findChildrenByName: (name: string) => INode[];\n /**\n * 根据用户传入的 name 查找元素,返回匹配的元素集合\n * @param name 用户设置的图形名称\n * @returns 匹配 name 的元素集合\n */\n getElementsByType: (type: string) => INode[];\n // 其他不常用\n}\n"]}
|
|
@@ -12,6 +12,8 @@ export class HtmlAttributePlugin {
|
|
|
12
12
|
activate(context) {
|
|
13
13
|
this.pluginService = context, context.stage.hooks.afterRender.tap(this.key, (stage => {
|
|
14
14
|
stage && stage === this.pluginService.stage && this.drawHTML(context.stage.renderService);
|
|
15
|
+
})), application.graphicService.hooks.onRemove.tap(this.key, (graphic => {
|
|
16
|
+
this.removeDom(graphic);
|
|
15
17
|
})), application.graphicService.hooks.onRelease.tap(this.key, (graphic => {
|
|
16
18
|
this.removeDom(graphic);
|
|
17
19
|
}));
|
|
@@ -47,26 +49,28 @@ export class HtmlAttributePlugin {
|
|
|
47
49
|
const {dom: dom, container: container, width: width, height: height, style: style, anchorType: anchorType = "boundsLeftTop"} = html;
|
|
48
50
|
graphic.bindDom || (graphic.bindDom = new Map);
|
|
49
51
|
const lastDom = graphic.bindDom.get(dom);
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
52
|
+
let wrapGroup, nativeContainer;
|
|
53
|
+
if (!lastDom || container && container !== lastDom.container) {
|
|
54
|
+
let nativeDom;
|
|
55
|
+
graphic.bindDom.forEach((({wrapGroup: wrapGroup}) => {
|
|
56
|
+
application.global.removeDom(wrapGroup);
|
|
57
|
+
})), "string" == typeof dom ? (nativeDom = (new DOMParser).parseFromString(dom, "text/html").firstChild,
|
|
58
|
+
nativeDom.lastChild && (nativeDom = nativeDom.lastChild.firstChild)) : nativeDom = dom;
|
|
59
|
+
const _container = container || (!0 === stage.params.enableHtmlAttribute ? null : stage.params.enableHtmlAttribute);
|
|
60
|
+
nativeContainer = _container ? "string" == typeof _container ? application.global.getElementById(_container) : _container : graphic.stage.window.getContainer(),
|
|
61
|
+
wrapGroup = application.global.createDom({
|
|
62
|
+
tagName: "div",
|
|
63
|
+
width: width,
|
|
64
|
+
height: height,
|
|
65
|
+
style: style,
|
|
66
|
+
parent: nativeContainer
|
|
67
|
+
}), wrapGroup && (wrapGroup.appendChild(nativeDom), graphic.bindDom.set(dom, {
|
|
68
|
+
dom: nativeDom,
|
|
69
|
+
container: container,
|
|
70
|
+
wrapGroup: wrapGroup
|
|
71
|
+
}));
|
|
72
|
+
} else wrapGroup = lastDom.wrapGroup, nativeContainer = wrapGroup.parentNode;
|
|
73
|
+
wrapGroup.style.pointerEvents = "none", wrapGroup.style.position || (wrapGroup.style.position = "absolute",
|
|
70
74
|
nativeContainer.style.position = "relative");
|
|
71
75
|
let left = 0, top = 0;
|
|
72
76
|
const b = graphic.globalAABBBounds;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugins/builtin-plugin/html-attribute-plugin.ts"],"names":[],"mappings":"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","file":"html-attribute-plugin.js","sourcesContent":["import { Generator } from '../../common/generator';\nimport type { IGraphic, IPlugin, IPluginService, IRenderService, IDrawContext, IGroup } from '../../interface';\nimport { application } from '../../application';\nimport { DefaultAttribute } from '../../graphic';\n\nexport class HtmlAttributePlugin implements IPlugin {\n name: 'HtmlAttributePlugin' = 'HtmlAttributePlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n context.stage.hooks.afterRender.tap(this.key, stage => {\n if (!(stage && stage === this.pluginService.stage)) {\n return;\n }\n\n this.drawHTML(context.stage.renderService);\n });\n application.graphicService.hooks.onRelease.tap(this.key, graphic => {\n this.removeDom(graphic);\n });\n }\n deactivate(context: IPluginService): void {\n context.stage.hooks.afterRender.taps = context.stage.hooks.afterRender.taps.filter(item => {\n return item.name !== this.key;\n });\n }\n\n protected drawHTML(renderService: IRenderService) {\n if (application.global.env === 'browser') {\n renderService.renderTreeRoots\n .sort((a, b) => {\n return (a.attribute.zIndex ?? DefaultAttribute.zIndex) - (b.attribute.zIndex ?? DefaultAttribute.zIndex);\n })\n .forEach(group => {\n this.renderGroupHTML(group as IGroup);\n });\n }\n }\n\n renderGroupHTML(group: IGroup) {\n this.renderGraphicHTML(group);\n group.forEachChildren((g: IGraphic) => {\n if (g.isContainer) {\n this.renderGroupHTML(g as IGroup);\n } else {\n this.renderGraphicHTML(g);\n }\n });\n }\n\n removeDom(graphic: IGraphic) {\n if (graphic.bindDom && graphic.bindDom.size) {\n // 删除dom\n graphic.bindDom.forEach(item => {\n item.dom && item.dom.parentElement.removeChild(item.dom);\n });\n graphic.bindDom.clear();\n }\n }\n\n renderGraphicHTML(graphic: IGraphic) {\n const { html } = graphic.attribute;\n if (!html) {\n if (graphic.bindDom && graphic.bindDom.size) {\n // 删除dom\n graphic.bindDom.forEach(item => {\n item.dom && item.dom.parentElement.removeChild(item.dom);\n });\n graphic.bindDom.clear();\n }\n return;\n }\n const stage = graphic.stage;\n if (!stage) {\n return;\n }\n const { dom, container, width, height, style, anchorType = 'boundsLeftTop' } = html;\n if (!graphic.bindDom) {\n graphic.bindDom = new Map();\n }\n const lastDom = graphic.bindDom.get(dom);\n // 如果存在了(dom存在,且container没有变化),就跳过\n if (lastDom && !(container && container !== lastDom.container)) {\n return;\n }\n // 清除上一次的dom\n graphic.bindDom.forEach(({ wrapGroup }) => {\n application.global.removeDom(wrapGroup);\n });\n // 转化这个dom为nativeDOM\n let nativeDom: HTMLElement;\n if (typeof dom === 'string') {\n nativeDom = new DOMParser().parseFromString(dom, 'text/html').firstChild as any;\n if ((nativeDom as any).lastChild) {\n nativeDom = (nativeDom as any).lastChild.firstChild;\n }\n } else {\n nativeDom = dom;\n }\n // 获取container的dom,默认为window的container\n let nativeContainer;\n const _container =\n container || (stage.params.enableHtmlAttribute === true ? null : stage.params.enableHtmlAttribute);\n if (_container) {\n if (typeof _container === 'string') {\n nativeContainer = application.global.getElementById(_container);\n } else {\n nativeContainer = _container;\n }\n } else {\n // nativeContainer = application.global.getRootElement();\n nativeContainer = graphic.stage.window.getContainer();\n }\n // 创建wrapGroup\n const wrapGroup = application.global.createDom({ tagName: 'div', width, height, style, parent: nativeContainer });\n if (wrapGroup) {\n wrapGroup.appendChild(nativeDom);\n graphic.bindDom.set(dom, { dom: nativeDom, container, wrapGroup: wrapGroup as any });\n }\n // 事件穿透\n wrapGroup.style.pointerEvents = 'none';\n // 定位wrapGroup\n if (!wrapGroup.style.position) {\n wrapGroup.style.position = 'absolute';\n nativeContainer.style.position = 'relative';\n }\n let left: number = 0;\n let top: number = 0;\n const b = graphic.globalAABBBounds;\n if (anchorType === 'position' || b.empty()) {\n const matrix = graphic.globalTransMatrix;\n left = matrix.e;\n top = matrix.f;\n } else {\n left = b.x1;\n top = b.y1;\n }\n // 查看wrapGroup的位置\n // const wrapGroupTL = application.global.getElementTopLeft(wrapGroup, false);\n const containerTL = application.global.getElementTopLeft(nativeContainer, false);\n const windowTL = stage.window.getTopLeft(false);\n const offsetX = left + windowTL.left - containerTL.left;\n const offsetTop = top + windowTL.top - containerTL.top;\n // wrapGroup.style.transform = `translate(${offsetX}px, ${offsetTop}px)`;\n wrapGroup.style.left = `${offsetX}px`;\n wrapGroup.style.top = `${offsetTop}px`;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/plugins/builtin-plugin/html-attribute-plugin.ts"],"names":[],"mappings":"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","file":"html-attribute-plugin.js","sourcesContent":["import { Generator } from '../../common/generator';\nimport type { IGraphic, IPlugin, IPluginService, IRenderService, IDrawContext, IGroup } from '../../interface';\nimport { application } from '../../application';\nimport { DefaultAttribute } from '../../graphic';\n\nexport class HtmlAttributePlugin implements IPlugin {\n name: 'HtmlAttributePlugin' = 'HtmlAttributePlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n context.stage.hooks.afterRender.tap(this.key, stage => {\n if (!(stage && stage === this.pluginService.stage)) {\n return;\n }\n\n this.drawHTML(context.stage.renderService);\n });\n application.graphicService.hooks.onRemove.tap(this.key, graphic => {\n this.removeDom(graphic);\n });\n application.graphicService.hooks.onRelease.tap(this.key, graphic => {\n this.removeDom(graphic);\n });\n }\n deactivate(context: IPluginService): void {\n context.stage.hooks.afterRender.taps = context.stage.hooks.afterRender.taps.filter(item => {\n return item.name !== this.key;\n });\n }\n\n protected drawHTML(renderService: IRenderService) {\n if (application.global.env === 'browser') {\n renderService.renderTreeRoots\n .sort((a, b) => {\n return (a.attribute.zIndex ?? DefaultAttribute.zIndex) - (b.attribute.zIndex ?? DefaultAttribute.zIndex);\n })\n .forEach(group => {\n this.renderGroupHTML(group as IGroup);\n });\n }\n }\n\n renderGroupHTML(group: IGroup) {\n this.renderGraphicHTML(group);\n group.forEachChildren((g: IGraphic) => {\n if (g.isContainer) {\n this.renderGroupHTML(g as IGroup);\n } else {\n this.renderGraphicHTML(g);\n }\n });\n }\n\n removeDom(graphic: IGraphic) {\n if (graphic.bindDom && graphic.bindDom.size) {\n // 删除dom\n graphic.bindDom.forEach(item => {\n item.dom && item.dom.parentElement.removeChild(item.dom);\n });\n graphic.bindDom.clear();\n }\n }\n\n renderGraphicHTML(graphic: IGraphic) {\n const { html } = graphic.attribute;\n if (!html) {\n if (graphic.bindDom && graphic.bindDom.size) {\n // 删除dom\n graphic.bindDom.forEach(item => {\n item.dom && item.dom.parentElement.removeChild(item.dom);\n });\n graphic.bindDom.clear();\n }\n return;\n }\n const stage = graphic.stage;\n if (!stage) {\n return;\n }\n const { dom, container, width, height, style, anchorType = 'boundsLeftTop' } = html;\n if (!graphic.bindDom) {\n graphic.bindDom = new Map();\n }\n const lastDom = graphic.bindDom.get(dom);\n\n let wrapGroup;\n // 获取container的dom,默认为window的container\n let nativeContainer;\n // 如果存在了(dom存在,且container没有变化),就不做事情\n if (lastDom && !(container && container !== lastDom.container)) {\n wrapGroup = lastDom.wrapGroup;\n nativeContainer = wrapGroup.parentNode;\n } else {\n // 清除上一次的dom\n graphic.bindDom.forEach(({ wrapGroup }) => {\n application.global.removeDom(wrapGroup);\n });\n // 转化这个dom为nativeDOM\n let nativeDom: HTMLElement;\n if (typeof dom === 'string') {\n nativeDom = new DOMParser().parseFromString(dom, 'text/html').firstChild as any;\n if ((nativeDom as any).lastChild) {\n nativeDom = (nativeDom as any).lastChild.firstChild;\n }\n } else {\n nativeDom = dom;\n }\n\n const _container =\n container || (stage.params.enableHtmlAttribute === true ? null : stage.params.enableHtmlAttribute);\n if (_container) {\n if (typeof _container === 'string') {\n nativeContainer = application.global.getElementById(_container);\n } else {\n nativeContainer = _container;\n }\n } else {\n // nativeContainer = application.global.getRootElement();\n nativeContainer = graphic.stage.window.getContainer();\n }\n // 创建wrapGroup\n wrapGroup = application.global.createDom({ tagName: 'div', width, height, style, parent: nativeContainer });\n if (wrapGroup) {\n wrapGroup.appendChild(nativeDom);\n graphic.bindDom.set(dom, { dom: nativeDom, container, wrapGroup: wrapGroup as any });\n }\n }\n\n // 事件穿透\n wrapGroup.style.pointerEvents = 'none';\n // 定位wrapGroup\n if (!wrapGroup.style.position) {\n wrapGroup.style.position = 'absolute';\n nativeContainer.style.position = 'relative';\n }\n let left: number = 0;\n let top: number = 0;\n const b = graphic.globalAABBBounds;\n if (anchorType === 'position' || b.empty()) {\n const matrix = graphic.globalTransMatrix;\n left = matrix.e;\n top = matrix.f;\n } else {\n left = b.x1;\n top = b.y1;\n }\n // 查看wrapGroup的位置\n // const wrapGroupTL = application.global.getElementTopLeft(wrapGroup, false);\n const containerTL = application.global.getElementTopLeft(nativeContainer, false);\n const windowTL = stage.window.getTopLeft(false);\n const offsetX = left + windowTL.left - containerTL.left;\n const offsetTop = top + windowTL.top - containerTL.top;\n // wrapGroup.style.transform = `translate(${offsetX}px, ${offsetTop}px)`;\n wrapGroup.style.left = `${offsetX}px`;\n wrapGroup.style.top = `${offsetTop}px`;\n }\n}\n"]}
|
|
@@ -71,8 +71,10 @@ let DefaultCanvasAreaRender = class extends BaseRender {
|
|
|
71
71
|
}
|
|
72
72
|
drawLinearAreaHighPerformance(area, context, fill, stroke, fillOpacity, strokeOpacity, offsetX, offsetY, areaAttribute, drawContext, params, fillCb, strokeCb) {
|
|
73
73
|
var _a, _b, _c, _d, _e;
|
|
74
|
+
const {points: points} = area.attribute;
|
|
75
|
+
if (points.length < 2) return;
|
|
74
76
|
context.beginPath();
|
|
75
|
-
const z = null !== (_a = this.z) && void 0 !== _a ? _a : 0,
|
|
77
|
+
const z = null !== (_a = this.z) && void 0 !== _a ? _a : 0, startP = points[0];
|
|
76
78
|
context.moveTo(startP.x + offsetX, startP.y + offsetY, z);
|
|
77
79
|
for (let i = 1; i < points.length; i++) {
|
|
78
80
|
const p = points[i];
|
|
@@ -204,6 +206,7 @@ let DefaultCanvasAreaRender = class extends BaseRender {
|
|
|
204
206
|
}
|
|
205
207
|
_drawSegmentItem(context, cache, fill, fillOpacity, stroke, strokeOpacity, attribute, defaultAttribute, clipRange, offsetX, offsetY, offsetZ, area, drawContext, connect, fillCb, strokeCb) {
|
|
206
208
|
var _a, _b, _c, _d;
|
|
209
|
+
if (!(cache && cache.top && cache.bottom && cache.top.curves && cache.top.curves.length && cache.bottom.curves && cache.bottom.curves.length)) return;
|
|
207
210
|
let {connectedType: connectedType, connectedX: connectedX, connectedY: connectedY, connectedStyle: connectedStyle} = attribute;
|
|
208
211
|
const da = [];
|
|
209
212
|
if (connect && (isArray(defaultAttribute) ? (connectedType = null !== (_a = null != connectedType ? connectedType : defaultAttribute[0].connectedType) && void 0 !== _a ? _a : defaultAttribute[1].connectedType,
|
|
@@ -215,7 +218,6 @@ let DefaultCanvasAreaRender = class extends BaseRender {
|
|
|
215
218
|
"connect" !== connectedType && "zero" !== connectedType && (connectedType = "none"),
|
|
216
219
|
isArray(defaultAttribute) ? defaultAttribute.forEach((i => da.push(i))) : da.push(defaultAttribute),
|
|
217
220
|
da.push(attribute)), connect && "none" === connectedType) return !1;
|
|
218
|
-
if (!cache) return;
|
|
219
221
|
context.beginPath();
|
|
220
222
|
const {points: points, segments: segments} = area.attribute;
|
|
221
223
|
let endP, startP, direction = Direction.ROW;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/render/contributions/render/area-render.ts"],"names":[],"mappings":"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","file":"area-render.js","sourcesContent":["import type { IPointLike } from '@visactor/vutils';\nimport { abs, isArray, min } from '@visactor/vutils';\nimport { inject, injectable, named } from '../../../common/inversify-lite';\nimport type {\n IArea,\n IAreaCacheItem,\n IAreaGraphicAttribute,\n IGraphicAttribute,\n IContext2d,\n ICurveType,\n IMarkAttribute,\n IThemeAttribute,\n ISegPath2D,\n IDirection,\n IAreaRenderContribution,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IContributionProvider,\n IStrokeType\n} from '../../../interface';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport {\n genLinearSegments,\n genBasisSegments,\n genMonotoneXSegments,\n genMonotoneYSegments,\n genStepSegments,\n genLinearClosedSegments\n} from '../../../common/segment';\n\nimport { getTheme } from '../../../graphic/theme';\nimport { drawPathProxy, fillVisible, runFill, runStroke, strokeVisible } from './utils';\nimport { AreaRenderContribution } from './contributions/constants';\nimport { BaseRenderContributionTime, Direction } from '../../../common/enums';\nimport { drawAreaSegments } from '../../../common/render-area';\nimport { AREA_NUMBER_TYPE } from '../../../graphic/constants';\nimport { drawSegments } from '../../../common/render-curve';\nimport { BaseRender } from './base-render';\nimport {\n defaultAreaBackgroundRenderContribution,\n defaultAreaTextureRenderContribution\n} from './contributions/area-contribution-render';\nimport { segments } from '../../../common/shape/arc';\n\nfunction calcLineCache(\n points: IPointLike[],\n curveType: ICurveType,\n params?: { direction?: IDirection; startPoint?: IPointLike }\n): ISegPath2D | null {\n switch (curveType) {\n case 'linear':\n return genLinearSegments(points, params);\n case 'basis':\n return genBasisSegments(points, params);\n case 'monotoneX':\n return genMonotoneXSegments(points, params);\n case 'monotoneY':\n return genMonotoneYSegments(points, params);\n case 'step':\n return genStepSegments(points, 0.5, params);\n case 'stepBefore':\n return genStepSegments(points, 0, params);\n case 'stepAfter':\n return genStepSegments(points, 1, params);\n case 'linearClosed':\n return genLinearClosedSegments(points, params);\n default:\n return genLinearSegments(points, params);\n }\n}\n\n@injectable()\nexport class DefaultCanvasAreaRender extends BaseRender<IArea> implements IGraphicRender {\n type: 'area';\n numberType: number = AREA_NUMBER_TYPE;\n\n constructor(\n @inject(ContributionProvider)\n @named(AreaRenderContribution)\n protected readonly areaRenderContribitions: IContributionProvider<IAreaRenderContribution>\n ) {\n super();\n this.builtinContributions = [defaultAreaTextureRenderContribution, defaultAreaBackgroundRenderContribution];\n this.init(areaRenderContribitions);\n }\n\n drawLinearAreaHighPerformance(\n area: IArea,\n context: IContext2d,\n fill: boolean,\n stroke: boolean,\n fillOpacity: number,\n strokeOpacity: number,\n offsetX: number,\n offsetY: number,\n areaAttribute: Required<IAreaGraphicAttribute>,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n lineAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n lineAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n context.beginPath();\n\n const z = this.z ?? 0;\n const { points } = area.attribute;\n const startP = points[0];\n\n context.moveTo(startP.x + offsetX, startP.y + offsetY, z);\n for (let i = 1; i < points.length; i++) {\n const p = points[i];\n context.lineTo(p.x + offsetX, p.y + offsetY, z);\n }\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n context.lineTo((p.x1 ?? p.x) + offsetX, (p.y1 ?? p.y) + offsetY, z);\n }\n context.closePath();\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(area, area.attribute, areaAttribute);\n\n this.beforeRenderStep(\n area,\n context,\n offsetX,\n offsetY,\n !!fillOpacity,\n false,\n fill,\n false,\n areaAttribute as any,\n drawContext,\n fillCb,\n null,\n { attribute: area.attribute }\n );\n\n const { x: originX = 0, x: originY = 0 } = area.attribute;\n if (fill !== false) {\n if (fillCb) {\n fillCb(context, area.attribute, areaAttribute);\n } else if (fillOpacity) {\n context.setCommonStyle(area, area.attribute, originX - offsetX, originY - offsetY, areaAttribute);\n context.fill();\n }\n }\n\n this.afterRenderStep(\n area,\n context,\n offsetX,\n offsetY,\n !!fillOpacity,\n false,\n fill,\n false,\n areaAttribute as any,\n drawContext,\n fillCb,\n null,\n { attribute: area.attribute }\n );\n\n if (stroke) {\n const { stroke = areaAttribute && areaAttribute.stroke } = area.attribute;\n if (isArray(stroke) && (stroke[0] || stroke[2]) && stroke[1] === false) {\n context.beginPath();\n if (stroke[0]) {\n context.moveTo(startP.x + offsetX, startP.y + offsetY, z);\n for (let i = 1; i < points.length; i++) {\n const p = points[i];\n context.lineTo(p.x + offsetX, p.y + offsetY, z);\n }\n } else if (stroke[2]) {\n const endP = points[points.length - 1];\n context.moveTo(endP.x + offsetX, endP.y + offsetY, z);\n for (let i = points.length - 2; i >= 0; i--) {\n const p = points[i];\n context.lineTo((p.x1 ?? p.x) + offsetX, (p.y1 ?? p.y) + offsetY, z);\n }\n }\n }\n if (strokeCb) {\n strokeCb(context, area.attribute, areaAttribute);\n } else {\n context.setStrokeStyle(area, area.attribute, originX - offsetX, originY - offsetY, areaAttribute);\n context.stroke();\n }\n }\n }\n\n drawShape(\n area: IArea,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n lineAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const areaAttribute = getTheme(area, params?.theme).area;\n const {\n fill = areaAttribute.fill,\n stroke = areaAttribute.stroke,\n fillOpacity = areaAttribute.fillOpacity,\n z = areaAttribute.z,\n strokeOpacity = areaAttribute.strokeOpacity\n } = area.attribute;\n\n const data = this.valid(area, areaAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n const { doFill, doStroke } = data;\n\n const { clipRange = areaAttribute.clipRange, closePath, points, segments } = area.attribute;\n let { curveType = areaAttribute.curveType } = area.attribute;\n if (closePath && curveType === 'linear') {\n curveType = 'linearClosed';\n }\n\n if (clipRange === 1 && !segments && !points.some(p => p.defined === false) && curveType === 'linear') {\n return this.drawLinearAreaHighPerformance(\n area,\n context,\n !!fill,\n doStroke,\n fillOpacity,\n strokeOpacity,\n x,\n y,\n areaAttribute,\n drawContext,\n params,\n fillCb,\n strokeCb\n );\n }\n\n // 更新cache\n if (area.shouldUpdateShape()) {\n if (segments && segments.length) {\n let startPoint: IPointLike;\n let lastTopSeg: { endX: number; endY: number };\n const topCaches = segments\n .map((seg, index) => {\n if (seg.points.length <= 1) {\n // 第一个点的话,直接设置lastTopSeg\n if (index === 0) {\n seg.points[0] && (lastTopSeg = { endX: seg.points[0].x, endY: seg.points[0].y });\n return null;\n }\n }\n // 添加上一个segment结束的点作为这个segment的起始点\n if (index === 1) {\n startPoint = { x: lastTopSeg.endX, y: lastTopSeg.endY };\n } else if (index > 1) {\n startPoint.x = lastTopSeg.endX;\n startPoint.y = lastTopSeg.endY;\n }\n const data = calcLineCache(seg.points, curveType, {\n startPoint\n });\n lastTopSeg = data;\n return data;\n })\n .filter(item => !!item);\n let lastBottomSeg: ISegPath2D;\n const bottomCaches = [];\n for (let i = segments.length - 1; i >= 0; i--) {\n const points = segments[i].points;\n const bottomPoints: IPointLike[] = [];\n for (let i = points.length - 1; i >= 0; i--) {\n bottomPoints.push({\n x: points[i].x1 ?? points[i].x,\n y: points[i].y1 ?? points[i].y\n });\n }\n // 处理一下bottom的segments,bottom的segments需要手动添加endPoints\n if (i !== 0) {\n const lastSegmentPoints = segments[i - 1].points;\n const endPoint = lastSegmentPoints[lastSegmentPoints.length - 1];\n endPoint &&\n bottomPoints.push({\n x: endPoint.x1 ?? endPoint.x,\n y: endPoint.y1 ?? endPoint.y\n });\n }\n if (bottomPoints.length > 1) {\n lastBottomSeg = calcLineCache(\n bottomPoints,\n curveType === 'stepBefore' ? 'stepAfter' : curveType === 'stepAfter' ? 'stepBefore' : curveType\n );\n bottomCaches.unshift(lastBottomSeg);\n }\n }\n area.cacheArea = bottomCaches.map((item, index) => ({\n top: topCaches[index],\n bottom: item\n }));\n } else if (points && points.length) {\n // 转换points\n const topPoints = points;\n const bottomPoints: IPointLike[] = [];\n for (let i = points.length - 1; i >= 0; i--) {\n bottomPoints.push({\n x: points[i].x1 ?? points[i].x,\n y: points[i].y1 ?? points[i].y\n });\n }\n const topCache = calcLineCache(topPoints, curveType);\n const bottomCache = calcLineCache(\n bottomPoints,\n curveType === 'stepBefore' ? 'stepAfter' : curveType === 'stepAfter' ? 'stepBefore' : curveType\n );\n\n area.cacheArea = { top: topCache, bottom: bottomCache };\n } else {\n area.cacheArea = null;\n area.clearUpdateShapeTag();\n return;\n }\n area.clearUpdateShapeTag();\n }\n\n if (Array.isArray(area.cacheArea)) {\n const segments = area.attribute.segments.filter(item => item.points.length);\n // 如果第一个seg只有一个点,那么shift出去\n if (segments[0].points.length === 1) {\n segments.shift();\n }\n if (clipRange === 1) {\n let skip = false;\n // 性能优化,不需要clip的线段不需要计算长度\n area.cacheArea.forEach((cache, index) => {\n if (skip) {\n return;\n }\n skip = this.drawSegmentItem(\n context,\n cache,\n doFill,\n fillOpacity,\n doStroke,\n strokeOpacity,\n segments[index],\n [areaAttribute, area.attribute],\n clipRange,\n x,\n y,\n z,\n area,\n drawContext,\n fillCb,\n strokeCb\n );\n });\n } else {\n // 如果是segments的话,每个clipRange需要重新计算\n // 整个线段的总长度\n const totalLength = area.cacheArea.reduce((l, c) => l + c.top.getLength(), 0);\n // 总需要绘制的长度\n const totalDrawLength = clipRange * totalLength;\n // 直到上次绘制的长度\n let drawedLengthUntilLast = 0;\n let skip = false;\n area.cacheArea.forEach((cache, index) => {\n if (skip) {\n return;\n }\n const curSegLength = cache.top.getLength();\n const _cr = (totalDrawLength - drawedLengthUntilLast) / curSegLength;\n drawedLengthUntilLast += curSegLength;\n if (_cr > 0) {\n skip = this.drawSegmentItem(\n context,\n cache,\n doFill,\n fillOpacity,\n doStroke,\n strokeOpacity,\n segments[index],\n [areaAttribute, area.attribute],\n min(_cr, 1),\n x,\n y,\n z,\n area,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n });\n }\n } else {\n this.drawSegmentItem(\n context,\n area.cacheArea as IAreaCacheItem,\n doFill,\n fillOpacity,\n doStroke,\n strokeOpacity,\n area.attribute,\n areaAttribute,\n clipRange,\n x,\n y,\n z,\n area,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n }\n\n draw(area: IArea, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const areaAttribute = getTheme(area, params?.theme).area;\n this._draw(area, areaAttribute, false, drawContext, params);\n }\n\n /**\n * 绘制segment\n * @param context\n * @param cache\n * @param fill\n * @param stroke\n * @param attribute\n * @param defaultAttribute\n * @param clipRange\n * @param offsetX\n * @param offsetY\n * @param fillCb\n * @param strokeCb\n * @returns 返回true代表跳过后续绘制\n */\n protected drawSegmentItem(\n context: IContext2d,\n cache: IAreaCacheItem,\n fill: boolean,\n fillOpacity: number,\n stroke: boolean,\n strokeOpacity: number,\n attribute: Partial<IAreaGraphicAttribute>,\n defaultAttribute: Required<IAreaGraphicAttribute> | Partial<IAreaGraphicAttribute>[],\n clipRange: number,\n offsetX: number,\n offsetY: number,\n offsetZ: number,\n area: IArea,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n lineAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute | IThemeAttribute[]\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n lineAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute | IThemeAttribute[]\n ) => boolean\n ): boolean {\n let ret = false;\n ret =\n ret ||\n this._drawSegmentItem(\n context,\n cache,\n fill,\n fillOpacity,\n stroke,\n strokeOpacity,\n attribute,\n defaultAttribute,\n clipRange,\n offsetX,\n offsetY,\n offsetZ,\n area,\n drawContext,\n false,\n fillCb,\n strokeCb\n );\n ret =\n ret ||\n this._drawSegmentItem(\n context,\n cache,\n fill,\n fillOpacity,\n stroke,\n strokeOpacity,\n attribute,\n defaultAttribute,\n clipRange,\n offsetX,\n offsetY,\n offsetZ,\n area,\n drawContext,\n true,\n fillCb,\n strokeCb\n );\n return ret;\n }\n\n protected _drawSegmentItem(\n context: IContext2d,\n cache: IAreaCacheItem,\n fill: boolean,\n fillOpacity: number,\n stroke: boolean,\n strokeOpacity: number,\n attribute: Partial<IAreaGraphicAttribute>,\n defaultAttribute: Required<IAreaGraphicAttribute> | Partial<IAreaGraphicAttribute>[],\n clipRange: number,\n offsetX: number,\n offsetY: number,\n offsetZ: number,\n area: IArea,\n drawContext: IDrawContext,\n connect: boolean,\n fillCb?: (\n ctx: IContext2d,\n lineAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute | IThemeAttribute[]\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n lineAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute | IThemeAttribute[]\n ) => boolean\n ) {\n // 绘制connect区域\n let { connectedType, connectedX, connectedY, connectedStyle } = attribute;\n const da = [];\n if (connect) {\n if (isArray(defaultAttribute)) {\n connectedType = connectedType ?? defaultAttribute[0].connectedType ?? defaultAttribute[1].connectedType;\n connectedX = connectedX ?? defaultAttribute[0].connectedX ?? defaultAttribute[1].connectedX;\n connectedY = connectedY ?? defaultAttribute[0].connectedY ?? defaultAttribute[1].connectedY;\n connectedStyle = connectedStyle ?? defaultAttribute[0].connectedStyle ?? defaultAttribute[1].connectedStyle;\n } else {\n connectedType = connectedType ?? defaultAttribute.connectedType;\n connectedX = connectedX ?? defaultAttribute.connectedX;\n connectedY = connectedY ?? defaultAttribute.connectedY;\n connectedStyle = connectedStyle ?? defaultAttribute.connectedStyle;\n }\n\n // 如果有非法值就是none\n if (connectedType !== 'connect' && connectedType !== 'zero') {\n connectedType = 'none';\n }\n\n if (isArray(defaultAttribute)) {\n defaultAttribute.forEach(i => da.push(i));\n } else {\n da.push(defaultAttribute);\n }\n da.push(attribute);\n }\n\n if (connect && connectedType === 'none') {\n return false;\n }\n\n if (!cache) {\n return;\n }\n context.beginPath();\n\n const ret: boolean = false;\n const { points, segments } = area.attribute;\n let direction = Direction.ROW;\n let endP: IPointLike;\n let startP: IPointLike;\n if (segments) {\n const endSeg = segments[segments.length - 1];\n const startSeg = segments[0];\n startP = startSeg.points[0];\n endP = endSeg.points[endSeg.points.length - 1];\n } else {\n startP = points[0];\n endP = points[points.length - 1];\n }\n const xTotalLength = abs(endP.x - startP.x);\n const yTotalLength = abs(endP.y - startP.y);\n direction = xTotalLength > yTotalLength ? Direction.ROW : Direction.COLUMN;\n drawAreaSegments(context.camera ? context : context.nativeContext, cache, clipRange, {\n offsetX,\n offsetY,\n offsetZ,\n direction,\n drawConnect: connect,\n mode: connectedType,\n zeroX: connectedX,\n zeroY: connectedY\n });\n\n this.beforeRenderStep(\n area,\n context,\n offsetX,\n offsetY,\n !!fillOpacity,\n false,\n fill,\n false,\n defaultAttribute as any,\n drawContext,\n fillCb,\n null,\n { attribute }\n );\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(area, attribute, defaultAttribute);\n\n const { x: originX = 0, x: originY = 0 } = attribute;\n if (fill !== false) {\n if (fillCb) {\n fillCb(context, attribute, defaultAttribute);\n } else if (fillOpacity) {\n context.setCommonStyle(\n area,\n connect ? connectedStyle : attribute,\n originX - offsetX,\n originY - offsetY,\n connect ? da : defaultAttribute\n );\n context.fill();\n }\n }\n\n this.afterRenderStep(\n area,\n context,\n offsetX,\n offsetY,\n !!fillOpacity,\n false,\n fill,\n false,\n defaultAttribute as any,\n drawContext,\n fillCb,\n null,\n { attribute }\n );\n\n if (stroke !== false) {\n if (strokeCb) {\n strokeCb(context, attribute, defaultAttribute);\n } else {\n const { stroke = defaultAttribute && defaultAttribute[1] && defaultAttribute[1].stroke } = attribute;\n if (isArray(stroke) && (stroke[0] || stroke[2]) && stroke[1] === false) {\n context.beginPath();\n drawSegments(\n context.camera ? context : context.nativeContext,\n stroke[0] ? cache.top : cache.bottom,\n clipRange,\n direction === Direction.ROW ? 'x' : 'y',\n {\n offsetX,\n offsetY,\n offsetZ,\n drawConnect: connect,\n mode: connectedType,\n zeroX: connectedX,\n zeroY: connectedY\n }\n );\n }\n context.setStrokeStyle(\n area,\n connect ? connectedStyle : attribute,\n originX - offsetX,\n originY - offsetY,\n connect ? da : defaultAttribute\n );\n context.stroke();\n }\n }\n\n return ret;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/render/contributions/render/area-render.ts"],"names":[],"mappings":"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","file":"area-render.js","sourcesContent":["import type { IPointLike } from '@visactor/vutils';\nimport { abs, isArray, min } from '@visactor/vutils';\nimport { inject, injectable, named } from '../../../common/inversify-lite';\nimport type {\n IArea,\n IAreaCacheItem,\n IAreaGraphicAttribute,\n IGraphicAttribute,\n IContext2d,\n ICurveType,\n IMarkAttribute,\n IThemeAttribute,\n ISegPath2D,\n IDirection,\n IAreaRenderContribution,\n IDrawContext,\n IRenderService,\n IGraphicRender,\n IGraphicRenderDrawParams,\n IContributionProvider,\n IStrokeType\n} from '../../../interface';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../../../common/contribution-provider';\nimport {\n genLinearSegments,\n genBasisSegments,\n genMonotoneXSegments,\n genMonotoneYSegments,\n genStepSegments,\n genLinearClosedSegments\n} from '../../../common/segment';\n\nimport { getTheme } from '../../../graphic/theme';\nimport { drawPathProxy, fillVisible, runFill, runStroke, strokeVisible } from './utils';\nimport { AreaRenderContribution } from './contributions/constants';\nimport { BaseRenderContributionTime, Direction } from '../../../common/enums';\nimport { drawAreaSegments } from '../../../common/render-area';\nimport { AREA_NUMBER_TYPE } from '../../../graphic/constants';\nimport { drawSegments } from '../../../common/render-curve';\nimport { BaseRender } from './base-render';\nimport {\n defaultAreaBackgroundRenderContribution,\n defaultAreaTextureRenderContribution\n} from './contributions/area-contribution-render';\nimport { segments } from '../../../common/shape/arc';\n\nfunction calcLineCache(\n points: IPointLike[],\n curveType: ICurveType,\n params?: { direction?: IDirection; startPoint?: IPointLike }\n): ISegPath2D | null {\n switch (curveType) {\n case 'linear':\n return genLinearSegments(points, params);\n case 'basis':\n return genBasisSegments(points, params);\n case 'monotoneX':\n return genMonotoneXSegments(points, params);\n case 'monotoneY':\n return genMonotoneYSegments(points, params);\n case 'step':\n return genStepSegments(points, 0.5, params);\n case 'stepBefore':\n return genStepSegments(points, 0, params);\n case 'stepAfter':\n return genStepSegments(points, 1, params);\n case 'linearClosed':\n return genLinearClosedSegments(points, params);\n default:\n return genLinearSegments(points, params);\n }\n}\n\n@injectable()\nexport class DefaultCanvasAreaRender extends BaseRender<IArea> implements IGraphicRender {\n type: 'area';\n numberType: number = AREA_NUMBER_TYPE;\n\n constructor(\n @inject(ContributionProvider)\n @named(AreaRenderContribution)\n protected readonly areaRenderContribitions: IContributionProvider<IAreaRenderContribution>\n ) {\n super();\n this.builtinContributions = [defaultAreaTextureRenderContribution, defaultAreaBackgroundRenderContribution];\n this.init(areaRenderContribitions);\n }\n\n drawLinearAreaHighPerformance(\n area: IArea,\n context: IContext2d,\n fill: boolean,\n stroke: boolean,\n fillOpacity: number,\n strokeOpacity: number,\n offsetX: number,\n offsetY: number,\n areaAttribute: Required<IAreaGraphicAttribute>,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n lineAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n lineAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const { points } = area.attribute;\n if (points.length < 2) {\n return;\n }\n context.beginPath();\n\n const z = this.z ?? 0;\n const startP = points[0];\n\n context.moveTo(startP.x + offsetX, startP.y + offsetY, z);\n for (let i = 1; i < points.length; i++) {\n const p = points[i];\n context.lineTo(p.x + offsetX, p.y + offsetY, z);\n }\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n context.lineTo((p.x1 ?? p.x) + offsetX, (p.y1 ?? p.y) + offsetY, z);\n }\n context.closePath();\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(area, area.attribute, areaAttribute);\n\n this.beforeRenderStep(\n area,\n context,\n offsetX,\n offsetY,\n !!fillOpacity,\n false,\n fill,\n false,\n areaAttribute as any,\n drawContext,\n fillCb,\n null,\n { attribute: area.attribute }\n );\n\n const { x: originX = 0, x: originY = 0 } = area.attribute;\n if (fill !== false) {\n if (fillCb) {\n fillCb(context, area.attribute, areaAttribute);\n } else if (fillOpacity) {\n context.setCommonStyle(area, area.attribute, originX - offsetX, originY - offsetY, areaAttribute);\n context.fill();\n }\n }\n\n this.afterRenderStep(\n area,\n context,\n offsetX,\n offsetY,\n !!fillOpacity,\n false,\n fill,\n false,\n areaAttribute as any,\n drawContext,\n fillCb,\n null,\n { attribute: area.attribute }\n );\n\n if (stroke) {\n const { stroke = areaAttribute && areaAttribute.stroke } = area.attribute;\n if (isArray(stroke) && (stroke[0] || stroke[2]) && stroke[1] === false) {\n context.beginPath();\n if (stroke[0]) {\n context.moveTo(startP.x + offsetX, startP.y + offsetY, z);\n for (let i = 1; i < points.length; i++) {\n const p = points[i];\n context.lineTo(p.x + offsetX, p.y + offsetY, z);\n }\n } else if (stroke[2]) {\n const endP = points[points.length - 1];\n context.moveTo(endP.x + offsetX, endP.y + offsetY, z);\n for (let i = points.length - 2; i >= 0; i--) {\n const p = points[i];\n context.lineTo((p.x1 ?? p.x) + offsetX, (p.y1 ?? p.y) + offsetY, z);\n }\n }\n }\n if (strokeCb) {\n strokeCb(context, area.attribute, areaAttribute);\n } else {\n context.setStrokeStyle(area, area.attribute, originX - offsetX, originY - offsetY, areaAttribute);\n context.stroke();\n }\n }\n }\n\n drawShape(\n area: IArea,\n context: IContext2d,\n x: number,\n y: number,\n drawContext: IDrawContext,\n params?: IGraphicRenderDrawParams,\n fillCb?: (\n ctx: IContext2d,\n lineAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n markAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute\n ) => boolean\n ) {\n const areaAttribute = getTheme(area, params?.theme).area;\n const {\n fill = areaAttribute.fill,\n stroke = areaAttribute.stroke,\n fillOpacity = areaAttribute.fillOpacity,\n z = areaAttribute.z,\n strokeOpacity = areaAttribute.strokeOpacity\n } = area.attribute;\n\n const data = this.valid(area, areaAttribute, fillCb, strokeCb);\n if (!data) {\n return;\n }\n const { doFill, doStroke } = data;\n\n const { clipRange = areaAttribute.clipRange, closePath, points, segments } = area.attribute;\n let { curveType = areaAttribute.curveType } = area.attribute;\n if (closePath && curveType === 'linear') {\n curveType = 'linearClosed';\n }\n\n if (clipRange === 1 && !segments && !points.some(p => p.defined === false) && curveType === 'linear') {\n return this.drawLinearAreaHighPerformance(\n area,\n context,\n !!fill,\n doStroke,\n fillOpacity,\n strokeOpacity,\n x,\n y,\n areaAttribute,\n drawContext,\n params,\n fillCb,\n strokeCb\n );\n }\n\n // 更新cache\n if (area.shouldUpdateShape()) {\n if (segments && segments.length) {\n let startPoint: IPointLike;\n let lastTopSeg: { endX: number; endY: number };\n const topCaches = segments\n .map((seg, index) => {\n if (seg.points.length <= 1) {\n // 第一个点的话,直接设置lastTopSeg\n if (index === 0) {\n seg.points[0] && (lastTopSeg = { endX: seg.points[0].x, endY: seg.points[0].y });\n return null;\n }\n }\n // 添加上一个segment结束的点作为这个segment的起始点\n if (index === 1) {\n startPoint = { x: lastTopSeg.endX, y: lastTopSeg.endY };\n } else if (index > 1) {\n startPoint.x = lastTopSeg.endX;\n startPoint.y = lastTopSeg.endY;\n }\n const data = calcLineCache(seg.points, curveType, {\n startPoint\n });\n lastTopSeg = data;\n return data;\n })\n .filter(item => !!item);\n let lastBottomSeg: ISegPath2D;\n const bottomCaches = [];\n for (let i = segments.length - 1; i >= 0; i--) {\n const points = segments[i].points;\n const bottomPoints: IPointLike[] = [];\n for (let i = points.length - 1; i >= 0; i--) {\n bottomPoints.push({\n x: points[i].x1 ?? points[i].x,\n y: points[i].y1 ?? points[i].y\n });\n }\n // 处理一下bottom的segments,bottom的segments需要手动添加endPoints\n if (i !== 0) {\n const lastSegmentPoints = segments[i - 1].points;\n const endPoint = lastSegmentPoints[lastSegmentPoints.length - 1];\n endPoint &&\n bottomPoints.push({\n x: endPoint.x1 ?? endPoint.x,\n y: endPoint.y1 ?? endPoint.y\n });\n }\n if (bottomPoints.length > 1) {\n lastBottomSeg = calcLineCache(\n bottomPoints,\n curveType === 'stepBefore' ? 'stepAfter' : curveType === 'stepAfter' ? 'stepBefore' : curveType\n );\n bottomCaches.unshift(lastBottomSeg);\n }\n }\n area.cacheArea = bottomCaches.map((item, index) => ({\n top: topCaches[index],\n bottom: item\n }));\n } else if (points && points.length) {\n // 转换points\n const topPoints = points;\n const bottomPoints: IPointLike[] = [];\n for (let i = points.length - 1; i >= 0; i--) {\n bottomPoints.push({\n x: points[i].x1 ?? points[i].x,\n y: points[i].y1 ?? points[i].y\n });\n }\n const topCache = calcLineCache(topPoints, curveType);\n const bottomCache = calcLineCache(\n bottomPoints,\n curveType === 'stepBefore' ? 'stepAfter' : curveType === 'stepAfter' ? 'stepBefore' : curveType\n );\n\n area.cacheArea = { top: topCache, bottom: bottomCache };\n } else {\n area.cacheArea = null;\n area.clearUpdateShapeTag();\n return;\n }\n area.clearUpdateShapeTag();\n }\n\n if (Array.isArray(area.cacheArea)) {\n const segments = area.attribute.segments.filter(item => item.points.length);\n // 如果第一个seg只有一个点,那么shift出去\n if (segments[0].points.length === 1) {\n segments.shift();\n }\n if (clipRange === 1) {\n let skip = false;\n // 性能优化,不需要clip的线段不需要计算长度\n area.cacheArea.forEach((cache, index) => {\n if (skip) {\n return;\n }\n skip = this.drawSegmentItem(\n context,\n cache,\n doFill,\n fillOpacity,\n doStroke,\n strokeOpacity,\n segments[index],\n [areaAttribute, area.attribute],\n clipRange,\n x,\n y,\n z,\n area,\n drawContext,\n fillCb,\n strokeCb\n );\n });\n } else {\n // 如果是segments的话,每个clipRange需要重新计算\n // 整个线段的总长度\n const totalLength = area.cacheArea.reduce((l, c) => l + c.top.getLength(), 0);\n // 总需要绘制的长度\n const totalDrawLength = clipRange * totalLength;\n // 直到上次绘制的长度\n let drawedLengthUntilLast = 0;\n let skip = false;\n area.cacheArea.forEach((cache, index) => {\n if (skip) {\n return;\n }\n const curSegLength = cache.top.getLength();\n const _cr = (totalDrawLength - drawedLengthUntilLast) / curSegLength;\n drawedLengthUntilLast += curSegLength;\n if (_cr > 0) {\n skip = this.drawSegmentItem(\n context,\n cache,\n doFill,\n fillOpacity,\n doStroke,\n strokeOpacity,\n segments[index],\n [areaAttribute, area.attribute],\n min(_cr, 1),\n x,\n y,\n z,\n area,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n });\n }\n } else {\n this.drawSegmentItem(\n context,\n area.cacheArea as IAreaCacheItem,\n doFill,\n fillOpacity,\n doStroke,\n strokeOpacity,\n area.attribute,\n areaAttribute,\n clipRange,\n x,\n y,\n z,\n area,\n drawContext,\n fillCb,\n strokeCb\n );\n }\n }\n\n draw(area: IArea, renderService: IRenderService, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) {\n const areaAttribute = getTheme(area, params?.theme).area;\n this._draw(area, areaAttribute, false, drawContext, params);\n }\n\n /**\n * 绘制segment\n * @param context\n * @param cache\n * @param fill\n * @param stroke\n * @param attribute\n * @param defaultAttribute\n * @param clipRange\n * @param offsetX\n * @param offsetY\n * @param fillCb\n * @param strokeCb\n * @returns 返回true代表跳过后续绘制\n */\n protected drawSegmentItem(\n context: IContext2d,\n cache: IAreaCacheItem,\n fill: boolean,\n fillOpacity: number,\n stroke: boolean,\n strokeOpacity: number,\n attribute: Partial<IAreaGraphicAttribute>,\n defaultAttribute: Required<IAreaGraphicAttribute> | Partial<IAreaGraphicAttribute>[],\n clipRange: number,\n offsetX: number,\n offsetY: number,\n offsetZ: number,\n area: IArea,\n drawContext: IDrawContext,\n fillCb?: (\n ctx: IContext2d,\n lineAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute | IThemeAttribute[]\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n lineAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute | IThemeAttribute[]\n ) => boolean\n ): boolean {\n let ret = false;\n ret =\n ret ||\n this._drawSegmentItem(\n context,\n cache,\n fill,\n fillOpacity,\n stroke,\n strokeOpacity,\n attribute,\n defaultAttribute,\n clipRange,\n offsetX,\n offsetY,\n offsetZ,\n area,\n drawContext,\n false,\n fillCb,\n strokeCb\n );\n ret =\n ret ||\n this._drawSegmentItem(\n context,\n cache,\n fill,\n fillOpacity,\n stroke,\n strokeOpacity,\n attribute,\n defaultAttribute,\n clipRange,\n offsetX,\n offsetY,\n offsetZ,\n area,\n drawContext,\n true,\n fillCb,\n strokeCb\n );\n return ret;\n }\n\n protected _drawSegmentItem(\n context: IContext2d,\n cache: IAreaCacheItem,\n fill: boolean,\n fillOpacity: number,\n stroke: boolean,\n strokeOpacity: number,\n attribute: Partial<IAreaGraphicAttribute>,\n defaultAttribute: Required<IAreaGraphicAttribute> | Partial<IAreaGraphicAttribute>[],\n clipRange: number,\n offsetX: number,\n offsetY: number,\n offsetZ: number,\n area: IArea,\n drawContext: IDrawContext,\n connect: boolean,\n fillCb?: (\n ctx: IContext2d,\n lineAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute | IThemeAttribute[]\n ) => boolean,\n strokeCb?: (\n ctx: IContext2d,\n lineAttribute: Partial<IMarkAttribute & IGraphicAttribute>,\n themeAttribute: IThemeAttribute | IThemeAttribute[]\n ) => boolean\n ) {\n if (\n !(\n cache &&\n cache.top &&\n cache.bottom &&\n cache.top.curves &&\n cache.top.curves.length &&\n cache.bottom.curves &&\n cache.bottom.curves.length\n )\n ) {\n return;\n }\n // 绘制connect区域\n let { connectedType, connectedX, connectedY, connectedStyle } = attribute;\n const da = [];\n if (connect) {\n if (isArray(defaultAttribute)) {\n connectedType = connectedType ?? defaultAttribute[0].connectedType ?? defaultAttribute[1].connectedType;\n connectedX = connectedX ?? defaultAttribute[0].connectedX ?? defaultAttribute[1].connectedX;\n connectedY = connectedY ?? defaultAttribute[0].connectedY ?? defaultAttribute[1].connectedY;\n connectedStyle = connectedStyle ?? defaultAttribute[0].connectedStyle ?? defaultAttribute[1].connectedStyle;\n } else {\n connectedType = connectedType ?? defaultAttribute.connectedType;\n connectedX = connectedX ?? defaultAttribute.connectedX;\n connectedY = connectedY ?? defaultAttribute.connectedY;\n connectedStyle = connectedStyle ?? defaultAttribute.connectedStyle;\n }\n\n // 如果有非法值就是none\n if (connectedType !== 'connect' && connectedType !== 'zero') {\n connectedType = 'none';\n }\n\n if (isArray(defaultAttribute)) {\n defaultAttribute.forEach(i => da.push(i));\n } else {\n da.push(defaultAttribute);\n }\n da.push(attribute);\n }\n\n if (connect && connectedType === 'none') {\n return false;\n }\n\n context.beginPath();\n\n const ret: boolean = false;\n const { points, segments } = area.attribute;\n let direction = Direction.ROW;\n let endP: IPointLike;\n let startP: IPointLike;\n if (segments) {\n const endSeg = segments[segments.length - 1];\n const startSeg = segments[0];\n startP = startSeg.points[0];\n endP = endSeg.points[endSeg.points.length - 1];\n } else {\n startP = points[0];\n endP = points[points.length - 1];\n }\n const xTotalLength = abs(endP.x - startP.x);\n const yTotalLength = abs(endP.y - startP.y);\n direction = xTotalLength > yTotalLength ? Direction.ROW : Direction.COLUMN;\n drawAreaSegments(context.camera ? context : context.nativeContext, cache, clipRange, {\n offsetX,\n offsetY,\n offsetZ,\n direction,\n drawConnect: connect,\n mode: connectedType,\n zeroX: connectedX,\n zeroY: connectedY\n });\n\n this.beforeRenderStep(\n area,\n context,\n offsetX,\n offsetY,\n !!fillOpacity,\n false,\n fill,\n false,\n defaultAttribute as any,\n drawContext,\n fillCb,\n null,\n { attribute }\n );\n\n // shadow\n context.setShadowBlendStyle && context.setShadowBlendStyle(area, attribute, defaultAttribute);\n\n const { x: originX = 0, x: originY = 0 } = attribute;\n if (fill !== false) {\n if (fillCb) {\n fillCb(context, attribute, defaultAttribute);\n } else if (fillOpacity) {\n context.setCommonStyle(\n area,\n connect ? connectedStyle : attribute,\n originX - offsetX,\n originY - offsetY,\n connect ? da : defaultAttribute\n );\n context.fill();\n }\n }\n\n this.afterRenderStep(\n area,\n context,\n offsetX,\n offsetY,\n !!fillOpacity,\n false,\n fill,\n false,\n defaultAttribute as any,\n drawContext,\n fillCb,\n null,\n { attribute }\n );\n\n if (stroke !== false) {\n if (strokeCb) {\n strokeCb(context, attribute, defaultAttribute);\n } else {\n const { stroke = defaultAttribute && defaultAttribute[1] && defaultAttribute[1].stroke } = attribute;\n if (isArray(stroke) && (stroke[0] || stroke[2]) && stroke[1] === false) {\n context.beginPath();\n drawSegments(\n context.camera ? context : context.nativeContext,\n stroke[0] ? cache.top : cache.bottom,\n clipRange,\n direction === Direction.ROW ? 'x' : 'y',\n {\n offsetX,\n offsetY,\n offsetZ,\n drawConnect: connect,\n mode: connectedType,\n zeroX: connectedX,\n zeroY: connectedY\n }\n );\n }\n context.setStrokeStyle(\n area,\n connect ? connectedStyle : attribute,\n originX - offsetX,\n originY - offsetY,\n connect ? da : defaultAttribute\n );\n context.stroke();\n }\n }\n\n return ret;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visactor/vrender-core",
|
|
3
|
-
"version": "0.17.20-alpha.
|
|
3
|
+
"version": "0.17.20-alpha.6",
|
|
4
4
|
"description": "",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"./src/modules.ts",
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
"vite": "3.2.6",
|
|
36
36
|
"typescript": "4.9.5",
|
|
37
37
|
"@internal/bundler": "0.0.1",
|
|
38
|
-
"@internal/
|
|
39
|
-
"@internal/
|
|
38
|
+
"@internal/ts-config": "0.0.1",
|
|
39
|
+
"@internal/eslint-config": "0.0.1"
|
|
40
40
|
},
|
|
41
41
|
"keywords": [
|
|
42
42
|
"VisActor",
|