@visactor/vrender-core 0.19.6-alpha.1 → 0.19.6-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/canvas/conical-gradient.d.ts +1 -1
- package/cjs/color-string/interpolate.d.ts +1 -1
- package/cjs/color-string/interpolate.js +2 -2
- package/cjs/color-string/interpolate.js.map +1 -1
- package/cjs/event/event-manager.js +7 -5
- package/cjs/event/event-manager.js.map +1 -1
- package/cjs/event/federated-event/base-event.d.ts +1 -1
- package/cjs/event/federated-event/base-event.js +3 -2
- package/cjs/event/federated-event/base-event.js.map +1 -1
- package/cjs/event/federated-event/pointer-event.js +4 -3
- package/cjs/event/federated-event/pointer-event.js.map +1 -1
- package/cjs/event/federated-event/wheel-event.js +4 -3
- package/cjs/event/federated-event/wheel-event.js.map +1 -1
- package/cjs/graphic/node-tree.js +2 -1
- package/cjs/graphic/node-tree.js.map +1 -1
- package/cjs/tapable/Hook.js +1 -1
- package/cjs/tapable/Hook.js.map +1 -1
- package/dist/index.es.js +20 -3
- package/es/canvas/conical-gradient.d.ts +1 -1
- package/es/color-string/interpolate.d.ts +1 -1
- package/es/color-string/interpolate.js +3 -1
- package/es/color-string/interpolate.js.map +1 -1
- package/es/event/event-manager.js +7 -5
- package/es/event/event-manager.js.map +1 -1
- package/es/event/federated-event/base-event.d.ts +1 -1
- package/es/event/federated-event/base-event.js +3 -2
- package/es/event/federated-event/base-event.js.map +1 -1
- package/es/event/federated-event/pointer-event.js +4 -3
- package/es/event/federated-event/pointer-event.js.map +1 -1
- package/es/event/federated-event/wheel-event.js +4 -3
- package/es/event/federated-event/wheel-event.js.map +1 -1
- package/es/graphic/node-tree.js +2 -1
- package/es/graphic/node-tree.js.map +1 -1
- package/es/tapable/Hook.js +1 -1
- package/es/tapable/Hook.js.map +1 -1
- package/package.json +1 -1
|
@@ -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(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"]}
|
|
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(deep?: boolean) {\n if (!this._idMap) {\n return;\n }\n if (this._nodeList) {\n this._nodeList.length = 0;\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"]}
|
package/cjs/tapable/Hook.js
CHANGED
|
@@ -16,7 +16,7 @@ class Hook {
|
|
|
16
16
|
}
|
|
17
17
|
unTap(options, fn) {
|
|
18
18
|
const name = "string" == typeof options ? options.trim() : options.name;
|
|
19
|
-
name && (this.taps = this.taps.filter((tap => tap.name
|
|
19
|
+
name && (this.taps = this.taps.filter((tap => !(tap.name === name && (!fn || tap.fn === fn)))));
|
|
20
20
|
}
|
|
21
21
|
_parseOptions(type, options, fn) {
|
|
22
22
|
let _options;
|
package/cjs/tapable/Hook.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tapable/Hook.ts"],"names":[],"mappings":";;;AA0BA,MAAsB,IAAI;IAChB,KAAK,CAAW;IACf,IAAI,CAAU;IACvB,IAAI,CAAY;IAEhB,YAAY,IAAc,EAAE,IAAa;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IAYjB,CAAC;IAID,GAAG,CAAC,OAAkD,EAAE,EAA8B;QACpF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,OAAkD,EAAE,EAA+B;QACvF,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QAEzE,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/tapable/Hook.ts"],"names":[],"mappings":"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","file":"Hook.js","sourcesContent":["import type { AsArray, FullTap, IfSet, Tap, UnsetAdditionalOptions } from '../interface';\n\n/**\n * 参考 https://github.com/webpack/tapable\n * The MIT License\n\n Copyright JS Foundation and other contributors\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\nexport abstract class Hook<T, R, AdditionalOptions = UnsetAdditionalOptions> {\n private _args: string[];\n readonly name?: string;\n taps: FullTap[];\n\n constructor(args: string[], name?: string) {\n this._args = args;\n this.name = name;\n this.taps = [];\n // this.interceptors = [];\n // this._call = CALL_DELEGATE;\n // this.call = CALL_DELEGATE;\n // this._callAsync = CALL_ASYNC_DELEGATE;\n // this.callAsync = CALL_ASYNC_DELEGATE;\n // this._promise = PROMISE_DELEGATE;\n // this.promise = PROMISE_DELEGATE;\n // this._x = undefined;\n\n // this.tapAsync = this.tapAsync;\n // this.tapPromise = this.tapPromise;\n }\n\n // abstract compile(options: ICompileOptions): void;\n\n tap(options: string | (Tap & IfSet<AdditionalOptions>), fn: (...args: AsArray<T>) => R): void {\n this._tap('sync', options, fn);\n }\n\n unTap(options: string | (Tap & IfSet<AdditionalOptions>), fn?: (...args: AsArray<T>) => R): void {\n const name = typeof options === 'string' ? options.trim() : options.name;\n\n if (name) {\n this.taps = this.taps.filter(tap => !(tap.name === name && (!fn || tap.fn === fn)));\n }\n }\n\n private _parseOptions(\n type: string,\n options: string | (Tap & IfSet<AdditionalOptions>),\n fn: (...args: AsArray<T>) => R\n ) {\n let _options: FullTap;\n if (typeof options === 'string') {\n _options = {\n name: options.trim()\n } as any;\n } else if (typeof options !== 'object' || options === null) {\n throw new Error('Invalid tap options');\n }\n if (typeof _options.name !== 'string' || _options.name === '') {\n throw new Error('Missing name for tap');\n }\n _options = Object.assign({ type, fn }, _options);\n\n return _options;\n }\n\n private _tap(type: string, options: string | (Tap & IfSet<AdditionalOptions>), fn: (...args: AsArray<T>) => R) {\n this._insert(this._parseOptions(type, options, fn));\n }\n\n private _insert(item: FullTap) {\n let before;\n if (typeof item.before === 'string') {\n before = new Set([item.before]);\n } else if (Array.isArray(item.before)) {\n before = new Set(item.before);\n }\n let stage = 0;\n if (typeof item.stage === 'number') {\n stage = item.stage;\n }\n let i = this.taps.length;\n while (i > 0) {\n i--;\n const x = this.taps[i];\n this.taps[i + 1] = x;\n const xStage = x.stage || 0;\n if (before) {\n if (before.has(x.name)) {\n before.delete(x.name);\n continue;\n }\n if (before.size > 0) {\n continue;\n }\n }\n if (xStage > stage) {\n continue;\n }\n i++;\n break;\n }\n this.taps[i] = item;\n }\n}\n"]}
|
package/dist/index.es.js
CHANGED
|
@@ -1074,7 +1074,7 @@ class Hook {
|
|
|
1074
1074
|
unTap(options, fn) {
|
|
1075
1075
|
const name = typeof options === 'string' ? options.trim() : options.name;
|
|
1076
1076
|
if (name) {
|
|
1077
|
-
this.taps = this.taps.filter(tap => tap.name
|
|
1077
|
+
this.taps = this.taps.filter(tap => !(tap.name === name && (!fn || tap.fn === fn)));
|
|
1078
1078
|
}
|
|
1079
1079
|
}
|
|
1080
1080
|
_parseOptions(type, options, fn) {
|
|
@@ -5560,7 +5560,7 @@ class Node extends EventEmitter {
|
|
|
5560
5560
|
this._idMap.delete(child._uid);
|
|
5561
5561
|
if (this._nodeList) {
|
|
5562
5562
|
const idx = this._nodeList.findIndex(n => n === child);
|
|
5563
|
-
if (idx
|
|
5563
|
+
if (idx >= 0) {
|
|
5564
5564
|
this._nodeList.splice(idx, 1);
|
|
5565
5565
|
}
|
|
5566
5566
|
}
|
|
@@ -5592,6 +5592,9 @@ class Node extends EventEmitter {
|
|
|
5592
5592
|
if (!this._idMap) {
|
|
5593
5593
|
return;
|
|
5594
5594
|
}
|
|
5595
|
+
if (this._nodeList) {
|
|
5596
|
+
this._nodeList.length = 0;
|
|
5597
|
+
}
|
|
5595
5598
|
let child = this._firstChild;
|
|
5596
5599
|
while (child) {
|
|
5597
5600
|
const next = child._next;
|
|
@@ -5931,6 +5934,10 @@ class FederatedEvent {
|
|
|
5931
5934
|
this.detailPath = this.path.slice();
|
|
5932
5935
|
this._composedDetailPath(this.pickParams);
|
|
5933
5936
|
}
|
|
5937
|
+
else {
|
|
5938
|
+
this.detailPath = this.path.slice();
|
|
5939
|
+
}
|
|
5940
|
+
return this.detailPath;
|
|
5934
5941
|
}
|
|
5935
5942
|
_composedDetailPath(params) {
|
|
5936
5943
|
if (params && params.graphic) {
|
|
@@ -6064,6 +6071,7 @@ class FederatedPointerEvent extends FederatedMouseEvent {
|
|
|
6064
6071
|
event.eventPhase = event.NONE;
|
|
6065
6072
|
event.currentTarget = null;
|
|
6066
6073
|
event.path = [];
|
|
6074
|
+
event.detailPath = [];
|
|
6067
6075
|
event.target = null;
|
|
6068
6076
|
event.nativeEvent = this.nativeEvent;
|
|
6069
6077
|
event.originalEvent = this.originalEvent;
|
|
@@ -6072,6 +6080,8 @@ class FederatedPointerEvent extends FederatedMouseEvent {
|
|
|
6072
6080
|
this.manager?.copyData(this, event);
|
|
6073
6081
|
event.target = this.target;
|
|
6074
6082
|
event.path = this.composedPath().slice();
|
|
6083
|
+
const p = this.composedDetailPath();
|
|
6084
|
+
event.detailPath = p && p.slice();
|
|
6075
6085
|
event.type = this.type;
|
|
6076
6086
|
return event;
|
|
6077
6087
|
}
|
|
@@ -6093,6 +6103,7 @@ class FederatedWheelEvent extends FederatedMouseEvent {
|
|
|
6093
6103
|
event.eventPhase = event.NONE;
|
|
6094
6104
|
event.currentTarget = null;
|
|
6095
6105
|
event.path = [];
|
|
6106
|
+
event.detailPath = [];
|
|
6096
6107
|
event.target = null;
|
|
6097
6108
|
event.nativeEvent = this.nativeEvent;
|
|
6098
6109
|
event.originalEvent = this.originalEvent;
|
|
@@ -6101,6 +6112,8 @@ class FederatedWheelEvent extends FederatedMouseEvent {
|
|
|
6101
6112
|
this.manager?.copyData(this, event);
|
|
6102
6113
|
event.target = this.target;
|
|
6103
6114
|
event.path = this.composedPath().slice();
|
|
6115
|
+
const p = this.composedDetailPath();
|
|
6116
|
+
event.detailPath = p && p.slice();
|
|
6104
6117
|
event.type = this.type;
|
|
6105
6118
|
return event;
|
|
6106
6119
|
}
|
|
@@ -6451,6 +6464,7 @@ class EventManager {
|
|
|
6451
6464
|
const clickEvent = this.clonePointerEvent(e, 'click');
|
|
6452
6465
|
clickEvent.target = clickTarget;
|
|
6453
6466
|
clickEvent.path = [];
|
|
6467
|
+
clickEvent.detailPath = [];
|
|
6454
6468
|
if (!trackingData.clicksByButton[from.button]) {
|
|
6455
6469
|
trackingData.clicksByButton[from.button] = {
|
|
6456
6470
|
clickCount: 0,
|
|
@@ -6572,6 +6586,8 @@ class EventManager {
|
|
|
6572
6586
|
this.copyData(from, event);
|
|
6573
6587
|
event.target = from.target;
|
|
6574
6588
|
event.path = from.composedPath().slice();
|
|
6589
|
+
const p = from.composedDetailPath();
|
|
6590
|
+
event.detailPath = p && p.slice();
|
|
6575
6591
|
event.type = type ?? event.type;
|
|
6576
6592
|
return event;
|
|
6577
6593
|
}
|
|
@@ -6643,6 +6659,7 @@ class EventManager {
|
|
|
6643
6659
|
event.eventPhase = event.NONE;
|
|
6644
6660
|
event.currentTarget = null;
|
|
6645
6661
|
event.path = [];
|
|
6662
|
+
event.detailPath = [];
|
|
6646
6663
|
event.target = null;
|
|
6647
6664
|
return event;
|
|
6648
6665
|
}
|
|
@@ -10478,7 +10495,7 @@ class ColorStore {
|
|
|
10478
10495
|
}
|
|
10479
10496
|
|
|
10480
10497
|
function colorArrayToString(color, alphaChannel = false) {
|
|
10481
|
-
if (Array.isArray(color)) {
|
|
10498
|
+
if (Array.isArray(color) && isNumber(color[0])) {
|
|
10482
10499
|
return alphaChannel
|
|
10483
10500
|
? `rgb(${Math.round(color[0])},${Math.round(color[1])},${Math.round(color[2])},${color[3].toFixed(2)})`
|
|
10484
10501
|
: `rgb(${Math.round(color[0])},${Math.round(color[1])},${Math.round(color[2])})`;
|
|
@@ -13,5 +13,5 @@ export declare class ColorInterpolate extends LRU {
|
|
|
13
13
|
}>;
|
|
14
14
|
GetOrCreate(x: number, y: number, w: number, h: number, stops?: [number, string][], precision?: number): ColorInterpolate;
|
|
15
15
|
}
|
|
16
|
-
export declare function getConicGradientAt(x: number, y: number, angle: number, color: IConicalGradient): string | false | import("../interface").IGradientColor;
|
|
16
|
+
export declare function getConicGradientAt(x: number, y: number, angle: number, color: IConicalGradient): string | false | string[] | import("../interface").IGradientColor;
|
|
17
17
|
export declare function createConicalGradient(context: IContext2d, stops: Array<[number, string]>, x: number, y: number, deltaAngle: number, startAngle: number, endAngle: number, minW: number, minH: number): null | CanvasPattern;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IGradientColor, ILinearGradient, IRadialGradient, IConicalGradient } from '../interface';
|
|
2
|
-
export declare function interpolateColor(from: [number, number, number, number] | string | IGradientColor, to: [number, number, number, number] | string | IGradientColor, ratio: number, alphaChannel: boolean, cb?: (fromArray: [number, number, number, number], toArray: [number, number, number, number]) => void): false | string | IGradientColor;
|
|
2
|
+
export declare function interpolateColor(from: [number, number, number, number] | string | IGradientColor, to: [number, number, number, number] | string | IGradientColor, ratio: number, alphaChannel: boolean, cb?: (fromArray: [number, number, number, number], toArray: [number, number, number, number]) => void): false | string | IGradientColor | string[];
|
|
3
3
|
export declare function interpolateGradientLinearColor(fc: ILinearGradient, tc: ILinearGradient, ratio: number): false | ILinearGradient;
|
|
4
4
|
export declare function interpolateGradientRadialColor(fc: IRadialGradient, tc: IRadialGradient, ratio: number): false | IRadialGradient;
|
|
5
5
|
export declare function interpolateGradientConicalColor(fc: IConicalGradient, tc: IConicalGradient, ratio: number): false | IConicalGradient;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { ColorStore, ColorType } from "./store";
|
|
2
2
|
|
|
3
|
+
import { isNumber } from "@visactor/vutils";
|
|
4
|
+
|
|
3
5
|
function colorArrayToString(color, alphaChannel = !1) {
|
|
4
|
-
return Array.isArray(color) ? alphaChannel ? `rgb(${Math.round(color[0])},${Math.round(color[1])},${Math.round(color[2])},${color[3].toFixed(2)})` : `rgb(${Math.round(color[0])},${Math.round(color[1])},${Math.round(color[2])})` : color;
|
|
6
|
+
return Array.isArray(color) && isNumber(color[0]) ? alphaChannel ? `rgb(${Math.round(color[0])},${Math.round(color[1])},${Math.round(color[2])},${color[3].toFixed(2)})` : `rgb(${Math.round(color[0])},${Math.round(color[1])},${Math.round(color[2])})` : color;
|
|
5
7
|
}
|
|
6
8
|
|
|
7
9
|
export function interpolateColor(from, to, ratio, alphaChannel, cb) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/color-string/interpolate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGhD,SAAS,kBAAkB,CACzB,KAAiE,EACjE,eAAwB,KAAK;IAE7B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO,YAAY;YACjB,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;YACvG,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;KACpF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,IAAgE,EAChE,EAA8D,EAC9D,KAAa,EACb,YAAqB,EACrB,EAAqG;IAErG,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;QACjB,OAAO,CAAC,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC;KACtF;IACD,IAAI,SAA2C,CAAC;IAChD,IAAI,OAAyC,CAAC;IAC9C,IAAI,YAAY,GAAY,KAAK,CAAC;IAClC,IAAI,UAAU,GAAY,KAAK,CAAC;IAChC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACvB,SAAS,GAAG,IAAwC,CAAC;KACtD;SAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QACnC,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;KACtD;SAAM;QACL,YAAY,GAAG,IAAI,CAAC;KACrB;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;QACrB,OAAO,GAAG,EAAsC,CAAC;KAClD;SAAM,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;QACjC,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;KAClD;SAAM;QACL,UAAU,GAAG,IAAI,CAAC;KACnB;IACD,IAAI,YAAY,KAAK,UAAU,EAAE;QAE/B,MAAM,QAAQ,GAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAmB,CAAC;QAC9E,MAAM,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAA8C,CAAC;QACrF,MAAM,gBAAgB,GAAmB;YACvC,GAAG,QAAQ;YACX,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAW,EAAE,CAAC,CAAC;SACtF,CAAC;QACF,OAAO,YAAY;YACjB,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC;YACvE,CAAC,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;KAC3E;IAED,IAAI,YAAY,EAAE;QAChB,IAAK,IAAuB,CAAC,QAAQ,KAAM,EAAqB,CAAC,QAAQ,EAAE;YACzE,MAAM,EAAE,GAAmB,IAAsB,CAAC;YAClD,MAAM,EAAE,GAAmB,EAAoB,CAAC;YAEhD,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC;YAC3B,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC;YACzB,IAAI,SAAS,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;gBACvC,OAAO,KAAK,CAAC;aACd;YACD,IAAI,EAAE,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBAC5B,OAAO,8BAA8B,CAAC,EAAE,EAAE,EAAqB,EAAE,KAAK,CAAC,CAAC;aACzE;iBAAM,IAAI,EAAE,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBACnC,OAAO,8BAA8B,CAAC,EAAE,EAAE,EAAqB,EAAE,KAAK,CAAC,CAAC;aACzE;iBAAM,IAAI,EAAE,CAAC,QAAQ,KAAK,SAAS,EAAE;gBACpC,OAAO,+BAA+B,CAAC,EAAE,EAAE,EAAsB,EAAE,KAAK,CAAC,CAAC;aAC3E;SACF;QACD,OAAO,KAAK,CAAC;KACd;IACD,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACpE,OAAO,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,EAAmB,EACnB,EAAmB,EACnB,KAAa;IAEb,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;IACxB,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;IACxB,MAAM,KAAK,GAAoB;QAC7B,QAAQ,EAAE,QAAQ;QAClB,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK;QACnC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK;QACnC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK;QACnC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK;QACnC,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACnD,OAAO;gBACL,KAAK,EAAE,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC;gBAC7E,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK;aACzE,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,EAAmB,EACnB,EAAmB,EACnB,KAAa;IAEb,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;IACxB,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;IACxB,MAAM,KAAK,GAAoB;QAC7B,QAAQ,EAAE,QAAQ;QAClB,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK;QACnC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK;QACnC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK;QACnC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK;QACnC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK;QACnC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK;QACnC,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACnD,OAAO;gBACL,KAAK,EAAE,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC;gBAC7E,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK;aACzE,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,EAAoB,EACpB,EAAoB,EACpB,KAAa;IAEb,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;IACxB,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;IACxB,MAAM,KAAK,GAAqB;QAC9B,QAAQ,EAAE,SAAS;QACnB,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,KAAK;QACnE,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,KAAK;QAC3D,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK;QAC/B,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK;QAC/B,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACnD,OAAO;gBACL,KAAK,EAAE,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC;gBAC7E,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK;aACzE,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,IAAsC,EACtC,EAAoC,EACpC,KAAa;IAEb,OAAO;QACL,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;QACnC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;QACnC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;QACnC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAqC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrE,MAAM,WAAW,GAAqC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnE,MAAM,UAAU,6BAA6B,CAAC,SAAiB,EAAE,OAAe,EAAE,KAAa;IAC7F,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC7D,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACzD,OAAO,QAAQ,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CACrG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAC/D,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAC7E,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,KAC3D,GAAG,CAAC;AACN,CAAC","file":"interpolate.js","sourcesContent":["import { ColorStore, ColorType } from './store';\nimport type { IGradientColor, ILinearGradient, IRadialGradient, IConicalGradient } from '../interface';\n\nfunction colorArrayToString(\n color: string | IGradientColor | [number, number, number, number],\n alphaChannel: boolean = false\n) {\n if (Array.isArray(color)) {\n return alphaChannel\n ? `rgb(${Math.round(color[0])},${Math.round(color[1])},${Math.round(color[2])},${color[3].toFixed(2)})`\n : `rgb(${Math.round(color[0])},${Math.round(color[1])},${Math.round(color[2])})`;\n }\n return color;\n}\n\nexport function interpolateColor(\n from: [number, number, number, number] | string | IGradientColor,\n to: [number, number, number, number] | string | IGradientColor,\n ratio: number,\n alphaChannel: boolean,\n cb?: (fromArray: [number, number, number, number], toArray: [number, number, number, number]) => void\n): false | string | IGradientColor {\n if (!(from && to)) {\n return (from && colorArrayToString(from)) || (to && colorArrayToString(to)) || false;\n }\n let fromArray: [number, number, number, number];\n let toArray: [number, number, number, number];\n let fromGradient: boolean = false;\n let toGradient: boolean = false;\n if (Array.isArray(from)) {\n fromArray = from as [number, number, number, number];\n } else if (typeof from === 'string') {\n fromArray = ColorStore.Get(from, ColorType.Color255);\n } else {\n fromGradient = true;\n }\n if (Array.isArray(to)) {\n toArray = to as [number, number, number, number];\n } else if (typeof to === 'string') {\n toArray = ColorStore.Get(to, ColorType.Color255);\n } else {\n toGradient = true;\n }\n if (fromGradient !== toGradient) {\n // 纯色到渐变色,那就将纯色转成渐变色\n const gradient: IGradientColor = (fromGradient ? from : to) as IGradientColor;\n const pure = (fromGradient ? to : from) as string | [number, number, number, number];\n const gradientFromPure: IGradientColor = {\n ...gradient,\n stops: gradient.stops.map(v => ({ ...v, color: colorArrayToString(pure) as string }))\n };\n return fromGradient\n ? interpolateColor(gradient, gradientFromPure, ratio, alphaChannel, cb)\n : interpolateColor(gradientFromPure, gradient, ratio, alphaChannel, cb);\n }\n\n if (fromGradient) {\n if ((from as IGradientColor).gradient === (to as IGradientColor).gradient) {\n const fc: IGradientColor = from as IGradientColor;\n const tc: IGradientColor = to as IGradientColor;\n // 渐变色插值,只支持相同数量stopColor的插值,并且认为当前的stopColor数量是和from、to相同\n const fromStops = fc.stops;\n const toStops = tc.stops;\n if (fromStops.length !== toStops.length) {\n return false;\n }\n if (fc.gradient === 'linear') {\n return interpolateGradientLinearColor(fc, tc as ILinearGradient, ratio);\n } else if (fc.gradient === 'radial') {\n return interpolateGradientRadialColor(fc, tc as IRadialGradient, ratio);\n } else if (fc.gradient === 'conical') {\n return interpolateGradientConicalColor(fc, tc as IConicalGradient, ratio);\n }\n }\n return false;\n }\n cb && cb(fromArray, toArray);\n const result = interpolatePureColorArray(fromArray, toArray, ratio);\n return colorArrayToString(result, alphaChannel);\n}\n\nexport function interpolateGradientLinearColor(\n fc: ILinearGradient,\n tc: ILinearGradient,\n ratio: number\n): false | ILinearGradient {\n const fStops = fc.stops;\n const tStops = tc.stops;\n const color: ILinearGradient = {\n gradient: 'linear',\n x0: fc.x0 + (tc.x0 - fc.x0) * ratio,\n x1: fc.x1 + (tc.x1 - fc.x1) * ratio,\n y0: fc.y0 + (tc.y0 - fc.y0) * ratio,\n y1: fc.y1 + (tc.y1 - fc.y1) * ratio,\n stops: new Array(fStops.length).fill(0).map((_, i) => {\n return {\n color: colorStringInterpolationToStr(fStops[i].color, tStops[i].color, ratio),\n offset: fStops[i].offset + (tStops[i].offset - fStops[i].offset) * ratio\n };\n })\n };\n return color;\n}\n\nexport function interpolateGradientRadialColor(\n fc: IRadialGradient,\n tc: IRadialGradient,\n ratio: number\n): false | IRadialGradient {\n const fStops = fc.stops;\n const tStops = tc.stops;\n const color: IRadialGradient = {\n gradient: 'radial',\n x0: fc.x0 + (tc.x0 - fc.x0) * ratio,\n x1: fc.x1 + (tc.x1 - fc.x1) * ratio,\n y0: fc.y0 + (tc.y0 - fc.y0) * ratio,\n y1: fc.y1 + (tc.y1 - fc.y1) * ratio,\n r0: fc.r0 + (tc.r0 - fc.r0) * ratio,\n r1: fc.r1 + (tc.r1 - fc.r1) * ratio,\n stops: new Array(fStops.length).fill(0).map((_, i) => {\n return {\n color: colorStringInterpolationToStr(fStops[i].color, tStops[i].color, ratio),\n offset: fStops[i].offset + (tStops[i].offset - fStops[i].offset) * ratio\n };\n })\n };\n return color;\n}\n\nexport function interpolateGradientConicalColor(\n fc: IConicalGradient,\n tc: IConicalGradient,\n ratio: number\n): false | IConicalGradient {\n const fStops = fc.stops;\n const tStops = tc.stops;\n const color: IConicalGradient = {\n gradient: 'conical',\n startAngle: fc.startAngle + (tc.startAngle - fc.startAngle) * ratio,\n endAngle: fc.endAngle + (tc.endAngle - fc.endAngle) * ratio,\n x: fc.x + (tc.x - fc.x) * ratio,\n y: fc.y + (tc.y - fc.y) * ratio,\n stops: new Array(fStops.length).fill(0).map((_, i) => {\n return {\n color: colorStringInterpolationToStr(fStops[i].color, tStops[i].color, ratio),\n offset: fStops[i].offset + (tStops[i].offset - fStops[i].offset) * ratio\n };\n })\n };\n return color;\n}\n\nexport function interpolatePureColorArray(\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number\n): [number, number, number, number] {\n return [\n from[0] + (to[0] - from[0]) * ratio,\n from[1] + (to[1] - from[1]) * ratio,\n from[2] + (to[2] - from[2]) * ratio,\n from[3] + (to[3] - from[3]) * ratio\n ];\n}\n\nconst _fromColorRGB: [number, number, number, number] = [0, 0, 0, 0];\nconst _toColorRGB: [number, number, number, number] = [0, 0, 0, 0];\nexport function colorStringInterpolationToStr(fromColor: string, toColor: string, ratio: number): string {\n ColorStore.Get(fromColor, ColorType.Color255, _fromColorRGB);\n ColorStore.Get(toColor, ColorType.Color255, _toColorRGB);\n return `rgba(${Math.round(_fromColorRGB[0] + (_toColorRGB[0] - _fromColorRGB[0]) * ratio)},${Math.round(\n _fromColorRGB[1] + (_toColorRGB[1] - _fromColorRGB[1]) * ratio\n )},${Math.round(_fromColorRGB[2] + (_toColorRGB[2] - _fromColorRGB[2]) * ratio)},${\n _fromColorRGB[3] + (_toColorRGB[3] - _fromColorRGB[3]) * ratio\n })`;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/color-string/interpolate.ts"],"names":[],"mappings":"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","file":"interpolate.js","sourcesContent":["import { ColorStore, ColorType } from './store';\nimport type { IGradientColor, ILinearGradient, IRadialGradient, IConicalGradient } from '../interface';\nimport { isNumber } from '@visactor/vutils';\n\nfunction colorArrayToString(\n color: string | IGradientColor | [number, number, number, number],\n alphaChannel: boolean = false\n) {\n if (Array.isArray(color) && isNumber(color[0])) {\n return alphaChannel\n ? `rgb(${Math.round(color[0])},${Math.round(color[1])},${Math.round(color[2])},${color[3].toFixed(2)})`\n : `rgb(${Math.round(color[0])},${Math.round(color[1])},${Math.round(color[2])})`;\n }\n return color;\n}\n\nexport function interpolateColor(\n from: [number, number, number, number] | string | IGradientColor,\n to: [number, number, number, number] | string | IGradientColor,\n ratio: number,\n alphaChannel: boolean,\n cb?: (fromArray: [number, number, number, number], toArray: [number, number, number, number]) => void\n): false | string | IGradientColor | string[] {\n if (!(from && to)) {\n return (from && colorArrayToString(from)) || (to && colorArrayToString(to)) || (false as any);\n }\n let fromArray: [number, number, number, number];\n let toArray: [number, number, number, number];\n let fromGradient: boolean = false;\n let toGradient: boolean = false;\n if (Array.isArray(from)) {\n fromArray = from as [number, number, number, number];\n } else if (typeof from === 'string') {\n fromArray = ColorStore.Get(from, ColorType.Color255);\n } else {\n fromGradient = true;\n }\n if (Array.isArray(to)) {\n toArray = to as [number, number, number, number];\n } else if (typeof to === 'string') {\n toArray = ColorStore.Get(to, ColorType.Color255);\n } else {\n toGradient = true;\n }\n if (fromGradient !== toGradient) {\n // 纯色到渐变色,那就将纯色转成渐变色\n const gradient: IGradientColor = (fromGradient ? from : to) as IGradientColor;\n const pure = (fromGradient ? to : from) as string | [number, number, number, number];\n const gradientFromPure: IGradientColor = {\n ...gradient,\n stops: gradient.stops.map(v => ({ ...v, color: colorArrayToString(pure) as string }))\n };\n return fromGradient\n ? interpolateColor(gradient, gradientFromPure, ratio, alphaChannel, cb)\n : interpolateColor(gradientFromPure, gradient, ratio, alphaChannel, cb);\n }\n\n if (fromGradient) {\n if ((from as IGradientColor).gradient === (to as IGradientColor).gradient) {\n const fc: IGradientColor = from as IGradientColor;\n const tc: IGradientColor = to as IGradientColor;\n // 渐变色插值,只支持相同数量stopColor的插值,并且认为当前的stopColor数量是和from、to相同\n const fromStops = fc.stops;\n const toStops = tc.stops;\n if (fromStops.length !== toStops.length) {\n return false;\n }\n if (fc.gradient === 'linear') {\n return interpolateGradientLinearColor(fc, tc as ILinearGradient, ratio);\n } else if (fc.gradient === 'radial') {\n return interpolateGradientRadialColor(fc, tc as IRadialGradient, ratio);\n } else if (fc.gradient === 'conical') {\n return interpolateGradientConicalColor(fc, tc as IConicalGradient, ratio);\n }\n }\n return false;\n }\n cb && cb(fromArray!, toArray!);\n const result = interpolatePureColorArray(fromArray!, toArray!, ratio);\n return colorArrayToString(result, alphaChannel) as any;\n}\n\nexport function interpolateGradientLinearColor(\n fc: ILinearGradient,\n tc: ILinearGradient,\n ratio: number\n): false | ILinearGradient {\n const fStops = fc.stops;\n const tStops = tc.stops;\n const color: ILinearGradient = {\n gradient: 'linear',\n x0: fc.x0 + (tc.x0 - fc.x0) * ratio,\n x1: fc.x1 + (tc.x1 - fc.x1) * ratio,\n y0: fc.y0 + (tc.y0 - fc.y0) * ratio,\n y1: fc.y1 + (tc.y1 - fc.y1) * ratio,\n stops: new Array(fStops.length).fill(0).map((_, i) => {\n return {\n color: colorStringInterpolationToStr(fStops[i].color, tStops[i].color, ratio),\n offset: fStops[i].offset + (tStops[i].offset - fStops[i].offset) * ratio\n };\n })\n };\n return color;\n}\n\nexport function interpolateGradientRadialColor(\n fc: IRadialGradient,\n tc: IRadialGradient,\n ratio: number\n): false | IRadialGradient {\n const fStops = fc.stops;\n const tStops = tc.stops;\n const color: IRadialGradient = {\n gradient: 'radial',\n x0: fc.x0 + (tc.x0 - fc.x0) * ratio,\n x1: fc.x1 + (tc.x1 - fc.x1) * ratio,\n y0: fc.y0 + (tc.y0 - fc.y0) * ratio,\n y1: fc.y1 + (tc.y1 - fc.y1) * ratio,\n r0: fc.r0 + (tc.r0 - fc.r0) * ratio,\n r1: fc.r1 + (tc.r1 - fc.r1) * ratio,\n stops: new Array(fStops.length).fill(0).map((_, i) => {\n return {\n color: colorStringInterpolationToStr(fStops[i].color, tStops[i].color, ratio),\n offset: fStops[i].offset + (tStops[i].offset - fStops[i].offset) * ratio\n };\n })\n };\n return color;\n}\n\nexport function interpolateGradientConicalColor(\n fc: IConicalGradient,\n tc: IConicalGradient,\n ratio: number\n): false | IConicalGradient {\n const fStops = fc.stops;\n const tStops = tc.stops;\n const color: IConicalGradient = {\n gradient: 'conical',\n startAngle: fc.startAngle + (tc.startAngle - fc.startAngle) * ratio,\n endAngle: fc.endAngle + (tc.endAngle - fc.endAngle) * ratio,\n x: fc.x + (tc.x - fc.x) * ratio,\n y: fc.y + (tc.y - fc.y) * ratio,\n stops: new Array(fStops.length).fill(0).map((_, i) => {\n return {\n color: colorStringInterpolationToStr(fStops[i].color, tStops[i].color, ratio),\n offset: fStops[i].offset + (tStops[i].offset - fStops[i].offset) * ratio\n };\n })\n };\n return color;\n}\n\nexport function interpolatePureColorArray(\n from: [number, number, number, number],\n to: [number, number, number, number],\n ratio: number\n): [number, number, number, number] {\n return [\n from[0] + (to[0] - from[0]) * ratio,\n from[1] + (to[1] - from[1]) * ratio,\n from[2] + (to[2] - from[2]) * ratio,\n from[3] + (to[3] - from[3]) * ratio\n ];\n}\n\nconst _fromColorRGB: [number, number, number, number] = [0, 0, 0, 0];\nconst _toColorRGB: [number, number, number, number] = [0, 0, 0, 0];\nexport function colorStringInterpolationToStr(fromColor: string, toColor: string, ratio: number): string {\n ColorStore.Get(fromColor, ColorType.Color255, _fromColorRGB);\n ColorStore.Get(toColor, ColorType.Color255, _toColorRGB);\n return `rgba(${Math.round(_fromColorRGB[0] + (_toColorRGB[0] - _fromColorRGB[0]) * ratio)},${Math.round(\n _fromColorRGB[1] + (_toColorRGB[1] - _fromColorRGB[1]) * ratio\n )},${Math.round(_fromColorRGB[2] + (_toColorRGB[2] - _fromColorRGB[2]) * ratio)},${\n _fromColorRGB[3] + (_toColorRGB[3] - _fromColorRGB[3]) * ratio\n })`;\n}\n"]}
|
|
@@ -180,7 +180,8 @@ export class EventManager {
|
|
|
180
180
|
}
|
|
181
181
|
if (clickTarget) {
|
|
182
182
|
const clickEvent = this.clonePointerEvent(e, "click");
|
|
183
|
-
clickEvent.target = clickTarget, clickEvent.path = [],
|
|
183
|
+
clickEvent.target = clickTarget, clickEvent.path = [], clickEvent.detailPath = [],
|
|
184
|
+
trackingData.clicksByButton[from.button] || (trackingData.clicksByButton[from.button] = {
|
|
184
185
|
clickCount: 0,
|
|
185
186
|
target: clickEvent.target,
|
|
186
187
|
timeStamp: now
|
|
@@ -232,10 +233,11 @@ export class EventManager {
|
|
|
232
233
|
}
|
|
233
234
|
clonePointerEvent(from, type) {
|
|
234
235
|
const event = this.allocateEvent(FederatedPointerEvent);
|
|
235
|
-
|
|
236
|
+
event.nativeEvent = from.nativeEvent, event.originalEvent = from.originalEvent,
|
|
236
237
|
this.copyPointerData(from, event), this.copyMouseData(from, event), this.copyData(from, event),
|
|
237
|
-
event.target = from.target, event.path = from.composedPath().slice()
|
|
238
|
-
|
|
238
|
+
event.target = from.target, event.path = from.composedPath().slice();
|
|
239
|
+
const p = from.composedDetailPath();
|
|
240
|
+
return event.detailPath = p && p.slice(), event.type = type ?? event.type, event;
|
|
239
241
|
}
|
|
240
242
|
copyWheelData(from, to) {
|
|
241
243
|
to.deltaMode = from.deltaMode, to.deltaX = from.deltaX, to.deltaY = from.deltaY,
|
|
@@ -271,7 +273,7 @@ export class EventManager {
|
|
|
271
273
|
this.eventPool.has(constructor) || this.eventPool.set(constructor, []);
|
|
272
274
|
const event = this.eventPool.get(constructor)?.pop() || new constructor(this);
|
|
273
275
|
return event.eventPhase = event.NONE, event.currentTarget = null, event.path = [],
|
|
274
|
-
event.target = null, event;
|
|
276
|
+
event.detailPath = [], event.target = null, event;
|
|
275
277
|
}
|
|
276
278
|
freeEvent(event) {
|
|
277
279
|
if (event.manager !== this) throw new Error("It is illegal to free an event not managed by this EventManager!");
|