@tmagic/stage 1.0.0 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmagic-stage.es.js","sources":["../src/const.ts","../src/util.ts","../src/StageDragResize.ts","../src/TargetCalibrate.ts","../src/StageHighlight.ts","../src/Rule.ts","../src/StageMask.ts","../src/StageRender.ts","../src/StageCore.ts"],"sourcesContent":["/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** 流式布局下拖动时需要clone一个镜像节点,镜像节点的id前缀 */\nexport const GHOST_EL_ID_PREFIX = 'ghost_el_';\n\n/** 拖动的时候需要在蒙层中创建一个占位节点,该节点的id前缀 */\nexport const DRAG_EL_ID_PREFIX = 'drag_el_';\n\n/** 高亮时需要在蒙层中创建一个占位节点,该节点的id前缀 */\nexport const HIGHLIGHT_EL_ID_PREFIX = 'highlight_el_';\n\n/** 默认放到缩小倍数 */\nexport const DEFAULT_ZOOM = 1;\n\n/** 参考线类型 */\nexport enum GuidesType {\n /** 水平 */\n HORIZONTAL = 'horizontal',\n /** 垂直 */\n VERTICAL = 'vertical',\n}\n\n/** css z-index */\nexport enum ZIndex {\n /** 蒙层,用于监听用户操作,需要置于顶层 */\n MASK = '99999',\n /** 选中的节点 */\n SELECTED_EL = '666',\n GHOST_EL = '700',\n DRAG_EL = '9',\n}\n\n/** 鼠标按键 */\nexport enum MouseButton {\n /** 左键 */\n LEFT = 0,\n /** z中健 */\n MIDDLE = 1,\n /** 右键 */\n RIGHT = 2,\n}\n\n/** 布局方式 */\nexport enum Mode {\n /** 绝对定位布局 */\n ABSOLUTE = 'absolute',\n /** 固定定位布局 */\n FIXED = 'fixed',\n /** 流式布局 */\n SORTABLE = 'sortable',\n}\n\n/** 选中节点的class name */\nexport const SELECTED_CLASS = 'tmagic-stage-selected-area';\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Mode, SELECTED_CLASS } from './const';\nimport type { Offset } from './types';\n\nconst getParents = (el: Element, relative: Element) => {\n let cur: Element | null = el.parentElement;\n const parents: Element[] = [];\n while (cur && cur !== relative) {\n parents.push(cur);\n cur = cur.parentElement;\n }\n return parents;\n};\n\nexport const getOffset = (el: HTMLElement): Offset => {\n const { offsetParent } = el;\n\n const left = el.offsetLeft;\n const top = el.offsetTop;\n\n if (offsetParent) {\n const parentOffset = getOffset(offsetParent as HTMLElement);\n return {\n left: left + parentOffset.left,\n top: top + parentOffset.top,\n };\n }\n\n return {\n left,\n top,\n };\n};\n\nexport const getAbsolutePosition = (el: HTMLElement, { top, left }: Offset) => {\n const { offsetParent } = el;\n\n if (offsetParent) {\n const parentOffset = getOffset(offsetParent as HTMLElement);\n return {\n left: left - parentOffset.left,\n top: top - parentOffset.top,\n };\n }\n\n return { left, top };\n};\n\nexport const getHost = (targetUrl: string) => targetUrl.match(/\\/\\/([^/]+)/)?.[1];\n\nexport const isSameDomain = (targetUrl = '', source = globalThis.location.host) => {\n const isHttpUrl = /^(http[s]?:)?\\/\\//.test(targetUrl);\n\n if (!isHttpUrl) return true;\n\n return getHost(targetUrl) === source;\n};\n\nexport const isAbsolute = (style: CSSStyleDeclaration): boolean => style.position === 'absolute';\n\nexport const isRelative = (style: CSSStyleDeclaration): boolean => style.position === 'relative';\n\nexport const isStatic = (style: CSSStyleDeclaration): boolean => style.position === 'static';\n\nexport const isFixed = (style: CSSStyleDeclaration): boolean => style.position === 'fixed';\n\nexport const isFixedParent = (el: HTMLElement) => {\n let fixed = false;\n let dom = el;\n while (dom) {\n fixed = isFixed(getComputedStyle(dom));\n if (fixed) {\n break;\n }\n const { parentElement } = dom;\n if (!parentElement || parentElement.tagName === 'BODY') {\n break;\n }\n dom = parentElement;\n }\n return fixed;\n};\n\nexport const getMode = (el: HTMLElement): Mode => {\n if (isFixedParent(el)) return Mode.FIXED;\n const style = getComputedStyle(el);\n if (isStatic(style) || isRelative(style)) return Mode.SORTABLE;\n return Mode.ABSOLUTE;\n};\n\nexport const getScrollParent = (element: HTMLElement, includeHidden = false): HTMLElement | null => {\n let style = getComputedStyle(element);\n const overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/;\n\n if (isFixed(style)) return null;\n\n for (let parent = element; parent.parentElement; ) {\n parent = parent.parentElement;\n style = getComputedStyle(parent);\n\n if (isAbsolute(style) && isStatic(style)) continue;\n\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) return parent;\n }\n\n return null;\n};\n\nexport const createDiv = ({ className, cssText }: { className: string; cssText: string }) => {\n const el = globalThis.document.createElement('div');\n el.className = className;\n el.style.cssText = cssText;\n return el;\n};\n\nexport const removeSelectedClassName = (doc: Document) => {\n const oldEl = doc.querySelector(`.${SELECTED_CLASS}`);\n\n if (oldEl) {\n oldEl.classList.remove(SELECTED_CLASS);\n (oldEl.parentNode as HTMLDivElement)?.classList.remove(`${SELECTED_CLASS}-parent`);\n doc.querySelectorAll(`.${SELECTED_CLASS}-parents`).forEach((item) => {\n item.classList.remove(`${SELECTED_CLASS}-parents`);\n });\n }\n};\n\nexport const addSelectedClassName = (el: Element, doc: Document) => {\n el.classList.add(SELECTED_CLASS);\n (el.parentNode as Element)?.classList.add(`${SELECTED_CLASS}-parent`);\n getParents(el, doc.body).forEach((item) => {\n item.classList.add(`${SELECTED_CLASS}-parents`);\n });\n};\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-param-reassign */\nimport { EventEmitter } from 'events';\n\nimport type { MoveableOptions } from 'moveable';\nimport Moveable from 'moveable';\nimport MoveableHelper from 'moveable-helper';\n\nimport { DRAG_EL_ID_PREFIX, GHOST_EL_ID_PREFIX, GuidesType, Mode, ZIndex } from './const';\nimport StageCore from './StageCore';\nimport type { SortEventData, StageDragResizeConfig } from './types';\nimport { getAbsolutePosition, getMode, getOffset } from './util';\n\n/** 拖动状态 */\nenum ActionStatus {\n /** 开始拖动 */\n START = 'start',\n /** 拖动中 */\n ING = 'ing',\n /** 拖动结束 */\n END = 'end',\n}\n\n/**\n * 选中框\n */\nexport default class StageDragResize extends EventEmitter {\n public core: StageCore;\n /** 画布容器 */\n public container: HTMLElement;\n /** 目标节点 */\n public target?: HTMLElement;\n /** 目标节点在蒙层中的占位节点 */\n public dragEl: HTMLDivElement;\n /** Moveable拖拽类实例 */\n public moveable?: Moveable;\n /** 水平参考线 */\n public horizontalGuidelines: number[] = [];\n /** 垂直参考线 */\n public verticalGuidelines: number[] = [];\n /** 对齐元素集合 */\n public elementGuidelines: HTMLElement[] = [];\n /** 布局方式:流式布局、绝对定位、固定定位 */\n public mode: Mode = Mode.ABSOLUTE;\n\n private moveableOptions: MoveableOptions = {};\n /** 拖动状态 */\n private dragStatus: ActionStatus = ActionStatus.END;\n /** 流式布局下,目标节点的镜像节点 */\n private ghostEl: HTMLElement | undefined;\n private moveableHelper?: MoveableHelper;\n\n constructor(config: StageDragResizeConfig) {\n super();\n\n this.core = config.core;\n this.container = config.container;\n\n this.dragEl = globalThis.document.createElement('div');\n this.container.append(this.dragEl);\n }\n\n /**\n * 将选中框渲染并覆盖到选中的组件Dom节点上方\n * 当选中的节点是不是absolute时,会创建一个新的节点出来作为拖拽目标\n * @param el 选中组件的Dom节点元素\n * @param event 鼠标事件\n */\n public select(el: HTMLElement, event?: MouseEvent): void {\n const oldTarget = this.target;\n this.target = el;\n\n // 从不能拖动到能拖动的节点之间切换,要重新创建moveable,不然dragStart不生效\n if (!this.moveable || this.target !== oldTarget) {\n this.init(el);\n this.moveableHelper = MoveableHelper.create({\n useBeforeRender: true,\n useRender: false,\n createAuto: true,\n });\n\n this.initMoveable();\n } else {\n this.updateMoveable();\n }\n\n if (event) {\n this.moveable?.dragStart(event);\n }\n }\n\n /**\n * 初始化选中框并渲染出来\n */\n public updateMoveable(el = this.target): void {\n if (!this.moveable) throw new Error('未初始化moveable');\n if (!el) throw new Error('未选中任何节点');\n\n this.target = el;\n\n this.init(el);\n\n Object.entries(this.moveableOptions).forEach(([key, value]) => {\n (this.moveable as any)[key] = value;\n });\n this.moveable.updateTarget();\n }\n\n public setGuidelines(type: GuidesType, guidelines: number[]): void {\n if (type === GuidesType.HORIZONTAL) {\n this.horizontalGuidelines = guidelines;\n this.moveableOptions.horizontalGuidelines = guidelines;\n } else if (type === GuidesType.VERTICAL) {\n this.verticalGuidelines = guidelines;\n this.moveableOptions.verticalGuidelines = guidelines;\n }\n\n if (this.moveable) {\n this.updateMoveable();\n }\n }\n\n public clearGuides() {\n this.horizontalGuidelines = [];\n this.verticalGuidelines = [];\n this.moveableOptions.horizontalGuidelines = [];\n this.moveableOptions.verticalGuidelines = [];\n this.updateMoveable();\n }\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n this.moveable?.destroy();\n this.destroyGhostEl();\n this.destroyDragEl();\n this.dragStatus = ActionStatus.END;\n this.removeAllListeners();\n }\n\n private init(el: HTMLElement): void {\n // 如果有滚动条会导致resize时获取到width,height不准确\n if (/(auto|scroll)/.test(el.style.overflow)) {\n el.style.overflow = 'hidden';\n }\n this.mode = getMode(el);\n\n this.destroyGhostEl();\n\n this.updateDragEl(el);\n\n this.moveableOptions = this.getOptions({\n target: this.dragEl,\n });\n }\n\n private setElementGuidelines(nodes: HTMLElement[]) {\n this.elementGuidelines.forEach((node) => {\n node.remove();\n });\n this.elementGuidelines = [];\n\n if (this.mode === Mode.ABSOLUTE) {\n const frame = document.createDocumentFragment();\n\n for (const node of nodes) {\n const { width, height } = node.getBoundingClientRect();\n if (node === this.target) continue;\n const { left, top } = getOffset(node as HTMLElement);\n const elementGuideline = document.createElement('div');\n elementGuideline.style.cssText = `position: absolute;width: ${width}px;height: ${height}px;top: ${top}px;left: ${left}px`;\n this.elementGuidelines.push(elementGuideline);\n frame.append(elementGuideline);\n }\n\n this.container.append(frame);\n }\n }\n\n private initMoveable() {\n this.moveable?.destroy();\n\n this.moveable = new Moveable(this.container, {\n ...this.moveableOptions,\n });\n\n this.bindResizeEvent();\n this.bindDragEvent();\n this.bindRotateEvent();\n this.bindScaleEvent();\n }\n\n private bindResizeEvent(): void {\n if (!this.moveable) throw new Error('moveable 未初始化');\n\n const frame = {\n left: 0,\n top: 0,\n };\n\n this.moveable\n .on('resizeStart', (e) => {\n if (!this.target) return;\n\n this.dragStatus = ActionStatus.START;\n this.moveableHelper?.onResizeStart(e);\n\n frame.top = this.target.offsetTop;\n frame.left = this.target.offsetLeft;\n })\n .on('resize', (e) => {\n const { width, height, drag } = e;\n if (!this.moveable || !this.target || !this.dragEl) return;\n\n const { beforeTranslate } = drag;\n this.dragStatus = ActionStatus.ING;\n\n this.moveableHelper?.onResize(e);\n\n // 流式布局\n if (this.mode === Mode.SORTABLE) {\n this.target.style.top = '0px';\n } else {\n this.target.style.left = `${frame.left + beforeTranslate[0]}px`;\n this.target.style.top = `${frame.top + beforeTranslate[1]}px`;\n }\n\n this.target.style.width = `${width}px`;\n this.target.style.height = `${height}px`;\n })\n .on('resizeEnd', () => {\n this.dragStatus = ActionStatus.END;\n this.update(true);\n });\n }\n\n private bindDragEvent(): void {\n if (!this.moveable) throw new Error('moveable 未初始化');\n\n const frame = {\n left: 0,\n top: 0,\n };\n\n this.moveable\n .on('dragStart', (e) => {\n if (!this.target) throw new Error('未选中组件');\n\n this.dragStatus = ActionStatus.START;\n\n this.moveableHelper?.onDragStart(e);\n\n if (this.mode === Mode.SORTABLE) {\n this.ghostEl = this.generateGhostEl(this.target);\n }\n\n frame.top = this.target.offsetTop;\n frame.left = this.target.offsetLeft;\n })\n .on('drag', (e) => {\n if (!this.target || !this.dragEl) return;\n\n this.dragStatus = ActionStatus.ING;\n\n // 流式布局\n if (this.ghostEl) {\n this.ghostEl.style.top = `${frame.top + e.beforeTranslate[1]}px`;\n return;\n }\n\n this.moveableHelper?.onDrag(e);\n\n this.target.style.left = `${frame.left + e.beforeTranslate[0]}px`;\n this.target.style.top = `${frame.top + e.beforeTranslate[1]}px`;\n })\n .on('dragEnd', () => {\n // 点击不拖动时会触发dragStart和dragEnd,但是不会有drag事件\n if (this.dragStatus === ActionStatus.ING) {\n switch (this.mode) {\n case Mode.SORTABLE:\n this.sort();\n break;\n default:\n this.update();\n }\n }\n\n this.dragStatus = ActionStatus.END;\n this.destroyGhostEl();\n });\n }\n\n private bindRotateEvent(): void {\n if (!this.moveable) throw new Error('moveable 未初始化');\n\n this.moveable\n .on('rotateStart', (e) => {\n this.dragStatus = ActionStatus.START;\n this.moveableHelper?.onRotateStart(e);\n })\n .on('rotate', (e) => {\n if (!this.target || !this.dragEl) return;\n this.dragStatus = ActionStatus.ING;\n this.moveableHelper?.onRotate(e);\n const frame = this.moveableHelper?.getFrame(e.target);\n this.target.style.transform = frame?.toCSSObject().transform || '';\n })\n .on('rotateEnd', (e) => {\n this.dragStatus = ActionStatus.END;\n const frame = this.moveableHelper?.getFrame(e.target);\n this.emit('update', {\n el: this.target,\n style: {\n transform: frame?.get('transform'),\n },\n });\n });\n }\n\n private bindScaleEvent(): void {\n if (!this.moveable) throw new Error('moveable 未初始化');\n\n this.moveable\n .on('scaleStart', (e) => {\n this.dragStatus = ActionStatus.START;\n this.moveableHelper?.onScaleStart(e);\n })\n .on('scale', (e) => {\n if (!this.target || !this.dragEl) return;\n this.dragStatus = ActionStatus.ING;\n this.moveableHelper?.onScale(e);\n const frame = this.moveableHelper?.getFrame(e.target);\n this.target.style.transform = frame?.toCSSObject().transform || '';\n })\n .on('scaleEnd', (e) => {\n this.dragStatus = ActionStatus.END;\n const frame = this.moveableHelper?.getFrame(e.target);\n this.emit('update', {\n el: this.target,\n style: {\n transform: frame?.get('transform'),\n },\n });\n });\n }\n\n private sort(): void {\n if (!this.target || !this.ghostEl) throw new Error('未知错误');\n const { top } = this.ghostEl.getBoundingClientRect();\n const { top: oriTop } = this.target.getBoundingClientRect();\n const deltaTop = top - oriTop;\n if (Math.abs(deltaTop) >= this.target.clientHeight / 2) {\n if (deltaTop > 0) {\n this.emit('sort', down(deltaTop, this.target));\n } else {\n this.emit('sort', up(deltaTop, this.target));\n }\n } else {\n this.emit('sort', {\n src: this.target.id,\n dist: this.target.id,\n });\n }\n }\n\n private update(isResize = false): void {\n if (!this.target) return;\n\n const offset =\n this.mode === Mode.SORTABLE ? { left: 0, top: 0 } : { left: this.target.offsetLeft, top: this.target.offsetTop };\n\n const left = this.calcValueByFontsize(offset.left);\n const top = this.calcValueByFontsize(offset.top);\n const width = this.calcValueByFontsize(this.target.clientWidth);\n const height = this.calcValueByFontsize(this.target.clientHeight);\n\n this.emit('update', {\n el: this.target,\n style: isResize ? { left, top, width, height } : { left, top },\n });\n }\n\n private generateGhostEl(el: HTMLElement): HTMLElement {\n if (this.ghostEl) {\n this.destroyGhostEl();\n }\n\n const ghostEl = el.cloneNode(true) as HTMLElement;\n const { top, left } = getAbsolutePosition(el, getOffset(el));\n ghostEl.id = `${GHOST_EL_ID_PREFIX}${el.id}`;\n ghostEl.style.zIndex = ZIndex.GHOST_EL;\n ghostEl.style.opacity = '.5';\n ghostEl.style.position = 'absolute';\n ghostEl.style.left = `${left}px`;\n ghostEl.style.top = `${top}px`;\n el.after(ghostEl);\n return ghostEl;\n }\n\n private destroyGhostEl(): void {\n this.ghostEl?.remove();\n this.ghostEl = undefined;\n }\n\n private updateDragEl(el: HTMLElement) {\n const offset = getOffset(el);\n const { transform } = getComputedStyle(el);\n\n this.dragEl.style.cssText = `\n position: absolute;\n transform: ${transform};\n left: ${offset.left}px;\n top: ${offset.top}px;\n width: ${el.clientWidth}px;\n height: ${el.clientHeight}px;\n z-index: ${ZIndex.DRAG_EL};\n `;\n\n this.dragEl.id = `${DRAG_EL_ID_PREFIX}${el.id}`;\n\n if (typeof this.core.config.updateDragEl === 'function') {\n this.core.config.updateDragEl(this.dragEl, el);\n }\n }\n\n private destroyDragEl(): void {\n this.dragEl?.remove();\n }\n\n private getOptions(options: MoveableOptions = {}): MoveableOptions {\n if (!this.target) return {};\n\n const isAbsolute = this.mode === Mode.ABSOLUTE;\n const isFixed = this.mode === Mode.FIXED;\n\n let { moveableOptions = {} } = this.core.config;\n\n if (typeof moveableOptions === 'function') {\n moveableOptions = moveableOptions(this.core);\n }\n\n const elementGuidelines: any = moveableOptions.elementGuidelines || this.target.parentElement?.children || [];\n\n this.setElementGuidelines(elementGuidelines);\n\n if (moveableOptions.elementGuidelines) {\n delete moveableOptions.elementGuidelines;\n }\n\n return {\n origin: false,\n rootContainer: this.core.container,\n zoom: 1,\n dragArea: false,\n draggable: true,\n resizable: true,\n scalable: false,\n rotatable: false,\n snappable: isAbsolute || isFixed,\n snapGap: isAbsolute || isFixed,\n snapThreshold: 5,\n snapDigit: 0,\n throttleDrag: 0,\n isDisplaySnapDigit: isAbsolute,\n snapDirections: {\n top: isAbsolute,\n right: isAbsolute,\n bottom: isAbsolute,\n left: isAbsolute,\n center: isAbsolute,\n middle: isAbsolute,\n },\n elementSnapDirections: {\n top: isAbsolute,\n right: isAbsolute,\n bottom: isAbsolute,\n left: isAbsolute,\n },\n isDisplayInnerSnapDigit: true,\n horizontalGuidelines: this.horizontalGuidelines,\n verticalGuidelines: this.verticalGuidelines,\n elementGuidelines: this.elementGuidelines,\n\n bounds: {\n top: 0,\n // 设置0的话无法移动到left为0,所以只能设置为-1\n left: -1,\n right: this.container.clientWidth,\n bottom: this.container.clientHeight,\n ...(moveableOptions.bounds || {}),\n },\n ...options,\n ...moveableOptions,\n };\n }\n\n private calcValueByFontsize(value: number) {\n const { contentWindow } = this.core.renderer;\n const fontSize = contentWindow?.document.documentElement.style.fontSize;\n\n if (fontSize) {\n const times = globalThis.parseFloat(fontSize) / 100;\n return (value / times).toFixed(2);\n }\n\n return value;\n }\n}\n\n/**\n * 下移组件位置\n * @param {number} deltaTop 偏移量\n * @param {Object} detail 当前选中的组件配置\n */\nexport const down = (deltaTop: number, target: HTMLElement | SVGElement): SortEventData | void => {\n let swapIndex = 0;\n let addUpH = target.clientHeight;\n const brothers = Array.from(target.parentNode?.children || []).filter(\n (node) => !node.id.startsWith(GHOST_EL_ID_PREFIX),\n );\n const index = brothers.indexOf(target);\n // 往下移动\n const downEls = brothers.slice(index + 1) as HTMLElement[];\n\n for (let i = 0; i < downEls.length; i++) {\n const ele = downEls[i];\n // 是 fixed 不做处理\n if (ele.style?.position === 'fixed') {\n continue;\n }\n addUpH += ele.clientHeight / 2;\n if (deltaTop <= addUpH) {\n break;\n }\n addUpH += ele.clientHeight / 2;\n swapIndex = i;\n }\n return {\n src: target.id,\n dist: downEls.length && swapIndex > -1 ? downEls[swapIndex].id : target.id,\n };\n};\n\n/**\n * 上移组件位置\n * @param {Array} brothers 处于同一容器下的所有子组件配置\n * @param {number} index 当前组件所处的位置\n * @param {number} deltaTop 偏移量\n * @param {Object} detail 当前选中的组件配置\n */\nexport const up = (deltaTop: number, target: HTMLElement | SVGElement): SortEventData | void => {\n const brothers = Array.from(target.parentNode?.children || []).filter(\n (node) => !node.id.startsWith(GHOST_EL_ID_PREFIX),\n );\n const index = brothers.indexOf(target);\n // 往上移动\n const upEls = brothers.slice(0, index) as HTMLElement[];\n\n let addUpH = target.clientHeight;\n let swapIndex = upEls.length - 1;\n\n for (let i = upEls.length - 1; i >= 0; i--) {\n const ele = upEls[i];\n if (!ele) continue;\n // 是 fixed 不做处理\n if (ele.style.position === 'fixed') continue;\n\n addUpH += ele.clientHeight / 2;\n if (-deltaTop <= addUpH) break;\n addUpH += ele.clientHeight / 2;\n\n swapIndex = i;\n }\n return {\n src: target.id,\n dist: upEls.length && swapIndex > -1 ? upEls[swapIndex].id : target.id,\n };\n};\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-param-reassign */\nimport { EventEmitter } from 'events';\n\nimport { Mode } from './const';\nimport StageCore from './StageCore';\nimport StageDragResize from './StageDragResize';\nimport StageMask from './StageMask';\nimport type { Offset, TargetCalibrateConfig } from './types';\nimport { getMode } from './util';\n\n/**\n * 将选中的节点修正定位后,添加一个操作节点到蒙层上\n */\nexport default class TargetCalibrate extends EventEmitter {\n public parent: HTMLElement;\n public mask: StageMask;\n public dr: StageDragResize;\n public core: StageCore;\n public operationEl: HTMLDivElement;\n\n constructor(config: TargetCalibrateConfig) {\n super();\n\n this.parent = config.parent;\n this.mask = config.mask;\n this.dr = config.dr;\n this.core = config.core;\n\n this.operationEl = globalThis.document.createElement('div');\n this.parent.append(this.operationEl);\n }\n\n public update(el: HTMLElement, prefix: String): HTMLElement {\n const { left, top } = this.getOffset(el);\n const { transform } = getComputedStyle(el);\n this.operationEl.style.cssText = `\n position: absolute;\n transform: ${transform};\n left: ${left}px;\n top: ${top}px;\n width: ${el.clientWidth}px;\n height: ${el.clientHeight}px;\n `;\n\n this.operationEl.id = `${prefix}${el.id}`;\n\n if (typeof this.core.config.updateDragEl === 'function') {\n this.core.config.updateDragEl(this.operationEl, el);\n }\n\n return this.operationEl;\n }\n\n public destroy(): void {\n this.operationEl?.remove();\n }\n\n private getOffset(el: HTMLElement): Offset {\n const { offsetParent } = el;\n\n const left = el.offsetLeft;\n const top = el.offsetTop;\n\n if (offsetParent) {\n const parentOffset = this.getOffset(offsetParent as HTMLElement);\n return {\n left: left + parentOffset.left,\n top: top + parentOffset.top,\n };\n }\n\n // 选中固定定位元素后editor-mask高度被置为视窗大小\n if (this.dr.mode === Mode.FIXED) {\n // 弹窗的情况\n if (getMode(el) === Mode.FIXED) {\n return {\n left,\n top,\n };\n }\n\n return {\n left: left - this.mask.scrollLeft,\n top: top - this.mask.scrollTop,\n };\n }\n\n // 无父元素的固定定位需按滚动值计算\n if (getMode(el) === Mode.FIXED) {\n return {\n left: left + this.mask.scrollLeft,\n top: top + this.mask.scrollTop,\n };\n }\n\n return {\n left,\n top,\n };\n }\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-param-reassign */\nimport { EventEmitter } from 'events';\n\nimport Moveable from 'moveable';\n\nimport { HIGHLIGHT_EL_ID_PREFIX } from './const';\nimport StageCore from './StageCore';\nimport TargetCalibrate from './TargetCalibrate';\nimport type { StageHighlightConfig } from './types';\nexport default class StageHighlight extends EventEmitter {\n public core: StageCore;\n public container: HTMLElement;\n public target?: HTMLElement;\n public moveable?: Moveable;\n public calibrationTarget: TargetCalibrate;\n\n constructor(config: StageHighlightConfig) {\n super();\n\n this.core = config.core;\n this.container = config.container;\n this.calibrationTarget = new TargetCalibrate({\n parent: this.core.mask.content,\n mask: this.core.mask,\n dr: this.core.dr,\n core: this.core,\n });\n }\n\n /**\n * 高亮鼠标悬停的组件\n * @param el 选中组件的Dom节点元素\n */\n public highlight(el: HTMLElement): void {\n if (!el || el === this.target) return;\n this.target = el;\n this.moveable?.destroy();\n\n this.moveable = new Moveable(this.container, {\n target: this.calibrationTarget.update(el, HIGHLIGHT_EL_ID_PREFIX),\n origin: false,\n rootContainer: this.core.container,\n zoom: 1,\n });\n }\n\n /**\n * 清空高亮\n */\n public clearHighlight(): void {\n if (!this.moveable) return;\n this.target = undefined;\n this.moveable.target = null;\n this.moveable.updateTarget();\n }\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n this.moveable?.destroy();\n this.calibrationTarget.destroy();\n }\n}\n","import EventEmitter from 'events';\n\nimport Guides, { GuidesEvents } from '@scena/guides';\n\nimport { GuidesType } from './const';\n\nexport default class Rule extends EventEmitter {\n public hGuides: Guides;\n public vGuides: Guides;\n public horizontalGuidelines: number[] = [];\n public verticalGuidelines: number[] = [];\n\n private container: HTMLDivElement;\n private containerResizeObserver: ResizeObserver;\n\n constructor(container: HTMLDivElement) {\n super();\n\n this.container = container;\n this.hGuides = this.createGuides(GuidesType.HORIZONTAL, this.horizontalGuidelines);\n this.vGuides = this.createGuides(GuidesType.VERTICAL, this.verticalGuidelines);\n\n this.hGuides.on('changeGuides', this.hGuidesChangeGuidesHandler);\n this.vGuides.on('changeGuides', this.vGuidesChangeGuidesHandler);\n\n this.containerResizeObserver = new ResizeObserver(() => {\n this.vGuides.resize();\n this.hGuides.resize();\n });\n\n this.containerResizeObserver.observe(this.container);\n }\n\n /**\n * 是否显示标尺\n * @param show 是否显示\n */\n public showGuides(show = true) {\n this.hGuides.setState({\n showGuides: show,\n });\n\n this.vGuides.setState({\n showGuides: show,\n });\n }\n\n public setGuides([hLines, vLines]: [number[], number[]]) {\n this.horizontalGuidelines = hLines;\n this.verticalGuidelines = vLines;\n\n this.hGuides.setState({\n defaultGuides: hLines,\n });\n\n this.vGuides.setState({\n defaultGuides: vLines,\n });\n\n this.emit('changeGuides', {\n type: GuidesType.HORIZONTAL,\n guides: hLines,\n });\n\n this.emit('changeGuides', {\n type: GuidesType.VERTICAL,\n guides: vLines,\n });\n }\n\n /**\n * 清空所有参考线\n */\n public clearGuides() {\n this.setGuides([[], []]);\n }\n\n /**\n * 是否显示标尺\n * @param show 是否显示\n */\n public showRule(show = true) {\n // 当尺子隐藏时发现大小变化,显示后会变形,所以这里做重新初始化处理\n if (show) {\n this.hGuides.destroy();\n this.hGuides = this.createGuides(GuidesType.HORIZONTAL, this.horizontalGuidelines);\n\n this.vGuides.destroy();\n this.vGuides = this.createGuides(GuidesType.VERTICAL, this.verticalGuidelines);\n } else {\n this.hGuides.setState({\n rulerStyle: {\n visibility: 'hidden',\n },\n });\n\n this.vGuides.setState({\n rulerStyle: {\n visibility: 'hidden',\n },\n });\n }\n }\n\n public scrollRule(scrollTop: number) {\n this.hGuides.scrollGuides(scrollTop);\n this.hGuides.scroll(0);\n\n this.vGuides.scrollGuides(0);\n this.vGuides.scroll(scrollTop);\n }\n\n public destroy(): void {\n this.hGuides.off('changeGuides', this.hGuidesChangeGuidesHandler);\n this.vGuides.off('changeGuides', this.vGuidesChangeGuidesHandler);\n this.containerResizeObserver.disconnect();\n this.removeAllListeners();\n }\n\n private getGuidesStyle = (type: GuidesType) => ({\n position: 'fixed',\n zIndex: 1,\n left: type === GuidesType.HORIZONTAL ? 0 : '-30px',\n top: type === GuidesType.HORIZONTAL ? '-30px' : 0,\n width: type === GuidesType.HORIZONTAL ? '100%' : '30px',\n height: type === GuidesType.HORIZONTAL ? '30px' : '100%',\n });\n\n private createGuides = (type: GuidesType, defaultGuides: number[] = []): Guides =>\n new Guides(this.container, {\n type,\n defaultGuides,\n displayDragPos: true,\n backgroundColor: '#fff',\n lineColor: '#000',\n textColor: '#000',\n style: this.getGuidesStyle(type),\n });\n\n private hGuidesChangeGuidesHandler = (e: GuidesEvents['changeGuides']) => {\n this.horizontalGuidelines = e.guides;\n this.emit('changeGuides', {\n type: GuidesType.HORIZONTAL,\n guides: this.horizontalGuidelines,\n });\n };\n\n private vGuidesChangeGuidesHandler = (e: GuidesEvents['changeGuides']) => {\n this.verticalGuidelines = e.guides;\n this.emit('changeGuides', {\n type: GuidesType.VERTICAL,\n guides: this.verticalGuidelines,\n });\n };\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { throttle } from 'lodash-es';\n\nimport { Mode, MouseButton, ZIndex } from './const';\nimport Rule from './Rule';\nimport type StageCore from './StageCore';\nimport type { StageMaskConfig } from './types';\nimport { createDiv, getScrollParent, isFixedParent } from './util';\n\nconst wrapperClassName = 'editor-mask-wrapper';\nconst throttleTime = 100;\n\nconst hideScrollbar = () => {\n const style = globalThis.document.createElement('style');\n style.innerHTML = `\n .${wrapperClassName}::-webkit-scrollbar { width: 0 !important; display: none }\n `;\n globalThis.document.head.appendChild(style);\n};\n\nconst createContent = (): HTMLDivElement =>\n createDiv({\n className: 'editor-mask',\n cssText: `\n position: absolute;\n top: 0;\n left: 0;\n transform: translate3d(0, 0, 0);\n `,\n });\n\nconst createWrapper = (): HTMLDivElement => {\n const el = createDiv({\n className: wrapperClassName,\n cssText: `\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n overflow: hidden;\n z-index: ${ZIndex.MASK};\n `,\n });\n\n hideScrollbar();\n\n return el;\n};\n\n/**\n * 蒙层\n * @description 用于拦截页面的点击动作,避免点击时触发组件自身动作;在编辑器中点击组件应当是选中组件;\n */\nexport default class StageMask extends Rule {\n public content: HTMLDivElement = createContent();\n public wrapper: HTMLDivElement;\n public core: StageCore;\n public page: HTMLElement | null = null;\n public pageScrollParent: HTMLElement | null = null;\n public scrollTop = 0;\n public scrollLeft = 0;\n public width = 0;\n public height = 0;\n public wrapperHeight = 0;\n public wrapperWidth = 0;\n public maxScrollTop = 0;\n public maxScrollLeft = 0;\n public intersectionObserver: IntersectionObserver | null = null;\n\n private mode: Mode = Mode.ABSOLUTE;\n private pageResizeObserver: ResizeObserver | null = null;\n private wrapperResizeObserver: ResizeObserver | null = null;\n /**\n * 高亮事件处理函数\n * @param event 事件对象\n */\n private highlightHandler = throttle((event: MouseEvent): void => {\n this.emit('highlight', event);\n }, throttleTime);\n\n constructor(config: StageMaskConfig) {\n const wrapper = createWrapper();\n super(wrapper);\n\n this.wrapper = wrapper;\n this.core = config.core;\n\n this.content.addEventListener('mousedown', this.mouseDownHandler);\n this.wrapper.appendChild(this.content);\n this.content.addEventListener('wheel', this.mouseWheelHandler);\n this.content.addEventListener('mousemove', this.highlightHandler);\n this.content.addEventListener('mouseleave', this.mouseLeaveHandler);\n }\n\n public setMode(mode: Mode) {\n this.mode = mode;\n this.scroll();\n if (mode === Mode.FIXED) {\n this.content.style.width = `${this.wrapperWidth}px`;\n this.content.style.height = `${this.wrapperHeight}px`;\n } else {\n this.content.style.width = `${this.width}px`;\n this.content.style.height = `${this.height}px`;\n }\n }\n\n /**\n * 监听页面大小变化\n * @description 同步页面与mask的大小\n * @param page 页面Dom节点\n */\n public observe(page: HTMLElement): void {\n if (!page) return;\n\n this.page = page;\n this.pageScrollParent = getScrollParent(page) || this.core.renderer.contentWindow?.document.documentElement || null;\n this.pageResizeObserver?.disconnect();\n this.wrapperResizeObserver?.disconnect();\n this.intersectionObserver?.disconnect();\n\n if (typeof IntersectionObserver !== 'undefined') {\n this.intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n const { target, intersectionRatio } = entry;\n if (intersectionRatio <= 0) {\n this.scrollIntoView(target);\n }\n this.intersectionObserver?.unobserve(target);\n });\n },\n {\n root: this.pageScrollParent,\n rootMargin: '0px',\n threshold: 1.0,\n },\n );\n }\n\n if (typeof ResizeObserver !== 'undefined') {\n this.pageResizeObserver = new ResizeObserver((entries) => {\n const [entry] = entries;\n const { clientHeight, clientWidth } = entry.target;\n this.setHeight(clientHeight);\n this.setWidth(clientWidth);\n\n this.scroll();\n if (this.core.dr.moveable) {\n this.core.dr.updateMoveable();\n }\n });\n\n this.pageResizeObserver.observe(page);\n\n this.wrapperResizeObserver = new ResizeObserver((entries) => {\n const [entry] = entries;\n const { clientHeight, clientWidth } = entry.target;\n this.wrapperHeight = clientHeight;\n this.wrapperWidth = clientWidth;\n this.setMaxScrollLeft();\n this.setMaxScrollTop();\n });\n this.wrapperResizeObserver.observe(this.wrapper);\n }\n }\n\n /**\n * 挂载Dom节点\n * @param el 将蒙层挂载到该Dom节点上\n */\n public mount(el: HTMLDivElement): void {\n if (!this.content) throw new Error('content 不存在');\n\n el.appendChild(this.wrapper);\n }\n\n public setLayout(el: HTMLElement): void {\n this.setMode(isFixedParent(el) ? Mode.FIXED : Mode.ABSOLUTE);\n }\n\n public scrollIntoView(el: Element): void {\n el.scrollIntoView();\n if (!this.pageScrollParent) return;\n this.scrollLeft = this.pageScrollParent.scrollLeft;\n this.scrollTop = this.pageScrollParent.scrollTop;\n this.scroll();\n }\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n this.content?.remove();\n this.page = null;\n this.pageScrollParent = null;\n this.pageResizeObserver?.disconnect();\n this.wrapperResizeObserver?.disconnect();\n\n this.content.removeEventListener('mouseleave', this.mouseLeaveHandler);\n super.destroy();\n }\n\n private scroll() {\n this.fixScrollValue();\n\n let { scrollLeft, scrollTop } = this;\n\n if (this.pageScrollParent) {\n this.pageScrollParent.scrollTo({\n top: scrollTop,\n left: scrollLeft,\n });\n }\n\n if (this.mode === Mode.FIXED) {\n scrollLeft = 0;\n scrollTop = 0;\n }\n\n this.scrollRule(scrollTop);\n this.scrollTo(scrollLeft, scrollTop);\n }\n\n private scrollTo(scrollLeft: number, scrollTop: number): void {\n this.content.style.transform = `translate3d(${-scrollLeft}px, ${-scrollTop}px, 0)`;\n }\n\n /**\n * 设置蒙层高度\n * @param height 高度\n */\n private setHeight(height: number): void {\n this.height = height;\n this.setMaxScrollTop();\n this.content.style.height = `${height}px`;\n }\n\n /**\n * 设置蒙层宽度\n * @param width 宽度\n */\n private setWidth(width: number): void {\n this.width = width;\n this.setMaxScrollLeft();\n this.content.style.width = `${width}px`;\n }\n\n /**\n * 计算并设置最大滚动宽度\n */\n private setMaxScrollLeft(): void {\n this.maxScrollLeft = Math.max(this.width - this.wrapperWidth, 0);\n }\n\n /**\n * 计算并设置最大滚动高度\n */\n private setMaxScrollTop(): void {\n this.maxScrollTop = Math.max(this.height - this.wrapperHeight, 0);\n }\n\n /**\n * 修复滚动距离\n * 由于滚动容器变化等因素,会导致当前滚动的距离不正确\n */\n private fixScrollValue(): void {\n if (this.scrollTop < 0) this.scrollTop = 0;\n if (this.scrollLeft < 0) this.scrollLeft = 0;\n if (this.maxScrollTop < this.scrollTop) this.scrollTop = this.maxScrollTop;\n if (this.maxScrollLeft < this.scrollLeft) this.scrollLeft = this.maxScrollLeft;\n }\n\n /**\n * 点击事件处理函数\n * @param event 事件对象\n */\n private mouseDownHandler = (event: MouseEvent): void => {\n this.emit('clearHighlight');\n\n event.stopImmediatePropagation();\n event.stopPropagation();\n\n if (event.button !== MouseButton.LEFT && event.button !== MouseButton.RIGHT) return;\n\n // 点击的对象如果是选中框,则不需要再触发选中了,而可能是拖动行为\n if ((event.target as HTMLDivElement).className.indexOf('moveable-control') !== -1) {\n return;\n }\n\n this.content.removeEventListener('mousemove', this.highlightHandler);\n\n this.emit('beforeSelect', event);\n\n // 如果是右键点击,这里的mouseup事件监听没有效果\n globalThis.document.addEventListener('mouseup', this.mouseUpHandler);\n };\n\n private mouseUpHandler = (): void => {\n globalThis.document.removeEventListener('mouseup', this.mouseUpHandler);\n this.content.addEventListener('mousemove', this.highlightHandler);\n this.emit('select');\n };\n\n private mouseWheelHandler = (event: WheelEvent) => {\n this.emit('clearHighlight');\n if (!this.page) throw new Error('page 未初始化');\n\n const { deltaY, deltaX } = event;\n\n if (this.page.clientHeight < this.wrapperHeight && deltaY) return;\n if (this.page.clientWidth < this.wrapperWidth && deltaX) return;\n\n if (this.maxScrollTop > 0) {\n this.scrollTop = this.scrollTop + deltaY;\n }\n\n if (this.maxScrollLeft > 0) {\n this.scrollLeft = this.scrollLeft + deltaX;\n }\n\n this.scroll();\n\n this.emit('scroll', event);\n };\n\n private mouseLeaveHandler = () => {\n setTimeout(() => this.emit('clearHighlight'), throttleTime);\n };\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport StageCore from './StageCore';\nimport type { Runtime, RuntimeWindow, StageRenderConfig } from './types';\nimport { getHost, isSameDomain } from './util';\n\nexport default class StageRender extends EventEmitter {\n /** 组件的js、css执行的环境,直接渲染为当前window,iframe渲染则为iframe.contentWindow */\n public contentWindow: RuntimeWindow | null = null;\n\n public runtime: Runtime | null = null;\n\n public iframe?: HTMLIFrameElement;\n\n public runtimeUrl?: string;\n\n public core: StageCore;\n\n private render?: (renderer: StageCore) => Promise<HTMLElement> | HTMLElement;\n\n constructor({ core }: StageRenderConfig) {\n super();\n\n this.core = core;\n this.runtimeUrl = core.config.runtimeUrl || '';\n this.render = core.config.render;\n\n this.iframe = globalThis.document.createElement('iframe');\n // 同源,直接加载\n this.iframe.src = isSameDomain(this.runtimeUrl) ? this.runtimeUrl : '';\n this.iframe.style.cssText = `\n border: 0;\n width: 100%;\n height: 100%;\n `;\n\n this.iframe.addEventListener('load', this.loadHandler);\n }\n\n public getMagicApi = () => ({\n onPageElUpdate: (el: HTMLElement) => this.emit('page-el-update', el),\n onRuntimeReady: (runtime: Runtime) => {\n this.runtime = runtime;\n // @ts-ignore\n globalThis.runtime = runtime;\n this.emit('runtime-ready', runtime);\n },\n });\n\n /**\n * 挂载Dom节点\n * @param el 将页面挂载到该Dom节点上\n */\n public async mount(el: HTMLDivElement) {\n if (this.iframe) {\n if (!isSameDomain(this.runtimeUrl) && this.runtimeUrl) {\n // 不同域,使用srcdoc发起异步请求,需要目标地址支持跨域\n let html = await fetch(this.runtimeUrl).then((res) => res.text());\n // 使用base, 解决相对路径或绝对路径的问题\n const base = `${location.protocol}//${getHost(this.runtimeUrl)}`;\n html = html.replace('<head>', `<head>\\n<base href=\"${base}\">`);\n this.iframe.srcdoc = html;\n }\n\n el.appendChild<HTMLIFrameElement>(this.iframe);\n } else {\n throw Error('mount 失败');\n }\n }\n\n public getRuntime = (): Promise<Runtime> => {\n if (this.runtime) return Promise.resolve(this.runtime);\n return new Promise((resolve) => {\n const listener = (runtime: Runtime) => {\n this.off('runtime-ready', listener);\n resolve(runtime);\n };\n this.on('runtime-ready', listener);\n });\n };\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n this.iframe?.removeEventListener('load', this.loadHandler);\n this.contentWindow = null;\n this.iframe?.remove();\n this.iframe = undefined;\n this.removeAllListeners();\n }\n\n private loadHandler = async () => {\n this.contentWindow = this.iframe?.contentWindow as RuntimeWindow;\n\n this.contentWindow.magic = this.getMagicApi();\n\n if (this.render) {\n const el = await this.render(this.core);\n if (el) {\n this.iframe?.contentDocument?.body?.appendChild(el);\n }\n }\n\n this.emit('onload');\n\n this.contentWindow.postMessage(\n {\n tmagicRuntimeReady: true,\n },\n '*',\n );\n };\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport { Id } from '@tmagic/schema';\n\nimport { DEFAULT_ZOOM, GHOST_EL_ID_PREFIX } from './const';\nimport StageDragResize from './StageDragResize';\nimport StageHighlight from './StageHighlight';\nimport StageMask from './StageMask';\nimport StageRender from './StageRender';\nimport {\n CanSelect,\n GuidesEventData,\n RemoveData,\n Runtime,\n SortEventData,\n StageCoreConfig,\n UpdateData,\n UpdateEventData,\n} from './types';\nimport { addSelectedClassName, removeSelectedClassName } from './util';\n\nexport default class StageCore extends EventEmitter {\n public selectedDom: Element | undefined;\n public highlightedDom: Element | undefined;\n\n public renderer: StageRender;\n public mask: StageMask;\n public dr: StageDragResize;\n public highlightLayer: StageHighlight;\n public config: StageCoreConfig;\n public zoom = DEFAULT_ZOOM;\n public container?: HTMLDivElement;\n private canSelect: CanSelect;\n\n constructor(config: StageCoreConfig) {\n super();\n\n this.config = config;\n\n this.setZoom(config.zoom);\n this.canSelect = config.canSelect || ((el: HTMLElement) => !!el.id);\n\n this.renderer = new StageRender({ core: this });\n this.mask = new StageMask({ core: this });\n this.dr = new StageDragResize({ core: this, container: this.mask.content });\n this.highlightLayer = new StageHighlight({ core: this, container: this.mask.wrapper });\n\n this.renderer.on('runtime-ready', (runtime: Runtime) => {\n this.emit('runtime-ready', runtime);\n });\n this.renderer.on('page-el-update', (el: HTMLElement) => {\n this.mask?.observe(el);\n });\n\n this.mask\n .on('beforeSelect', (event: MouseEvent) => {\n this.setElementFromPoint(event);\n })\n .on('select', () => {\n this.emit('select', this.selectedDom);\n })\n .on('changeGuides', (data: GuidesEventData) => {\n this.dr.setGuidelines(data.type, data.guides);\n this.emit('changeGuides', data);\n })\n .on('highlight', async (event: MouseEvent) => {\n await this.setElementFromPoint(event);\n if (this.highlightedDom === this.selectedDom) {\n this.highlightLayer.clearHighlight();\n return;\n }\n this.highlightLayer.highlight(this.highlightedDom as HTMLElement);\n this.emit('highlight', this.highlightedDom);\n })\n .on('clearHighlight', async () => {\n this.highlightLayer.clearHighlight();\n });\n\n // 要先触发select,在触发update\n this.dr\n .on('update', (data: UpdateEventData) => {\n setTimeout(() => this.emit('update', data));\n })\n .on('sort', (data: UpdateEventData) => {\n setTimeout(() => this.emit('sort', data));\n });\n }\n\n public async setElementFromPoint(event: MouseEvent) {\n const { renderer, zoom } = this;\n\n const doc = renderer.contentWindow?.document;\n let x = event.clientX;\n let y = event.clientY;\n\n if (renderer.iframe) {\n const rect = renderer.iframe.getClientRects()[0];\n if (rect) {\n x = x - rect.left;\n y = y - rect.top;\n }\n }\n\n const els = doc?.elementsFromPoint(x / zoom, y / zoom) as HTMLElement[];\n\n let stopped = false;\n const stop = () => (stopped = true);\n for (const el of els) {\n if (!el.id.startsWith(GHOST_EL_ID_PREFIX) && (await this.canSelect(el, event, stop))) {\n if (stopped) break;\n if (event.type === 'mousemove') {\n this.highlight(el);\n break;\n }\n this.select(el, event);\n break;\n }\n }\n }\n\n /**\n * 选中组件\n * @param idOrEl 组件Dom节点的id属性,或者Dom节点\n */\n public async select(idOrEl: Id | HTMLElement, event?: MouseEvent): Promise<void> {\n const el = await this.getTargetElement(idOrEl);\n\n if (el === this.selectedDom) return;\n\n const runtime = await this.renderer.getRuntime();\n\n await runtime?.select?.(el.id);\n\n if (runtime?.beforeSelect) {\n await runtime.beforeSelect(el);\n }\n\n this.mask.setLayout(el);\n this.dr.select(el, event);\n\n if (this.config.autoScrollIntoView || el.dataset.autoScrollIntoView) {\n this.mask.intersectionObserver?.observe(el);\n }\n\n this.selectedDom = el;\n\n if (this.renderer.contentWindow) {\n removeSelectedClassName(this.renderer.contentWindow.document);\n if (this.selectedDom) {\n addSelectedClassName(this.selectedDom, this.renderer.contentWindow.document);\n }\n }\n }\n\n /**\n * 更新选中的节点\n * @param data 更新的数据\n */\n public update(data: UpdateData): Promise<void> {\n const { config } = data;\n\n return this.renderer?.getRuntime().then((runtime) => {\n runtime?.update?.(data);\n // 更新配置后,需要等组件渲染更新\n setTimeout(() => {\n const el = this.renderer.contentWindow?.document.getElementById(`${config.id}`);\n // 有可能dom已经重新渲染,不再是原来的dom了,所以这里判断id,而不是判断el === this.selectedDom\n if (el && el.id === this.selectedDom?.id) {\n this.selectedDom = el;\n // 更新了组件的布局,需要重新设置mask是否可以滚动\n this.mask.setLayout(el);\n this.dr.updateMoveable(el);\n }\n }, 0);\n });\n }\n\n /**\n * 高亮选中组件\n * @param el 页面Dom节点\n */\n public async highlight(idOrEl: HTMLElement | Id): Promise<void> {\n let el;\n try {\n el = await this.getTargetElement(idOrEl);\n } catch (error) {\n this.highlightLayer.clearHighlight();\n return;\n }\n if (el === this.highlightedDom) return;\n this.highlightLayer.highlight(el);\n this.highlightedDom = el;\n }\n\n public sortNode(data: SortEventData): Promise<void> {\n return this.renderer?.getRuntime().then((runtime) => runtime?.sortNode?.(data));\n }\n\n public add(data: UpdateData): Promise<void> {\n return this.renderer?.getRuntime().then((runtime) => runtime?.add?.(data));\n }\n\n public remove(data: RemoveData): Promise<void> {\n return this.renderer?.getRuntime().then((runtime) => runtime?.remove?.(data));\n }\n\n public setZoom(zoom: number = DEFAULT_ZOOM): void {\n this.zoom = zoom;\n }\n\n /**\n * 挂载Dom节点\n * @param el 将stage挂载到该Dom节点上\n */\n public async mount(el: HTMLDivElement) {\n this.container = el;\n const { mask, renderer } = this;\n\n await renderer.mount(el);\n mask.mount(el);\n\n this.emit('mounted');\n }\n\n /**\n * 清空所有参考线\n */\n public clearGuides() {\n this.mask.clearGuides();\n this.dr.clearGuides();\n }\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n const { mask, renderer, dr, highlightLayer } = this;\n\n renderer.destroy();\n mask.destroy();\n dr.destroy();\n highlightLayer.destroy();\n\n this.removeAllListeners();\n\n this.container = undefined;\n }\n\n private async getTargetElement(idOrEl: Id | HTMLElement): Promise<HTMLElement> {\n if (typeof idOrEl === 'string' || typeof idOrEl === 'number') {\n const el = this.renderer.contentWindow?.document.getElementById(`${idOrEl}`);\n if (!el) throw new Error(`不存在ID为${idOrEl}的元素`);\n return el;\n }\n return idOrEl;\n }\n}\n"],"names":["EventEmitter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tmagic-stage.es.js","sources":["../src/const.ts","../src/util.ts","../src/StageDragResize.ts","../src/TargetCalibrate.ts","../src/StageHighlight.ts","../src/Rule.ts","../src/StageMask.ts","../src/StageRender.ts","../src/StageCore.ts"],"sourcesContent":["/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** 流式布局下拖动时需要clone一个镜像节点,镜像节点的id前缀 */\nexport const GHOST_EL_ID_PREFIX = 'ghost_el_';\n\n/** 拖动的时候需要在蒙层中创建一个占位节点,该节点的id前缀 */\nexport const DRAG_EL_ID_PREFIX = 'drag_el_';\n\n/** 高亮时需要在蒙层中创建一个占位节点,该节点的id前缀 */\nexport const HIGHLIGHT_EL_ID_PREFIX = 'highlight_el_';\n\n/** 默认放到缩小倍数 */\nexport const DEFAULT_ZOOM = 1;\n\n/** 参考线类型 */\nexport enum GuidesType {\n /** 水平 */\n HORIZONTAL = 'horizontal',\n /** 垂直 */\n VERTICAL = 'vertical',\n}\n\n/** css z-index */\nexport enum ZIndex {\n /** 蒙层,用于监听用户操作,需要置于顶层 */\n MASK = '99999',\n /** 选中的节点 */\n SELECTED_EL = '666',\n GHOST_EL = '700',\n DRAG_EL = '9',\n}\n\n/** 鼠标按键 */\nexport enum MouseButton {\n /** 左键 */\n LEFT = 0,\n /** z中健 */\n MIDDLE = 1,\n /** 右键 */\n RIGHT = 2,\n}\n\n/** 布局方式 */\nexport enum Mode {\n /** 绝对定位布局 */\n ABSOLUTE = 'absolute',\n /** 固定定位布局 */\n FIXED = 'fixed',\n /** 流式布局 */\n SORTABLE = 'sortable',\n}\n\n/** 选中节点的class name */\nexport const SELECTED_CLASS = 'tmagic-stage-selected-area';\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Mode, SELECTED_CLASS } from './const';\nimport type { Offset } from './types';\n\nconst getParents = (el: Element, relative: Element) => {\n let cur: Element | null = el.parentElement;\n const parents: Element[] = [];\n while (cur && cur !== relative) {\n parents.push(cur);\n cur = cur.parentElement;\n }\n return parents;\n};\n\nexport const getOffset = (el: HTMLElement): Offset => {\n const { offsetParent } = el;\n\n const left = el.offsetLeft;\n const top = el.offsetTop;\n\n if (offsetParent) {\n const parentOffset = getOffset(offsetParent as HTMLElement);\n return {\n left: left + parentOffset.left,\n top: top + parentOffset.top,\n };\n }\n\n return {\n left,\n top,\n };\n};\n\nexport const getAbsolutePosition = (el: HTMLElement, { top, left }: Offset) => {\n const { offsetParent } = el;\n\n if (offsetParent) {\n const parentOffset = getOffset(offsetParent as HTMLElement);\n return {\n left: left - parentOffset.left,\n top: top - parentOffset.top,\n };\n }\n\n return { left, top };\n};\n\nexport const getHost = (targetUrl: string) => targetUrl.match(/\\/\\/([^/]+)/)?.[1];\n\nexport const isSameDomain = (targetUrl = '', source = globalThis.location.host) => {\n const isHttpUrl = /^(http[s]?:)?\\/\\//.test(targetUrl);\n\n if (!isHttpUrl) return true;\n\n return getHost(targetUrl) === source;\n};\n\nexport const isAbsolute = (style: CSSStyleDeclaration): boolean => style.position === 'absolute';\n\nexport const isRelative = (style: CSSStyleDeclaration): boolean => style.position === 'relative';\n\nexport const isStatic = (style: CSSStyleDeclaration): boolean => style.position === 'static';\n\nexport const isFixed = (style: CSSStyleDeclaration): boolean => style.position === 'fixed';\n\nexport const isFixedParent = (el: HTMLElement) => {\n let fixed = false;\n let dom = el;\n while (dom) {\n fixed = isFixed(getComputedStyle(dom));\n if (fixed) {\n break;\n }\n const { parentElement } = dom;\n if (!parentElement || parentElement.tagName === 'BODY') {\n break;\n }\n dom = parentElement;\n }\n return fixed;\n};\n\nexport const getMode = (el: HTMLElement): Mode => {\n if (isFixedParent(el)) return Mode.FIXED;\n const style = getComputedStyle(el);\n if (isStatic(style) || isRelative(style)) return Mode.SORTABLE;\n return Mode.ABSOLUTE;\n};\n\nexport const getScrollParent = (element: HTMLElement, includeHidden = false): HTMLElement | null => {\n let style = getComputedStyle(element);\n const overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/;\n\n if (isFixed(style)) return null;\n\n for (let parent = element; parent.parentElement; ) {\n parent = parent.parentElement;\n style = getComputedStyle(parent);\n\n if (isAbsolute(style) && isStatic(style)) continue;\n\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) return parent;\n }\n\n return null;\n};\n\nexport const createDiv = ({ className, cssText }: { className: string; cssText: string }) => {\n const el = globalThis.document.createElement('div');\n el.className = className;\n el.style.cssText = cssText;\n return el;\n};\n\nexport const removeSelectedClassName = (doc: Document) => {\n const oldEl = doc.querySelector(`.${SELECTED_CLASS}`);\n\n if (oldEl) {\n oldEl.classList.remove(SELECTED_CLASS);\n (oldEl.parentNode as HTMLDivElement)?.classList.remove(`${SELECTED_CLASS}-parent`);\n doc.querySelectorAll(`.${SELECTED_CLASS}-parents`).forEach((item) => {\n item.classList.remove(`${SELECTED_CLASS}-parents`);\n });\n }\n};\n\nexport const addSelectedClassName = (el: Element, doc: Document) => {\n el.classList.add(SELECTED_CLASS);\n (el.parentNode as Element)?.classList.add(`${SELECTED_CLASS}-parent`);\n getParents(el, doc.body).forEach((item) => {\n item.classList.add(`${SELECTED_CLASS}-parents`);\n });\n};\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-param-reassign */\nimport { EventEmitter } from 'events';\n\nimport type { MoveableOptions } from 'moveable';\nimport Moveable from 'moveable';\nimport MoveableHelper from 'moveable-helper';\n\nimport { DRAG_EL_ID_PREFIX, GHOST_EL_ID_PREFIX, GuidesType, Mode, ZIndex } from './const';\nimport StageCore from './StageCore';\nimport type { SortEventData, StageDragResizeConfig } from './types';\nimport { getAbsolutePosition, getMode, getOffset } from './util';\n\n/** 拖动状态 */\nenum ActionStatus {\n /** 开始拖动 */\n START = 'start',\n /** 拖动中 */\n ING = 'ing',\n /** 拖动结束 */\n END = 'end',\n}\n\n/**\n * 选中框\n */\nexport default class StageDragResize extends EventEmitter {\n public core: StageCore;\n /** 画布容器 */\n public container: HTMLElement;\n /** 目标节点 */\n public target?: HTMLElement;\n /** 目标节点在蒙层中的占位节点 */\n public dragEl: HTMLDivElement;\n /** Moveable拖拽类实例 */\n public moveable?: Moveable;\n /** 水平参考线 */\n public horizontalGuidelines: number[] = [];\n /** 垂直参考线 */\n public verticalGuidelines: number[] = [];\n /** 对齐元素集合 */\n public elementGuidelines: HTMLElement[] = [];\n /** 布局方式:流式布局、绝对定位、固定定位 */\n public mode: Mode = Mode.ABSOLUTE;\n\n private moveableOptions: MoveableOptions = {};\n /** 拖动状态 */\n private dragStatus: ActionStatus = ActionStatus.END;\n /** 流式布局下,目标节点的镜像节点 */\n private ghostEl: HTMLElement | undefined;\n private moveableHelper?: MoveableHelper;\n\n constructor(config: StageDragResizeConfig) {\n super();\n\n this.core = config.core;\n this.container = config.container;\n\n this.dragEl = globalThis.document.createElement('div');\n this.container.append(this.dragEl);\n }\n\n /**\n * 将选中框渲染并覆盖到选中的组件Dom节点上方\n * 当选中的节点是不是absolute时,会创建一个新的节点出来作为拖拽目标\n * @param el 选中组件的Dom节点元素\n * @param event 鼠标事件\n */\n public select(el: HTMLElement, event?: MouseEvent): void {\n const oldTarget = this.target;\n this.target = el;\n\n // 从不能拖动到能拖动的节点之间切换,要重新创建moveable,不然dragStart不生效\n if (!this.moveable || this.target !== oldTarget) {\n this.init(el);\n this.moveableHelper = MoveableHelper.create({\n useBeforeRender: true,\n useRender: false,\n createAuto: true,\n });\n\n this.initMoveable();\n } else {\n this.updateMoveable();\n }\n\n if (event) {\n this.moveable?.dragStart(event);\n }\n }\n\n /**\n * 初始化选中框并渲染出来\n */\n public updateMoveable(el = this.target): void {\n if (!this.moveable) throw new Error('未初始化moveable');\n if (!el) throw new Error('未选中任何节点');\n\n this.target = el;\n\n this.init(el);\n\n Object.entries(this.moveableOptions).forEach(([key, value]) => {\n (this.moveable as any)[key] = value;\n });\n this.moveable.updateTarget();\n }\n\n public setGuidelines(type: GuidesType, guidelines: number[]): void {\n if (type === GuidesType.HORIZONTAL) {\n this.horizontalGuidelines = guidelines;\n this.moveableOptions.horizontalGuidelines = guidelines;\n } else if (type === GuidesType.VERTICAL) {\n this.verticalGuidelines = guidelines;\n this.moveableOptions.verticalGuidelines = guidelines;\n }\n\n if (this.moveable) {\n this.updateMoveable();\n }\n }\n\n public clearGuides() {\n this.horizontalGuidelines = [];\n this.verticalGuidelines = [];\n this.moveableOptions.horizontalGuidelines = [];\n this.moveableOptions.verticalGuidelines = [];\n this.updateMoveable();\n }\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n this.moveable?.destroy();\n this.destroyGhostEl();\n this.destroyDragEl();\n this.dragStatus = ActionStatus.END;\n this.removeAllListeners();\n }\n\n private init(el: HTMLElement): void {\n // 如果有滚动条会导致resize时获取到width,height不准确\n if (/(auto|scroll)/.test(el.style.overflow)) {\n el.style.overflow = 'hidden';\n }\n this.mode = getMode(el);\n\n this.destroyGhostEl();\n\n this.updateDragEl(el);\n\n this.moveableOptions = this.getOptions({\n target: this.dragEl,\n });\n }\n\n private setElementGuidelines(nodes: HTMLElement[]) {\n this.elementGuidelines.forEach((node) => {\n node.remove();\n });\n this.elementGuidelines = [];\n\n if (this.mode === Mode.ABSOLUTE) {\n const frame = document.createDocumentFragment();\n\n for (const node of nodes) {\n const { width, height } = node.getBoundingClientRect();\n if (node === this.target) continue;\n const { left, top } = getOffset(node as HTMLElement);\n const elementGuideline = document.createElement('div');\n elementGuideline.style.cssText = `position: absolute;width: ${width}px;height: ${height}px;top: ${top}px;left: ${left}px`;\n this.elementGuidelines.push(elementGuideline);\n frame.append(elementGuideline);\n }\n\n this.container.append(frame);\n }\n }\n\n private initMoveable() {\n this.moveable?.destroy();\n\n this.moveable = new Moveable(this.container, {\n ...this.moveableOptions,\n });\n\n this.bindResizeEvent();\n this.bindDragEvent();\n this.bindRotateEvent();\n this.bindScaleEvent();\n }\n\n private bindResizeEvent(): void {\n if (!this.moveable) throw new Error('moveable 未初始化');\n\n const frame = {\n left: 0,\n top: 0,\n };\n\n this.moveable\n .on('resizeStart', (e) => {\n if (!this.target) return;\n\n this.dragStatus = ActionStatus.START;\n this.moveableHelper?.onResizeStart(e);\n\n frame.top = this.target.offsetTop;\n frame.left = this.target.offsetLeft;\n })\n .on('resize', (e) => {\n const { width, height, drag } = e;\n if (!this.moveable || !this.target || !this.dragEl) return;\n\n const { beforeTranslate } = drag;\n this.dragStatus = ActionStatus.ING;\n\n this.moveableHelper?.onResize(e);\n\n // 流式布局\n if (this.mode === Mode.SORTABLE) {\n this.target.style.top = '0px';\n } else {\n this.target.style.left = `${frame.left + beforeTranslate[0]}px`;\n this.target.style.top = `${frame.top + beforeTranslate[1]}px`;\n }\n\n this.target.style.width = `${width}px`;\n this.target.style.height = `${height}px`;\n })\n .on('resizeEnd', () => {\n this.dragStatus = ActionStatus.END;\n this.update(true);\n });\n }\n\n private bindDragEvent(): void {\n if (!this.moveable) throw new Error('moveable 未初始化');\n\n const frame = {\n left: 0,\n top: 0,\n };\n\n this.moveable\n .on('dragStart', (e) => {\n if (!this.target) throw new Error('未选中组件');\n\n this.dragStatus = ActionStatus.START;\n\n this.moveableHelper?.onDragStart(e);\n\n if (this.mode === Mode.SORTABLE) {\n this.ghostEl = this.generateGhostEl(this.target);\n }\n\n frame.top = this.target.offsetTop;\n frame.left = this.target.offsetLeft;\n })\n .on('drag', (e) => {\n if (!this.target || !this.dragEl) return;\n\n this.dragStatus = ActionStatus.ING;\n\n // 流式布局\n if (this.ghostEl) {\n this.ghostEl.style.top = `${frame.top + e.beforeTranslate[1]}px`;\n return;\n }\n\n this.moveableHelper?.onDrag(e);\n\n this.target.style.left = `${frame.left + e.beforeTranslate[0]}px`;\n this.target.style.top = `${frame.top + e.beforeTranslate[1]}px`;\n })\n .on('dragEnd', () => {\n // 点击不拖动时会触发dragStart和dragEnd,但是不会有drag事件\n if (this.dragStatus === ActionStatus.ING) {\n switch (this.mode) {\n case Mode.SORTABLE:\n this.sort();\n break;\n default:\n this.update();\n }\n }\n\n this.dragStatus = ActionStatus.END;\n this.destroyGhostEl();\n });\n }\n\n private bindRotateEvent(): void {\n if (!this.moveable) throw new Error('moveable 未初始化');\n\n this.moveable\n .on('rotateStart', (e) => {\n this.dragStatus = ActionStatus.START;\n this.moveableHelper?.onRotateStart(e);\n })\n .on('rotate', (e) => {\n if (!this.target || !this.dragEl) return;\n this.dragStatus = ActionStatus.ING;\n this.moveableHelper?.onRotate(e);\n const frame = this.moveableHelper?.getFrame(e.target);\n this.target.style.transform = frame?.toCSSObject().transform || '';\n })\n .on('rotateEnd', (e) => {\n this.dragStatus = ActionStatus.END;\n const frame = this.moveableHelper?.getFrame(e.target);\n this.emit('update', {\n el: this.target,\n style: {\n transform: frame?.get('transform'),\n },\n });\n });\n }\n\n private bindScaleEvent(): void {\n if (!this.moveable) throw new Error('moveable 未初始化');\n\n this.moveable\n .on('scaleStart', (e) => {\n this.dragStatus = ActionStatus.START;\n this.moveableHelper?.onScaleStart(e);\n })\n .on('scale', (e) => {\n if (!this.target || !this.dragEl) return;\n this.dragStatus = ActionStatus.ING;\n this.moveableHelper?.onScale(e);\n const frame = this.moveableHelper?.getFrame(e.target);\n this.target.style.transform = frame?.toCSSObject().transform || '';\n })\n .on('scaleEnd', (e) => {\n this.dragStatus = ActionStatus.END;\n const frame = this.moveableHelper?.getFrame(e.target);\n this.emit('update', {\n el: this.target,\n style: {\n transform: frame?.get('transform'),\n },\n });\n });\n }\n\n private sort(): void {\n if (!this.target || !this.ghostEl) throw new Error('未知错误');\n const { top } = this.ghostEl.getBoundingClientRect();\n const { top: oriTop } = this.target.getBoundingClientRect();\n const deltaTop = top - oriTop;\n if (Math.abs(deltaTop) >= this.target.clientHeight / 2) {\n if (deltaTop > 0) {\n this.emit('sort', down(deltaTop, this.target));\n } else {\n this.emit('sort', up(deltaTop, this.target));\n }\n } else {\n this.emit('sort', {\n src: this.target.id,\n dist: this.target.id,\n });\n }\n }\n\n private update(isResize = false): void {\n if (!this.target) return;\n\n const offset =\n this.mode === Mode.SORTABLE ? { left: 0, top: 0 } : { left: this.target.offsetLeft, top: this.target.offsetTop };\n\n const left = this.calcValueByFontsize(offset.left);\n const top = this.calcValueByFontsize(offset.top);\n const width = this.calcValueByFontsize(this.target.clientWidth);\n const height = this.calcValueByFontsize(this.target.clientHeight);\n\n this.emit('update', {\n el: this.target,\n style: isResize ? { left, top, width, height } : { left, top },\n });\n }\n\n private generateGhostEl(el: HTMLElement): HTMLElement {\n if (this.ghostEl) {\n this.destroyGhostEl();\n }\n\n const ghostEl = el.cloneNode(true) as HTMLElement;\n const { top, left } = getAbsolutePosition(el, getOffset(el));\n ghostEl.id = `${GHOST_EL_ID_PREFIX}${el.id}`;\n ghostEl.style.zIndex = ZIndex.GHOST_EL;\n ghostEl.style.opacity = '.5';\n ghostEl.style.position = 'absolute';\n ghostEl.style.left = `${left}px`;\n ghostEl.style.top = `${top}px`;\n el.after(ghostEl);\n return ghostEl;\n }\n\n private destroyGhostEl(): void {\n this.ghostEl?.remove();\n this.ghostEl = undefined;\n }\n\n private updateDragEl(el: HTMLElement) {\n const offset = getOffset(el);\n const { transform } = getComputedStyle(el);\n\n this.dragEl.style.cssText = `\n position: absolute;\n transform: ${transform};\n left: ${offset.left}px;\n top: ${offset.top}px;\n width: ${el.clientWidth}px;\n height: ${el.clientHeight}px;\n z-index: ${ZIndex.DRAG_EL};\n `;\n\n this.dragEl.id = `${DRAG_EL_ID_PREFIX}${el.id}`;\n\n if (typeof this.core.config.updateDragEl === 'function') {\n this.core.config.updateDragEl(this.dragEl, el);\n }\n }\n\n private destroyDragEl(): void {\n this.dragEl?.remove();\n }\n\n private getOptions(options: MoveableOptions = {}): MoveableOptions {\n if (!this.target) return {};\n\n const isAbsolute = this.mode === Mode.ABSOLUTE;\n const isFixed = this.mode === Mode.FIXED;\n\n let { moveableOptions = {} } = this.core.config;\n\n if (typeof moveableOptions === 'function') {\n moveableOptions = moveableOptions(this.core);\n }\n\n const elementGuidelines: any = moveableOptions.elementGuidelines || this.target.parentElement?.children || [];\n\n this.setElementGuidelines(elementGuidelines);\n\n if (moveableOptions.elementGuidelines) {\n delete moveableOptions.elementGuidelines;\n }\n\n return {\n origin: false,\n rootContainer: this.core.container,\n zoom: 1,\n dragArea: false,\n draggable: true,\n resizable: true,\n scalable: false,\n rotatable: false,\n snappable: isAbsolute || isFixed,\n snapGap: isAbsolute || isFixed,\n snapThreshold: 5,\n snapDigit: 0,\n throttleDrag: 0,\n isDisplaySnapDigit: isAbsolute,\n snapDirections: {\n top: isAbsolute,\n right: isAbsolute,\n bottom: isAbsolute,\n left: isAbsolute,\n center: isAbsolute,\n middle: isAbsolute,\n },\n elementSnapDirections: {\n top: isAbsolute,\n right: isAbsolute,\n bottom: isAbsolute,\n left: isAbsolute,\n },\n isDisplayInnerSnapDigit: true,\n horizontalGuidelines: this.horizontalGuidelines,\n verticalGuidelines: this.verticalGuidelines,\n elementGuidelines: this.elementGuidelines,\n\n bounds: {\n top: 0,\n // 设置0的话无法移动到left为0,所以只能设置为-1\n left: -1,\n right: this.container.clientWidth,\n bottom: this.container.clientHeight,\n ...(moveableOptions.bounds || {}),\n },\n ...options,\n ...moveableOptions,\n };\n }\n\n private calcValueByFontsize(value: number) {\n const { contentWindow } = this.core.renderer;\n const fontSize = contentWindow?.document.documentElement.style.fontSize;\n\n if (fontSize) {\n const times = globalThis.parseFloat(fontSize) / 100;\n return (value / times).toFixed(2);\n }\n\n return value;\n }\n}\n\n/**\n * 下移组件位置\n * @param {number} deltaTop 偏移量\n * @param {Object} detail 当前选中的组件配置\n */\nexport const down = (deltaTop: number, target: HTMLElement | SVGElement): SortEventData | void => {\n let swapIndex = 0;\n let addUpH = target.clientHeight;\n const brothers = Array.from(target.parentNode?.children || []).filter(\n (node) => !node.id.startsWith(GHOST_EL_ID_PREFIX),\n );\n const index = brothers.indexOf(target);\n // 往下移动\n const downEls = brothers.slice(index + 1) as HTMLElement[];\n\n for (let i = 0; i < downEls.length; i++) {\n const ele = downEls[i];\n // 是 fixed 不做处理\n if (ele.style?.position === 'fixed') {\n continue;\n }\n addUpH += ele.clientHeight / 2;\n if (deltaTop <= addUpH) {\n break;\n }\n addUpH += ele.clientHeight / 2;\n swapIndex = i;\n }\n return {\n src: target.id,\n dist: downEls.length && swapIndex > -1 ? downEls[swapIndex].id : target.id,\n };\n};\n\n/**\n * 上移组件位置\n * @param {Array} brothers 处于同一容器下的所有子组件配置\n * @param {number} index 当前组件所处的位置\n * @param {number} deltaTop 偏移量\n * @param {Object} detail 当前选中的组件配置\n */\nexport const up = (deltaTop: number, target: HTMLElement | SVGElement): SortEventData | void => {\n const brothers = Array.from(target.parentNode?.children || []).filter(\n (node) => !node.id.startsWith(GHOST_EL_ID_PREFIX),\n );\n const index = brothers.indexOf(target);\n // 往上移动\n const upEls = brothers.slice(0, index) as HTMLElement[];\n\n let addUpH = target.clientHeight;\n let swapIndex = upEls.length - 1;\n\n for (let i = upEls.length - 1; i >= 0; i--) {\n const ele = upEls[i];\n if (!ele) continue;\n // 是 fixed 不做处理\n if (ele.style.position === 'fixed') continue;\n\n addUpH += ele.clientHeight / 2;\n if (-deltaTop <= addUpH) break;\n addUpH += ele.clientHeight / 2;\n\n swapIndex = i;\n }\n return {\n src: target.id,\n dist: upEls.length && swapIndex > -1 ? upEls[swapIndex].id : target.id,\n };\n};\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-param-reassign */\nimport { EventEmitter } from 'events';\n\nimport { Mode } from './const';\nimport StageCore from './StageCore';\nimport StageDragResize from './StageDragResize';\nimport StageMask from './StageMask';\nimport type { Offset, TargetCalibrateConfig } from './types';\nimport { getMode } from './util';\n\n/**\n * 将选中的节点修正定位后,添加一个操作节点到蒙层上\n */\nexport default class TargetCalibrate extends EventEmitter {\n public parent: HTMLElement;\n public mask: StageMask;\n public dr: StageDragResize;\n public core: StageCore;\n public operationEl: HTMLDivElement;\n\n constructor(config: TargetCalibrateConfig) {\n super();\n\n this.parent = config.parent;\n this.mask = config.mask;\n this.dr = config.dr;\n this.core = config.core;\n\n this.operationEl = globalThis.document.createElement('div');\n this.parent.append(this.operationEl);\n }\n\n public update(el: HTMLElement, prefix: String): HTMLElement {\n const { left, top } = this.getOffset(el);\n const { transform } = getComputedStyle(el);\n this.operationEl.style.cssText = `\n position: absolute;\n transform: ${transform};\n left: ${left}px;\n top: ${top}px;\n width: ${el.clientWidth}px;\n height: ${el.clientHeight}px;\n `;\n\n this.operationEl.id = `${prefix}${el.id}`;\n\n if (typeof this.core.config.updateDragEl === 'function') {\n this.core.config.updateDragEl(this.operationEl, el);\n }\n\n return this.operationEl;\n }\n\n public destroy(): void {\n this.operationEl?.remove();\n }\n\n private getOffset(el: HTMLElement): Offset {\n const { offsetParent } = el;\n\n const left = el.offsetLeft;\n const top = el.offsetTop;\n\n if (offsetParent) {\n const parentOffset = this.getOffset(offsetParent as HTMLElement);\n return {\n left: left + parentOffset.left,\n top: top + parentOffset.top,\n };\n }\n\n // 选中固定定位元素后editor-mask高度被置为视窗大小\n if (this.dr.mode === Mode.FIXED) {\n // 弹窗的情况\n if (getMode(el) === Mode.FIXED) {\n return {\n left,\n top,\n };\n }\n\n return {\n left: left - this.mask.scrollLeft,\n top: top - this.mask.scrollTop,\n };\n }\n\n // 无父元素的固定定位需按滚动值计算\n if (getMode(el) === Mode.FIXED) {\n return {\n left: left + this.mask.scrollLeft,\n top: top + this.mask.scrollTop,\n };\n }\n\n return {\n left,\n top,\n };\n }\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-param-reassign */\nimport { EventEmitter } from 'events';\n\nimport Moveable from 'moveable';\n\nimport { HIGHLIGHT_EL_ID_PREFIX } from './const';\nimport StageCore from './StageCore';\nimport TargetCalibrate from './TargetCalibrate';\nimport type { StageHighlightConfig } from './types';\nexport default class StageHighlight extends EventEmitter {\n public core: StageCore;\n public container: HTMLElement;\n public target?: HTMLElement;\n public moveable?: Moveable;\n public calibrationTarget: TargetCalibrate;\n\n constructor(config: StageHighlightConfig) {\n super();\n\n this.core = config.core;\n this.container = config.container;\n this.calibrationTarget = new TargetCalibrate({\n parent: this.core.mask.content,\n mask: this.core.mask,\n dr: this.core.dr,\n core: this.core,\n });\n }\n\n /**\n * 高亮鼠标悬停的组件\n * @param el 选中组件的Dom节点元素\n */\n public highlight(el: HTMLElement): void {\n if (!el || el === this.target) return;\n this.target = el;\n this.moveable?.destroy();\n\n this.moveable = new Moveable(this.container, {\n target: this.calibrationTarget.update(el, HIGHLIGHT_EL_ID_PREFIX),\n origin: false,\n rootContainer: this.core.container,\n zoom: 1,\n });\n }\n\n /**\n * 清空高亮\n */\n public clearHighlight(): void {\n if (!this.moveable) return;\n this.target = undefined;\n this.moveable.target = null;\n this.moveable.updateTarget();\n }\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n this.moveable?.destroy();\n this.calibrationTarget.destroy();\n }\n}\n","import EventEmitter from 'events';\n\nimport Guides, { GuidesEvents } from '@scena/guides';\n\nimport { GuidesType } from './const';\n\nexport default class Rule extends EventEmitter {\n public hGuides: Guides;\n public vGuides: Guides;\n public horizontalGuidelines: number[] = [];\n public verticalGuidelines: number[] = [];\n\n private container: HTMLDivElement;\n private containerResizeObserver: ResizeObserver;\n\n constructor(container: HTMLDivElement) {\n super();\n\n this.container = container;\n this.hGuides = this.createGuides(GuidesType.HORIZONTAL, this.horizontalGuidelines);\n this.vGuides = this.createGuides(GuidesType.VERTICAL, this.verticalGuidelines);\n\n this.hGuides.on('changeGuides', this.hGuidesChangeGuidesHandler);\n this.vGuides.on('changeGuides', this.vGuidesChangeGuidesHandler);\n\n this.containerResizeObserver = new ResizeObserver(() => {\n this.vGuides.resize();\n this.hGuides.resize();\n });\n\n this.containerResizeObserver.observe(this.container);\n }\n\n /**\n * 是否显示标尺\n * @param show 是否显示\n */\n public showGuides(show = true) {\n this.hGuides.setState({\n showGuides: show,\n });\n\n this.vGuides.setState({\n showGuides: show,\n });\n }\n\n public setGuides([hLines, vLines]: [number[], number[]]) {\n this.horizontalGuidelines = hLines;\n this.verticalGuidelines = vLines;\n\n this.hGuides.setState({\n defaultGuides: hLines,\n });\n\n this.vGuides.setState({\n defaultGuides: vLines,\n });\n\n this.emit('changeGuides', {\n type: GuidesType.HORIZONTAL,\n guides: hLines,\n });\n\n this.emit('changeGuides', {\n type: GuidesType.VERTICAL,\n guides: vLines,\n });\n }\n\n /**\n * 清空所有参考线\n */\n public clearGuides() {\n this.setGuides([[], []]);\n }\n\n /**\n * 是否显示标尺\n * @param show 是否显示\n */\n public showRule(show = true) {\n // 当尺子隐藏时发现大小变化,显示后会变形,所以这里做重新初始化处理\n if (show) {\n this.hGuides.destroy();\n this.hGuides = this.createGuides(GuidesType.HORIZONTAL, this.horizontalGuidelines);\n\n this.vGuides.destroy();\n this.vGuides = this.createGuides(GuidesType.VERTICAL, this.verticalGuidelines);\n } else {\n this.hGuides.setState({\n rulerStyle: {\n visibility: 'hidden',\n },\n });\n\n this.vGuides.setState({\n rulerStyle: {\n visibility: 'hidden',\n },\n });\n }\n }\n\n public scrollRule(scrollTop: number) {\n this.hGuides.scrollGuides(scrollTop);\n this.hGuides.scroll(0);\n\n this.vGuides.scrollGuides(0);\n this.vGuides.scroll(scrollTop);\n }\n\n public destroy(): void {\n this.hGuides.off('changeGuides', this.hGuidesChangeGuidesHandler);\n this.vGuides.off('changeGuides', this.vGuidesChangeGuidesHandler);\n this.containerResizeObserver.disconnect();\n this.removeAllListeners();\n }\n\n private getGuidesStyle = (type: GuidesType) => ({\n position: 'fixed',\n zIndex: 1,\n left: type === GuidesType.HORIZONTAL ? 0 : '-30px',\n top: type === GuidesType.HORIZONTAL ? '-30px' : 0,\n width: type === GuidesType.HORIZONTAL ? '100%' : '30px',\n height: type === GuidesType.HORIZONTAL ? '30px' : '100%',\n });\n\n private createGuides = (type: GuidesType, defaultGuides: number[] = []): Guides =>\n new Guides(this.container, {\n type,\n defaultGuides,\n displayDragPos: true,\n backgroundColor: '#fff',\n lineColor: '#000',\n textColor: '#000',\n style: this.getGuidesStyle(type),\n });\n\n private hGuidesChangeGuidesHandler = (e: GuidesEvents['changeGuides']) => {\n this.horizontalGuidelines = e.guides;\n this.emit('changeGuides', {\n type: GuidesType.HORIZONTAL,\n guides: this.horizontalGuidelines,\n });\n };\n\n private vGuidesChangeGuidesHandler = (e: GuidesEvents['changeGuides']) => {\n this.verticalGuidelines = e.guides;\n this.emit('changeGuides', {\n type: GuidesType.VERTICAL,\n guides: this.verticalGuidelines,\n });\n };\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { throttle } from 'lodash-es';\n\nimport { Mode, MouseButton, ZIndex } from './const';\nimport Rule from './Rule';\nimport type StageCore from './StageCore';\nimport type { StageMaskConfig } from './types';\nimport { createDiv, getScrollParent, isFixedParent } from './util';\n\nconst wrapperClassName = 'editor-mask-wrapper';\nconst throttleTime = 100;\n\nconst hideScrollbar = () => {\n const style = globalThis.document.createElement('style');\n style.innerHTML = `\n .${wrapperClassName}::-webkit-scrollbar { width: 0 !important; display: none }\n `;\n globalThis.document.head.appendChild(style);\n};\n\nconst createContent = (): HTMLDivElement =>\n createDiv({\n className: 'editor-mask',\n cssText: `\n position: absolute;\n top: 0;\n left: 0;\n transform: translate3d(0, 0, 0);\n `,\n });\n\nconst createWrapper = (): HTMLDivElement => {\n const el = createDiv({\n className: wrapperClassName,\n cssText: `\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n overflow: hidden;\n z-index: ${ZIndex.MASK};\n `,\n });\n\n hideScrollbar();\n\n return el;\n};\n\n/**\n * 蒙层\n * @description 用于拦截页面的点击动作,避免点击时触发组件自身动作;在编辑器中点击组件应当是选中组件;\n */\nexport default class StageMask extends Rule {\n public content: HTMLDivElement = createContent();\n public wrapper: HTMLDivElement;\n public core: StageCore;\n public page: HTMLElement | null = null;\n public pageScrollParent: HTMLElement | null = null;\n public scrollTop = 0;\n public scrollLeft = 0;\n public width = 0;\n public height = 0;\n public wrapperHeight = 0;\n public wrapperWidth = 0;\n public maxScrollTop = 0;\n public maxScrollLeft = 0;\n public intersectionObserver: IntersectionObserver | null = null;\n\n private mode: Mode = Mode.ABSOLUTE;\n private pageResizeObserver: ResizeObserver | null = null;\n private wrapperResizeObserver: ResizeObserver | null = null;\n /**\n * 高亮事件处理函数\n * @param event 事件对象\n */\n private highlightHandler = throttle((event: MouseEvent): void => {\n this.emit('highlight', event);\n }, throttleTime);\n\n constructor(config: StageMaskConfig) {\n const wrapper = createWrapper();\n super(wrapper);\n\n this.wrapper = wrapper;\n this.core = config.core;\n\n this.content.addEventListener('mousedown', this.mouseDownHandler);\n this.wrapper.appendChild(this.content);\n this.content.addEventListener('wheel', this.mouseWheelHandler);\n this.content.addEventListener('mousemove', this.highlightHandler);\n this.content.addEventListener('mouseleave', this.mouseLeaveHandler);\n }\n\n public setMode(mode: Mode) {\n this.mode = mode;\n this.scroll();\n if (mode === Mode.FIXED) {\n this.content.style.width = `${this.wrapperWidth}px`;\n this.content.style.height = `${this.wrapperHeight}px`;\n } else {\n this.content.style.width = `${this.width}px`;\n this.content.style.height = `${this.height}px`;\n }\n }\n\n /**\n * 监听页面大小变化\n * @description 同步页面与mask的大小\n * @param page 页面Dom节点\n */\n public observe(page: HTMLElement): void {\n if (!page) return;\n\n this.page = page;\n this.pageScrollParent = getScrollParent(page) || this.core.renderer.contentWindow?.document.documentElement || null;\n this.pageResizeObserver?.disconnect();\n this.wrapperResizeObserver?.disconnect();\n this.intersectionObserver?.disconnect();\n\n if (typeof IntersectionObserver !== 'undefined') {\n this.intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n const { target, intersectionRatio } = entry;\n if (intersectionRatio <= 0) {\n this.scrollIntoView(target);\n }\n this.intersectionObserver?.unobserve(target);\n });\n },\n {\n root: this.pageScrollParent,\n rootMargin: '0px',\n threshold: 1.0,\n },\n );\n }\n\n if (typeof ResizeObserver !== 'undefined') {\n this.pageResizeObserver = new ResizeObserver((entries) => {\n const [entry] = entries;\n const { clientHeight, clientWidth } = entry.target;\n this.setHeight(clientHeight);\n this.setWidth(clientWidth);\n\n this.scroll();\n if (this.core.dr.moveable) {\n this.core.dr.updateMoveable();\n }\n });\n\n this.pageResizeObserver.observe(page);\n\n this.wrapperResizeObserver = new ResizeObserver((entries) => {\n const [entry] = entries;\n const { clientHeight, clientWidth } = entry.target;\n this.wrapperHeight = clientHeight;\n this.wrapperWidth = clientWidth;\n this.setMaxScrollLeft();\n this.setMaxScrollTop();\n });\n this.wrapperResizeObserver.observe(this.wrapper);\n }\n }\n\n /**\n * 挂载Dom节点\n * @param el 将蒙层挂载到该Dom节点上\n */\n public mount(el: HTMLDivElement): void {\n if (!this.content) throw new Error('content 不存在');\n\n el.appendChild(this.wrapper);\n }\n\n public setLayout(el: HTMLElement): void {\n this.setMode(isFixedParent(el) ? Mode.FIXED : Mode.ABSOLUTE);\n }\n\n public scrollIntoView(el: Element): void {\n el.scrollIntoView();\n if (!this.pageScrollParent) return;\n this.scrollLeft = this.pageScrollParent.scrollLeft;\n this.scrollTop = this.pageScrollParent.scrollTop;\n this.scroll();\n }\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n this.content?.remove();\n this.page = null;\n this.pageScrollParent = null;\n this.pageResizeObserver?.disconnect();\n this.wrapperResizeObserver?.disconnect();\n\n this.content.removeEventListener('mouseleave', this.mouseLeaveHandler);\n super.destroy();\n }\n\n private scroll() {\n this.fixScrollValue();\n\n let { scrollLeft, scrollTop } = this;\n\n if (this.pageScrollParent) {\n this.pageScrollParent.scrollTo({\n top: scrollTop,\n left: scrollLeft,\n });\n }\n\n if (this.mode === Mode.FIXED) {\n scrollLeft = 0;\n scrollTop = 0;\n }\n\n this.scrollRule(scrollTop);\n this.scrollTo(scrollLeft, scrollTop);\n }\n\n private scrollTo(scrollLeft: number, scrollTop: number): void {\n this.content.style.transform = `translate3d(${-scrollLeft}px, ${-scrollTop}px, 0)`;\n }\n\n /**\n * 设置蒙层高度\n * @param height 高度\n */\n private setHeight(height: number): void {\n this.height = height;\n this.setMaxScrollTop();\n this.content.style.height = `${height}px`;\n }\n\n /**\n * 设置蒙层宽度\n * @param width 宽度\n */\n private setWidth(width: number): void {\n this.width = width;\n this.setMaxScrollLeft();\n this.content.style.width = `${width}px`;\n }\n\n /**\n * 计算并设置最大滚动宽度\n */\n private setMaxScrollLeft(): void {\n this.maxScrollLeft = Math.max(this.width - this.wrapperWidth, 0);\n }\n\n /**\n * 计算并设置最大滚动高度\n */\n private setMaxScrollTop(): void {\n this.maxScrollTop = Math.max(this.height - this.wrapperHeight, 0);\n }\n\n /**\n * 修复滚动距离\n * 由于滚动容器变化等因素,会导致当前滚动的距离不正确\n */\n private fixScrollValue(): void {\n if (this.scrollTop < 0) this.scrollTop = 0;\n if (this.scrollLeft < 0) this.scrollLeft = 0;\n if (this.maxScrollTop < this.scrollTop) this.scrollTop = this.maxScrollTop;\n if (this.maxScrollLeft < this.scrollLeft) this.scrollLeft = this.maxScrollLeft;\n }\n\n /**\n * 点击事件处理函数\n * @param event 事件对象\n */\n private mouseDownHandler = (event: MouseEvent): void => {\n this.emit('clearHighlight');\n\n event.stopImmediatePropagation();\n event.stopPropagation();\n\n if (event.button !== MouseButton.LEFT && event.button !== MouseButton.RIGHT) return;\n\n // 点击的对象如果是选中框,则不需要再触发选中了,而可能是拖动行为\n if ((event.target as HTMLDivElement).className.indexOf('moveable-control') !== -1) {\n return;\n }\n\n this.content.removeEventListener('mousemove', this.highlightHandler);\n\n this.emit('beforeSelect', event);\n\n // 如果是右键点击,这里的mouseup事件监听没有效果\n globalThis.document.addEventListener('mouseup', this.mouseUpHandler);\n };\n\n private mouseUpHandler = (): void => {\n globalThis.document.removeEventListener('mouseup', this.mouseUpHandler);\n this.content.addEventListener('mousemove', this.highlightHandler);\n this.emit('select');\n };\n\n private mouseWheelHandler = (event: WheelEvent) => {\n this.emit('clearHighlight');\n if (!this.page) throw new Error('page 未初始化');\n\n const { deltaY, deltaX } = event;\n\n if (this.page.clientHeight < this.wrapperHeight && deltaY) return;\n if (this.page.clientWidth < this.wrapperWidth && deltaX) return;\n\n if (this.maxScrollTop > 0) {\n this.scrollTop = this.scrollTop + deltaY;\n }\n\n if (this.maxScrollLeft > 0) {\n this.scrollLeft = this.scrollLeft + deltaX;\n }\n\n this.scroll();\n\n this.emit('scroll', event);\n };\n\n private mouseLeaveHandler = () => {\n setTimeout(() => this.emit('clearHighlight'), throttleTime);\n };\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport StageCore from './StageCore';\nimport type { Runtime, RuntimeWindow, StageRenderConfig } from './types';\nimport { getHost, isSameDomain } from './util';\n\nexport default class StageRender extends EventEmitter {\n /** 组件的js、css执行的环境,直接渲染为当前window,iframe渲染则为iframe.contentWindow */\n public contentWindow: RuntimeWindow | null = null;\n\n public runtime: Runtime | null = null;\n\n public iframe?: HTMLIFrameElement;\n\n public runtimeUrl?: string;\n\n public core: StageCore;\n\n private render?: (renderer: StageCore) => Promise<HTMLElement> | HTMLElement;\n\n constructor({ core }: StageRenderConfig) {\n super();\n\n this.core = core;\n this.runtimeUrl = core.config.runtimeUrl || '';\n this.render = core.config.render;\n\n this.iframe = globalThis.document.createElement('iframe');\n // 同源,直接加载\n this.iframe.src = isSameDomain(this.runtimeUrl) ? this.runtimeUrl : '';\n this.iframe.style.cssText = `\n border: 0;\n width: 100%;\n height: 100%;\n `;\n\n this.iframe.addEventListener('load', this.loadHandler);\n }\n\n public getMagicApi = () => ({\n onPageElUpdate: (el: HTMLElement) => this.emit('page-el-update', el),\n onRuntimeReady: (runtime: Runtime) => {\n this.runtime = runtime;\n // @ts-ignore\n globalThis.runtime = runtime;\n this.emit('runtime-ready', runtime);\n },\n });\n\n /**\n * 挂载Dom节点\n * @param el 将页面挂载到该Dom节点上\n */\n public async mount(el: HTMLDivElement) {\n if (this.iframe) {\n if (!isSameDomain(this.runtimeUrl) && this.runtimeUrl) {\n // 不同域,使用srcdoc发起异步请求,需要目标地址支持跨域\n let html = await fetch(this.runtimeUrl).then((res) => res.text());\n // 使用base, 解决相对路径或绝对路径的问题\n const base = `${location.protocol}//${getHost(this.runtimeUrl)}`;\n html = html.replace('<head>', `<head>\\n<base href=\"${base}\">`);\n this.iframe.srcdoc = html;\n }\n\n el.appendChild<HTMLIFrameElement>(this.iframe);\n } else {\n throw Error('mount 失败');\n }\n }\n\n public getRuntime = (): Promise<Runtime> => {\n if (this.runtime) return Promise.resolve(this.runtime);\n return new Promise((resolve) => {\n const listener = (runtime: Runtime) => {\n this.off('runtime-ready', listener);\n resolve(runtime);\n };\n this.on('runtime-ready', listener);\n });\n };\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n this.iframe?.removeEventListener('load', this.loadHandler);\n this.contentWindow = null;\n this.iframe?.remove();\n this.iframe = undefined;\n this.removeAllListeners();\n }\n\n private loadHandler = async () => {\n this.contentWindow = this.iframe?.contentWindow as RuntimeWindow;\n\n this.contentWindow.magic = this.getMagicApi();\n\n if (this.render) {\n const el = await this.render(this.core);\n if (el) {\n this.iframe?.contentDocument?.body?.appendChild(el);\n }\n }\n\n this.emit('onload');\n\n this.contentWindow.postMessage(\n {\n tmagicRuntimeReady: true,\n },\n '*',\n );\n };\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport type { Id } from '@tmagic/schema';\n\nimport { DEFAULT_ZOOM, GHOST_EL_ID_PREFIX } from './const';\nimport StageDragResize from './StageDragResize';\nimport StageHighlight from './StageHighlight';\nimport StageMask from './StageMask';\nimport StageRender from './StageRender';\nimport {\n CanSelect,\n GuidesEventData,\n RemoveData,\n Runtime,\n SortEventData,\n StageCoreConfig,\n UpdateData,\n UpdateEventData,\n} from './types';\nimport { addSelectedClassName, removeSelectedClassName } from './util';\n\nexport default class StageCore extends EventEmitter {\n public selectedDom: Element | undefined;\n public highlightedDom: Element | undefined;\n\n public renderer: StageRender;\n public mask: StageMask;\n public dr: StageDragResize;\n public highlightLayer: StageHighlight;\n public config: StageCoreConfig;\n public zoom = DEFAULT_ZOOM;\n public container?: HTMLDivElement;\n private canSelect: CanSelect;\n\n constructor(config: StageCoreConfig) {\n super();\n\n this.config = config;\n\n this.setZoom(config.zoom);\n this.canSelect = config.canSelect || ((el: HTMLElement) => !!el.id);\n\n this.renderer = new StageRender({ core: this });\n this.mask = new StageMask({ core: this });\n this.dr = new StageDragResize({ core: this, container: this.mask.content });\n this.highlightLayer = new StageHighlight({ core: this, container: this.mask.wrapper });\n\n this.renderer.on('runtime-ready', (runtime: Runtime) => {\n this.emit('runtime-ready', runtime);\n });\n this.renderer.on('page-el-update', (el: HTMLElement) => {\n this.mask?.observe(el);\n });\n\n this.mask\n .on('beforeSelect', (event: MouseEvent) => {\n this.setElementFromPoint(event);\n })\n .on('select', () => {\n this.emit('select', this.selectedDom);\n })\n .on('changeGuides', (data: GuidesEventData) => {\n this.dr.setGuidelines(data.type, data.guides);\n this.emit('changeGuides', data);\n })\n .on('highlight', async (event: MouseEvent) => {\n await this.setElementFromPoint(event);\n if (this.highlightedDom === this.selectedDom) {\n this.highlightLayer.clearHighlight();\n return;\n }\n this.highlightLayer.highlight(this.highlightedDom as HTMLElement);\n this.emit('highlight', this.highlightedDom);\n })\n .on('clearHighlight', async () => {\n this.highlightLayer.clearHighlight();\n });\n\n // 要先触发select,在触发update\n this.dr\n .on('update', (data: UpdateEventData) => {\n setTimeout(() => this.emit('update', data));\n })\n .on('sort', (data: UpdateEventData) => {\n setTimeout(() => this.emit('sort', data));\n });\n }\n\n public async setElementFromPoint(event: MouseEvent) {\n const { renderer, zoom } = this;\n\n const doc = renderer.contentWindow?.document;\n let x = event.clientX;\n let y = event.clientY;\n\n if (renderer.iframe) {\n const rect = renderer.iframe.getClientRects()[0];\n if (rect) {\n x = x - rect.left;\n y = y - rect.top;\n }\n }\n\n const els = doc?.elementsFromPoint(x / zoom, y / zoom) as HTMLElement[];\n\n let stopped = false;\n const stop = () => (stopped = true);\n for (const el of els) {\n if (!el.id.startsWith(GHOST_EL_ID_PREFIX) && (await this.canSelect(el, event, stop))) {\n if (stopped) break;\n if (event.type === 'mousemove') {\n this.highlight(el);\n break;\n }\n this.select(el, event);\n break;\n }\n }\n }\n\n /**\n * 选中组件\n * @param idOrEl 组件Dom节点的id属性,或者Dom节点\n */\n public async select(idOrEl: Id | HTMLElement, event?: MouseEvent): Promise<void> {\n const el = await this.getTargetElement(idOrEl);\n\n if (el === this.selectedDom) return;\n\n const runtime = await this.renderer.getRuntime();\n\n await runtime?.select?.(el.id);\n\n if (runtime?.beforeSelect) {\n await runtime.beforeSelect(el);\n }\n\n this.mask.setLayout(el);\n this.dr.select(el, event);\n\n if (this.config.autoScrollIntoView || el.dataset.autoScrollIntoView) {\n this.mask.intersectionObserver?.observe(el);\n }\n\n this.selectedDom = el;\n\n if (this.renderer.contentWindow) {\n removeSelectedClassName(this.renderer.contentWindow.document);\n if (this.selectedDom) {\n addSelectedClassName(this.selectedDom, this.renderer.contentWindow.document);\n }\n }\n }\n\n /**\n * 更新选中的节点\n * @param data 更新的数据\n */\n public update(data: UpdateData): Promise<void> {\n const { config } = data;\n\n return this.renderer?.getRuntime().then((runtime) => {\n runtime?.update?.(data);\n // 更新配置后,需要等组件渲染更新\n setTimeout(() => {\n const el = this.renderer.contentWindow?.document.getElementById(`${config.id}`);\n // 有可能dom已经重新渲染,不再是原来的dom了,所以这里判断id,而不是判断el === this.selectedDom\n if (el && el.id === this.selectedDom?.id) {\n this.selectedDom = el;\n // 更新了组件的布局,需要重新设置mask是否可以滚动\n this.mask.setLayout(el);\n this.dr.updateMoveable(el);\n }\n }, 0);\n });\n }\n\n /**\n * 高亮选中组件\n * @param el 页面Dom节点\n */\n public async highlight(idOrEl: HTMLElement | Id): Promise<void> {\n let el;\n try {\n el = await this.getTargetElement(idOrEl);\n } catch (error) {\n this.highlightLayer.clearHighlight();\n return;\n }\n if (el === this.highlightedDom) return;\n this.highlightLayer.highlight(el);\n this.highlightedDom = el;\n }\n\n public sortNode(data: SortEventData): Promise<void> {\n return this.renderer?.getRuntime().then((runtime) => runtime?.sortNode?.(data));\n }\n\n public add(data: UpdateData): Promise<void> {\n return this.renderer?.getRuntime().then((runtime) => runtime?.add?.(data));\n }\n\n public remove(data: RemoveData): Promise<void> {\n return this.renderer?.getRuntime().then((runtime) => runtime?.remove?.(data));\n }\n\n public setZoom(zoom: number = DEFAULT_ZOOM): void {\n this.zoom = zoom;\n }\n\n /**\n * 挂载Dom节点\n * @param el 将stage挂载到该Dom节点上\n */\n public async mount(el: HTMLDivElement) {\n this.container = el;\n const { mask, renderer } = this;\n\n await renderer.mount(el);\n mask.mount(el);\n\n this.emit('mounted');\n }\n\n /**\n * 清空所有参考线\n */\n public clearGuides() {\n this.mask.clearGuides();\n this.dr.clearGuides();\n }\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n const { mask, renderer, dr, highlightLayer } = this;\n\n renderer.destroy();\n mask.destroy();\n dr.destroy();\n highlightLayer.destroy();\n\n this.removeAllListeners();\n\n this.container = undefined;\n }\n\n private async getTargetElement(idOrEl: Id | HTMLElement): Promise<HTMLElement> {\n if (typeof idOrEl === 'string' || typeof idOrEl === 'number') {\n const el = this.renderer.contentWindow?.document.getElementById(`${idOrEl}`);\n if (!el) throw new Error(`不存在ID为${idOrEl}的元素`);\n return el;\n }\n return idOrEl;\n }\n}\n"],"names":["EventEmitter"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmagic-stage.umd.js","sources":["../src/const.ts","../src/util.ts","../src/StageDragResize.ts","../src/TargetCalibrate.ts","../src/StageHighlight.ts","../src/Rule.ts","../src/StageMask.ts","../src/StageRender.ts","../src/StageCore.ts"],"sourcesContent":["/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** 流式布局下拖动时需要clone一个镜像节点,镜像节点的id前缀 */\nexport const GHOST_EL_ID_PREFIX = 'ghost_el_';\n\n/** 拖动的时候需要在蒙层中创建一个占位节点,该节点的id前缀 */\nexport const DRAG_EL_ID_PREFIX = 'drag_el_';\n\n/** 高亮时需要在蒙层中创建一个占位节点,该节点的id前缀 */\nexport const HIGHLIGHT_EL_ID_PREFIX = 'highlight_el_';\n\n/** 默认放到缩小倍数 */\nexport const DEFAULT_ZOOM = 1;\n\n/** 参考线类型 */\nexport enum GuidesType {\n /** 水平 */\n HORIZONTAL = 'horizontal',\n /** 垂直 */\n VERTICAL = 'vertical',\n}\n\n/** css z-index */\nexport enum ZIndex {\n /** 蒙层,用于监听用户操作,需要置于顶层 */\n MASK = '99999',\n /** 选中的节点 */\n SELECTED_EL = '666',\n GHOST_EL = '700',\n DRAG_EL = '9',\n}\n\n/** 鼠标按键 */\nexport enum MouseButton {\n /** 左键 */\n LEFT = 0,\n /** z中健 */\n MIDDLE = 1,\n /** 右键 */\n RIGHT = 2,\n}\n\n/** 布局方式 */\nexport enum Mode {\n /** 绝对定位布局 */\n ABSOLUTE = 'absolute',\n /** 固定定位布局 */\n FIXED = 'fixed',\n /** 流式布局 */\n SORTABLE = 'sortable',\n}\n\n/** 选中节点的class name */\nexport const SELECTED_CLASS = 'tmagic-stage-selected-area';\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Mode, SELECTED_CLASS } from './const';\nimport type { Offset } from './types';\n\nconst getParents = (el: Element, relative: Element) => {\n let cur: Element | null = el.parentElement;\n const parents: Element[] = [];\n while (cur && cur !== relative) {\n parents.push(cur);\n cur = cur.parentElement;\n }\n return parents;\n};\n\nexport const getOffset = (el: HTMLElement): Offset => {\n const { offsetParent } = el;\n\n const left = el.offsetLeft;\n const top = el.offsetTop;\n\n if (offsetParent) {\n const parentOffset = getOffset(offsetParent as HTMLElement);\n return {\n left: left + parentOffset.left,\n top: top + parentOffset.top,\n };\n }\n\n return {\n left,\n top,\n };\n};\n\nexport const getAbsolutePosition = (el: HTMLElement, { top, left }: Offset) => {\n const { offsetParent } = el;\n\n if (offsetParent) {\n const parentOffset = getOffset(offsetParent as HTMLElement);\n return {\n left: left - parentOffset.left,\n top: top - parentOffset.top,\n };\n }\n\n return { left, top };\n};\n\nexport const getHost = (targetUrl: string) => targetUrl.match(/\\/\\/([^/]+)/)?.[1];\n\nexport const isSameDomain = (targetUrl = '', source = globalThis.location.host) => {\n const isHttpUrl = /^(http[s]?:)?\\/\\//.test(targetUrl);\n\n if (!isHttpUrl) return true;\n\n return getHost(targetUrl) === source;\n};\n\nexport const isAbsolute = (style: CSSStyleDeclaration): boolean => style.position === 'absolute';\n\nexport const isRelative = (style: CSSStyleDeclaration): boolean => style.position === 'relative';\n\nexport const isStatic = (style: CSSStyleDeclaration): boolean => style.position === 'static';\n\nexport const isFixed = (style: CSSStyleDeclaration): boolean => style.position === 'fixed';\n\nexport const isFixedParent = (el: HTMLElement) => {\n let fixed = false;\n let dom = el;\n while (dom) {\n fixed = isFixed(getComputedStyle(dom));\n if (fixed) {\n break;\n }\n const { parentElement } = dom;\n if (!parentElement || parentElement.tagName === 'BODY') {\n break;\n }\n dom = parentElement;\n }\n return fixed;\n};\n\nexport const getMode = (el: HTMLElement): Mode => {\n if (isFixedParent(el)) return Mode.FIXED;\n const style = getComputedStyle(el);\n if (isStatic(style) || isRelative(style)) return Mode.SORTABLE;\n return Mode.ABSOLUTE;\n};\n\nexport const getScrollParent = (element: HTMLElement, includeHidden = false): HTMLElement | null => {\n let style = getComputedStyle(element);\n const overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/;\n\n if (isFixed(style)) return null;\n\n for (let parent = element; parent.parentElement; ) {\n parent = parent.parentElement;\n style = getComputedStyle(parent);\n\n if (isAbsolute(style) && isStatic(style)) continue;\n\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) return parent;\n }\n\n return null;\n};\n\nexport const createDiv = ({ className, cssText }: { className: string; cssText: string }) => {\n const el = globalThis.document.createElement('div');\n el.className = className;\n el.style.cssText = cssText;\n return el;\n};\n\nexport const removeSelectedClassName = (doc: Document) => {\n const oldEl = doc.querySelector(`.${SELECTED_CLASS}`);\n\n if (oldEl) {\n oldEl.classList.remove(SELECTED_CLASS);\n (oldEl.parentNode as HTMLDivElement)?.classList.remove(`${SELECTED_CLASS}-parent`);\n doc.querySelectorAll(`.${SELECTED_CLASS}-parents`).forEach((item) => {\n item.classList.remove(`${SELECTED_CLASS}-parents`);\n });\n }\n};\n\nexport const addSelectedClassName = (el: Element, doc: Document) => {\n el.classList.add(SELECTED_CLASS);\n (el.parentNode as Element)?.classList.add(`${SELECTED_CLASS}-parent`);\n getParents(el, doc.body).forEach((item) => {\n item.classList.add(`${SELECTED_CLASS}-parents`);\n });\n};\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-param-reassign */\nimport { EventEmitter } from 'events';\n\nimport type { MoveableOptions } from 'moveable';\nimport Moveable from 'moveable';\nimport MoveableHelper from 'moveable-helper';\n\nimport { DRAG_EL_ID_PREFIX, GHOST_EL_ID_PREFIX, GuidesType, Mode, ZIndex } from './const';\nimport StageCore from './StageCore';\nimport type { SortEventData, StageDragResizeConfig } from './types';\nimport { getAbsolutePosition, getMode, getOffset } from './util';\n\n/** 拖动状态 */\nenum ActionStatus {\n /** 开始拖动 */\n START = 'start',\n /** 拖动中 */\n ING = 'ing',\n /** 拖动结束 */\n END = 'end',\n}\n\n/**\n * 选中框\n */\nexport default class StageDragResize extends EventEmitter {\n public core: StageCore;\n /** 画布容器 */\n public container: HTMLElement;\n /** 目标节点 */\n public target?: HTMLElement;\n /** 目标节点在蒙层中的占位节点 */\n public dragEl: HTMLDivElement;\n /** Moveable拖拽类实例 */\n public moveable?: Moveable;\n /** 水平参考线 */\n public horizontalGuidelines: number[] = [];\n /** 垂直参考线 */\n public verticalGuidelines: number[] = [];\n /** 对齐元素集合 */\n public elementGuidelines: HTMLElement[] = [];\n /** 布局方式:流式布局、绝对定位、固定定位 */\n public mode: Mode = Mode.ABSOLUTE;\n\n private moveableOptions: MoveableOptions = {};\n /** 拖动状态 */\n private dragStatus: ActionStatus = ActionStatus.END;\n /** 流式布局下,目标节点的镜像节点 */\n private ghostEl: HTMLElement | undefined;\n private moveableHelper?: MoveableHelper;\n\n constructor(config: StageDragResizeConfig) {\n super();\n\n this.core = config.core;\n this.container = config.container;\n\n this.dragEl = globalThis.document.createElement('div');\n this.container.append(this.dragEl);\n }\n\n /**\n * 将选中框渲染并覆盖到选中的组件Dom节点上方\n * 当选中的节点是不是absolute时,会创建一个新的节点出来作为拖拽目标\n * @param el 选中组件的Dom节点元素\n * @param event 鼠标事件\n */\n public select(el: HTMLElement, event?: MouseEvent): void {\n const oldTarget = this.target;\n this.target = el;\n\n // 从不能拖动到能拖动的节点之间切换,要重新创建moveable,不然dragStart不生效\n if (!this.moveable || this.target !== oldTarget) {\n this.init(el);\n this.moveableHelper = MoveableHelper.create({\n useBeforeRender: true,\n useRender: false,\n createAuto: true,\n });\n\n this.initMoveable();\n } else {\n this.updateMoveable();\n }\n\n if (event) {\n this.moveable?.dragStart(event);\n }\n }\n\n /**\n * 初始化选中框并渲染出来\n */\n public updateMoveable(el = this.target): void {\n if (!this.moveable) throw new Error('未初始化moveable');\n if (!el) throw new Error('未选中任何节点');\n\n this.target = el;\n\n this.init(el);\n\n Object.entries(this.moveableOptions).forEach(([key, value]) => {\n (this.moveable as any)[key] = value;\n });\n this.moveable.updateTarget();\n }\n\n public setGuidelines(type: GuidesType, guidelines: number[]): void {\n if (type === GuidesType.HORIZONTAL) {\n this.horizontalGuidelines = guidelines;\n this.moveableOptions.horizontalGuidelines = guidelines;\n } else if (type === GuidesType.VERTICAL) {\n this.verticalGuidelines = guidelines;\n this.moveableOptions.verticalGuidelines = guidelines;\n }\n\n if (this.moveable) {\n this.updateMoveable();\n }\n }\n\n public clearGuides() {\n this.horizontalGuidelines = [];\n this.verticalGuidelines = [];\n this.moveableOptions.horizontalGuidelines = [];\n this.moveableOptions.verticalGuidelines = [];\n this.updateMoveable();\n }\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n this.moveable?.destroy();\n this.destroyGhostEl();\n this.destroyDragEl();\n this.dragStatus = ActionStatus.END;\n this.removeAllListeners();\n }\n\n private init(el: HTMLElement): void {\n // 如果有滚动条会导致resize时获取到width,height不准确\n if (/(auto|scroll)/.test(el.style.overflow)) {\n el.style.overflow = 'hidden';\n }\n this.mode = getMode(el);\n\n this.destroyGhostEl();\n\n this.updateDragEl(el);\n\n this.moveableOptions = this.getOptions({\n target: this.dragEl,\n });\n }\n\n private setElementGuidelines(nodes: HTMLElement[]) {\n this.elementGuidelines.forEach((node) => {\n node.remove();\n });\n this.elementGuidelines = [];\n\n if (this.mode === Mode.ABSOLUTE) {\n const frame = document.createDocumentFragment();\n\n for (const node of nodes) {\n const { width, height } = node.getBoundingClientRect();\n if (node === this.target) continue;\n const { left, top } = getOffset(node as HTMLElement);\n const elementGuideline = document.createElement('div');\n elementGuideline.style.cssText = `position: absolute;width: ${width}px;height: ${height}px;top: ${top}px;left: ${left}px`;\n this.elementGuidelines.push(elementGuideline);\n frame.append(elementGuideline);\n }\n\n this.container.append(frame);\n }\n }\n\n private initMoveable() {\n this.moveable?.destroy();\n\n this.moveable = new Moveable(this.container, {\n ...this.moveableOptions,\n });\n\n this.bindResizeEvent();\n this.bindDragEvent();\n this.bindRotateEvent();\n this.bindScaleEvent();\n }\n\n private bindResizeEvent(): void {\n if (!this.moveable) throw new Error('moveable 未初始化');\n\n const frame = {\n left: 0,\n top: 0,\n };\n\n this.moveable\n .on('resizeStart', (e) => {\n if (!this.target) return;\n\n this.dragStatus = ActionStatus.START;\n this.moveableHelper?.onResizeStart(e);\n\n frame.top = this.target.offsetTop;\n frame.left = this.target.offsetLeft;\n })\n .on('resize', (e) => {\n const { width, height, drag } = e;\n if (!this.moveable || !this.target || !this.dragEl) return;\n\n const { beforeTranslate } = drag;\n this.dragStatus = ActionStatus.ING;\n\n this.moveableHelper?.onResize(e);\n\n // 流式布局\n if (this.mode === Mode.SORTABLE) {\n this.target.style.top = '0px';\n } else {\n this.target.style.left = `${frame.left + beforeTranslate[0]}px`;\n this.target.style.top = `${frame.top + beforeTranslate[1]}px`;\n }\n\n this.target.style.width = `${width}px`;\n this.target.style.height = `${height}px`;\n })\n .on('resizeEnd', () => {\n this.dragStatus = ActionStatus.END;\n this.update(true);\n });\n }\n\n private bindDragEvent(): void {\n if (!this.moveable) throw new Error('moveable 未初始化');\n\n const frame = {\n left: 0,\n top: 0,\n };\n\n this.moveable\n .on('dragStart', (e) => {\n if (!this.target) throw new Error('未选中组件');\n\n this.dragStatus = ActionStatus.START;\n\n this.moveableHelper?.onDragStart(e);\n\n if (this.mode === Mode.SORTABLE) {\n this.ghostEl = this.generateGhostEl(this.target);\n }\n\n frame.top = this.target.offsetTop;\n frame.left = this.target.offsetLeft;\n })\n .on('drag', (e) => {\n if (!this.target || !this.dragEl) return;\n\n this.dragStatus = ActionStatus.ING;\n\n // 流式布局\n if (this.ghostEl) {\n this.ghostEl.style.top = `${frame.top + e.beforeTranslate[1]}px`;\n return;\n }\n\n this.moveableHelper?.onDrag(e);\n\n this.target.style.left = `${frame.left + e.beforeTranslate[0]}px`;\n this.target.style.top = `${frame.top + e.beforeTranslate[1]}px`;\n })\n .on('dragEnd', () => {\n // 点击不拖动时会触发dragStart和dragEnd,但是不会有drag事件\n if (this.dragStatus === ActionStatus.ING) {\n switch (this.mode) {\n case Mode.SORTABLE:\n this.sort();\n break;\n default:\n this.update();\n }\n }\n\n this.dragStatus = ActionStatus.END;\n this.destroyGhostEl();\n });\n }\n\n private bindRotateEvent(): void {\n if (!this.moveable) throw new Error('moveable 未初始化');\n\n this.moveable\n .on('rotateStart', (e) => {\n this.dragStatus = ActionStatus.START;\n this.moveableHelper?.onRotateStart(e);\n })\n .on('rotate', (e) => {\n if (!this.target || !this.dragEl) return;\n this.dragStatus = ActionStatus.ING;\n this.moveableHelper?.onRotate(e);\n const frame = this.moveableHelper?.getFrame(e.target);\n this.target.style.transform = frame?.toCSSObject().transform || '';\n })\n .on('rotateEnd', (e) => {\n this.dragStatus = ActionStatus.END;\n const frame = this.moveableHelper?.getFrame(e.target);\n this.emit('update', {\n el: this.target,\n style: {\n transform: frame?.get('transform'),\n },\n });\n });\n }\n\n private bindScaleEvent(): void {\n if (!this.moveable) throw new Error('moveable 未初始化');\n\n this.moveable\n .on('scaleStart', (e) => {\n this.dragStatus = ActionStatus.START;\n this.moveableHelper?.onScaleStart(e);\n })\n .on('scale', (e) => {\n if (!this.target || !this.dragEl) return;\n this.dragStatus = ActionStatus.ING;\n this.moveableHelper?.onScale(e);\n const frame = this.moveableHelper?.getFrame(e.target);\n this.target.style.transform = frame?.toCSSObject().transform || '';\n })\n .on('scaleEnd', (e) => {\n this.dragStatus = ActionStatus.END;\n const frame = this.moveableHelper?.getFrame(e.target);\n this.emit('update', {\n el: this.target,\n style: {\n transform: frame?.get('transform'),\n },\n });\n });\n }\n\n private sort(): void {\n if (!this.target || !this.ghostEl) throw new Error('未知错误');\n const { top } = this.ghostEl.getBoundingClientRect();\n const { top: oriTop } = this.target.getBoundingClientRect();\n const deltaTop = top - oriTop;\n if (Math.abs(deltaTop) >= this.target.clientHeight / 2) {\n if (deltaTop > 0) {\n this.emit('sort', down(deltaTop, this.target));\n } else {\n this.emit('sort', up(deltaTop, this.target));\n }\n } else {\n this.emit('sort', {\n src: this.target.id,\n dist: this.target.id,\n });\n }\n }\n\n private update(isResize = false): void {\n if (!this.target) return;\n\n const offset =\n this.mode === Mode.SORTABLE ? { left: 0, top: 0 } : { left: this.target.offsetLeft, top: this.target.offsetTop };\n\n const left = this.calcValueByFontsize(offset.left);\n const top = this.calcValueByFontsize(offset.top);\n const width = this.calcValueByFontsize(this.target.clientWidth);\n const height = this.calcValueByFontsize(this.target.clientHeight);\n\n this.emit('update', {\n el: this.target,\n style: isResize ? { left, top, width, height } : { left, top },\n });\n }\n\n private generateGhostEl(el: HTMLElement): HTMLElement {\n if (this.ghostEl) {\n this.destroyGhostEl();\n }\n\n const ghostEl = el.cloneNode(true) as HTMLElement;\n const { top, left } = getAbsolutePosition(el, getOffset(el));\n ghostEl.id = `${GHOST_EL_ID_PREFIX}${el.id}`;\n ghostEl.style.zIndex = ZIndex.GHOST_EL;\n ghostEl.style.opacity = '.5';\n ghostEl.style.position = 'absolute';\n ghostEl.style.left = `${left}px`;\n ghostEl.style.top = `${top}px`;\n el.after(ghostEl);\n return ghostEl;\n }\n\n private destroyGhostEl(): void {\n this.ghostEl?.remove();\n this.ghostEl = undefined;\n }\n\n private updateDragEl(el: HTMLElement) {\n const offset = getOffset(el);\n const { transform } = getComputedStyle(el);\n\n this.dragEl.style.cssText = `\n position: absolute;\n transform: ${transform};\n left: ${offset.left}px;\n top: ${offset.top}px;\n width: ${el.clientWidth}px;\n height: ${el.clientHeight}px;\n z-index: ${ZIndex.DRAG_EL};\n `;\n\n this.dragEl.id = `${DRAG_EL_ID_PREFIX}${el.id}`;\n\n if (typeof this.core.config.updateDragEl === 'function') {\n this.core.config.updateDragEl(this.dragEl, el);\n }\n }\n\n private destroyDragEl(): void {\n this.dragEl?.remove();\n }\n\n private getOptions(options: MoveableOptions = {}): MoveableOptions {\n if (!this.target) return {};\n\n const isAbsolute = this.mode === Mode.ABSOLUTE;\n const isFixed = this.mode === Mode.FIXED;\n\n let { moveableOptions = {} } = this.core.config;\n\n if (typeof moveableOptions === 'function') {\n moveableOptions = moveableOptions(this.core);\n }\n\n const elementGuidelines: any = moveableOptions.elementGuidelines || this.target.parentElement?.children || [];\n\n this.setElementGuidelines(elementGuidelines);\n\n if (moveableOptions.elementGuidelines) {\n delete moveableOptions.elementGuidelines;\n }\n\n return {\n origin: false,\n rootContainer: this.core.container,\n zoom: 1,\n dragArea: false,\n draggable: true,\n resizable: true,\n scalable: false,\n rotatable: false,\n snappable: isAbsolute || isFixed,\n snapGap: isAbsolute || isFixed,\n snapThreshold: 5,\n snapDigit: 0,\n throttleDrag: 0,\n isDisplaySnapDigit: isAbsolute,\n snapDirections: {\n top: isAbsolute,\n right: isAbsolute,\n bottom: isAbsolute,\n left: isAbsolute,\n center: isAbsolute,\n middle: isAbsolute,\n },\n elementSnapDirections: {\n top: isAbsolute,\n right: isAbsolute,\n bottom: isAbsolute,\n left: isAbsolute,\n },\n isDisplayInnerSnapDigit: true,\n horizontalGuidelines: this.horizontalGuidelines,\n verticalGuidelines: this.verticalGuidelines,\n elementGuidelines: this.elementGuidelines,\n\n bounds: {\n top: 0,\n // 设置0的话无法移动到left为0,所以只能设置为-1\n left: -1,\n right: this.container.clientWidth,\n bottom: this.container.clientHeight,\n ...(moveableOptions.bounds || {}),\n },\n ...options,\n ...moveableOptions,\n };\n }\n\n private calcValueByFontsize(value: number) {\n const { contentWindow } = this.core.renderer;\n const fontSize = contentWindow?.document.documentElement.style.fontSize;\n\n if (fontSize) {\n const times = globalThis.parseFloat(fontSize) / 100;\n return (value / times).toFixed(2);\n }\n\n return value;\n }\n}\n\n/**\n * 下移组件位置\n * @param {number} deltaTop 偏移量\n * @param {Object} detail 当前选中的组件配置\n */\nexport const down = (deltaTop: number, target: HTMLElement | SVGElement): SortEventData | void => {\n let swapIndex = 0;\n let addUpH = target.clientHeight;\n const brothers = Array.from(target.parentNode?.children || []).filter(\n (node) => !node.id.startsWith(GHOST_EL_ID_PREFIX),\n );\n const index = brothers.indexOf(target);\n // 往下移动\n const downEls = brothers.slice(index + 1) as HTMLElement[];\n\n for (let i = 0; i < downEls.length; i++) {\n const ele = downEls[i];\n // 是 fixed 不做处理\n if (ele.style?.position === 'fixed') {\n continue;\n }\n addUpH += ele.clientHeight / 2;\n if (deltaTop <= addUpH) {\n break;\n }\n addUpH += ele.clientHeight / 2;\n swapIndex = i;\n }\n return {\n src: target.id,\n dist: downEls.length && swapIndex > -1 ? downEls[swapIndex].id : target.id,\n };\n};\n\n/**\n * 上移组件位置\n * @param {Array} brothers 处于同一容器下的所有子组件配置\n * @param {number} index 当前组件所处的位置\n * @param {number} deltaTop 偏移量\n * @param {Object} detail 当前选中的组件配置\n */\nexport const up = (deltaTop: number, target: HTMLElement | SVGElement): SortEventData | void => {\n const brothers = Array.from(target.parentNode?.children || []).filter(\n (node) => !node.id.startsWith(GHOST_EL_ID_PREFIX),\n );\n const index = brothers.indexOf(target);\n // 往上移动\n const upEls = brothers.slice(0, index) as HTMLElement[];\n\n let addUpH = target.clientHeight;\n let swapIndex = upEls.length - 1;\n\n for (let i = upEls.length - 1; i >= 0; i--) {\n const ele = upEls[i];\n if (!ele) continue;\n // 是 fixed 不做处理\n if (ele.style.position === 'fixed') continue;\n\n addUpH += ele.clientHeight / 2;\n if (-deltaTop <= addUpH) break;\n addUpH += ele.clientHeight / 2;\n\n swapIndex = i;\n }\n return {\n src: target.id,\n dist: upEls.length && swapIndex > -1 ? upEls[swapIndex].id : target.id,\n };\n};\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-param-reassign */\nimport { EventEmitter } from 'events';\n\nimport { Mode } from './const';\nimport StageCore from './StageCore';\nimport StageDragResize from './StageDragResize';\nimport StageMask from './StageMask';\nimport type { Offset, TargetCalibrateConfig } from './types';\nimport { getMode } from './util';\n\n/**\n * 将选中的节点修正定位后,添加一个操作节点到蒙层上\n */\nexport default class TargetCalibrate extends EventEmitter {\n public parent: HTMLElement;\n public mask: StageMask;\n public dr: StageDragResize;\n public core: StageCore;\n public operationEl: HTMLDivElement;\n\n constructor(config: TargetCalibrateConfig) {\n super();\n\n this.parent = config.parent;\n this.mask = config.mask;\n this.dr = config.dr;\n this.core = config.core;\n\n this.operationEl = globalThis.document.createElement('div');\n this.parent.append(this.operationEl);\n }\n\n public update(el: HTMLElement, prefix: String): HTMLElement {\n const { left, top } = this.getOffset(el);\n const { transform } = getComputedStyle(el);\n this.operationEl.style.cssText = `\n position: absolute;\n transform: ${transform};\n left: ${left}px;\n top: ${top}px;\n width: ${el.clientWidth}px;\n height: ${el.clientHeight}px;\n `;\n\n this.operationEl.id = `${prefix}${el.id}`;\n\n if (typeof this.core.config.updateDragEl === 'function') {\n this.core.config.updateDragEl(this.operationEl, el);\n }\n\n return this.operationEl;\n }\n\n public destroy(): void {\n this.operationEl?.remove();\n }\n\n private getOffset(el: HTMLElement): Offset {\n const { offsetParent } = el;\n\n const left = el.offsetLeft;\n const top = el.offsetTop;\n\n if (offsetParent) {\n const parentOffset = this.getOffset(offsetParent as HTMLElement);\n return {\n left: left + parentOffset.left,\n top: top + parentOffset.top,\n };\n }\n\n // 选中固定定位元素后editor-mask高度被置为视窗大小\n if (this.dr.mode === Mode.FIXED) {\n // 弹窗的情况\n if (getMode(el) === Mode.FIXED) {\n return {\n left,\n top,\n };\n }\n\n return {\n left: left - this.mask.scrollLeft,\n top: top - this.mask.scrollTop,\n };\n }\n\n // 无父元素的固定定位需按滚动值计算\n if (getMode(el) === Mode.FIXED) {\n return {\n left: left + this.mask.scrollLeft,\n top: top + this.mask.scrollTop,\n };\n }\n\n return {\n left,\n top,\n };\n }\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-param-reassign */\nimport { EventEmitter } from 'events';\n\nimport Moveable from 'moveable';\n\nimport { HIGHLIGHT_EL_ID_PREFIX } from './const';\nimport StageCore from './StageCore';\nimport TargetCalibrate from './TargetCalibrate';\nimport type { StageHighlightConfig } from './types';\nexport default class StageHighlight extends EventEmitter {\n public core: StageCore;\n public container: HTMLElement;\n public target?: HTMLElement;\n public moveable?: Moveable;\n public calibrationTarget: TargetCalibrate;\n\n constructor(config: StageHighlightConfig) {\n super();\n\n this.core = config.core;\n this.container = config.container;\n this.calibrationTarget = new TargetCalibrate({\n parent: this.core.mask.content,\n mask: this.core.mask,\n dr: this.core.dr,\n core: this.core,\n });\n }\n\n /**\n * 高亮鼠标悬停的组件\n * @param el 选中组件的Dom节点元素\n */\n public highlight(el: HTMLElement): void {\n if (!el || el === this.target) return;\n this.target = el;\n this.moveable?.destroy();\n\n this.moveable = new Moveable(this.container, {\n target: this.calibrationTarget.update(el, HIGHLIGHT_EL_ID_PREFIX),\n origin: false,\n rootContainer: this.core.container,\n zoom: 1,\n });\n }\n\n /**\n * 清空高亮\n */\n public clearHighlight(): void {\n if (!this.moveable) return;\n this.target = undefined;\n this.moveable.target = null;\n this.moveable.updateTarget();\n }\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n this.moveable?.destroy();\n this.calibrationTarget.destroy();\n }\n}\n","import EventEmitter from 'events';\n\nimport Guides, { GuidesEvents } from '@scena/guides';\n\nimport { GuidesType } from './const';\n\nexport default class Rule extends EventEmitter {\n public hGuides: Guides;\n public vGuides: Guides;\n public horizontalGuidelines: number[] = [];\n public verticalGuidelines: number[] = [];\n\n private container: HTMLDivElement;\n private containerResizeObserver: ResizeObserver;\n\n constructor(container: HTMLDivElement) {\n super();\n\n this.container = container;\n this.hGuides = this.createGuides(GuidesType.HORIZONTAL, this.horizontalGuidelines);\n this.vGuides = this.createGuides(GuidesType.VERTICAL, this.verticalGuidelines);\n\n this.hGuides.on('changeGuides', this.hGuidesChangeGuidesHandler);\n this.vGuides.on('changeGuides', this.vGuidesChangeGuidesHandler);\n\n this.containerResizeObserver = new ResizeObserver(() => {\n this.vGuides.resize();\n this.hGuides.resize();\n });\n\n this.containerResizeObserver.observe(this.container);\n }\n\n /**\n * 是否显示标尺\n * @param show 是否显示\n */\n public showGuides(show = true) {\n this.hGuides.setState({\n showGuides: show,\n });\n\n this.vGuides.setState({\n showGuides: show,\n });\n }\n\n public setGuides([hLines, vLines]: [number[], number[]]) {\n this.horizontalGuidelines = hLines;\n this.verticalGuidelines = vLines;\n\n this.hGuides.setState({\n defaultGuides: hLines,\n });\n\n this.vGuides.setState({\n defaultGuides: vLines,\n });\n\n this.emit('changeGuides', {\n type: GuidesType.HORIZONTAL,\n guides: hLines,\n });\n\n this.emit('changeGuides', {\n type: GuidesType.VERTICAL,\n guides: vLines,\n });\n }\n\n /**\n * 清空所有参考线\n */\n public clearGuides() {\n this.setGuides([[], []]);\n }\n\n /**\n * 是否显示标尺\n * @param show 是否显示\n */\n public showRule(show = true) {\n // 当尺子隐藏时发现大小变化,显示后会变形,所以这里做重新初始化处理\n if (show) {\n this.hGuides.destroy();\n this.hGuides = this.createGuides(GuidesType.HORIZONTAL, this.horizontalGuidelines);\n\n this.vGuides.destroy();\n this.vGuides = this.createGuides(GuidesType.VERTICAL, this.verticalGuidelines);\n } else {\n this.hGuides.setState({\n rulerStyle: {\n visibility: 'hidden',\n },\n });\n\n this.vGuides.setState({\n rulerStyle: {\n visibility: 'hidden',\n },\n });\n }\n }\n\n public scrollRule(scrollTop: number) {\n this.hGuides.scrollGuides(scrollTop);\n this.hGuides.scroll(0);\n\n this.vGuides.scrollGuides(0);\n this.vGuides.scroll(scrollTop);\n }\n\n public destroy(): void {\n this.hGuides.off('changeGuides', this.hGuidesChangeGuidesHandler);\n this.vGuides.off('changeGuides', this.vGuidesChangeGuidesHandler);\n this.containerResizeObserver.disconnect();\n this.removeAllListeners();\n }\n\n private getGuidesStyle = (type: GuidesType) => ({\n position: 'fixed',\n zIndex: 1,\n left: type === GuidesType.HORIZONTAL ? 0 : '-30px',\n top: type === GuidesType.HORIZONTAL ? '-30px' : 0,\n width: type === GuidesType.HORIZONTAL ? '100%' : '30px',\n height: type === GuidesType.HORIZONTAL ? '30px' : '100%',\n });\n\n private createGuides = (type: GuidesType, defaultGuides: number[] = []): Guides =>\n new Guides(this.container, {\n type,\n defaultGuides,\n displayDragPos: true,\n backgroundColor: '#fff',\n lineColor: '#000',\n textColor: '#000',\n style: this.getGuidesStyle(type),\n });\n\n private hGuidesChangeGuidesHandler = (e: GuidesEvents['changeGuides']) => {\n this.horizontalGuidelines = e.guides;\n this.emit('changeGuides', {\n type: GuidesType.HORIZONTAL,\n guides: this.horizontalGuidelines,\n });\n };\n\n private vGuidesChangeGuidesHandler = (e: GuidesEvents['changeGuides']) => {\n this.verticalGuidelines = e.guides;\n this.emit('changeGuides', {\n type: GuidesType.VERTICAL,\n guides: this.verticalGuidelines,\n });\n };\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { throttle } from 'lodash-es';\n\nimport { Mode, MouseButton, ZIndex } from './const';\nimport Rule from './Rule';\nimport type StageCore from './StageCore';\nimport type { StageMaskConfig } from './types';\nimport { createDiv, getScrollParent, isFixedParent } from './util';\n\nconst wrapperClassName = 'editor-mask-wrapper';\nconst throttleTime = 100;\n\nconst hideScrollbar = () => {\n const style = globalThis.document.createElement('style');\n style.innerHTML = `\n .${wrapperClassName}::-webkit-scrollbar { width: 0 !important; display: none }\n `;\n globalThis.document.head.appendChild(style);\n};\n\nconst createContent = (): HTMLDivElement =>\n createDiv({\n className: 'editor-mask',\n cssText: `\n position: absolute;\n top: 0;\n left: 0;\n transform: translate3d(0, 0, 0);\n `,\n });\n\nconst createWrapper = (): HTMLDivElement => {\n const el = createDiv({\n className: wrapperClassName,\n cssText: `\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n overflow: hidden;\n z-index: ${ZIndex.MASK};\n `,\n });\n\n hideScrollbar();\n\n return el;\n};\n\n/**\n * 蒙层\n * @description 用于拦截页面的点击动作,避免点击时触发组件自身动作;在编辑器中点击组件应当是选中组件;\n */\nexport default class StageMask extends Rule {\n public content: HTMLDivElement = createContent();\n public wrapper: HTMLDivElement;\n public core: StageCore;\n public page: HTMLElement | null = null;\n public pageScrollParent: HTMLElement | null = null;\n public scrollTop = 0;\n public scrollLeft = 0;\n public width = 0;\n public height = 0;\n public wrapperHeight = 0;\n public wrapperWidth = 0;\n public maxScrollTop = 0;\n public maxScrollLeft = 0;\n public intersectionObserver: IntersectionObserver | null = null;\n\n private mode: Mode = Mode.ABSOLUTE;\n private pageResizeObserver: ResizeObserver | null = null;\n private wrapperResizeObserver: ResizeObserver | null = null;\n /**\n * 高亮事件处理函数\n * @param event 事件对象\n */\n private highlightHandler = throttle((event: MouseEvent): void => {\n this.emit('highlight', event);\n }, throttleTime);\n\n constructor(config: StageMaskConfig) {\n const wrapper = createWrapper();\n super(wrapper);\n\n this.wrapper = wrapper;\n this.core = config.core;\n\n this.content.addEventListener('mousedown', this.mouseDownHandler);\n this.wrapper.appendChild(this.content);\n this.content.addEventListener('wheel', this.mouseWheelHandler);\n this.content.addEventListener('mousemove', this.highlightHandler);\n this.content.addEventListener('mouseleave', this.mouseLeaveHandler);\n }\n\n public setMode(mode: Mode) {\n this.mode = mode;\n this.scroll();\n if (mode === Mode.FIXED) {\n this.content.style.width = `${this.wrapperWidth}px`;\n this.content.style.height = `${this.wrapperHeight}px`;\n } else {\n this.content.style.width = `${this.width}px`;\n this.content.style.height = `${this.height}px`;\n }\n }\n\n /**\n * 监听页面大小变化\n * @description 同步页面与mask的大小\n * @param page 页面Dom节点\n */\n public observe(page: HTMLElement): void {\n if (!page) return;\n\n this.page = page;\n this.pageScrollParent = getScrollParent(page) || this.core.renderer.contentWindow?.document.documentElement || null;\n this.pageResizeObserver?.disconnect();\n this.wrapperResizeObserver?.disconnect();\n this.intersectionObserver?.disconnect();\n\n if (typeof IntersectionObserver !== 'undefined') {\n this.intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n const { target, intersectionRatio } = entry;\n if (intersectionRatio <= 0) {\n this.scrollIntoView(target);\n }\n this.intersectionObserver?.unobserve(target);\n });\n },\n {\n root: this.pageScrollParent,\n rootMargin: '0px',\n threshold: 1.0,\n },\n );\n }\n\n if (typeof ResizeObserver !== 'undefined') {\n this.pageResizeObserver = new ResizeObserver((entries) => {\n const [entry] = entries;\n const { clientHeight, clientWidth } = entry.target;\n this.setHeight(clientHeight);\n this.setWidth(clientWidth);\n\n this.scroll();\n if (this.core.dr.moveable) {\n this.core.dr.updateMoveable();\n }\n });\n\n this.pageResizeObserver.observe(page);\n\n this.wrapperResizeObserver = new ResizeObserver((entries) => {\n const [entry] = entries;\n const { clientHeight, clientWidth } = entry.target;\n this.wrapperHeight = clientHeight;\n this.wrapperWidth = clientWidth;\n this.setMaxScrollLeft();\n this.setMaxScrollTop();\n });\n this.wrapperResizeObserver.observe(this.wrapper);\n }\n }\n\n /**\n * 挂载Dom节点\n * @param el 将蒙层挂载到该Dom节点上\n */\n public mount(el: HTMLDivElement): void {\n if (!this.content) throw new Error('content 不存在');\n\n el.appendChild(this.wrapper);\n }\n\n public setLayout(el: HTMLElement): void {\n this.setMode(isFixedParent(el) ? Mode.FIXED : Mode.ABSOLUTE);\n }\n\n public scrollIntoView(el: Element): void {\n el.scrollIntoView();\n if (!this.pageScrollParent) return;\n this.scrollLeft = this.pageScrollParent.scrollLeft;\n this.scrollTop = this.pageScrollParent.scrollTop;\n this.scroll();\n }\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n this.content?.remove();\n this.page = null;\n this.pageScrollParent = null;\n this.pageResizeObserver?.disconnect();\n this.wrapperResizeObserver?.disconnect();\n\n this.content.removeEventListener('mouseleave', this.mouseLeaveHandler);\n super.destroy();\n }\n\n private scroll() {\n this.fixScrollValue();\n\n let { scrollLeft, scrollTop } = this;\n\n if (this.pageScrollParent) {\n this.pageScrollParent.scrollTo({\n top: scrollTop,\n left: scrollLeft,\n });\n }\n\n if (this.mode === Mode.FIXED) {\n scrollLeft = 0;\n scrollTop = 0;\n }\n\n this.scrollRule(scrollTop);\n this.scrollTo(scrollLeft, scrollTop);\n }\n\n private scrollTo(scrollLeft: number, scrollTop: number): void {\n this.content.style.transform = `translate3d(${-scrollLeft}px, ${-scrollTop}px, 0)`;\n }\n\n /**\n * 设置蒙层高度\n * @param height 高度\n */\n private setHeight(height: number): void {\n this.height = height;\n this.setMaxScrollTop();\n this.content.style.height = `${height}px`;\n }\n\n /**\n * 设置蒙层宽度\n * @param width 宽度\n */\n private setWidth(width: number): void {\n this.width = width;\n this.setMaxScrollLeft();\n this.content.style.width = `${width}px`;\n }\n\n /**\n * 计算并设置最大滚动宽度\n */\n private setMaxScrollLeft(): void {\n this.maxScrollLeft = Math.max(this.width - this.wrapperWidth, 0);\n }\n\n /**\n * 计算并设置最大滚动高度\n */\n private setMaxScrollTop(): void {\n this.maxScrollTop = Math.max(this.height - this.wrapperHeight, 0);\n }\n\n /**\n * 修复滚动距离\n * 由于滚动容器变化等因素,会导致当前滚动的距离不正确\n */\n private fixScrollValue(): void {\n if (this.scrollTop < 0) this.scrollTop = 0;\n if (this.scrollLeft < 0) this.scrollLeft = 0;\n if (this.maxScrollTop < this.scrollTop) this.scrollTop = this.maxScrollTop;\n if (this.maxScrollLeft < this.scrollLeft) this.scrollLeft = this.maxScrollLeft;\n }\n\n /**\n * 点击事件处理函数\n * @param event 事件对象\n */\n private mouseDownHandler = (event: MouseEvent): void => {\n this.emit('clearHighlight');\n\n event.stopImmediatePropagation();\n event.stopPropagation();\n\n if (event.button !== MouseButton.LEFT && event.button !== MouseButton.RIGHT) return;\n\n // 点击的对象如果是选中框,则不需要再触发选中了,而可能是拖动行为\n if ((event.target as HTMLDivElement).className.indexOf('moveable-control') !== -1) {\n return;\n }\n\n this.content.removeEventListener('mousemove', this.highlightHandler);\n\n this.emit('beforeSelect', event);\n\n // 如果是右键点击,这里的mouseup事件监听没有效果\n globalThis.document.addEventListener('mouseup', this.mouseUpHandler);\n };\n\n private mouseUpHandler = (): void => {\n globalThis.document.removeEventListener('mouseup', this.mouseUpHandler);\n this.content.addEventListener('mousemove', this.highlightHandler);\n this.emit('select');\n };\n\n private mouseWheelHandler = (event: WheelEvent) => {\n this.emit('clearHighlight');\n if (!this.page) throw new Error('page 未初始化');\n\n const { deltaY, deltaX } = event;\n\n if (this.page.clientHeight < this.wrapperHeight && deltaY) return;\n if (this.page.clientWidth < this.wrapperWidth && deltaX) return;\n\n if (this.maxScrollTop > 0) {\n this.scrollTop = this.scrollTop + deltaY;\n }\n\n if (this.maxScrollLeft > 0) {\n this.scrollLeft = this.scrollLeft + deltaX;\n }\n\n this.scroll();\n\n this.emit('scroll', event);\n };\n\n private mouseLeaveHandler = () => {\n setTimeout(() => this.emit('clearHighlight'), throttleTime);\n };\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport StageCore from './StageCore';\nimport type { Runtime, RuntimeWindow, StageRenderConfig } from './types';\nimport { getHost, isSameDomain } from './util';\n\nexport default class StageRender extends EventEmitter {\n /** 组件的js、css执行的环境,直接渲染为当前window,iframe渲染则为iframe.contentWindow */\n public contentWindow: RuntimeWindow | null = null;\n\n public runtime: Runtime | null = null;\n\n public iframe?: HTMLIFrameElement;\n\n public runtimeUrl?: string;\n\n public core: StageCore;\n\n private render?: (renderer: StageCore) => Promise<HTMLElement> | HTMLElement;\n\n constructor({ core }: StageRenderConfig) {\n super();\n\n this.core = core;\n this.runtimeUrl = core.config.runtimeUrl || '';\n this.render = core.config.render;\n\n this.iframe = globalThis.document.createElement('iframe');\n // 同源,直接加载\n this.iframe.src = isSameDomain(this.runtimeUrl) ? this.runtimeUrl : '';\n this.iframe.style.cssText = `\n border: 0;\n width: 100%;\n height: 100%;\n `;\n\n this.iframe.addEventListener('load', this.loadHandler);\n }\n\n public getMagicApi = () => ({\n onPageElUpdate: (el: HTMLElement) => this.emit('page-el-update', el),\n onRuntimeReady: (runtime: Runtime) => {\n this.runtime = runtime;\n // @ts-ignore\n globalThis.runtime = runtime;\n this.emit('runtime-ready', runtime);\n },\n });\n\n /**\n * 挂载Dom节点\n * @param el 将页面挂载到该Dom节点上\n */\n public async mount(el: HTMLDivElement) {\n if (this.iframe) {\n if (!isSameDomain(this.runtimeUrl) && this.runtimeUrl) {\n // 不同域,使用srcdoc发起异步请求,需要目标地址支持跨域\n let html = await fetch(this.runtimeUrl).then((res) => res.text());\n // 使用base, 解决相对路径或绝对路径的问题\n const base = `${location.protocol}//${getHost(this.runtimeUrl)}`;\n html = html.replace('<head>', `<head>\\n<base href=\"${base}\">`);\n this.iframe.srcdoc = html;\n }\n\n el.appendChild<HTMLIFrameElement>(this.iframe);\n } else {\n throw Error('mount 失败');\n }\n }\n\n public getRuntime = (): Promise<Runtime> => {\n if (this.runtime) return Promise.resolve(this.runtime);\n return new Promise((resolve) => {\n const listener = (runtime: Runtime) => {\n this.off('runtime-ready', listener);\n resolve(runtime);\n };\n this.on('runtime-ready', listener);\n });\n };\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n this.iframe?.removeEventListener('load', this.loadHandler);\n this.contentWindow = null;\n this.iframe?.remove();\n this.iframe = undefined;\n this.removeAllListeners();\n }\n\n private loadHandler = async () => {\n this.contentWindow = this.iframe?.contentWindow as RuntimeWindow;\n\n this.contentWindow.magic = this.getMagicApi();\n\n if (this.render) {\n const el = await this.render(this.core);\n if (el) {\n this.iframe?.contentDocument?.body?.appendChild(el);\n }\n }\n\n this.emit('onload');\n\n this.contentWindow.postMessage(\n {\n tmagicRuntimeReady: true,\n },\n '*',\n );\n };\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport { Id } from '@tmagic/schema';\n\nimport { DEFAULT_ZOOM, GHOST_EL_ID_PREFIX } from './const';\nimport StageDragResize from './StageDragResize';\nimport StageHighlight from './StageHighlight';\nimport StageMask from './StageMask';\nimport StageRender from './StageRender';\nimport {\n CanSelect,\n GuidesEventData,\n RemoveData,\n Runtime,\n SortEventData,\n StageCoreConfig,\n UpdateData,\n UpdateEventData,\n} from './types';\nimport { addSelectedClassName, removeSelectedClassName } from './util';\n\nexport default class StageCore extends EventEmitter {\n public selectedDom: Element | undefined;\n public highlightedDom: Element | undefined;\n\n public renderer: StageRender;\n public mask: StageMask;\n public dr: StageDragResize;\n public highlightLayer: StageHighlight;\n public config: StageCoreConfig;\n public zoom = DEFAULT_ZOOM;\n public container?: HTMLDivElement;\n private canSelect: CanSelect;\n\n constructor(config: StageCoreConfig) {\n super();\n\n this.config = config;\n\n this.setZoom(config.zoom);\n this.canSelect = config.canSelect || ((el: HTMLElement) => !!el.id);\n\n this.renderer = new StageRender({ core: this });\n this.mask = new StageMask({ core: this });\n this.dr = new StageDragResize({ core: this, container: this.mask.content });\n this.highlightLayer = new StageHighlight({ core: this, container: this.mask.wrapper });\n\n this.renderer.on('runtime-ready', (runtime: Runtime) => {\n this.emit('runtime-ready', runtime);\n });\n this.renderer.on('page-el-update', (el: HTMLElement) => {\n this.mask?.observe(el);\n });\n\n this.mask\n .on('beforeSelect', (event: MouseEvent) => {\n this.setElementFromPoint(event);\n })\n .on('select', () => {\n this.emit('select', this.selectedDom);\n })\n .on('changeGuides', (data: GuidesEventData) => {\n this.dr.setGuidelines(data.type, data.guides);\n this.emit('changeGuides', data);\n })\n .on('highlight', async (event: MouseEvent) => {\n await this.setElementFromPoint(event);\n if (this.highlightedDom === this.selectedDom) {\n this.highlightLayer.clearHighlight();\n return;\n }\n this.highlightLayer.highlight(this.highlightedDom as HTMLElement);\n this.emit('highlight', this.highlightedDom);\n })\n .on('clearHighlight', async () => {\n this.highlightLayer.clearHighlight();\n });\n\n // 要先触发select,在触发update\n this.dr\n .on('update', (data: UpdateEventData) => {\n setTimeout(() => this.emit('update', data));\n })\n .on('sort', (data: UpdateEventData) => {\n setTimeout(() => this.emit('sort', data));\n });\n }\n\n public async setElementFromPoint(event: MouseEvent) {\n const { renderer, zoom } = this;\n\n const doc = renderer.contentWindow?.document;\n let x = event.clientX;\n let y = event.clientY;\n\n if (renderer.iframe) {\n const rect = renderer.iframe.getClientRects()[0];\n if (rect) {\n x = x - rect.left;\n y = y - rect.top;\n }\n }\n\n const els = doc?.elementsFromPoint(x / zoom, y / zoom) as HTMLElement[];\n\n let stopped = false;\n const stop = () => (stopped = true);\n for (const el of els) {\n if (!el.id.startsWith(GHOST_EL_ID_PREFIX) && (await this.canSelect(el, event, stop))) {\n if (stopped) break;\n if (event.type === 'mousemove') {\n this.highlight(el);\n break;\n }\n this.select(el, event);\n break;\n }\n }\n }\n\n /**\n * 选中组件\n * @param idOrEl 组件Dom节点的id属性,或者Dom节点\n */\n public async select(idOrEl: Id | HTMLElement, event?: MouseEvent): Promise<void> {\n const el = await this.getTargetElement(idOrEl);\n\n if (el === this.selectedDom) return;\n\n const runtime = await this.renderer.getRuntime();\n\n await runtime?.select?.(el.id);\n\n if (runtime?.beforeSelect) {\n await runtime.beforeSelect(el);\n }\n\n this.mask.setLayout(el);\n this.dr.select(el, event);\n\n if (this.config.autoScrollIntoView || el.dataset.autoScrollIntoView) {\n this.mask.intersectionObserver?.observe(el);\n }\n\n this.selectedDom = el;\n\n if (this.renderer.contentWindow) {\n removeSelectedClassName(this.renderer.contentWindow.document);\n if (this.selectedDom) {\n addSelectedClassName(this.selectedDom, this.renderer.contentWindow.document);\n }\n }\n }\n\n /**\n * 更新选中的节点\n * @param data 更新的数据\n */\n public update(data: UpdateData): Promise<void> {\n const { config } = data;\n\n return this.renderer?.getRuntime().then((runtime) => {\n runtime?.update?.(data);\n // 更新配置后,需要等组件渲染更新\n setTimeout(() => {\n const el = this.renderer.contentWindow?.document.getElementById(`${config.id}`);\n // 有可能dom已经重新渲染,不再是原来的dom了,所以这里判断id,而不是判断el === this.selectedDom\n if (el && el.id === this.selectedDom?.id) {\n this.selectedDom = el;\n // 更新了组件的布局,需要重新设置mask是否可以滚动\n this.mask.setLayout(el);\n this.dr.updateMoveable(el);\n }\n }, 0);\n });\n }\n\n /**\n * 高亮选中组件\n * @param el 页面Dom节点\n */\n public async highlight(idOrEl: HTMLElement | Id): Promise<void> {\n let el;\n try {\n el = await this.getTargetElement(idOrEl);\n } catch (error) {\n this.highlightLayer.clearHighlight();\n return;\n }\n if (el === this.highlightedDom) return;\n this.highlightLayer.highlight(el);\n this.highlightedDom = el;\n }\n\n public sortNode(data: SortEventData): Promise<void> {\n return this.renderer?.getRuntime().then((runtime) => runtime?.sortNode?.(data));\n }\n\n public add(data: UpdateData): Promise<void> {\n return this.renderer?.getRuntime().then((runtime) => runtime?.add?.(data));\n }\n\n public remove(data: RemoveData): Promise<void> {\n return this.renderer?.getRuntime().then((runtime) => runtime?.remove?.(data));\n }\n\n public setZoom(zoom: number = DEFAULT_ZOOM): void {\n this.zoom = zoom;\n }\n\n /**\n * 挂载Dom节点\n * @param el 将stage挂载到该Dom节点上\n */\n public async mount(el: HTMLDivElement) {\n this.container = el;\n const { mask, renderer } = this;\n\n await renderer.mount(el);\n mask.mount(el);\n\n this.emit('mounted');\n }\n\n /**\n * 清空所有参考线\n */\n public clearGuides() {\n this.mask.clearGuides();\n this.dr.clearGuides();\n }\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n const { mask, renderer, dr, highlightLayer } = this;\n\n renderer.destroy();\n mask.destroy();\n dr.destroy();\n highlightLayer.destroy();\n\n this.removeAllListeners();\n\n this.container = undefined;\n }\n\n private async getTargetElement(idOrEl: Id | HTMLElement): Promise<HTMLElement> {\n if (typeof idOrEl === 'string' || typeof idOrEl === 'number') {\n const el = this.renderer.contentWindow?.document.getElementById(`${idOrEl}`);\n if (!el) throw new Error(`不存在ID为${idOrEl}的元素`);\n return el;\n }\n return idOrEl;\n }\n}\n"],"names":["EventEmitter","MoveableHelper","Moveable","Guides","throttle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tmagic-stage.umd.js","sources":["../src/const.ts","../src/util.ts","../src/StageDragResize.ts","../src/TargetCalibrate.ts","../src/StageHighlight.ts","../src/Rule.ts","../src/StageMask.ts","../src/StageRender.ts","../src/StageCore.ts"],"sourcesContent":["/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** 流式布局下拖动时需要clone一个镜像节点,镜像节点的id前缀 */\nexport const GHOST_EL_ID_PREFIX = 'ghost_el_';\n\n/** 拖动的时候需要在蒙层中创建一个占位节点,该节点的id前缀 */\nexport const DRAG_EL_ID_PREFIX = 'drag_el_';\n\n/** 高亮时需要在蒙层中创建一个占位节点,该节点的id前缀 */\nexport const HIGHLIGHT_EL_ID_PREFIX = 'highlight_el_';\n\n/** 默认放到缩小倍数 */\nexport const DEFAULT_ZOOM = 1;\n\n/** 参考线类型 */\nexport enum GuidesType {\n /** 水平 */\n HORIZONTAL = 'horizontal',\n /** 垂直 */\n VERTICAL = 'vertical',\n}\n\n/** css z-index */\nexport enum ZIndex {\n /** 蒙层,用于监听用户操作,需要置于顶层 */\n MASK = '99999',\n /** 选中的节点 */\n SELECTED_EL = '666',\n GHOST_EL = '700',\n DRAG_EL = '9',\n}\n\n/** 鼠标按键 */\nexport enum MouseButton {\n /** 左键 */\n LEFT = 0,\n /** z中健 */\n MIDDLE = 1,\n /** 右键 */\n RIGHT = 2,\n}\n\n/** 布局方式 */\nexport enum Mode {\n /** 绝对定位布局 */\n ABSOLUTE = 'absolute',\n /** 固定定位布局 */\n FIXED = 'fixed',\n /** 流式布局 */\n SORTABLE = 'sortable',\n}\n\n/** 选中节点的class name */\nexport const SELECTED_CLASS = 'tmagic-stage-selected-area';\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Mode, SELECTED_CLASS } from './const';\nimport type { Offset } from './types';\n\nconst getParents = (el: Element, relative: Element) => {\n let cur: Element | null = el.parentElement;\n const parents: Element[] = [];\n while (cur && cur !== relative) {\n parents.push(cur);\n cur = cur.parentElement;\n }\n return parents;\n};\n\nexport const getOffset = (el: HTMLElement): Offset => {\n const { offsetParent } = el;\n\n const left = el.offsetLeft;\n const top = el.offsetTop;\n\n if (offsetParent) {\n const parentOffset = getOffset(offsetParent as HTMLElement);\n return {\n left: left + parentOffset.left,\n top: top + parentOffset.top,\n };\n }\n\n return {\n left,\n top,\n };\n};\n\nexport const getAbsolutePosition = (el: HTMLElement, { top, left }: Offset) => {\n const { offsetParent } = el;\n\n if (offsetParent) {\n const parentOffset = getOffset(offsetParent as HTMLElement);\n return {\n left: left - parentOffset.left,\n top: top - parentOffset.top,\n };\n }\n\n return { left, top };\n};\n\nexport const getHost = (targetUrl: string) => targetUrl.match(/\\/\\/([^/]+)/)?.[1];\n\nexport const isSameDomain = (targetUrl = '', source = globalThis.location.host) => {\n const isHttpUrl = /^(http[s]?:)?\\/\\//.test(targetUrl);\n\n if (!isHttpUrl) return true;\n\n return getHost(targetUrl) === source;\n};\n\nexport const isAbsolute = (style: CSSStyleDeclaration): boolean => style.position === 'absolute';\n\nexport const isRelative = (style: CSSStyleDeclaration): boolean => style.position === 'relative';\n\nexport const isStatic = (style: CSSStyleDeclaration): boolean => style.position === 'static';\n\nexport const isFixed = (style: CSSStyleDeclaration): boolean => style.position === 'fixed';\n\nexport const isFixedParent = (el: HTMLElement) => {\n let fixed = false;\n let dom = el;\n while (dom) {\n fixed = isFixed(getComputedStyle(dom));\n if (fixed) {\n break;\n }\n const { parentElement } = dom;\n if (!parentElement || parentElement.tagName === 'BODY') {\n break;\n }\n dom = parentElement;\n }\n return fixed;\n};\n\nexport const getMode = (el: HTMLElement): Mode => {\n if (isFixedParent(el)) return Mode.FIXED;\n const style = getComputedStyle(el);\n if (isStatic(style) || isRelative(style)) return Mode.SORTABLE;\n return Mode.ABSOLUTE;\n};\n\nexport const getScrollParent = (element: HTMLElement, includeHidden = false): HTMLElement | null => {\n let style = getComputedStyle(element);\n const overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/;\n\n if (isFixed(style)) return null;\n\n for (let parent = element; parent.parentElement; ) {\n parent = parent.parentElement;\n style = getComputedStyle(parent);\n\n if (isAbsolute(style) && isStatic(style)) continue;\n\n if (overflowRegex.test(style.overflow + style.overflowY + style.overflowX)) return parent;\n }\n\n return null;\n};\n\nexport const createDiv = ({ className, cssText }: { className: string; cssText: string }) => {\n const el = globalThis.document.createElement('div');\n el.className = className;\n el.style.cssText = cssText;\n return el;\n};\n\nexport const removeSelectedClassName = (doc: Document) => {\n const oldEl = doc.querySelector(`.${SELECTED_CLASS}`);\n\n if (oldEl) {\n oldEl.classList.remove(SELECTED_CLASS);\n (oldEl.parentNode as HTMLDivElement)?.classList.remove(`${SELECTED_CLASS}-parent`);\n doc.querySelectorAll(`.${SELECTED_CLASS}-parents`).forEach((item) => {\n item.classList.remove(`${SELECTED_CLASS}-parents`);\n });\n }\n};\n\nexport const addSelectedClassName = (el: Element, doc: Document) => {\n el.classList.add(SELECTED_CLASS);\n (el.parentNode as Element)?.classList.add(`${SELECTED_CLASS}-parent`);\n getParents(el, doc.body).forEach((item) => {\n item.classList.add(`${SELECTED_CLASS}-parents`);\n });\n};\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-param-reassign */\nimport { EventEmitter } from 'events';\n\nimport type { MoveableOptions } from 'moveable';\nimport Moveable from 'moveable';\nimport MoveableHelper from 'moveable-helper';\n\nimport { DRAG_EL_ID_PREFIX, GHOST_EL_ID_PREFIX, GuidesType, Mode, ZIndex } from './const';\nimport StageCore from './StageCore';\nimport type { SortEventData, StageDragResizeConfig } from './types';\nimport { getAbsolutePosition, getMode, getOffset } from './util';\n\n/** 拖动状态 */\nenum ActionStatus {\n /** 开始拖动 */\n START = 'start',\n /** 拖动中 */\n ING = 'ing',\n /** 拖动结束 */\n END = 'end',\n}\n\n/**\n * 选中框\n */\nexport default class StageDragResize extends EventEmitter {\n public core: StageCore;\n /** 画布容器 */\n public container: HTMLElement;\n /** 目标节点 */\n public target?: HTMLElement;\n /** 目标节点在蒙层中的占位节点 */\n public dragEl: HTMLDivElement;\n /** Moveable拖拽类实例 */\n public moveable?: Moveable;\n /** 水平参考线 */\n public horizontalGuidelines: number[] = [];\n /** 垂直参考线 */\n public verticalGuidelines: number[] = [];\n /** 对齐元素集合 */\n public elementGuidelines: HTMLElement[] = [];\n /** 布局方式:流式布局、绝对定位、固定定位 */\n public mode: Mode = Mode.ABSOLUTE;\n\n private moveableOptions: MoveableOptions = {};\n /** 拖动状态 */\n private dragStatus: ActionStatus = ActionStatus.END;\n /** 流式布局下,目标节点的镜像节点 */\n private ghostEl: HTMLElement | undefined;\n private moveableHelper?: MoveableHelper;\n\n constructor(config: StageDragResizeConfig) {\n super();\n\n this.core = config.core;\n this.container = config.container;\n\n this.dragEl = globalThis.document.createElement('div');\n this.container.append(this.dragEl);\n }\n\n /**\n * 将选中框渲染并覆盖到选中的组件Dom节点上方\n * 当选中的节点是不是absolute时,会创建一个新的节点出来作为拖拽目标\n * @param el 选中组件的Dom节点元素\n * @param event 鼠标事件\n */\n public select(el: HTMLElement, event?: MouseEvent): void {\n const oldTarget = this.target;\n this.target = el;\n\n // 从不能拖动到能拖动的节点之间切换,要重新创建moveable,不然dragStart不生效\n if (!this.moveable || this.target !== oldTarget) {\n this.init(el);\n this.moveableHelper = MoveableHelper.create({\n useBeforeRender: true,\n useRender: false,\n createAuto: true,\n });\n\n this.initMoveable();\n } else {\n this.updateMoveable();\n }\n\n if (event) {\n this.moveable?.dragStart(event);\n }\n }\n\n /**\n * 初始化选中框并渲染出来\n */\n public updateMoveable(el = this.target): void {\n if (!this.moveable) throw new Error('未初始化moveable');\n if (!el) throw new Error('未选中任何节点');\n\n this.target = el;\n\n this.init(el);\n\n Object.entries(this.moveableOptions).forEach(([key, value]) => {\n (this.moveable as any)[key] = value;\n });\n this.moveable.updateTarget();\n }\n\n public setGuidelines(type: GuidesType, guidelines: number[]): void {\n if (type === GuidesType.HORIZONTAL) {\n this.horizontalGuidelines = guidelines;\n this.moveableOptions.horizontalGuidelines = guidelines;\n } else if (type === GuidesType.VERTICAL) {\n this.verticalGuidelines = guidelines;\n this.moveableOptions.verticalGuidelines = guidelines;\n }\n\n if (this.moveable) {\n this.updateMoveable();\n }\n }\n\n public clearGuides() {\n this.horizontalGuidelines = [];\n this.verticalGuidelines = [];\n this.moveableOptions.horizontalGuidelines = [];\n this.moveableOptions.verticalGuidelines = [];\n this.updateMoveable();\n }\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n this.moveable?.destroy();\n this.destroyGhostEl();\n this.destroyDragEl();\n this.dragStatus = ActionStatus.END;\n this.removeAllListeners();\n }\n\n private init(el: HTMLElement): void {\n // 如果有滚动条会导致resize时获取到width,height不准确\n if (/(auto|scroll)/.test(el.style.overflow)) {\n el.style.overflow = 'hidden';\n }\n this.mode = getMode(el);\n\n this.destroyGhostEl();\n\n this.updateDragEl(el);\n\n this.moveableOptions = this.getOptions({\n target: this.dragEl,\n });\n }\n\n private setElementGuidelines(nodes: HTMLElement[]) {\n this.elementGuidelines.forEach((node) => {\n node.remove();\n });\n this.elementGuidelines = [];\n\n if (this.mode === Mode.ABSOLUTE) {\n const frame = document.createDocumentFragment();\n\n for (const node of nodes) {\n const { width, height } = node.getBoundingClientRect();\n if (node === this.target) continue;\n const { left, top } = getOffset(node as HTMLElement);\n const elementGuideline = document.createElement('div');\n elementGuideline.style.cssText = `position: absolute;width: ${width}px;height: ${height}px;top: ${top}px;left: ${left}px`;\n this.elementGuidelines.push(elementGuideline);\n frame.append(elementGuideline);\n }\n\n this.container.append(frame);\n }\n }\n\n private initMoveable() {\n this.moveable?.destroy();\n\n this.moveable = new Moveable(this.container, {\n ...this.moveableOptions,\n });\n\n this.bindResizeEvent();\n this.bindDragEvent();\n this.bindRotateEvent();\n this.bindScaleEvent();\n }\n\n private bindResizeEvent(): void {\n if (!this.moveable) throw new Error('moveable 未初始化');\n\n const frame = {\n left: 0,\n top: 0,\n };\n\n this.moveable\n .on('resizeStart', (e) => {\n if (!this.target) return;\n\n this.dragStatus = ActionStatus.START;\n this.moveableHelper?.onResizeStart(e);\n\n frame.top = this.target.offsetTop;\n frame.left = this.target.offsetLeft;\n })\n .on('resize', (e) => {\n const { width, height, drag } = e;\n if (!this.moveable || !this.target || !this.dragEl) return;\n\n const { beforeTranslate } = drag;\n this.dragStatus = ActionStatus.ING;\n\n this.moveableHelper?.onResize(e);\n\n // 流式布局\n if (this.mode === Mode.SORTABLE) {\n this.target.style.top = '0px';\n } else {\n this.target.style.left = `${frame.left + beforeTranslate[0]}px`;\n this.target.style.top = `${frame.top + beforeTranslate[1]}px`;\n }\n\n this.target.style.width = `${width}px`;\n this.target.style.height = `${height}px`;\n })\n .on('resizeEnd', () => {\n this.dragStatus = ActionStatus.END;\n this.update(true);\n });\n }\n\n private bindDragEvent(): void {\n if (!this.moveable) throw new Error('moveable 未初始化');\n\n const frame = {\n left: 0,\n top: 0,\n };\n\n this.moveable\n .on('dragStart', (e) => {\n if (!this.target) throw new Error('未选中组件');\n\n this.dragStatus = ActionStatus.START;\n\n this.moveableHelper?.onDragStart(e);\n\n if (this.mode === Mode.SORTABLE) {\n this.ghostEl = this.generateGhostEl(this.target);\n }\n\n frame.top = this.target.offsetTop;\n frame.left = this.target.offsetLeft;\n })\n .on('drag', (e) => {\n if (!this.target || !this.dragEl) return;\n\n this.dragStatus = ActionStatus.ING;\n\n // 流式布局\n if (this.ghostEl) {\n this.ghostEl.style.top = `${frame.top + e.beforeTranslate[1]}px`;\n return;\n }\n\n this.moveableHelper?.onDrag(e);\n\n this.target.style.left = `${frame.left + e.beforeTranslate[0]}px`;\n this.target.style.top = `${frame.top + e.beforeTranslate[1]}px`;\n })\n .on('dragEnd', () => {\n // 点击不拖动时会触发dragStart和dragEnd,但是不会有drag事件\n if (this.dragStatus === ActionStatus.ING) {\n switch (this.mode) {\n case Mode.SORTABLE:\n this.sort();\n break;\n default:\n this.update();\n }\n }\n\n this.dragStatus = ActionStatus.END;\n this.destroyGhostEl();\n });\n }\n\n private bindRotateEvent(): void {\n if (!this.moveable) throw new Error('moveable 未初始化');\n\n this.moveable\n .on('rotateStart', (e) => {\n this.dragStatus = ActionStatus.START;\n this.moveableHelper?.onRotateStart(e);\n })\n .on('rotate', (e) => {\n if (!this.target || !this.dragEl) return;\n this.dragStatus = ActionStatus.ING;\n this.moveableHelper?.onRotate(e);\n const frame = this.moveableHelper?.getFrame(e.target);\n this.target.style.transform = frame?.toCSSObject().transform || '';\n })\n .on('rotateEnd', (e) => {\n this.dragStatus = ActionStatus.END;\n const frame = this.moveableHelper?.getFrame(e.target);\n this.emit('update', {\n el: this.target,\n style: {\n transform: frame?.get('transform'),\n },\n });\n });\n }\n\n private bindScaleEvent(): void {\n if (!this.moveable) throw new Error('moveable 未初始化');\n\n this.moveable\n .on('scaleStart', (e) => {\n this.dragStatus = ActionStatus.START;\n this.moveableHelper?.onScaleStart(e);\n })\n .on('scale', (e) => {\n if (!this.target || !this.dragEl) return;\n this.dragStatus = ActionStatus.ING;\n this.moveableHelper?.onScale(e);\n const frame = this.moveableHelper?.getFrame(e.target);\n this.target.style.transform = frame?.toCSSObject().transform || '';\n })\n .on('scaleEnd', (e) => {\n this.dragStatus = ActionStatus.END;\n const frame = this.moveableHelper?.getFrame(e.target);\n this.emit('update', {\n el: this.target,\n style: {\n transform: frame?.get('transform'),\n },\n });\n });\n }\n\n private sort(): void {\n if (!this.target || !this.ghostEl) throw new Error('未知错误');\n const { top } = this.ghostEl.getBoundingClientRect();\n const { top: oriTop } = this.target.getBoundingClientRect();\n const deltaTop = top - oriTop;\n if (Math.abs(deltaTop) >= this.target.clientHeight / 2) {\n if (deltaTop > 0) {\n this.emit('sort', down(deltaTop, this.target));\n } else {\n this.emit('sort', up(deltaTop, this.target));\n }\n } else {\n this.emit('sort', {\n src: this.target.id,\n dist: this.target.id,\n });\n }\n }\n\n private update(isResize = false): void {\n if (!this.target) return;\n\n const offset =\n this.mode === Mode.SORTABLE ? { left: 0, top: 0 } : { left: this.target.offsetLeft, top: this.target.offsetTop };\n\n const left = this.calcValueByFontsize(offset.left);\n const top = this.calcValueByFontsize(offset.top);\n const width = this.calcValueByFontsize(this.target.clientWidth);\n const height = this.calcValueByFontsize(this.target.clientHeight);\n\n this.emit('update', {\n el: this.target,\n style: isResize ? { left, top, width, height } : { left, top },\n });\n }\n\n private generateGhostEl(el: HTMLElement): HTMLElement {\n if (this.ghostEl) {\n this.destroyGhostEl();\n }\n\n const ghostEl = el.cloneNode(true) as HTMLElement;\n const { top, left } = getAbsolutePosition(el, getOffset(el));\n ghostEl.id = `${GHOST_EL_ID_PREFIX}${el.id}`;\n ghostEl.style.zIndex = ZIndex.GHOST_EL;\n ghostEl.style.opacity = '.5';\n ghostEl.style.position = 'absolute';\n ghostEl.style.left = `${left}px`;\n ghostEl.style.top = `${top}px`;\n el.after(ghostEl);\n return ghostEl;\n }\n\n private destroyGhostEl(): void {\n this.ghostEl?.remove();\n this.ghostEl = undefined;\n }\n\n private updateDragEl(el: HTMLElement) {\n const offset = getOffset(el);\n const { transform } = getComputedStyle(el);\n\n this.dragEl.style.cssText = `\n position: absolute;\n transform: ${transform};\n left: ${offset.left}px;\n top: ${offset.top}px;\n width: ${el.clientWidth}px;\n height: ${el.clientHeight}px;\n z-index: ${ZIndex.DRAG_EL};\n `;\n\n this.dragEl.id = `${DRAG_EL_ID_PREFIX}${el.id}`;\n\n if (typeof this.core.config.updateDragEl === 'function') {\n this.core.config.updateDragEl(this.dragEl, el);\n }\n }\n\n private destroyDragEl(): void {\n this.dragEl?.remove();\n }\n\n private getOptions(options: MoveableOptions = {}): MoveableOptions {\n if (!this.target) return {};\n\n const isAbsolute = this.mode === Mode.ABSOLUTE;\n const isFixed = this.mode === Mode.FIXED;\n\n let { moveableOptions = {} } = this.core.config;\n\n if (typeof moveableOptions === 'function') {\n moveableOptions = moveableOptions(this.core);\n }\n\n const elementGuidelines: any = moveableOptions.elementGuidelines || this.target.parentElement?.children || [];\n\n this.setElementGuidelines(elementGuidelines);\n\n if (moveableOptions.elementGuidelines) {\n delete moveableOptions.elementGuidelines;\n }\n\n return {\n origin: false,\n rootContainer: this.core.container,\n zoom: 1,\n dragArea: false,\n draggable: true,\n resizable: true,\n scalable: false,\n rotatable: false,\n snappable: isAbsolute || isFixed,\n snapGap: isAbsolute || isFixed,\n snapThreshold: 5,\n snapDigit: 0,\n throttleDrag: 0,\n isDisplaySnapDigit: isAbsolute,\n snapDirections: {\n top: isAbsolute,\n right: isAbsolute,\n bottom: isAbsolute,\n left: isAbsolute,\n center: isAbsolute,\n middle: isAbsolute,\n },\n elementSnapDirections: {\n top: isAbsolute,\n right: isAbsolute,\n bottom: isAbsolute,\n left: isAbsolute,\n },\n isDisplayInnerSnapDigit: true,\n horizontalGuidelines: this.horizontalGuidelines,\n verticalGuidelines: this.verticalGuidelines,\n elementGuidelines: this.elementGuidelines,\n\n bounds: {\n top: 0,\n // 设置0的话无法移动到left为0,所以只能设置为-1\n left: -1,\n right: this.container.clientWidth,\n bottom: this.container.clientHeight,\n ...(moveableOptions.bounds || {}),\n },\n ...options,\n ...moveableOptions,\n };\n }\n\n private calcValueByFontsize(value: number) {\n const { contentWindow } = this.core.renderer;\n const fontSize = contentWindow?.document.documentElement.style.fontSize;\n\n if (fontSize) {\n const times = globalThis.parseFloat(fontSize) / 100;\n return (value / times).toFixed(2);\n }\n\n return value;\n }\n}\n\n/**\n * 下移组件位置\n * @param {number} deltaTop 偏移量\n * @param {Object} detail 当前选中的组件配置\n */\nexport const down = (deltaTop: number, target: HTMLElement | SVGElement): SortEventData | void => {\n let swapIndex = 0;\n let addUpH = target.clientHeight;\n const brothers = Array.from(target.parentNode?.children || []).filter(\n (node) => !node.id.startsWith(GHOST_EL_ID_PREFIX),\n );\n const index = brothers.indexOf(target);\n // 往下移动\n const downEls = brothers.slice(index + 1) as HTMLElement[];\n\n for (let i = 0; i < downEls.length; i++) {\n const ele = downEls[i];\n // 是 fixed 不做处理\n if (ele.style?.position === 'fixed') {\n continue;\n }\n addUpH += ele.clientHeight / 2;\n if (deltaTop <= addUpH) {\n break;\n }\n addUpH += ele.clientHeight / 2;\n swapIndex = i;\n }\n return {\n src: target.id,\n dist: downEls.length && swapIndex > -1 ? downEls[swapIndex].id : target.id,\n };\n};\n\n/**\n * 上移组件位置\n * @param {Array} brothers 处于同一容器下的所有子组件配置\n * @param {number} index 当前组件所处的位置\n * @param {number} deltaTop 偏移量\n * @param {Object} detail 当前选中的组件配置\n */\nexport const up = (deltaTop: number, target: HTMLElement | SVGElement): SortEventData | void => {\n const brothers = Array.from(target.parentNode?.children || []).filter(\n (node) => !node.id.startsWith(GHOST_EL_ID_PREFIX),\n );\n const index = brothers.indexOf(target);\n // 往上移动\n const upEls = brothers.slice(0, index) as HTMLElement[];\n\n let addUpH = target.clientHeight;\n let swapIndex = upEls.length - 1;\n\n for (let i = upEls.length - 1; i >= 0; i--) {\n const ele = upEls[i];\n if (!ele) continue;\n // 是 fixed 不做处理\n if (ele.style.position === 'fixed') continue;\n\n addUpH += ele.clientHeight / 2;\n if (-deltaTop <= addUpH) break;\n addUpH += ele.clientHeight / 2;\n\n swapIndex = i;\n }\n return {\n src: target.id,\n dist: upEls.length && swapIndex > -1 ? upEls[swapIndex].id : target.id,\n };\n};\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-param-reassign */\nimport { EventEmitter } from 'events';\n\nimport { Mode } from './const';\nimport StageCore from './StageCore';\nimport StageDragResize from './StageDragResize';\nimport StageMask from './StageMask';\nimport type { Offset, TargetCalibrateConfig } from './types';\nimport { getMode } from './util';\n\n/**\n * 将选中的节点修正定位后,添加一个操作节点到蒙层上\n */\nexport default class TargetCalibrate extends EventEmitter {\n public parent: HTMLElement;\n public mask: StageMask;\n public dr: StageDragResize;\n public core: StageCore;\n public operationEl: HTMLDivElement;\n\n constructor(config: TargetCalibrateConfig) {\n super();\n\n this.parent = config.parent;\n this.mask = config.mask;\n this.dr = config.dr;\n this.core = config.core;\n\n this.operationEl = globalThis.document.createElement('div');\n this.parent.append(this.operationEl);\n }\n\n public update(el: HTMLElement, prefix: String): HTMLElement {\n const { left, top } = this.getOffset(el);\n const { transform } = getComputedStyle(el);\n this.operationEl.style.cssText = `\n position: absolute;\n transform: ${transform};\n left: ${left}px;\n top: ${top}px;\n width: ${el.clientWidth}px;\n height: ${el.clientHeight}px;\n `;\n\n this.operationEl.id = `${prefix}${el.id}`;\n\n if (typeof this.core.config.updateDragEl === 'function') {\n this.core.config.updateDragEl(this.operationEl, el);\n }\n\n return this.operationEl;\n }\n\n public destroy(): void {\n this.operationEl?.remove();\n }\n\n private getOffset(el: HTMLElement): Offset {\n const { offsetParent } = el;\n\n const left = el.offsetLeft;\n const top = el.offsetTop;\n\n if (offsetParent) {\n const parentOffset = this.getOffset(offsetParent as HTMLElement);\n return {\n left: left + parentOffset.left,\n top: top + parentOffset.top,\n };\n }\n\n // 选中固定定位元素后editor-mask高度被置为视窗大小\n if (this.dr.mode === Mode.FIXED) {\n // 弹窗的情况\n if (getMode(el) === Mode.FIXED) {\n return {\n left,\n top,\n };\n }\n\n return {\n left: left - this.mask.scrollLeft,\n top: top - this.mask.scrollTop,\n };\n }\n\n // 无父元素的固定定位需按滚动值计算\n if (getMode(el) === Mode.FIXED) {\n return {\n left: left + this.mask.scrollLeft,\n top: top + this.mask.scrollTop,\n };\n }\n\n return {\n left,\n top,\n };\n }\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* eslint-disable no-param-reassign */\nimport { EventEmitter } from 'events';\n\nimport Moveable from 'moveable';\n\nimport { HIGHLIGHT_EL_ID_PREFIX } from './const';\nimport StageCore from './StageCore';\nimport TargetCalibrate from './TargetCalibrate';\nimport type { StageHighlightConfig } from './types';\nexport default class StageHighlight extends EventEmitter {\n public core: StageCore;\n public container: HTMLElement;\n public target?: HTMLElement;\n public moveable?: Moveable;\n public calibrationTarget: TargetCalibrate;\n\n constructor(config: StageHighlightConfig) {\n super();\n\n this.core = config.core;\n this.container = config.container;\n this.calibrationTarget = new TargetCalibrate({\n parent: this.core.mask.content,\n mask: this.core.mask,\n dr: this.core.dr,\n core: this.core,\n });\n }\n\n /**\n * 高亮鼠标悬停的组件\n * @param el 选中组件的Dom节点元素\n */\n public highlight(el: HTMLElement): void {\n if (!el || el === this.target) return;\n this.target = el;\n this.moveable?.destroy();\n\n this.moveable = new Moveable(this.container, {\n target: this.calibrationTarget.update(el, HIGHLIGHT_EL_ID_PREFIX),\n origin: false,\n rootContainer: this.core.container,\n zoom: 1,\n });\n }\n\n /**\n * 清空高亮\n */\n public clearHighlight(): void {\n if (!this.moveable) return;\n this.target = undefined;\n this.moveable.target = null;\n this.moveable.updateTarget();\n }\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n this.moveable?.destroy();\n this.calibrationTarget.destroy();\n }\n}\n","import EventEmitter from 'events';\n\nimport Guides, { GuidesEvents } from '@scena/guides';\n\nimport { GuidesType } from './const';\n\nexport default class Rule extends EventEmitter {\n public hGuides: Guides;\n public vGuides: Guides;\n public horizontalGuidelines: number[] = [];\n public verticalGuidelines: number[] = [];\n\n private container: HTMLDivElement;\n private containerResizeObserver: ResizeObserver;\n\n constructor(container: HTMLDivElement) {\n super();\n\n this.container = container;\n this.hGuides = this.createGuides(GuidesType.HORIZONTAL, this.horizontalGuidelines);\n this.vGuides = this.createGuides(GuidesType.VERTICAL, this.verticalGuidelines);\n\n this.hGuides.on('changeGuides', this.hGuidesChangeGuidesHandler);\n this.vGuides.on('changeGuides', this.vGuidesChangeGuidesHandler);\n\n this.containerResizeObserver = new ResizeObserver(() => {\n this.vGuides.resize();\n this.hGuides.resize();\n });\n\n this.containerResizeObserver.observe(this.container);\n }\n\n /**\n * 是否显示标尺\n * @param show 是否显示\n */\n public showGuides(show = true) {\n this.hGuides.setState({\n showGuides: show,\n });\n\n this.vGuides.setState({\n showGuides: show,\n });\n }\n\n public setGuides([hLines, vLines]: [number[], number[]]) {\n this.horizontalGuidelines = hLines;\n this.verticalGuidelines = vLines;\n\n this.hGuides.setState({\n defaultGuides: hLines,\n });\n\n this.vGuides.setState({\n defaultGuides: vLines,\n });\n\n this.emit('changeGuides', {\n type: GuidesType.HORIZONTAL,\n guides: hLines,\n });\n\n this.emit('changeGuides', {\n type: GuidesType.VERTICAL,\n guides: vLines,\n });\n }\n\n /**\n * 清空所有参考线\n */\n public clearGuides() {\n this.setGuides([[], []]);\n }\n\n /**\n * 是否显示标尺\n * @param show 是否显示\n */\n public showRule(show = true) {\n // 当尺子隐藏时发现大小变化,显示后会变形,所以这里做重新初始化处理\n if (show) {\n this.hGuides.destroy();\n this.hGuides = this.createGuides(GuidesType.HORIZONTAL, this.horizontalGuidelines);\n\n this.vGuides.destroy();\n this.vGuides = this.createGuides(GuidesType.VERTICAL, this.verticalGuidelines);\n } else {\n this.hGuides.setState({\n rulerStyle: {\n visibility: 'hidden',\n },\n });\n\n this.vGuides.setState({\n rulerStyle: {\n visibility: 'hidden',\n },\n });\n }\n }\n\n public scrollRule(scrollTop: number) {\n this.hGuides.scrollGuides(scrollTop);\n this.hGuides.scroll(0);\n\n this.vGuides.scrollGuides(0);\n this.vGuides.scroll(scrollTop);\n }\n\n public destroy(): void {\n this.hGuides.off('changeGuides', this.hGuidesChangeGuidesHandler);\n this.vGuides.off('changeGuides', this.vGuidesChangeGuidesHandler);\n this.containerResizeObserver.disconnect();\n this.removeAllListeners();\n }\n\n private getGuidesStyle = (type: GuidesType) => ({\n position: 'fixed',\n zIndex: 1,\n left: type === GuidesType.HORIZONTAL ? 0 : '-30px',\n top: type === GuidesType.HORIZONTAL ? '-30px' : 0,\n width: type === GuidesType.HORIZONTAL ? '100%' : '30px',\n height: type === GuidesType.HORIZONTAL ? '30px' : '100%',\n });\n\n private createGuides = (type: GuidesType, defaultGuides: number[] = []): Guides =>\n new Guides(this.container, {\n type,\n defaultGuides,\n displayDragPos: true,\n backgroundColor: '#fff',\n lineColor: '#000',\n textColor: '#000',\n style: this.getGuidesStyle(type),\n });\n\n private hGuidesChangeGuidesHandler = (e: GuidesEvents['changeGuides']) => {\n this.horizontalGuidelines = e.guides;\n this.emit('changeGuides', {\n type: GuidesType.HORIZONTAL,\n guides: this.horizontalGuidelines,\n });\n };\n\n private vGuidesChangeGuidesHandler = (e: GuidesEvents['changeGuides']) => {\n this.verticalGuidelines = e.guides;\n this.emit('changeGuides', {\n type: GuidesType.VERTICAL,\n guides: this.verticalGuidelines,\n });\n };\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { throttle } from 'lodash-es';\n\nimport { Mode, MouseButton, ZIndex } from './const';\nimport Rule from './Rule';\nimport type StageCore from './StageCore';\nimport type { StageMaskConfig } from './types';\nimport { createDiv, getScrollParent, isFixedParent } from './util';\n\nconst wrapperClassName = 'editor-mask-wrapper';\nconst throttleTime = 100;\n\nconst hideScrollbar = () => {\n const style = globalThis.document.createElement('style');\n style.innerHTML = `\n .${wrapperClassName}::-webkit-scrollbar { width: 0 !important; display: none }\n `;\n globalThis.document.head.appendChild(style);\n};\n\nconst createContent = (): HTMLDivElement =>\n createDiv({\n className: 'editor-mask',\n cssText: `\n position: absolute;\n top: 0;\n left: 0;\n transform: translate3d(0, 0, 0);\n `,\n });\n\nconst createWrapper = (): HTMLDivElement => {\n const el = createDiv({\n className: wrapperClassName,\n cssText: `\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n overflow: hidden;\n z-index: ${ZIndex.MASK};\n `,\n });\n\n hideScrollbar();\n\n return el;\n};\n\n/**\n * 蒙层\n * @description 用于拦截页面的点击动作,避免点击时触发组件自身动作;在编辑器中点击组件应当是选中组件;\n */\nexport default class StageMask extends Rule {\n public content: HTMLDivElement = createContent();\n public wrapper: HTMLDivElement;\n public core: StageCore;\n public page: HTMLElement | null = null;\n public pageScrollParent: HTMLElement | null = null;\n public scrollTop = 0;\n public scrollLeft = 0;\n public width = 0;\n public height = 0;\n public wrapperHeight = 0;\n public wrapperWidth = 0;\n public maxScrollTop = 0;\n public maxScrollLeft = 0;\n public intersectionObserver: IntersectionObserver | null = null;\n\n private mode: Mode = Mode.ABSOLUTE;\n private pageResizeObserver: ResizeObserver | null = null;\n private wrapperResizeObserver: ResizeObserver | null = null;\n /**\n * 高亮事件处理函数\n * @param event 事件对象\n */\n private highlightHandler = throttle((event: MouseEvent): void => {\n this.emit('highlight', event);\n }, throttleTime);\n\n constructor(config: StageMaskConfig) {\n const wrapper = createWrapper();\n super(wrapper);\n\n this.wrapper = wrapper;\n this.core = config.core;\n\n this.content.addEventListener('mousedown', this.mouseDownHandler);\n this.wrapper.appendChild(this.content);\n this.content.addEventListener('wheel', this.mouseWheelHandler);\n this.content.addEventListener('mousemove', this.highlightHandler);\n this.content.addEventListener('mouseleave', this.mouseLeaveHandler);\n }\n\n public setMode(mode: Mode) {\n this.mode = mode;\n this.scroll();\n if (mode === Mode.FIXED) {\n this.content.style.width = `${this.wrapperWidth}px`;\n this.content.style.height = `${this.wrapperHeight}px`;\n } else {\n this.content.style.width = `${this.width}px`;\n this.content.style.height = `${this.height}px`;\n }\n }\n\n /**\n * 监听页面大小变化\n * @description 同步页面与mask的大小\n * @param page 页面Dom节点\n */\n public observe(page: HTMLElement): void {\n if (!page) return;\n\n this.page = page;\n this.pageScrollParent = getScrollParent(page) || this.core.renderer.contentWindow?.document.documentElement || null;\n this.pageResizeObserver?.disconnect();\n this.wrapperResizeObserver?.disconnect();\n this.intersectionObserver?.disconnect();\n\n if (typeof IntersectionObserver !== 'undefined') {\n this.intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n const { target, intersectionRatio } = entry;\n if (intersectionRatio <= 0) {\n this.scrollIntoView(target);\n }\n this.intersectionObserver?.unobserve(target);\n });\n },\n {\n root: this.pageScrollParent,\n rootMargin: '0px',\n threshold: 1.0,\n },\n );\n }\n\n if (typeof ResizeObserver !== 'undefined') {\n this.pageResizeObserver = new ResizeObserver((entries) => {\n const [entry] = entries;\n const { clientHeight, clientWidth } = entry.target;\n this.setHeight(clientHeight);\n this.setWidth(clientWidth);\n\n this.scroll();\n if (this.core.dr.moveable) {\n this.core.dr.updateMoveable();\n }\n });\n\n this.pageResizeObserver.observe(page);\n\n this.wrapperResizeObserver = new ResizeObserver((entries) => {\n const [entry] = entries;\n const { clientHeight, clientWidth } = entry.target;\n this.wrapperHeight = clientHeight;\n this.wrapperWidth = clientWidth;\n this.setMaxScrollLeft();\n this.setMaxScrollTop();\n });\n this.wrapperResizeObserver.observe(this.wrapper);\n }\n }\n\n /**\n * 挂载Dom节点\n * @param el 将蒙层挂载到该Dom节点上\n */\n public mount(el: HTMLDivElement): void {\n if (!this.content) throw new Error('content 不存在');\n\n el.appendChild(this.wrapper);\n }\n\n public setLayout(el: HTMLElement): void {\n this.setMode(isFixedParent(el) ? Mode.FIXED : Mode.ABSOLUTE);\n }\n\n public scrollIntoView(el: Element): void {\n el.scrollIntoView();\n if (!this.pageScrollParent) return;\n this.scrollLeft = this.pageScrollParent.scrollLeft;\n this.scrollTop = this.pageScrollParent.scrollTop;\n this.scroll();\n }\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n this.content?.remove();\n this.page = null;\n this.pageScrollParent = null;\n this.pageResizeObserver?.disconnect();\n this.wrapperResizeObserver?.disconnect();\n\n this.content.removeEventListener('mouseleave', this.mouseLeaveHandler);\n super.destroy();\n }\n\n private scroll() {\n this.fixScrollValue();\n\n let { scrollLeft, scrollTop } = this;\n\n if (this.pageScrollParent) {\n this.pageScrollParent.scrollTo({\n top: scrollTop,\n left: scrollLeft,\n });\n }\n\n if (this.mode === Mode.FIXED) {\n scrollLeft = 0;\n scrollTop = 0;\n }\n\n this.scrollRule(scrollTop);\n this.scrollTo(scrollLeft, scrollTop);\n }\n\n private scrollTo(scrollLeft: number, scrollTop: number): void {\n this.content.style.transform = `translate3d(${-scrollLeft}px, ${-scrollTop}px, 0)`;\n }\n\n /**\n * 设置蒙层高度\n * @param height 高度\n */\n private setHeight(height: number): void {\n this.height = height;\n this.setMaxScrollTop();\n this.content.style.height = `${height}px`;\n }\n\n /**\n * 设置蒙层宽度\n * @param width 宽度\n */\n private setWidth(width: number): void {\n this.width = width;\n this.setMaxScrollLeft();\n this.content.style.width = `${width}px`;\n }\n\n /**\n * 计算并设置最大滚动宽度\n */\n private setMaxScrollLeft(): void {\n this.maxScrollLeft = Math.max(this.width - this.wrapperWidth, 0);\n }\n\n /**\n * 计算并设置最大滚动高度\n */\n private setMaxScrollTop(): void {\n this.maxScrollTop = Math.max(this.height - this.wrapperHeight, 0);\n }\n\n /**\n * 修复滚动距离\n * 由于滚动容器变化等因素,会导致当前滚动的距离不正确\n */\n private fixScrollValue(): void {\n if (this.scrollTop < 0) this.scrollTop = 0;\n if (this.scrollLeft < 0) this.scrollLeft = 0;\n if (this.maxScrollTop < this.scrollTop) this.scrollTop = this.maxScrollTop;\n if (this.maxScrollLeft < this.scrollLeft) this.scrollLeft = this.maxScrollLeft;\n }\n\n /**\n * 点击事件处理函数\n * @param event 事件对象\n */\n private mouseDownHandler = (event: MouseEvent): void => {\n this.emit('clearHighlight');\n\n event.stopImmediatePropagation();\n event.stopPropagation();\n\n if (event.button !== MouseButton.LEFT && event.button !== MouseButton.RIGHT) return;\n\n // 点击的对象如果是选中框,则不需要再触发选中了,而可能是拖动行为\n if ((event.target as HTMLDivElement).className.indexOf('moveable-control') !== -1) {\n return;\n }\n\n this.content.removeEventListener('mousemove', this.highlightHandler);\n\n this.emit('beforeSelect', event);\n\n // 如果是右键点击,这里的mouseup事件监听没有效果\n globalThis.document.addEventListener('mouseup', this.mouseUpHandler);\n };\n\n private mouseUpHandler = (): void => {\n globalThis.document.removeEventListener('mouseup', this.mouseUpHandler);\n this.content.addEventListener('mousemove', this.highlightHandler);\n this.emit('select');\n };\n\n private mouseWheelHandler = (event: WheelEvent) => {\n this.emit('clearHighlight');\n if (!this.page) throw new Error('page 未初始化');\n\n const { deltaY, deltaX } = event;\n\n if (this.page.clientHeight < this.wrapperHeight && deltaY) return;\n if (this.page.clientWidth < this.wrapperWidth && deltaX) return;\n\n if (this.maxScrollTop > 0) {\n this.scrollTop = this.scrollTop + deltaY;\n }\n\n if (this.maxScrollLeft > 0) {\n this.scrollLeft = this.scrollLeft + deltaX;\n }\n\n this.scroll();\n\n this.emit('scroll', event);\n };\n\n private mouseLeaveHandler = () => {\n setTimeout(() => this.emit('clearHighlight'), throttleTime);\n };\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport StageCore from './StageCore';\nimport type { Runtime, RuntimeWindow, StageRenderConfig } from './types';\nimport { getHost, isSameDomain } from './util';\n\nexport default class StageRender extends EventEmitter {\n /** 组件的js、css执行的环境,直接渲染为当前window,iframe渲染则为iframe.contentWindow */\n public contentWindow: RuntimeWindow | null = null;\n\n public runtime: Runtime | null = null;\n\n public iframe?: HTMLIFrameElement;\n\n public runtimeUrl?: string;\n\n public core: StageCore;\n\n private render?: (renderer: StageCore) => Promise<HTMLElement> | HTMLElement;\n\n constructor({ core }: StageRenderConfig) {\n super();\n\n this.core = core;\n this.runtimeUrl = core.config.runtimeUrl || '';\n this.render = core.config.render;\n\n this.iframe = globalThis.document.createElement('iframe');\n // 同源,直接加载\n this.iframe.src = isSameDomain(this.runtimeUrl) ? this.runtimeUrl : '';\n this.iframe.style.cssText = `\n border: 0;\n width: 100%;\n height: 100%;\n `;\n\n this.iframe.addEventListener('load', this.loadHandler);\n }\n\n public getMagicApi = () => ({\n onPageElUpdate: (el: HTMLElement) => this.emit('page-el-update', el),\n onRuntimeReady: (runtime: Runtime) => {\n this.runtime = runtime;\n // @ts-ignore\n globalThis.runtime = runtime;\n this.emit('runtime-ready', runtime);\n },\n });\n\n /**\n * 挂载Dom节点\n * @param el 将页面挂载到该Dom节点上\n */\n public async mount(el: HTMLDivElement) {\n if (this.iframe) {\n if (!isSameDomain(this.runtimeUrl) && this.runtimeUrl) {\n // 不同域,使用srcdoc发起异步请求,需要目标地址支持跨域\n let html = await fetch(this.runtimeUrl).then((res) => res.text());\n // 使用base, 解决相对路径或绝对路径的问题\n const base = `${location.protocol}//${getHost(this.runtimeUrl)}`;\n html = html.replace('<head>', `<head>\\n<base href=\"${base}\">`);\n this.iframe.srcdoc = html;\n }\n\n el.appendChild<HTMLIFrameElement>(this.iframe);\n } else {\n throw Error('mount 失败');\n }\n }\n\n public getRuntime = (): Promise<Runtime> => {\n if (this.runtime) return Promise.resolve(this.runtime);\n return new Promise((resolve) => {\n const listener = (runtime: Runtime) => {\n this.off('runtime-ready', listener);\n resolve(runtime);\n };\n this.on('runtime-ready', listener);\n });\n };\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n this.iframe?.removeEventListener('load', this.loadHandler);\n this.contentWindow = null;\n this.iframe?.remove();\n this.iframe = undefined;\n this.removeAllListeners();\n }\n\n private loadHandler = async () => {\n this.contentWindow = this.iframe?.contentWindow as RuntimeWindow;\n\n this.contentWindow.magic = this.getMagicApi();\n\n if (this.render) {\n const el = await this.render(this.core);\n if (el) {\n this.iframe?.contentDocument?.body?.appendChild(el);\n }\n }\n\n this.emit('onload');\n\n this.contentWindow.postMessage(\n {\n tmagicRuntimeReady: true,\n },\n '*',\n );\n };\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport type { Id } from '@tmagic/schema';\n\nimport { DEFAULT_ZOOM, GHOST_EL_ID_PREFIX } from './const';\nimport StageDragResize from './StageDragResize';\nimport StageHighlight from './StageHighlight';\nimport StageMask from './StageMask';\nimport StageRender from './StageRender';\nimport {\n CanSelect,\n GuidesEventData,\n RemoveData,\n Runtime,\n SortEventData,\n StageCoreConfig,\n UpdateData,\n UpdateEventData,\n} from './types';\nimport { addSelectedClassName, removeSelectedClassName } from './util';\n\nexport default class StageCore extends EventEmitter {\n public selectedDom: Element | undefined;\n public highlightedDom: Element | undefined;\n\n public renderer: StageRender;\n public mask: StageMask;\n public dr: StageDragResize;\n public highlightLayer: StageHighlight;\n public config: StageCoreConfig;\n public zoom = DEFAULT_ZOOM;\n public container?: HTMLDivElement;\n private canSelect: CanSelect;\n\n constructor(config: StageCoreConfig) {\n super();\n\n this.config = config;\n\n this.setZoom(config.zoom);\n this.canSelect = config.canSelect || ((el: HTMLElement) => !!el.id);\n\n this.renderer = new StageRender({ core: this });\n this.mask = new StageMask({ core: this });\n this.dr = new StageDragResize({ core: this, container: this.mask.content });\n this.highlightLayer = new StageHighlight({ core: this, container: this.mask.wrapper });\n\n this.renderer.on('runtime-ready', (runtime: Runtime) => {\n this.emit('runtime-ready', runtime);\n });\n this.renderer.on('page-el-update', (el: HTMLElement) => {\n this.mask?.observe(el);\n });\n\n this.mask\n .on('beforeSelect', (event: MouseEvent) => {\n this.setElementFromPoint(event);\n })\n .on('select', () => {\n this.emit('select', this.selectedDom);\n })\n .on('changeGuides', (data: GuidesEventData) => {\n this.dr.setGuidelines(data.type, data.guides);\n this.emit('changeGuides', data);\n })\n .on('highlight', async (event: MouseEvent) => {\n await this.setElementFromPoint(event);\n if (this.highlightedDom === this.selectedDom) {\n this.highlightLayer.clearHighlight();\n return;\n }\n this.highlightLayer.highlight(this.highlightedDom as HTMLElement);\n this.emit('highlight', this.highlightedDom);\n })\n .on('clearHighlight', async () => {\n this.highlightLayer.clearHighlight();\n });\n\n // 要先触发select,在触发update\n this.dr\n .on('update', (data: UpdateEventData) => {\n setTimeout(() => this.emit('update', data));\n })\n .on('sort', (data: UpdateEventData) => {\n setTimeout(() => this.emit('sort', data));\n });\n }\n\n public async setElementFromPoint(event: MouseEvent) {\n const { renderer, zoom } = this;\n\n const doc = renderer.contentWindow?.document;\n let x = event.clientX;\n let y = event.clientY;\n\n if (renderer.iframe) {\n const rect = renderer.iframe.getClientRects()[0];\n if (rect) {\n x = x - rect.left;\n y = y - rect.top;\n }\n }\n\n const els = doc?.elementsFromPoint(x / zoom, y / zoom) as HTMLElement[];\n\n let stopped = false;\n const stop = () => (stopped = true);\n for (const el of els) {\n if (!el.id.startsWith(GHOST_EL_ID_PREFIX) && (await this.canSelect(el, event, stop))) {\n if (stopped) break;\n if (event.type === 'mousemove') {\n this.highlight(el);\n break;\n }\n this.select(el, event);\n break;\n }\n }\n }\n\n /**\n * 选中组件\n * @param idOrEl 组件Dom节点的id属性,或者Dom节点\n */\n public async select(idOrEl: Id | HTMLElement, event?: MouseEvent): Promise<void> {\n const el = await this.getTargetElement(idOrEl);\n\n if (el === this.selectedDom) return;\n\n const runtime = await this.renderer.getRuntime();\n\n await runtime?.select?.(el.id);\n\n if (runtime?.beforeSelect) {\n await runtime.beforeSelect(el);\n }\n\n this.mask.setLayout(el);\n this.dr.select(el, event);\n\n if (this.config.autoScrollIntoView || el.dataset.autoScrollIntoView) {\n this.mask.intersectionObserver?.observe(el);\n }\n\n this.selectedDom = el;\n\n if (this.renderer.contentWindow) {\n removeSelectedClassName(this.renderer.contentWindow.document);\n if (this.selectedDom) {\n addSelectedClassName(this.selectedDom, this.renderer.contentWindow.document);\n }\n }\n }\n\n /**\n * 更新选中的节点\n * @param data 更新的数据\n */\n public update(data: UpdateData): Promise<void> {\n const { config } = data;\n\n return this.renderer?.getRuntime().then((runtime) => {\n runtime?.update?.(data);\n // 更新配置后,需要等组件渲染更新\n setTimeout(() => {\n const el = this.renderer.contentWindow?.document.getElementById(`${config.id}`);\n // 有可能dom已经重新渲染,不再是原来的dom了,所以这里判断id,而不是判断el === this.selectedDom\n if (el && el.id === this.selectedDom?.id) {\n this.selectedDom = el;\n // 更新了组件的布局,需要重新设置mask是否可以滚动\n this.mask.setLayout(el);\n this.dr.updateMoveable(el);\n }\n }, 0);\n });\n }\n\n /**\n * 高亮选中组件\n * @param el 页面Dom节点\n */\n public async highlight(idOrEl: HTMLElement | Id): Promise<void> {\n let el;\n try {\n el = await this.getTargetElement(idOrEl);\n } catch (error) {\n this.highlightLayer.clearHighlight();\n return;\n }\n if (el === this.highlightedDom) return;\n this.highlightLayer.highlight(el);\n this.highlightedDom = el;\n }\n\n public sortNode(data: SortEventData): Promise<void> {\n return this.renderer?.getRuntime().then((runtime) => runtime?.sortNode?.(data));\n }\n\n public add(data: UpdateData): Promise<void> {\n return this.renderer?.getRuntime().then((runtime) => runtime?.add?.(data));\n }\n\n public remove(data: RemoveData): Promise<void> {\n return this.renderer?.getRuntime().then((runtime) => runtime?.remove?.(data));\n }\n\n public setZoom(zoom: number = DEFAULT_ZOOM): void {\n this.zoom = zoom;\n }\n\n /**\n * 挂载Dom节点\n * @param el 将stage挂载到该Dom节点上\n */\n public async mount(el: HTMLDivElement) {\n this.container = el;\n const { mask, renderer } = this;\n\n await renderer.mount(el);\n mask.mount(el);\n\n this.emit('mounted');\n }\n\n /**\n * 清空所有参考线\n */\n public clearGuides() {\n this.mask.clearGuides();\n this.dr.clearGuides();\n }\n\n /**\n * 销毁实例\n */\n public destroy(): void {\n const { mask, renderer, dr, highlightLayer } = this;\n\n renderer.destroy();\n mask.destroy();\n dr.destroy();\n highlightLayer.destroy();\n\n this.removeAllListeners();\n\n this.container = undefined;\n }\n\n private async getTargetElement(idOrEl: Id | HTMLElement): Promise<HTMLElement> {\n if (typeof idOrEl === 'string' || typeof idOrEl === 'number') {\n const el = this.renderer.contentWindow?.document.getElementById(`${idOrEl}`);\n if (!el) throw new Error(`不存在ID为${idOrEl}的元素`);\n return el;\n }\n return idOrEl;\n }\n}\n"],"names":["EventEmitter","MoveableHelper","Moveable","Guides","throttle"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { EventEmitter } from 'events';
|
|
3
|
-
import { Id } from '@tmagic/schema';
|
|
3
|
+
import type { Id } from '@tmagic/schema';
|
|
4
4
|
import StageDragResize from './StageDragResize';
|
|
5
5
|
import StageHighlight from './StageHighlight';
|
|
6
6
|
import StageMask from './StageMask';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MoveableOptions } from 'moveable';
|
|
2
2
|
import Core from '@tmagic/core';
|
|
3
|
-
import { Id, MApp, MNode } from '@tmagic/schema';
|
|
3
|
+
import type { Id, MApp, MNode } from '@tmagic/schema';
|
|
4
4
|
import { GuidesType } from './const';
|
|
5
5
|
import StageCore from './StageCore';
|
|
6
6
|
import StageDragResize from './StageDragResize';
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.0.
|
|
2
|
+
"version": "1.0.3",
|
|
3
3
|
"name": "@tmagic/stage",
|
|
4
4
|
"sideEffects": [
|
|
5
5
|
"dist/*"
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@scena/guides": "^0.17.0",
|
|
30
|
-
"@tmagic/core": "1.0.
|
|
31
|
-
"@tmagic/schema": "1.0.
|
|
32
|
-
"@tmagic/utils": "1.0.
|
|
30
|
+
"@tmagic/core": "1.0.3",
|
|
31
|
+
"@tmagic/schema": "1.0.3",
|
|
32
|
+
"@tmagic/utils": "1.0.3",
|
|
33
33
|
"events": "^3.3.0",
|
|
34
34
|
"lodash-es": "^4.17.21",
|
|
35
35
|
"moveable": "^0.30.0",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"@types/node": "^15.12.4",
|
|
42
42
|
"sass": "^1.35.1",
|
|
43
43
|
"typescript": "^4.3.4",
|
|
44
|
-
"vite": "^2.
|
|
44
|
+
"vite": "^2.9.13",
|
|
45
45
|
"vite-plugin-dts": "^0.9.6"
|
|
46
46
|
}
|
|
47
47
|
}
|
package/src/StageCore.ts
CHANGED
package/src/types.ts
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
import { MoveableOptions } from 'moveable';
|
|
20
20
|
|
|
21
21
|
import Core from '@tmagic/core';
|
|
22
|
-
import { Id, MApp, MNode } from '@tmagic/schema';
|
|
22
|
+
import type { Id, MApp, MNode } from '@tmagic/schema';
|
|
23
23
|
|
|
24
24
|
import { GuidesType } from './const';
|
|
25
25
|
import StageCore from './StageCore';
|