@easy-editor/plugin-dashboard 0.0.16 → 1.0.0
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/README.md +121 -1
- package/dist/{cjs/index.js → index.cjs} +31 -63
- package/dist/index.d.ts +21 -4
- package/dist/index.js +31 -62
- package/package.json +12 -17
- package/dist/cjs/index.js.map +0 -1
- package/dist/esm/index.js +0 -915
- package/dist/esm/index.js.map +0 -1
- package/dist/materials/group/component.d.ts +0 -5
- package/dist/materials/group/configure.d.ts +0 -3
- package/dist/materials/group/index.d.ts +0 -3
- package/dist/materials/group/meta.d.ts +0 -3
package/dist/esm/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/designer/guideline.ts","../../src/materials/group/component.tsx","../../src/materials/group/configure.ts","../../src/materials/group/meta.ts","../../src/utils.ts","../../src/index.ts"],"sourcesContent":["import { DESIGNER_EVENT, type Designer, type Viewport } from '@easy-editor/core'\nimport { action, computed, observable } from 'mobx'\n\ntype GuideLineType = 'horizontal' | 'vertical'\n\ninterface GuideLineItem {\n id: string\n type: GuideLineType\n position: number\n}\n\ninterface AlignmentLine {\n type: GuideLineType\n position: number\n}\n\ninterface AdsorptionLine {\n /**\n * 吸附位置\n * - 0: 左 | 上\n * - 1: 中\n * - 2: 右 | 下\n */\n adsorption: number\n position: number\n}\n\nexport class GuideLine {\n /**\n * 是否启用辅助线\n */\n @observable accessor enabled = true\n\n /**\n * 自定义辅助线数组\n */\n @observable.shallow accessor guideLines: GuideLineItem[] = []\n\n @computed\n get guideLinesMap() {\n const result = Object.groupBy(this.guideLines, item => item.type)\n return {\n verticalLinesMap: new Map(result.vertical?.map(item => [item.position, item])),\n horizontalLinesMap: new Map(result.horizontal?.map(item => [item.position, item])),\n }\n }\n\n /**\n * Document Node 的辅助线信息\n */\n @observable.shallow accessor nodeLineMap = {\n verticalLinesMap: new Map<number, AlignmentLine>(),\n horizontalLinesMap: new Map<number, AlignmentLine>(),\n }\n\n /**\n * 实时显示的吸附辅助线\n */\n @observable accessor adsorptionLines = {\n verticalLines: new Set<number>(),\n horizontalLines: new Set<number>(),\n }\n\n get currentDocument() {\n return this.designer.currentDocument\n }\n\n constructor(readonly designer: Designer) {\n // 添加画布视口的辅助线\n this.designer.onEvent(DESIGNER_EVENT.VIEWPORT_MOUNT, ({ viewport }: { viewport: Viewport }) => {\n this.addGuideLine({\n id: 'viewport-vertical-left',\n type: 'vertical',\n position: 0,\n })\n this.addGuideLine({\n id: 'viewport-vertical-middle',\n type: 'vertical',\n position: viewport.width / 2,\n })\n this.addGuideLine({\n id: 'viewport-vertical-right',\n type: 'vertical',\n position: viewport.width,\n })\n this.addGuideLine({\n id: 'viewport-horizontal-top',\n type: 'horizontal',\n position: 0,\n })\n this.addGuideLine({\n id: 'viewport-horizontal-middle',\n type: 'horizontal',\n position: viewport.height / 2,\n })\n this.addGuideLine({\n id: 'viewport-horizontal-bottom',\n type: 'horizontal',\n position: viewport.height,\n })\n })\n }\n\n /**\n * 添加额外的辅助线,用于尺寸调整\n */\n @action\n addGuideLine(guideLine: GuideLineItem) {\n this.guideLines.push(guideLine)\n }\n\n /**\n * 删除辅助线\n */\n @action\n removeGuideLine(id: string) {\n const index = this.guideLines.findIndex(item => item.id === id)\n if (index !== -1) {\n this.guideLines.splice(index, 1)\n }\n }\n\n /**\n * 修改辅助线\n */\n @action\n updateGuideLine(id: string, guideLine: GuideLineItem) {\n const index = this.guideLines.findIndex(item => item.id === id)\n if (index !== -1) {\n this.guideLines[index] = guideLine\n }\n }\n\n /**\n * 计算页面组件的辅助线信息\n */\n @action\n calculateGuideLineInfo() {\n if (!this.enabled) return\n\n const verticalLinesMap = new Map<number, AlignmentLine>()\n const horizontalLinesMap = new Map<number, AlignmentLine>()\n\n // 获取画布上所有的组件,得到每个可以被参照对齐的组件的位置信息\n const nodes = [...this.currentDocument!.nodesMap.values()]\n\n // 将选中的组合和组件抛开计算之外\n const selected: string[] = []\n for (const node of this.designer.selection.getNodes()) {\n if (node.isGroup) {\n selected.push(...node.getAllNodesInGroup().map(node => node.id))\n } else {\n selected.push(node.id)\n }\n }\n\n nodes\n .filter(node => !node.hidden)\n .forEach(node => {\n if (selected.includes(node.id) || node.isRoot || node.isGroup) return\n\n const nodeRect = node.getDashboardRect()\n const verticalNodeLines = [nodeRect.left, nodeRect.left + nodeRect.width / 2, nodeRect.right]\n const horizontalNodeLines = [nodeRect.top, nodeRect.top + nodeRect.height / 2, nodeRect.bottom]\n\n for (const line of verticalNodeLines) {\n const position = Math.round(line)\n verticalLinesMap.set(position, {\n type: 'vertical',\n position,\n })\n }\n for (const line of horizontalNodeLines) {\n const position = Math.round(line)\n horizontalLinesMap.set(position, {\n type: 'horizontal',\n position,\n })\n }\n })\n\n this.nodeLineMap.verticalLinesMap = verticalLinesMap\n this.nodeLineMap.horizontalLinesMap = horizontalLinesMap\n }\n\n /**\n * 组件的吸附距离\n */\n private adsorptionSize = 10\n\n /**\n * 设置画布上要实时展示的对齐辅助线,返回要吸附的距离\n * @param rect 为拖动过程中组件的位置信息\n * @param adsorption 指定需要吸附位置\n * - 0: 左 | 上\n * - 1: 中\n * - 2: 右 | 下\n */\n @action\n getAdsorptionPosition(rect: DOMRect, adsorption?: number | Array<number>) {\n if (typeof adsorption === 'number') {\n adsorption = [adsorption]\n }\n\n this.resetAdsorptionLines()\n\n const adsorptionVerticalLines: AdsorptionLine[] = []\n const adsorptionHorizontalLines: AdsorptionLine[] = []\n const currentVerticalLine = [rect.left, rect.left + rect.width / 2, rect.right]\n const currentHorizontalLine = [rect.top, rect.top + rect.height / 2, rect.bottom]\n\n // 计算需要显示的辅助线和吸附信息\n currentVerticalLine.forEach((item, index) => {\n let minDistance = Number.POSITIVE_INFINITY\n\n this.nodeLineMap.verticalLinesMap.forEach((_, pos) => {\n const distance = Math.abs(item - pos)\n if (distance !== 0 && distance < this.adsorptionSize && distance < minDistance) {\n minDistance = pos\n }\n })\n this.guideLinesMap.verticalLinesMap.forEach((_, pos) => {\n const distance = Math.abs(item - pos)\n if (distance !== 0 && distance < this.adsorptionSize && distance < minDistance) {\n minDistance = pos\n }\n })\n\n if (\n minDistance !== Number.POSITIVE_INFINITY &&\n adsorptionVerticalLines.findIndex(item => item.position === minDistance) === -1\n ) {\n adsorptionVerticalLines.push({\n adsorption: index,\n position: minDistance,\n })\n }\n })\n currentHorizontalLine.forEach((item, index) => {\n let minDistance = -1\n\n this.nodeLineMap.horizontalLinesMap.forEach((_, pos) => {\n if (Math.abs(item - pos) < this.adsorptionSize) {\n minDistance = pos\n }\n })\n this.guideLinesMap.horizontalLinesMap.forEach((_, pos) => {\n const distance = Math.abs(item - pos)\n if (distance < this.adsorptionSize && distance < minDistance) {\n minDistance = pos\n }\n })\n\n if (minDistance !== -1 && adsorptionHorizontalLines.findIndex(item => item.position === minDistance) === -1) {\n adsorptionHorizontalLines.push({\n adsorption: index,\n position: minDistance,\n })\n }\n })\n\n const isAdsorption = adsorptionVerticalLines.length > 0 || adsorptionHorizontalLines.length > 0\n const adsorb: Record<'x' | 'y', AdsorptionLine | undefined> = { x: undefined, y: undefined }\n if (isAdsorption) {\n // 将吸附的辅助线添加到吸附辅助线集合中,用于显示到页面上\n adsorptionVerticalLines.forEach(item => this.adsorptionLines.verticalLines.add(item.position))\n adsorptionHorizontalLines.forEach(item => this.adsorptionLines.horizontalLines.add(item.position))\n\n // 如果吸附,则计算吸附的距离\n if (adsorptionVerticalLines.length > 0) {\n if (adsorption) {\n adsorb.x = adsorptionVerticalLines.find(item => adsorption.includes(item.adsorption))!\n } else {\n const adsorptionPosition = Math.min(...adsorptionVerticalLines.map(item => item.position))\n adsorb.x = adsorptionVerticalLines.find(item => item.position === adsorptionPosition)!\n }\n }\n if (adsorptionHorizontalLines.length > 0) {\n if (adsorption) {\n adsorb.y = adsorptionHorizontalLines.find(item => adsorption.includes(item.adsorption))!\n } else {\n const adsorptionPosition = Math.min(...adsorptionHorizontalLines.map(item => item.position))\n adsorb.y = adsorptionHorizontalLines.find(item => item.position === adsorptionPosition)!\n }\n }\n }\n\n return {\n isAdsorption,\n adsorb,\n }\n\n // let fillX: number | undefined\n // let fillY: number | undefined\n\n // adsorptionVerticalLine.forEach(item => {\n // if (Math.abs(item - rect.left) < this.adsorptionSize) {\n // fillX = item\n // }\n\n // if (Math.abs(item - rect.right) < this.adsorptionSize) {\n // fillX = item - rect.width\n // }\n\n // const center = rect.left + rect.width / 2\n\n // if (Math.abs(item - center) < this.adsorptionSize) {\n // fillX = item - rect.width / 2\n // }\n // })\n\n // adsorptionHorizontalLine.forEach(item => {\n // if (Math.abs(item - rect.top) < this.adsorptionSize) {\n // fillY = item\n // }\n\n // if (Math.abs(item - rect.bottom) < this.adsorptionSize) {\n // fillY = item - rect.height\n // }\n\n // const center = rect.top + rect.height / 2\n\n // if (Math.abs(item - center) < this.adsorptionSize) {\n // fillY = item - rect.height / 2\n // }\n // })\n }\n\n @action\n resetAdsorptionLines() {\n this.adsorptionLines.verticalLines.clear()\n this.adsorptionLines.horizontalLines.clear()\n }\n}\n","import { type PropsWithChildren, type Ref, forwardRef } from 'react'\n\ninterface GroupProps extends PropsWithChildren {}\n\nconst Group = forwardRef((props: GroupProps, ref: Ref<HTMLDivElement>) => {\n return (\n <div ref={ref} style={{ position: 'relative', width: '100%', height: '100%' }}>\n {props?.children}\n </div>\n )\n})\n\nexport default Group\n","import type { Configure } from '@easy-editor/core'\nimport Group from './component'\n\nconst configure: Configure = {\n props: [\n // {\n // name: 'test',\n // title: '分组',\n // type: 'group',\n // items: [],\n // },\n ],\n component: {},\n supports: {},\n advanced: {\n view: Group,\n },\n}\n\nexport default configure\n","import type { ComponentMetadata } from '@easy-editor/core'\nimport configure from './configure'\n\nconst meta: ComponentMetadata = {\n componentName: 'Group',\n title: '分组',\n category: '内置',\n configure,\n}\n\nexport default meta\n","import type { Node } from '@easy-editor/core'\n\n/**\n * 更新节点在 dashboard 中的位置\n * @param node 节点\n * @param offset 节点相对于画布的偏移量\n * @param groupOffset 节点相对于其父组节点的偏移量\n */\nexport const updateNodeRect = (node: Node, offset = { x: 0, y: 0 }) => {\n if (node.isGroup) {\n const nodeRect = node.getDashboardRect()\n const delta = {\n x: offset.x - nodeRect.x,\n y: offset.y - nodeRect.y,\n }\n\n for (const childNode of node.getAllNodesInGroup()) {\n const childRect = childNode.getDashboardRect()\n childNode.updateDashboardRect({\n x: childRect.x + delta.x,\n y: childRect.y + delta.y,\n })\n }\n } else {\n node.updateDashboardRect({\n x: offset.x,\n y: offset.y,\n })\n }\n}\n\n/**\n * 更新节点 DOM 在 dashboard 中的位置\n * @param node 节点\n * @param offset 节点相对于画布的偏移量\n * @param groupOffset 节点相对于其父组节点的偏移量\n */\nexport const updateNodeRectByDOM = (node: Node, offset = { x: 0, y: 0 }) => {\n const domNode = node.getDashboardContainer()\n if (!domNode) {\n return\n }\n\n domNode.style.left = `${offset.x}px`\n domNode.style.top = `${offset.y}px`\n}\n","import {\n DESIGNER_EVENT,\n type Designer,\n type Document,\n DragObjectType,\n type DropLocation,\n type Node,\n type NodeSchema,\n type OffsetObserver,\n type PluginCreator,\n type Simulator,\n getConvertedExtraKey,\n} from '@easy-editor/core'\nimport { GuideLine } from './designer/guideline'\nimport { GroupComponent, GroupComponentMeta } from './materials/group'\nimport { updateNodeRect, updateNodeRectByDOM } from './utils'\n\nexport * from './type'\n\ninterface DashboardPluginOptions {\n group?: {\n schema?: NodeSchema\n }\n\n // TODO: 配置分组内容(schema、meta)\n xxx?: string\n}\n\nconst defaultGroupSchema = {\n componentName: 'Group',\n title: '分组',\n isGroup: true,\n}\n\nconst DashboardPlugin: PluginCreator<DashboardPluginOptions> = options => {\n const { group = {} } = options || {}\n const { schema: groupSchema = defaultGroupSchema } = group || {}\n\n return {\n name: 'DashboardPlugin',\n deps: [],\n init(ctx) {\n const { designer, simulator, componentMetaManager, hotkey, logger } = ctx\n const { viewport } = simulator\n\n // test hotkey\n hotkey.bind('ctrl+d', e => {\n e.preventDefault()\n logger.log('ctrl+d')\n })\n\n // add guideline\n designer.onEvent(DESIGNER_EVENT.INIT, (designer: Designer) => {\n designer.guideline = new GuideLine(designer)\n })\n\n // add componentMeta\n componentMetaManager.createComponentMeta(GroupComponentMeta)\n simulator.addComponent('Group', GroupComponent)\n\n /* ---------------------------- NodeData to Node ---------------------------- */\n const startOffsetNodeData = { x: 0, y: 0 }\n\n designer.dragon.onDragstart(e => {\n if (!e.shell) return\n\n const { dragObject } = e\n const shellRect = simulator.computeComponentInstanceRect(e.shell)\n\n if (dragObject && dragObject.type === DragObjectType.NodeData) {\n startOffsetNodeData.x = (e.globalX! - shellRect?.left!) / viewport.scale\n startOffsetNodeData.y = (e.globalY! - shellRect?.top!) / viewport.scale\n }\n })\n\n designer.onEvent(DESIGNER_EVENT.INSERT_NODE_BEFORE, (e: DropLocation) => {\n const { event } = e\n const { dragObject } = event\n\n // add dashboard rect\n if (dragObject && dragObject.type === DragObjectType.NodeData) {\n const nodeData = Array.isArray(dragObject.data) ? dragObject.data : [dragObject.data]\n for (const schema of nodeData) {\n if (!schema) continue\n if (!schema.$dashboard) {\n schema.$dashboard = {}\n }\n if (!schema.$dashboard.rect) {\n schema.$dashboard.rect = {}\n }\n schema.$dashboard.rect.x = event.canvasX! - startOffsetNodeData.x\n schema.$dashboard.rect.y = event.canvasY! - startOffsetNodeData.y\n }\n }\n })\n\n /* ----------------------------------- DND ---------------------------------- */\n let startNodes: { [key: string]: DOMRect } = {}\n let startOffsetNodes: { [key: string]: { x: number; y: number } } = {}\n let lastOffsetNodes: { [key: string]: { x: number; y: number } } = {}\n\n designer.dragon.onDragstart(e => {\n const { dragObject } = e\n\n if (dragObject && dragObject.type === DragObjectType.Node) {\n // 计算辅助线位置\n designer.guideline.calculateGuideLineInfo()\n\n for (const node of dragObject.nodes!) {\n if (!node) continue\n\n // 计算鼠标偏移量\n const rect = node.getDashboardRect()\n if (rect) {\n startNodes[node.id] = rect\n startOffsetNodes[node.id] = { x: e.canvasX! - rect.x, y: e.canvasY! - rect.y }\n }\n }\n\n // 计算整个拖拽包围盒的 Rect\n const boxRect = calculateDashboardRectBox(dragObject.nodes as Node[])\n if (boxRect) {\n startNodes.box = boxRect\n startOffsetNodes.box = { x: e.canvasX! - boxRect.x, y: e.canvasY! - boxRect.y }\n }\n }\n })\n\n designer.dragon.onDrag(e => {\n const { dragObject } = e\n if (dragObject && dragObject.type === DragObjectType.Node) {\n // 根据拖拽包围盒的 Rect 计算吸附位置\n const { x: boxStartX = 0, y: boxStartY = 0, width = 0, height = 0 } = startNodes.box\n const { x: boxX = 0, y: boxY = 0 } = startOffsetNodes.box\n const { isAdsorption, adsorb } = designer.guideline.getAdsorptionPosition(\n new DOMRect(e.canvasX! - boxX, e.canvasY! - boxY, width, height),\n )\n\n // 根据辅助线位置,计算对应吸附位置\n let adsorbX = undefined\n let adsorbY = undefined\n if (isAdsorption) {\n if (adsorb.x) {\n if (adsorb.x.adsorption === 0) {\n adsorbX = adsorb.x.position\n } else if (adsorb.x.adsorption === 1) {\n adsorbX = adsorb.x.position - width / 2\n } else if (adsorb.x.adsorption === 2) {\n adsorbX = adsorb.x.position - width\n }\n }\n if (adsorb.y) {\n if (adsorb.y.adsorption === 0) {\n adsorbY = adsorb.y.position\n } else if (adsorb.y.adsorption === 1) {\n adsorbY = adsorb.y.position - height / 2\n } else if (adsorb.y.adsorption === 2) {\n adsorbY = adsorb.y.position - height\n }\n }\n }\n\n for (const node of dragObject.nodes!) {\n if (!node) continue\n\n // 更新节点位置\n const { x: nodeStartX = 0, y: nodeStartY = 0 } = startNodes[node.id]\n const { x, y } = startOffsetNodes[node.id]\n let offsetX = e.canvasX! - x\n let offsetY = e.canvasY! - y\n\n if (isAdsorption) {\n // 吸附位置 需要减去拖拽包围盒的 Rect 的偏移量 得到节点吸附位置\n offsetX = adsorbX ? adsorbX + nodeStartX - boxStartX : offsetX\n offsetY = adsorbY ? adsorbY + nodeStartY - boxStartY : offsetY\n }\n updateNodeRectByDOM(node, { x: offsetX, y: offsetY })\n lastOffsetNodes[node.id] = { x: offsetX, y: offsetY }\n }\n }\n })\n\n designer.dragon.onDragend(e => {\n const { dragObject, esc } = e\n\n if (dragObject && dragObject.type === DragObjectType.Node) {\n for (const node of dragObject.nodes!) {\n if (!node) continue\n\n if (esc) {\n // dom 的话,因为没有更新内部节点值,所以直接重新渲染就行了\n simulator.rerender()\n } else {\n const { x: lastX = 0, y: lastY = 0 } = lastOffsetNodes[node.id]\n updateNodeRect(node, { x: lastX, y: lastY })\n }\n }\n\n // 清空辅助线\n designer.guideline.resetAdsorptionLines()\n }\n\n startNodes = {}\n startOffsetNodes = {}\n lastOffsetNodes = {}\n })\n },\n extend({ extendClass, extend }) {\n const { Node, Designer } = extendClass\n\n /* -------------------------------- Designer -------------------------------- */\n const originalInit = Designer.prototype.init\n extend('Designer', {\n init: {\n value(this: Designer) {\n originalInit.call(this)\n\n this.guideline = new GuideLine(this)\n },\n },\n })\n\n /* -------------------------------- Document -------------------------------- */\n extend('Document', {\n group: {\n value(this: Document, nodeIdList: Node[] | string[]) {\n if (nodeIdList.length === 0) return\n\n let nodeList: Node[] = []\n if (typeof nodeIdList[0] === 'string') {\n nodeList = (nodeIdList as string[]).map(id => this.getNode(id)!)\n }\n\n const groupNode = this.createNode(groupSchema)\n\n // 计算所有节点的 index,确定分组的插入位置\n let maxZIndex = Number.POSITIVE_INFINITY\n for (const node of nodeList) {\n if (node.index < maxZIndex) {\n maxZIndex = node.index\n }\n if (node && !node.isRoot) {\n this.migrateNode(node, groupNode)\n }\n }\n\n this.rootNode?.insert(groupNode, maxZIndex)\n\n return groupNode\n },\n },\n ungroup: {\n value(this: Document, group: Node | string) {\n let groupNode: Node | null\n if (typeof group === 'string') {\n groupNode = this.getNode(group)\n } else {\n groupNode = group\n }\n\n if (!groupNode || !groupNode.isGroup || !groupNode.children) return\n\n const nodes = groupNode.childrenNodes\n // TODO: 这里写法很奇怪,因为children是响应式的,所以迁移之后,children也会更新\n while (nodes.length > 0) {\n if (groupNode.parent) {\n this.migrateNode(nodes[0], groupNode.parent)\n }\n }\n\n this.removeNode(groupNode)\n },\n },\n })\n\n /* ---------------------------------- Node ---------------------------------- */\n const originalInitProps = Node.prototype.initBuiltinProps\n extend('Node', {\n // Dashboard\n getDashboardContainer: {\n value(this: Node) {\n const domNodes = this.getDOMNode()\n return domNodes.length > 0 ? domNodes[0] : null\n },\n },\n getDashboardRect: {\n value(this: Node) {\n if (!this.isGroup) {\n const rect = this.getExtraPropValue('$dashboard.rect') as any\n return new DOMRect(rect.x ?? 0, rect.y ?? 0, rect.width ?? 0, rect.height ?? 0)\n }\n\n let [minX, minY, maxX, maxY] = [\n Number.POSITIVE_INFINITY,\n Number.POSITIVE_INFINITY,\n Number.NEGATIVE_INFINITY,\n Number.NEGATIVE_INFINITY,\n ]\n\n for (const child of this.childrenNodes) {\n const childRect = child.getDashboardRect()\n\n minX = Math.min(minX, childRect.x)\n minY = Math.min(minY, childRect.y)\n maxX = Math.max(maxX, childRect.x + childRect.width)\n maxY = Math.max(maxY, childRect.y + childRect.height)\n }\n\n return new DOMRect(minX, minY, maxX - minX, maxY - minY)\n },\n },\n updateDashboardRect: {\n value(this: Node, rect: Partial<DOMRect>) {\n if (this.isGroup) return\n\n if (typeof rect.x === 'number') {\n this.setExtraPropValue('$dashboard.rect.x', rect.x)\n }\n if (typeof rect.y === 'number') {\n this.setExtraPropValue('$dashboard.rect.y', rect.y)\n }\n if (typeof rect.width === 'number') {\n this.setExtraPropValue('$dashboard.rect.width', rect.width)\n }\n if (typeof rect.height === 'number') {\n this.setExtraPropValue('$dashboard.rect.height', rect.height)\n }\n },\n },\n // Group\n isGroup: {\n get(this: Node) {\n return this.getExtraPropValue('isGroup')\n },\n },\n getCurrentGroup: {\n value(this: Node) {\n let parent = this.parent\n while (parent && !parent.isGroup) {\n parent = parent.parent\n }\n return parent\n },\n },\n getTopGroup: {\n value(this: Node) {\n let parent = this.parent\n let topGroup: Node | null = null\n while (parent) {\n if (parent.isGroup) {\n topGroup = parent\n }\n parent = parent.parent\n }\n return topGroup\n },\n },\n getAllGroups: {\n value(this: Node) {\n const groups: Node[] = []\n let parent = this.parent\n while (parent) {\n if (parent.isGroup) {\n groups.push(parent)\n }\n parent = parent.parent\n }\n return groups\n },\n },\n getNodesInGroup: {\n value(this: Node) {\n if (!this.isGroup) return []\n\n const nodes: Node[] = []\n for (const node of this.childrenNodes) {\n if (!node.isGroup) {\n nodes.push(node)\n }\n }\n return nodes\n },\n },\n getAllNodesInGroup: {\n value(this: Node) {\n if (!this.isGroup) return []\n\n const nodes: Node[] = []\n for (const node of this.childrenNodes) {\n if (node.isGroup) {\n nodes.push(...node.getAllNodesInGroup())\n } else {\n nodes.push(node)\n }\n }\n return nodes\n },\n },\n initBuiltinProps: {\n value(this: Node) {\n // 实现类似 super.initBuiltinProps 的效果\n // 调用父类的 initBuiltinProps 方法\n originalInitProps.call(this)\n\n this.props.has(getConvertedExtraKey('isGroup')) || this.props.add(getConvertedExtraKey('isGroup'), false)\n },\n },\n // Level\n moveToLevel: {\n value(this: Node, level: number) {\n if (level < -1 || level >= this.parent!.childrenNodes.length) return\n if (this.index === level) return\n if (this.isRoot) return\n\n this.parent!.insert(this, level)\n },\n },\n levelTop: {\n value(this: Node) {\n this.moveToLevel(0)\n },\n },\n levelBottom: {\n value(this: Node) {\n this.moveToLevel(-1)\n },\n },\n levelUp: {\n value(this: Node) {\n this.moveToLevel(this.index - 1)\n },\n },\n levelDown: {\n value(this: Node) {\n this.moveToLevel(this.index + 1)\n },\n },\n })\n\n /* ----------------------------- OffsetObserver ----------------------------- */\n extend('OffsetObserver', {\n computeRect: {\n value(this: OffsetObserver) {\n // return this.node.getDashboardRect()\n const { node, instance } = this.nodeInstance\n const host = node.document?.simulator!\n const rect = host.computeComponentInstanceRect(instance!)\n\n const { viewport } = node.document.simulator!\n const local = viewport.toLocalPoint({ clientX: rect!.x, clientY: rect!.y })\n\n return new DOMRect(\n local.clientX,\n local.clientY,\n rect!.width / viewport.scale,\n rect!.height / viewport.scale,\n )\n },\n },\n height: {\n get(this: OffsetObserver) {\n return this.isRoot ? this.viewport.height : this._height\n },\n },\n width: {\n get(this: OffsetObserver) {\n return this.isRoot ? this.viewport.width : this._width\n },\n },\n top: {\n get(this: OffsetObserver) {\n return this.isRoot ? 0 : this._top\n },\n },\n left: {\n get(this: OffsetObserver) {\n return this.isRoot ? 0 : this._left\n },\n },\n bottom: {\n get(this: OffsetObserver) {\n return this.isRoot ? this.viewport.height : this._bottom\n },\n },\n right: {\n get(this: OffsetObserver) {\n return this.isRoot ? this.viewport.width : this._right\n },\n },\n })\n\n /* -------------------------------- Simulator ------------------------------- */\n extend('Simulator', {\n getDashboardStyle: {\n get(this: Simulator) {\n return this.get('dashboardStyle') || {}\n },\n },\n })\n /* -------------------------------- Viewport -------------------------------- */\n /**\n * 这里需要对坐标转换的偏移做额外的处理,因为在大屏的使用中,外层画布容器使用到了 translate(-50%, -50%) 进行居中定位,但是\n * 在计算坐标的时候,需要减去这个偏移量,否则会导致坐标转换不准确\n */\n // Object.defineProperties(Viewport.prototype, {\n // // 局部坐标 -> 缩放(×scale) -> 加上视口偏移(+rect.left/top) -> 减去居中偏移(-centerOffset) -> 全局坐标\n // toGlobalPoint: {\n // value(this: Viewport, point: Point) {\n // if (!this.viewportElement) {\n // return point\n // }\n\n // const rect = this.bounds\n // const centerOffsetX = rect.width * 0.5\n // const centerOffsetY = rect.height * 0.5\n\n // return {\n // clientX: point.clientX * this.scale + rect.left - centerOffsetX,\n // clientY: point.clientY * this.scale + rect.top - centerOffsetY,\n // }\n // },\n // },\n // // 全局坐标 -> 减去视口偏移(-rect.left/top) -> 加上居中偏移(+centerOffset) -> 缩放还原(/scale) -> 局部坐标\n // toLocalPoint: {\n // value(this: Viewport, point: Point): Point {\n // if (!this.viewportElement) {\n // return point\n // }\n\n // const rect = this.bounds\n // const centerOffsetX = rect.width * 0.5\n // const centerOffsetY = rect.height * 0.5\n\n // return {\n // clientX: (point.clientX - rect.left + centerOffsetX) / this.scale,\n // clientY: (point.clientY - rect.top + centerOffsetY) / this.scale,\n // }\n // },\n // },\n // })\n },\n }\n}\n\nexport default DashboardPlugin\n\n/**\n * 计算节点的外围矩形 Rect,包括分支节点、多个节点计算\n * @param nodes 分组节点\n * @returns 外围矩形 {DOMRect}\n */\nconst calculateDashboardRectBox = (nodes: Node[]) => {\n let [minX, minY, maxX, maxY] = [\n Number.POSITIVE_INFINITY,\n Number.POSITIVE_INFINITY,\n Number.NEGATIVE_INFINITY,\n Number.NEGATIVE_INFINITY,\n ]\n\n for (const node of nodes) {\n const rect = node.getDashboardRect()\n minX = Math.min(minX, rect.x)\n minY = Math.min(minY, rect.y)\n maxX = Math.max(maxX, rect.x + rect.width)\n maxY = Math.max(maxY, rect.y + rect.height)\n }\n\n return new DOMRect(minX, minY, maxX - minX, maxY - minY)\n}\n"],"names":["GuideLine","_init_enabled","_init_extra_enabled","_init_guideLines","_init_extra_guideLines","_init_nodeLineMap","_init_extra_nodeLineMap","_init_adsorptionLines","_init_extra_adsorptionLines","_initProto","_applyDecs","observable","shallow","computed","action","e","enabled","v","A","guideLines","B","guideLinesMap","result","Object","groupBy","item","type","verticalLinesMap","Map","vertical","map","position","horizontalLinesMap","horizontal","nodeLineMap","C","verticalLines","Set","horizontalLines","adsorptionLines","D","currentDocument","designer","constructor","onEvent","DESIGNER_EVENT","VIEWPORT_MOUNT","viewport","addGuideLine","id","width","height","guideLine","push","removeGuideLine","index","findIndex","splice","updateGuideLine","calculateGuideLineInfo","nodes","nodesMap","values","selected","node","selection","getNodes","isGroup","getAllNodesInGroup","filter","hidden","forEach","includes","isRoot","nodeRect","getDashboardRect","verticalNodeLines","left","right","horizontalNodeLines","top","bottom","line","Math","round","set","adsorptionSize","getAdsorptionPosition","rect","adsorption","resetAdsorptionLines","adsorptionVerticalLines","adsorptionHorizontalLines","currentVerticalLine","currentHorizontalLine","minDistance","Number","POSITIVE_INFINITY","_","pos","distance","abs","isAdsorption","length","adsorb","x","undefined","y","add","find","adsorptionPosition","min","clear","Group","forwardRef","props","ref","_jsx","style","children","configure","component","supports","advanced","view","meta","componentName","title","category","updateNodeRect","offset","delta","childNode","childRect","updateDashboardRect","updateNodeRectByDOM","domNode","getDashboardContainer","defaultGroupSchema","DashboardPlugin","options","group","schema","groupSchema","name","deps","init","ctx","simulator","componentMetaManager","hotkey","logger","bind","preventDefault","log","INIT","guideline","createComponentMeta","GroupComponentMeta","addComponent","GroupComponent","startOffsetNodeData","dragon","onDragstart","shell","dragObject","shellRect","computeComponentInstanceRect","DragObjectType","NodeData","globalX","scale","globalY","INSERT_NODE_BEFORE","event","nodeData","Array","isArray","data","$dashboard","canvasX","canvasY","startNodes","startOffsetNodes","lastOffsetNodes","Node","boxRect","calculateDashboardRectBox","box","onDrag","boxStartX","boxStartY","boxX","boxY","DOMRect","adsorbX","adsorbY","nodeStartX","nodeStartY","offsetX","offsetY","onDragend","esc","rerender","lastX","lastY","extend","extendClass","Designer","originalInit","prototype","value","call","nodeIdList","nodeList","getNode","groupNode","createNode","maxZIndex","migrateNode","rootNode","insert","ungroup","childrenNodes","parent","removeNode","originalInitProps","initBuiltinProps","domNodes","getDOMNode","getExtraPropValue","minX","minY","maxX","maxY","NEGATIVE_INFINITY","child","max","setExtraPropValue","get","getCurrentGroup","getTopGroup","topGroup","getAllGroups","groups","getNodesInGroup","has","getConvertedExtraKey","moveToLevel","level","levelTop","levelBottom","levelUp","levelDown","computeRect","instance","nodeInstance","host","document","local","toLocalPoint","clientX","clientY","_height","_width","_top","_left","_bottom","_right","getDashboardStyle"],"mappings":"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"}
|