@tmagic/editor 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tmagic-editor.mjs +43 -57
- package/dist/tmagic-editor.mjs.map +1 -1
- package/dist/tmagic-editor.umd.js +43 -57
- package/dist/tmagic-editor.umd.js.map +1 -1
- package/package.json +7 -7
- package/src/layouts/NavMenu.vue +1 -1
- package/src/layouts/sidebar/ComponentListPanel.vue +1 -1
- package/src/layouts/workspace/PageBarScrollContainer.vue +46 -43
- package/src/layouts/workspace/Workspace.vue +3 -3
- package/src/services/editor.ts +10 -4
- package/src/services/ui.ts +6 -6
- package/src/utils/scroll-viewer.ts +1 -0
- package/types/layouts/workspace/PageBarScrollContainer.vue.d.ts +2 -1
- package/types/services/ui.d.ts +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmagic-editor.mjs","sources":["../src/fields/Code.vue","../src/fields/CodeLink.vue","../src/fields/UISelect.vue","../src/layouts/CodeEditor.vue","../src/utils/config.ts","../src/utils/undo-redo.ts","../src/utils/compose.ts","../src/services/BaseService.ts","../src/services/history.ts","../src/services/storage.ts","../src/type.ts","../src/utils/editor.ts","../src/services/props.ts","../src/utils/operator.ts","../src/services/editor.ts","../src/services/events.ts","../src/utils/props.ts","../src/utils/logger.ts","../src/services/ui.ts","../src/utils/stage.ts","../src/layouts/AddPageBox.vue","../src/layouts/Resizer.vue","../src/layouts/Framework.vue","../src/components/ToolButton.vue","../src/layouts/NavMenu.vue","../src/layouts/PropsPanel.vue","../src/layouts/sidebar/ComponentListPanel.vue","../src/components/ContentMenu.vue","../src/layouts/sidebar/LayerMenu.vue","../src/layouts/sidebar/LayerPanel.vue","../src/layouts/sidebar/TabPane.vue","../src/layouts/sidebar/Sidebar.vue","../src/layouts/workspace/PageBarScrollContainer.vue","../src/layouts/workspace/PageBar.vue","../src/utils/scroll-viewer.ts","../src/components/ScrollBar.vue","../src/components/ScrollViewer.vue","../src/layouts/workspace/ViewerMenu.vue","../src/layouts/workspace/Stage.vue","../src/layouts/workspace/Workspace.vue","../src/services/componentList.ts","../src/Editor.vue","../src/index.ts"],"sourcesContent":["<template>\n <magic-code-editor\n :style=\"`height: ${height}`\"\n :init-values=\"model[name]\"\n :language=\"language\"\n @save=\"save\"\n ></magic-code-editor>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'm-fields-vs-code',\n\n props: ['model', 'name', 'config', 'prop'],\n\n emits: ['change'],\n\n setup(props, { emit }) {\n const language = computed(() => props.config.language || 'javascript');\n const height = computed(() => `${document.body.clientHeight - 168}px`);\n\n return {\n height,\n language,\n\n save(v: string) {\n props.model[props.name] = v;\n emit('change', v);\n },\n };\n },\n});\n</script>\n","<template>\n <m-fields-link :config=\"formConfig\" :model=\"modelValue\" name=\"form\" @change=\"changeHandler\"></m-fields-link>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType, ref, watchEffect } from 'vue';\nimport serialize from 'serialize-javascript';\n\ninterface CodeLinkConfig {\n type: 'code-link';\n name: string;\n text?: string;\n formTitle?: string;\n}\n\nexport default defineComponent({\n name: 'm-fields-code-link',\n\n props: {\n config: {\n type: Object as PropType<CodeLinkConfig>,\n },\n\n model: {\n type: Object,\n },\n\n name: {\n type: String,\n },\n\n prop: {\n type: String,\n },\n },\n\n emits: ['change'],\n\n setup(props, { emit }) {\n const modelValue = ref<{ form: Record<string, any> }>({\n form: {},\n });\n\n watchEffect(() => {\n if (!props.model || !props.name) return;\n modelValue.value.form[props.name] = serialize(props.model[props.name], {\n space: 2,\n unsafe: true,\n }).replace(/\"(\\w+)\":\\s/g, '$1: ');\n });\n\n return {\n modelValue,\n\n formConfig: computed(() => ({\n ...props.config,\n text: '',\n type: 'link',\n form: [\n {\n name: props.name,\n type: 'vs-code',\n },\n ],\n })),\n\n changeHandler(v: Record<string, any>) {\n if (!props.name || !props.model) return;\n\n try {\n // eslint-disable-next-line no-eval\n props.model[props.name] = eval(`${v[props.name]}`);\n emit('change', props.model[props.name]);\n } catch (e) {\n console.error(e);\n }\n },\n };\n },\n});\n</script>\n","<template>\n <div class=\"m-fields-ui-select\" v-if=\"uiSelectMode\" @click=\"cancelHandler\">\n <el-button type=\"danger\" :icon=\"Delete\" text style=\"padding: 0\">取消</el-button>\n </div>\n <div class=\"m-fields-ui-select\" v-else @click=\"startSelect\" style=\"display: flex\">\n <el-tooltip v-if=\"val\" content=\"清除\">\n <el-button style=\"padding: 0\" type=\"danger\" :icon=\"Close\" text @click.stop=\"deleteHandler\"></el-button>\n </el-tooltip>\n <el-tooltip :content=\"val ? toName + '_' + val : '点击此处选择'\">\n <el-button text style=\"padding: 0; margin: 0\">{{ val ? toName + '_' + val : '点击此处选择' }}</el-button>\n </el-tooltip>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, ref } from 'vue';\nimport { Close, Delete } from '@element-plus/icons-vue';\n\nimport { FormState } from '@tmagic/form';\n\nimport { Services } from '../type';\n\nconst props = defineProps<{\n config: any;\n model: any;\n prop: string;\n name: string;\n}>();\n\nconst emit = defineEmits(['change']);\n\nconst services = inject<Services>('services');\nconst mForm = inject<FormState>('mForm');\nconst val = computed(() => props.model[props.name]);\nconst uiSelectMode = ref(false);\n\nconst cancelHandler = () => {\n if (!services?.uiService) return;\n services.uiService.set<boolean>('uiSelectMode', false);\n uiSelectMode.value = false;\n globalThis.document.removeEventListener('ui-select', clickHandler as EventListener);\n};\n\nconst clickHandler = ({ detail }: Event & { detail: any }) => {\n if (detail.id) {\n props.model[props.name] = detail.id;\n emit('change', detail.id);\n mForm?.$emit('field-change', props.prop, detail.id);\n }\n\n if (cancelHandler) {\n cancelHandler();\n }\n};\n\nconst toName = computed(() => {\n const config = services?.editorService.getNodeById(val.value);\n return config?.name || '';\n});\n\nconst startSelect = () => {\n if (!services?.uiService) return;\n services.uiService.set<boolean>('uiSelectMode', true);\n uiSelectMode.value = true;\n globalThis.document.addEventListener('ui-select', clickHandler as EventListener);\n};\n\nconst deleteHandler = () => {\n if (props.model) {\n props.model[props.name] = '';\n emit('change', '');\n mForm?.$emit('field-change', props.prop, '');\n }\n};\n</script>\n\n<style lang=\"scss\">\n.m-fields-ui-select {\n cursor: pointer;\n i {\n margin-right: 3px;\n }\n span {\n color: #2882e0;\n }\n}\n</style>\n","<template>\n <div ref=\"codeEditor\" class=\"magic-code-editor\"></div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, onMounted, onUnmounted, ref, watch } from 'vue';\nimport { throttle } from 'lodash-es';\nimport * as monaco from 'monaco-editor';\nimport serialize from 'serialize-javascript';\n\nconst toString = (v: string | any, language: string): string => {\n let value = '';\n if (typeof v !== 'string') {\n value = serialize(v, {\n space: 2,\n unsafe: true,\n }).replace(/\"(\\w+)\":\\s/g, '$1: ');\n } else {\n value = v;\n }\n if (language === 'javascript' && value.startsWith('{') && value.endsWith('}')) {\n value = `(${value})`;\n }\n return value;\n};\n\nexport default defineComponent({\n name: 'magic-code-editor',\n\n props: {\n initValues: {\n type: [String, Object],\n },\n\n modifiedValues: {\n type: [String, Object],\n },\n\n type: {\n type: String,\n default: () => '',\n },\n\n language: {\n type: String,\n default: () => 'javascript',\n },\n\n options: {\n type: Object,\n default: () => ({}),\n },\n },\n\n emits: ['initd', 'save'],\n\n setup(props, { emit }) {\n let vsEditor: monaco.editor.IStandaloneCodeEditor | null = null;\n let vsDiffEditor: monaco.editor.IStandaloneDiffEditor | null = null;\n\n const values = ref('');\n const loading = ref(false);\n const codeEditor = ref<HTMLDivElement>();\n\n const resizeObserver = new globalThis.ResizeObserver(\n throttle((): void => {\n vsEditor?.layout();\n vsDiffEditor?.layout();\n }, 300),\n );\n\n const setEditorValue = (v: string | any, m: string | any) => {\n values.value = toString(v, props.language);\n\n if (props.type === 'diff') {\n const originalModel = monaco.editor.createModel(values.value, 'text/javascript');\n const modifiedModel = monaco.editor.createModel(toString(m, props.language), 'text/javascript');\n\n return vsDiffEditor?.setModel({\n original: originalModel,\n modified: modifiedModel,\n });\n }\n\n return vsEditor?.setValue(values.value);\n };\n\n const getEditorValue = () =>\n props.type === 'diff' ? vsDiffEditor?.getModifiedEditor().getValue() : vsEditor?.getValue();\n\n const init = async () => {\n if (!codeEditor.value) return;\n\n const options = {\n value: values.value,\n language: props.language,\n theme: 'vs-dark',\n ...props.options,\n };\n\n if (props.type === 'diff') {\n vsDiffEditor = monaco.editor.createDiffEditor(codeEditor.value, options);\n } else {\n vsEditor = monaco.editor.create(codeEditor.value, options);\n }\n\n setEditorValue(props.initValues, props.modifiedValues);\n\n loading.value = false;\n\n emit('initd', vsEditor);\n\n codeEditor.value.addEventListener('keydown', (e) => {\n if (e.keyCode === 83 && (navigator.platform.match('Mac') ? e.metaKey : e.ctrlKey)) {\n e.preventDefault();\n e.stopPropagation();\n emit('save', getEditorValue());\n }\n });\n\n if (props.type !== 'diff') {\n vsEditor?.onDidBlurEditorWidget(() => {\n emit('save', getEditorValue());\n });\n }\n\n resizeObserver.observe(codeEditor.value);\n };\n\n watch(\n () => props.initValues,\n (v, preV) => {\n if (v !== preV) {\n setEditorValue(props.initValues, props.modifiedValues);\n }\n },\n {\n deep: true,\n immediate: true,\n },\n );\n\n onMounted(async () => {\n loading.value = true;\n\n init();\n });\n\n onUnmounted(() => {\n resizeObserver.disconnect();\n });\n\n return {\n values,\n loading,\n codeEditor,\n\n getEditor() {\n return vsEditor || vsDiffEditor;\n },\n\n setEditorValue,\n\n focus() {\n vsEditor?.focus();\n vsDiffEditor?.focus();\n },\n };\n },\n});\n</script>\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 { InstallOptions } from '../type';\n\nlet $TMAGIC_EDITOR: InstallOptions = {} as any;\n\nconst setConfig = (option: InstallOptions): void => {\n $TMAGIC_EDITOR = option;\n};\n\nconst getConfig = (key: keyof InstallOptions): unknown => $TMAGIC_EDITOR[key];\n\nexport { getConfig, setConfig };\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 { cloneDeep } from 'lodash-es';\n\nexport class UndoRedo<T = any> {\n private elementList: T[];\n private listCursor: number;\n private listMaxSize: number;\n\n constructor(listMaxSize = 200) {\n const minListMaxSize = 2;\n this.elementList = [];\n this.listCursor = 0;\n this.listMaxSize = listMaxSize > minListMaxSize ? listMaxSize : minListMaxSize;\n }\n\n public pushElement(element: T): void {\n // 新元素进来时,把游标之外的元素全部丢弃,并把新元素放进来\n this.elementList.splice(this.listCursor, this.elementList.length - this.listCursor, cloneDeep(element));\n this.listCursor += 1;\n // 如果list中的元素超过maxSize,则移除第一个元素\n if (this.elementList.length > this.listMaxSize) {\n this.elementList.shift();\n this.listCursor -= 1;\n }\n }\n\n public canUndo(): boolean {\n return this.listCursor > 1;\n }\n\n // 返回undo后的当前元素\n public undo(): T | null {\n if (!this.canUndo()) {\n return null;\n }\n this.listCursor -= 1;\n return this.getCurrentElement();\n }\n\n public canRedo() {\n return this.elementList.length > this.listCursor;\n }\n\n // 返回redo后的当前元素\n public redo(): T | null {\n if (!this.canRedo()) {\n return null;\n }\n this.listCursor += 1;\n return this.getCurrentElement();\n }\n\n public getCurrentElement(): T | null {\n if (this.listCursor < 1) {\n return null;\n }\n return cloneDeep(this.elementList[this.listCursor - 1]);\n }\n}\n","/**\n * @param {Array} middleware\n * @return {Function}\n */\nexport const compose = (middleware: Function[]) => {\n if (!Array.isArray(middleware)) throw new TypeError('Middleware 必须是一个数组!');\n for (const fn of middleware) {\n if (typeof fn !== 'function') throw new TypeError('Middleware 必须由函数组成!');\n }\n\n /**\n * @param {Object} args\n * @return {Promise}\n * @api public\n */\n return (args: any[], next?: Function) => {\n // last called middleware #\n let index = -1;\n return dispatch(0);\n function dispatch(i: number): Promise<void> {\n if (i <= index) return Promise.reject(new Error('next() 被多次调用'));\n index = i;\n let fn = middleware[i];\n if (i === middleware.length && next) fn = next;\n if (!fn) return Promise.resolve();\n try {\n return Promise.resolve(fn(...args, dispatch.bind(null, i + 1)));\n } catch (err) {\n return Promise.reject(err);\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 { compose } from '../utils/compose';\n\nconst methodName = (prefix: string, name: string) => `${prefix}${name[0].toUpperCase()}${name.substring(1)}`;\n\nconst isError = (error: any): boolean => Object.prototype.toString.call(error) === '[object Error]';\n\nconst doAction = async (\n args: any[],\n scope: any,\n sourceMethod: any,\n beforeMethodName: string,\n afterMethodName: string,\n fn: (args: any[], next?: Function | undefined) => Promise<void>,\n) => {\n try {\n let beforeArgs = args;\n\n for (const beforeMethod of scope.pluginOptionsList[beforeMethodName]) {\n beforeArgs = (await beforeMethod(...beforeArgs)) || [];\n\n if (isError(beforeArgs)) throw beforeArgs;\n\n if (!Array.isArray(beforeArgs)) {\n beforeArgs = [beforeArgs];\n }\n }\n\n let returnValue: any = await fn(beforeArgs, sourceMethod.bind(scope));\n\n for (const afterMethod of scope.pluginOptionsList[afterMethodName]) {\n returnValue = await afterMethod(returnValue, ...beforeArgs);\n\n if (isError(returnValue)) throw returnValue;\n }\n\n return returnValue;\n } catch (error) {\n throw error;\n }\n};\n\n/**\n * 提供两种方式对Class进行扩展\n * 方法1:\n * 给Class中的每个方法都添加before after两个钩子\n * 给Class添加一个usePlugin方法,use方法可以传入一个包含before或者after方法的对象\n *\n * 例如:\n * Class EditorService extends BaseService {\n * constructor() {\n * super(['add']);\n * }\n * add(value) { return result; }\n * };\n *\n * const editorService = new EditorService();\n *\n * editorService.usePlugin({\n * beforeAdd(value) { return [value] },\n * afterAdd(value, result) {},\n * });\n *\n * editorService.add(); 最终会变成 () => {\n * editorService.beforeAdd();\n * editorService.add();\n * editorService.afterAdd();\n * }\n *\n * 调用时的参数会透传到before方法的参数中, 然后before的return 会作为原方法的参数和after的参数,after第一个参数则是原方法的return值;\n * 如需终止后续方法调用可以return new Error();\n *\n * 方法2:\n * 给Class中的每个方法都添加中间件\n * 给Class添加一个use方法,use方法可以传入一个包含源对象方法名作为key值的对象\n *\n * 例如:\n * Class EditorService extends BaseService {\n * constructor() {\n * super(['add']);\n * }\n * add(value) { return result; }\n * };\n *\n * const editorService = new EditorService();\n * editorService.use({\n * add(value, next) { console.log(value); next() },\n * });\n */\nexport default class extends EventEmitter {\n private pluginOptionsList: Record<string, Function[]> = {};\n private middleware: Record<string, Function[]> = {};\n private taskList: (() => Promise<void>)[] = [];\n private doingTask = false;\n\n constructor(methods: string[] = [], serialMethods: string[] = []) {\n super();\n\n methods.forEach((propertyName: string) => {\n const scope = this as any;\n\n const sourceMethod = scope[propertyName];\n\n const beforeMethodName = methodName('before', propertyName);\n const afterMethodName = methodName('after', propertyName);\n\n this.pluginOptionsList[beforeMethodName] = [];\n this.pluginOptionsList[afterMethodName] = [];\n this.middleware[propertyName] = [];\n\n const fn = compose(this.middleware[propertyName]);\n Object.defineProperty(scope, propertyName, {\n value: async (...args: any[]) => {\n if (!serialMethods.includes(propertyName)) {\n return doAction(args, scope, sourceMethod, beforeMethodName, afterMethodName, fn);\n }\n\n // 由于async await,所以会出现函数执行到await时让出线程,导致执行顺序出错,例如调用了select(1) -> update -> select(2),这个时候就有可能出现update了2;\n // 这里保证函数调用严格按顺序执行;\n const promise = new Promise<any>((resolve, reject) => {\n this.taskList.push(async () => {\n try {\n const value = await doAction(args, scope, sourceMethod, beforeMethodName, afterMethodName, fn);\n resolve(value);\n } catch (e) {\n reject(e);\n }\n });\n });\n\n if (!this.doingTask) {\n this.doTask();\n }\n\n return promise;\n },\n });\n });\n }\n\n public use(options: Record<string, Function>) {\n Object.entries(options).forEach(([methodName, method]: [string, Function]) => {\n if (typeof method === 'function') this.middleware[methodName].push(method);\n });\n }\n\n public usePlugin(options: Record<string, Function>) {\n Object.entries(options).forEach(([methodName, method]: [string, Function]) => {\n if (typeof method === 'function') this.pluginOptionsList[methodName].push(method);\n });\n }\n\n private async doTask() {\n this.doingTask = true;\n let task = this.taskList.shift();\n while (task) {\n await task();\n task = this.taskList.shift();\n }\n this.doingTask = false;\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 { reactive } from 'vue';\n\nimport type { Id, MPage } from '@tmagic/schema';\n\nimport { UndoRedo } from '../utils/undo-redo';\n\nimport BaseService from './BaseService';\n\nexport interface StepValue {\n data: MPage;\n modifiedNodeIds: Map<Id, Id>;\n nodeId: Id;\n}\n\nexport interface HistoryState {\n pageId?: Id;\n pageSteps: Record<Id, UndoRedo<StepValue>>;\n canRedo: boolean;\n canUndo: boolean;\n}\n\nclass History extends BaseService {\n public state = reactive<HistoryState>({\n pageSteps: {},\n pageId: undefined,\n canRedo: false,\n canUndo: false,\n });\n\n constructor() {\n super([]);\n\n this.on('change', this.setCanUndoRedo);\n }\n\n public reset() {\n this.state.pageSteps = {};\n this.state.pageId = undefined;\n this.state.canRedo = false;\n this.state.canUndo = false;\n }\n\n public changePage(page: MPage): void {\n if (!page) return;\n\n this.state.pageId = page.id;\n\n if (!this.state.pageSteps[this.state.pageId]) {\n const undoRedo = new UndoRedo<StepValue>();\n\n undoRedo.pushElement({\n data: page,\n modifiedNodeIds: new Map(),\n nodeId: page.id,\n });\n\n this.state.pageSteps[this.state.pageId] = undoRedo;\n }\n\n this.setCanUndoRedo();\n }\n\n public empty(): void {\n this.state.pageId = undefined;\n this.state.pageSteps = {};\n this.state.canRedo = false;\n this.state.canUndo = false;\n }\n\n public push(state: StepValue): StepValue | null {\n const undoRedo = this.getUndoRedo();\n if (!undoRedo) return null;\n undoRedo.pushElement(state);\n this.emit('change', state);\n return state;\n }\n\n public undo(): StepValue | null {\n const undoRedo = this.getUndoRedo();\n if (!undoRedo) return null;\n const state = undoRedo.undo();\n this.emit('change', state);\n return state;\n }\n\n public redo(): StepValue | null {\n const undoRedo = this.getUndoRedo();\n if (!undoRedo) return null;\n const state = undoRedo.redo();\n this.emit('change', state);\n return state;\n }\n\n public destroy(): void {\n this.empty();\n this.removeAllListeners();\n }\n\n private getUndoRedo() {\n if (!this.state.pageId) return null;\n return this.state.pageSteps[this.state.pageId];\n }\n\n private setCanUndoRedo(): void {\n const undoRedo = this.getUndoRedo();\n this.state.canRedo = undoRedo?.canRedo() || false;\n this.state.canUndo = undoRedo?.canUndo() || false;\n }\n}\n\nexport type HistoryService = History;\n\nexport default new History();\n","import serialize from 'serialize-javascript';\n\nimport BaseService from './BaseService';\n\ninterface Options {\n namespace?: string;\n protocol?: Protocol;\n}\n\nexport enum Protocol {\n OBJECT = 'object',\n JSON = 'json',\n STRING = 'string',\n NUMBER = 'number',\n BOOLEAN = 'boolean',\n}\n\n/**\n * 数据存储服务\n */\nexport class WebStorage extends BaseService {\n private storage: Storage = globalThis.localStorage;\n private namespace = 'tmagic';\n\n constructor() {\n super(['getStorage', 'getNamespace', 'clear', 'getItem', 'removeItem', 'setItem']);\n }\n\n /**\n * 获取数据存储对象,可以通过\n * const storageService = new StorageService();\n * storageService.usePlugin({\n * // 替换存储对象为 sessionStorage\n * async afterGetStorage(): Promise<Storage> {\n * return window.sessionStorage;\n * },\n * });\n */\n public async getStorage(): Promise<Storage> {\n return this.storage;\n }\n\n public async getNamespace(): Promise<string> {\n return this.namespace;\n }\n\n /**\n * 清理,支持storageService.usePlugin\n */\n public async clear(): Promise<void> {\n const storage = await this.getStorage();\n storage.clear();\n }\n /**\n * 获取存储项,支持storageService.usePlugin\n */\n public async getItem(key: string, options: Options = {}): Promise<any> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n const { protocol = options.protocol, item } = this.getValueAndProtocol(\n storage.getItem(`${options.namespace || namespace}:${key}`),\n );\n\n if (item === null) return null;\n\n switch (protocol) {\n case Protocol.OBJECT:\n // eslint-disable-next-line no-eval\n return eval(`(${item})`);\n case Protocol.JSON:\n return JSON.parse(item);\n case Protocol.NUMBER:\n return Number(item);\n case Protocol.BOOLEAN:\n return Boolean(item);\n default:\n return item;\n }\n }\n /**\n * 获取指定索引位置的key\n */\n public async key(index: number): Promise<string | null> {\n const storage = await this.getStorage();\n return storage.key(index);\n }\n\n /**\n * 移除存储项,支持storageService.usePlugin\n */\n public async removeItem(key: string, options: Options = {}): Promise<void> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n storage.removeItem(`${options.namespace || namespace}:${key}`);\n }\n\n /**\n * 设置存储项,支持storageService.usePlugin\n */\n public async setItem(key: string, value: any, options: Options = {}): Promise<void> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n let item = value;\n const protocol = options.protocol ? `${options.protocol}:` : '';\n if (typeof value === Protocol.STRING || typeof value === Protocol.NUMBER) {\n item = `${protocol}${value}`;\n } else {\n item = `${protocol}${serialize(value)}`;\n }\n storage.setItem(`${options.namespace || namespace}:${key}`, item);\n }\n\n public destroy() {\n this.removeAllListeners();\n }\n\n private getValueAndProtocol(value: string | null) {\n let protocol = '';\n\n if (value === null) {\n return {\n item: value,\n protocol,\n };\n }\n\n const item = value.replace(new RegExp(`^(${Object.values(Protocol).join('|')})(:)(.+)`), (_$0, $1, _$2, $3) => {\n protocol = $1;\n return $3;\n });\n\n return {\n protocol,\n item,\n };\n }\n}\n\nexport type StorageService = WebStorage;\nexport default new WebStorage();\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 type { Component } from 'vue';\n\nimport type { FormConfig } from '@tmagic/form';\nimport type { Id, MApp, MContainer, MNode, MPage } from '@tmagic/schema';\nimport type StageCore from '@tmagic/stage';\nimport type { ContainerHighlightType, MoveableOptions } from '@tmagic/stage';\n\nimport type { ComponentListService } from './services/componentList';\nimport type { EditorService } from './services/editor';\nimport type { EventsService } from './services/events';\nimport type { HistoryService } from './services/history';\nimport type { PropsService } from './services/props';\nimport type { StorageService } from './services/storage';\nimport type { UiService } from './services/ui';\n\nexport type BeforeAdd = (config: MNode, parent: MContainer) => Promise<MNode> | MNode;\nexport type GetConfig = (config: FormConfig) => Promise<FormConfig> | FormConfig;\n\nexport interface InstallOptions {\n [key: string]: any;\n}\n\nexport interface Services {\n editorService: EditorService;\n historyService: HistoryService;\n storageService: StorageService;\n eventsService: EventsService;\n propsService: PropsService;\n componentListService: ComponentListService;\n uiService: UiService;\n}\n\nexport interface StageOptions {\n runtimeUrl: string;\n autoScrollIntoView: boolean;\n containerHighlightClassName: string;\n containerHighlightDuration: number;\n containerHighlightType: ContainerHighlightType;\n render: () => HTMLDivElement;\n moveableOptions: MoveableOptions | ((core?: StageCore) => MoveableOptions);\n canSelect: (el: HTMLElement) => boolean | Promise<boolean>;\n isContainer: (el: HTMLElement) => boolean | Promise<boolean>;\n updateDragEl: (el: HTMLDivElement) => void;\n}\n\nexport interface StoreState {\n root: MApp | null;\n page: MPage | null;\n parent: MContainer | null;\n node: MNode | null;\n highlightNode: MNode | null;\n nodes: MNode[];\n stage: StageCore | null;\n modifiedNodeIds: Map<Id, Id>;\n pageLength: number;\n}\n\nexport interface PropsState {\n propsConfigMap: Record<string, FormConfig>;\n propsValueMap: Record<string, MNode>;\n}\n\nexport interface ComponentGroupState {\n list: ComponentGroup[];\n}\n\nexport enum ColumnLayout {\n LEFT = 'left',\n CENTER = 'center',\n RIGHT = 'right',\n}\n\nexport interface SetColumnWidth {\n [ColumnLayout.LEFT]?: number;\n [ColumnLayout.CENTER]?: number | 'auto';\n [ColumnLayout.RIGHT]?: number;\n}\n\nexport interface GetColumnWidth {\n [ColumnLayout.LEFT]: number;\n [ColumnLayout.CENTER]: number;\n [ColumnLayout.RIGHT]: number;\n}\n\nexport interface StageRect {\n width: number;\n height: number;\n}\n\nexport interface UiState {\n /** 当前点击画布是否触发选中,true: 不触发,false: 触发,默认为false */\n uiSelectMode: boolean;\n /** 是否显示整个配置源码, true: 显示, false: 不显示,默认为false */\n showSrc: boolean;\n /** 画布显示放大倍数,默认为 1 */\n zoom: number;\n /** 画布容器的宽高 */\n stageContainerRect: StageRect;\n /** 画布顶层div的宽高,可用于改变画布的大小 */\n stageRect: StageRect;\n /** 编辑器列布局每一列的宽度,分为左中右三列 */\n columnWidth: GetColumnWidth;\n /** 是否显示画布参考线,true: 显示,false: 不显示,默认为true */\n showGuides: boolean;\n /** 是否显示标尺,true: 显示,false: 不显示,默认为true */\n showRule: boolean;\n /** 用于控制该属性配置表单内组件的尺寸 */\n propsPanelSize: 'large' | 'default' | 'small';\n /** 是否显示新增页面按钮 */\n showAddPageButton: boolean;\n}\n\nexport interface EditorNodeInfo {\n node?: MNode;\n parent?: MContainer;\n page?: MPage;\n}\n\nexport interface AddMNode {\n type: string;\n name?: string;\n inputEvent?: DragEvent;\n [key: string]: any;\n}\n\nexport interface PastePosition {\n left?: number;\n top?: number;\n /**\n * 粘贴位置X方向偏移量\n */\n offsetX?: number;\n /**\n * 粘贴位置Y方向偏移量\n */\n offsetY?: number;\n}\n\n/**\n * 菜单按钮\n */\nexport interface MenuButton {\n /**\n * 按钮类型\n * button: 只有文字不带边框的按钮\n * text: 纯文本\n * dropdown: 下拉菜单\n * divider: 分隔线\n * zoom: 放大缩小\n */\n type: 'button' | 'dropdown' | 'text' | 'divider' | 'zoom';\n /** 当type为divider时有效,分割线方向, 默认vertical */\n direction?: 'horizontal' | 'vertical';\n /** 展示的文案 */\n text?: string;\n /** 鼠标悬浮是显示的气泡中的文案 */\n tooltip?: string;\n /** element-plus icon class */\n icon?: string | Component<{}, {}, any>;\n /** 是否置灰,默认为false */\n disabled?: boolean | ((data?: Services) => boolean);\n /** 是否显示,默认为true */\n display?: boolean | ((data?: Services) => boolean);\n /** type为button/dropdown时点击运行的方法 */\n handler?: (data: Services, event: MouseEvent) => Promise<any> | any;\n /** type为dropdown时,下拉的菜单列表, 或者有子菜单时 */\n className?: string;\n items?: MenuButton[];\n}\n\nexport interface MenuComponent {\n type: 'component';\n /** Vue3组件 */\n component: any;\n /** 传入组件的props对象 */\n props?: Record<string, any>;\n /** 组件监听的事件对象,如:{ click: () => { console.log('click'); } } */\n listeners?: Record<string, Function>;\n slots?: Record<string, any>;\n /** 是否显示,默认为true */\n className?: string;\n display?: boolean | ((data?: Services) => Promise<boolean> | boolean);\n}\n\n/**\n * '/': 分隔符\n * 'delete': 删除按钮\n * 'undo': 撤销按钮\n * 'redo': 恢复按钮\n * 'zoom-in': 放大按钮\n * 'zoom-out': 缩小按钮\n */\nexport type MenuItem =\n | '/'\n | 'delete'\n | 'undo'\n | 'redo'\n | 'zoom'\n | 'zoom-in'\n | 'zoom-out'\n | 'guides'\n | 'rule'\n | MenuButton\n | MenuComponent\n | string;\n\n/** 工具栏 */\nexport interface MenuBarData {\n /** 顶部工具栏左边项 */\n [ColumnLayout.LEFT]?: MenuItem[];\n /** 顶部工具栏中间项 */\n [ColumnLayout.CENTER]?: MenuItem[];\n /** 顶部工具栏右边项 */\n [ColumnLayout.RIGHT]?: MenuItem[];\n}\n\nexport interface SideComponent extends MenuComponent {\n /** 显示文案 */\n text: string;\n /** element-plus icon class */\n icon: Component<{}, {}, any>;\n}\n\n/**\n * component-list: 组件列表\n * layer: 已选组件树\n */\nexport type SideItem = 'component-list' | 'layer' | SideComponent;\n\n/** 工具栏 */\nexport interface SideBarData {\n /** 容器类型 */\n type: 'tabs';\n /** 默认激活的内容 */\n status: string;\n /** panel列表 */\n items: SideItem[];\n}\n\nexport interface ComponentItem {\n /** 显示文案 */\n text: string;\n /** 组件类型 */\n type: string;\n /** element-plus icon class */\n icon?: string | Component;\n data?: {\n [key: string]: any;\n };\n}\n\nexport interface ComponentGroup {\n /** 显示文案 */\n title: string;\n /** 组内列表 */\n items: ComponentItem[];\n}\n\nexport interface UpdateData {\n id: Id;\n [key: string]: any;\n}\n\nexport enum LayerOffset {\n TOP = 'top',\n BOTTOM = 'bottom',\n}\n\n/** 容器布局 */\nexport enum Layout {\n FLEX = 'flex',\n FIXED = 'fixed',\n RELATIVE = 'relative',\n ABSOLUTE = 'absolute',\n}\n\nexport enum Keys {\n ESCAPE = 'Space',\n}\n\nexport const H_GUIDE_LINE_STORAGE_KEY = '$MagicStageHorizontalGuidelinesData';\nexport const V_GUIDE_LINE_STORAGE_KEY = '$MagicStageVerticalGuidelinesData';\n\nexport interface ScrollViewerEvent {\n scrollLeft: number;\n scrollTop: number;\n scrollHeight: number;\n scrollWidth: number;\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 type { MApp, MContainer, MNode, MPage } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\nimport type StageCore from '@tmagic/stage';\nimport { getNodePath, isNumber, isPage, isPop } from '@tmagic/utils';\n\nimport { Layout } from '../type';\n\nexport const COPY_STORAGE_KEY = '$MagicEditorCopyData';\n\n/**\n * 获取所有页面配置\n * @param app DSL跟节点\n * @returns 所有页面配置\n */\nexport const getPageList = (app: MApp): MPage[] => {\n if (app.items && Array.isArray(app.items)) {\n return app.items.filter((item: MPage) => item.type === NodeType.PAGE);\n }\n return [];\n};\n\n/**\n * 获取所有页面名称\n * @param pages 所有页面配置\n * @returns 所有页面名称\n */\nexport const getPageNameList = (pages: MPage[]): string[] => pages.map((page: MPage) => page.name || 'index');\n\n/**\n * 新增页面时,生成页面名称\n * @param {Object} pageNameList 所有页面名称\n * @returns {string}\n */\nexport const generatePageName = (pageNameList: string[]): string => {\n let pageLength = pageNameList.length;\n\n if (!pageLength) return 'index';\n\n let pageName = `page_${pageLength}`;\n while (pageNameList.includes(pageName)) {\n pageLength += 1;\n pageName = `page_${pageLength}`;\n }\n\n return pageName;\n};\n\n/**\n * 新增页面时,生成页面名称\n * @param {Object} app 所有页面配置\n * @returns {string}\n */\nexport const generatePageNameByApp = (app: MApp): string => generatePageName(getPageNameList(getPageList(app)));\n\n/**\n * @param {Object} node\n * @returns {boolean}\n */\nexport const isFixed = (node: MNode): boolean => node.style?.position === 'fixed';\n\nexport const getNodeIndex = (node: MNode, parent: MContainer | MApp): number => {\n const items = parent?.items || [];\n return items.findIndex((item: MNode) => `${item.id}` === `${node.id}`);\n};\n\nexport const getRelativeStyle = (style: Record<string, any> = {}): Record<string, any> => ({\n ...style,\n position: 'relative',\n top: 0,\n left: 0,\n});\n\nconst getMiddleTop = (node: MNode, parentNode: MNode, stage: StageCore | null) => {\n let height = node.style?.height || 0;\n\n if (!stage || typeof node.style?.top !== 'undefined' || !parentNode.style) return node.style?.top;\n\n if (!isNumber(height)) {\n height = 0;\n }\n\n const { height: parentHeight } = parentNode.style;\n\n if (isPage(parentNode)) {\n const { scrollTop = 0, wrapperHeight } = stage.mask;\n return (wrapperHeight - height) / 2 + scrollTop;\n }\n\n return (parentHeight - height) / 2;\n};\n\nexport const getInitPositionStyle = (style: Record<string, any> = {}, layout: Layout) => {\n if (layout === Layout.ABSOLUTE) {\n return {\n ...style,\n position: 'absolute',\n };\n }\n\n if (layout === Layout.RELATIVE) {\n return getRelativeStyle(style);\n }\n\n return style;\n};\n\nexport const setLayout = (node: MNode, layout: Layout) => {\n node.items?.forEach((child: MNode) => {\n if (isPop(child)) return;\n\n const style = child.style || {};\n\n // 是 fixed 不做处理\n if (style.position === 'fixed') return;\n\n if (layout !== Layout.RELATIVE) {\n style.position = 'absolute';\n } else {\n child.style = getRelativeStyle(style);\n child.style.right = 'auto';\n child.style.bottom = 'auto';\n }\n });\n return node;\n};\n\nexport const change2Fixed = (node: MNode, root: MApp) => {\n const path = getNodePath(node.id, root.items);\n const offset = {\n left: 0,\n top: 0,\n };\n\n path.forEach((value) => {\n offset.left = offset.left + globalThis.parseFloat(value.style?.left || 0);\n offset.top = offset.top + globalThis.parseFloat(value.style?.top || 0);\n });\n\n return {\n ...(node.style || {}),\n ...offset,\n };\n};\n\nexport const Fixed2Other = async (\n node: MNode,\n root: MApp,\n getLayout: (parent: MNode, node?: MNode) => Promise<Layout>,\n) => {\n const path = getNodePath(node.id, root.items);\n const cur = path.pop();\n const offset = {\n left: cur?.style?.left || 0,\n top: cur?.style?.top || 0,\n right: '',\n bottom: '',\n };\n\n path.forEach((value) => {\n offset.left = offset.left - globalThis.parseFloat(value.style?.left || 0);\n offset.top = offset.top - globalThis.parseFloat(value.style?.top || 0);\n });\n const style = node.style || {};\n\n const parent = path.pop();\n if (!parent) {\n return getRelativeStyle(style);\n }\n\n const layout = await getLayout(parent);\n if (layout !== Layout.RELATIVE) {\n return {\n ...style,\n ...offset,\n position: 'absolute',\n };\n }\n\n return getRelativeStyle(style);\n};\n\nexport const getGuideLineFromCache = (key: string): number[] => {\n if (!key) return [];\n\n const guideLineCacheData = globalThis.localStorage.getItem(key);\n if (guideLineCacheData) {\n try {\n return JSON.parse(guideLineCacheData) || [];\n } catch (e) {\n console.error(e);\n }\n }\n\n return [];\n};\n\nexport const fixNodeLeft = (config: MNode, parent: MContainer, doc?: Document) => {\n if (!doc || !config.style || !isNumber(config.style.left)) return config.style?.left;\n\n const el = doc.getElementById(`${config.id}`);\n const parentEl = doc.getElementById(`${parent.id}`);\n\n const left = Number(config.style?.left) || 0;\n if (el && parentEl && el.offsetWidth + left > parentEl.offsetWidth) {\n return parentEl.offsetWidth - el.offsetWidth;\n }\n\n return config.style.left;\n};\n\nexport const fixNodePosition = (config: MNode, parent: MContainer, stage: StageCore | null) => {\n if (config.style?.position !== 'absolute') {\n return config.style;\n }\n\n return {\n ...(config.style || {}),\n top: getMiddleTop(config, parent, stage),\n left: fixNodeLeft(config, parent, stage?.renderer.contentWindow?.document),\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 { reactive } from 'vue';\nimport { cloneDeep, mergeWith } from 'lodash-es';\n\nimport type { FormConfig } from '@tmagic/form';\nimport type { MComponent, MNode } from '@tmagic/schema';\nimport { toLine } from '@tmagic/utils';\n\nimport type { PropsState } from '../type';\nimport { fillConfig } from '../utils/props';\n\nimport BaseService from './BaseService';\n\nclass Props extends BaseService {\n private state = reactive<PropsState>({\n propsConfigMap: {},\n propsValueMap: {},\n });\n\n constructor() {\n super([\n 'setPropsConfig',\n 'getPropsConfig',\n 'setPropsValue',\n 'getPropsValue',\n 'createId',\n 'setNewItemId',\n 'fillConfig',\n 'getDefaultPropsValue',\n ]);\n }\n\n public setPropsConfigs(configs: Record<string, FormConfig>) {\n Object.keys(configs).forEach((type: string) => {\n this.setPropsConfig(toLine(type), configs[type]);\n });\n this.emit('props-configs-change');\n }\n\n public async fillConfig(config: FormConfig) {\n return fillConfig(config);\n }\n\n /**\n * 为指定类型组件设置组件属性表单配置\n * @param type 组件类型\n * @param config 组件属性表单配置\n */\n public async setPropsConfig(type: string, config: FormConfig) {\n this.state.propsConfigMap[type] = await this.fillConfig(Array.isArray(config) ? config : [config]);\n }\n\n /**\n * 获取指点类型的组件属性表单配置\n * @param type 组件类型\n * @returns 组件属性表单配置\n */\n public async getPropsConfig(type: string): Promise<FormConfig> {\n if (type === 'area') {\n return await this.getPropsConfig('button');\n }\n\n return cloneDeep(this.state.propsConfigMap[type] || (await this.fillConfig([])));\n }\n\n public setPropsValues(values: Record<string, MNode>) {\n Object.keys(values).forEach((type: string) => {\n this.setPropsValue(toLine(type), values[type]);\n });\n }\n\n /**\n * 为指点类型组件设置组件初始值\n * @param type 组件类型\n * @param value 组件初始值\n */\n public setPropsValue(type: string, value: MNode) {\n this.state.propsValueMap[type] = value;\n }\n\n /**\n * 获取指定类型的组件初始值\n * @param type 组件类型\n * @returns 组件初始值\n */\n public async getPropsValue(type: string, { inputEvent, ...defaultValue }: Record<string, any> = {}) {\n if (type === 'area') {\n const value = (await this.getPropsValue('button')) as MComponent;\n value.className = 'action-area';\n value.text = '';\n if (value.style) {\n value.style.backgroundColor = 'rgba(255, 255, 255, 0)';\n }\n return value;\n }\n\n const [id, defaultPropsValue, data] = await Promise.all([\n this.createId(type),\n this.getDefaultPropsValue(type),\n this.setNewItemId(\n cloneDeep({\n type,\n ...defaultValue,\n } as any),\n ),\n ]);\n\n return {\n id,\n ...defaultPropsValue,\n ...mergeWith({}, cloneDeep(this.state.propsValueMap[type] || {}), data),\n };\n }\n\n public async createId(type: string | number): Promise<string> {\n return `${type}_${this.guid()}`;\n }\n\n /**\n * 将组件与组件的子元素配置中的id都设置成一个新的ID\n * @param {Object} config 组件配置\n */\n /* eslint no-param-reassign: [\"error\", { \"props\": false }] */\n public async setNewItemId(config: MNode) {\n config.id = await this.createId(config.type || 'component');\n\n if (config.items && Array.isArray(config.items)) {\n for (const item of config.items) {\n await this.setNewItemId(item);\n }\n }\n\n return config;\n }\n\n /**\n * 获取默认属性配置\n * @param type 组件类型\n * @returns Object\n */\n public async getDefaultPropsValue(type: string) {\n return ['page', 'container'].includes(type)\n ? {\n type,\n layout: 'absolute',\n style: {},\n name: type,\n items: [],\n }\n : {\n type,\n style: {},\n name: type,\n };\n }\n\n public destroy() {\n this.state.propsConfigMap = {};\n this.state.propsValueMap = {};\n this.removeAllListeners();\n }\n\n /**\n * 生成指定位数的GUID,无【-】格式\n * @param digit 位数,默认值8\n * @returns\n */\n private guid(digit = 8): string {\n return 'x'.repeat(digit).replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\nexport type PropsService = Props;\n\nexport default new Props();\n","import { toRaw } from 'vue';\nimport { isEmpty } from 'lodash-es';\n\nimport { Id, MApp, MContainer, MNode } from '@tmagic/schema';\nimport StageCore from '@tmagic/stage';\nimport { isPage } from '@tmagic/utils';\n\nimport editorService from '../services/editor';\nimport propsService from '../services/props';\nimport { AddMNode, PastePosition } from '../type';\nimport { generatePageNameByApp, getInitPositionStyle } from '../utils/editor';\n\n/**\n * 粘贴前置操作:返回分配了新id以及校准了坐标的配置\n * @param position 粘贴的坐标\n * @param config 待粘贴的元素配置(复制时保存的那份配置)\n * @returns\n */\nexport const beforePaste = async (position: PastePosition, config: MNode[]): Promise<MNode[]> => {\n if (!config[0]?.style) return config;\n const curNode = editorService.get<MContainer>('node');\n // 将数组中第一个元素的坐标作为参照点\n const { left: referenceLeft, top: referenceTop } = config[0].style;\n // 坐标校准后的粘贴数据\n const pasteConfigs: MNode[] = await Promise.all(\n config.map(async (configItem: MNode): Promise<MNode> => {\n // 解构 position 对象,从 position 删除 offsetX、offsetY字段\n const { offsetX = 0, offsetY = 0, ...positionClone } = position;\n let pastePosition = positionClone;\n\n if (!isEmpty(pastePosition) && curNode.items) {\n // 如果没有传入粘贴坐标则可能为键盘操作,不再转换\n // 如果粘贴时选中了容器,则将元素粘贴到容器内,坐标需要转换为相对于容器的坐标\n pastePosition = getPositionInContainer(pastePosition, curNode.id);\n }\n\n // 将所有待粘贴元素坐标相对于多选第一个元素坐标重新计算,以保证多选粘贴后元素间距不变\n if (pastePosition.left && configItem.style?.left) {\n pastePosition.left = configItem.style.left - referenceLeft + pastePosition.left;\n }\n if (pastePosition.top && configItem.style?.top) {\n pastePosition.top = configItem.style?.top - referenceTop + pastePosition.top;\n }\n\n const pasteConfig = await propsService.setNewItemId(configItem);\n\n if (pasteConfig.style) {\n const { left, top } = pasteConfig.style;\n // 判断能转换为数字时,做粘贴偏移量计算\n if (typeof left === 'number' || (!!left && !isNaN(Number(left)))) {\n pasteConfig.style.left = Number(left) + offsetX;\n }\n if (typeof top === 'number' || (!!top && !isNaN(Number(top)))) {\n pasteConfig.style.top = Number(top) + offsetY;\n }\n\n pasteConfig.style = {\n ...pasteConfig.style,\n ...pastePosition,\n };\n }\n if (isPage(pasteConfig)) {\n pasteConfig.name = generatePageNameByApp(editorService.get('root'));\n }\n return pasteConfig as MNode;\n }),\n );\n return pasteConfigs;\n};\n\n/**\n * 将元素粘贴到容器内时,将相对于画布坐标转换为相对于容器的坐标\n * @param position PastePosition 粘贴时相对于画布的坐标\n * @param id 元素id\n * @returns PastePosition 转换后的坐标\n */\nexport const getPositionInContainer = (position: PastePosition = {}, id: Id) => {\n let { left = 0, top = 0 } = position;\n const parentEl = editorService.get<StageCore>('stage')?.renderer?.contentWindow?.document.getElementById(`${id}`);\n const parentElRect = parentEl?.getBoundingClientRect();\n left = left - (parentElRect?.left || 0);\n top = top - (parentElRect?.top || 0);\n return {\n left,\n top,\n };\n};\n\nexport const getAddParent = (node: MNode) => {\n const curNode = editorService.get<MContainer>('node');\n\n let parentNode;\n if (isPage(node)) {\n parentNode = editorService.get<MApp>('root');\n } else if (curNode.items) {\n parentNode = curNode;\n } else {\n parentNode = editorService.getParentById(curNode.id, false);\n }\n return parentNode;\n};\n\nexport const getDefaultConfig = async (addNode: AddMNode, parentNode: MContainer) => {\n const { type, inputEvent, ...config } = addNode;\n const layout = await editorService.getLayout(toRaw(parentNode), addNode as MNode);\n const newNode = { ...toRaw(await propsService.getPropsValue(type, config)) };\n newNode.style = getInitPositionStyle(newNode.style, layout);\n return newNode;\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 { reactive, toRaw } from 'vue';\nimport { cloneDeep, mergeWith, uniq } from 'lodash-es';\n\nimport type { Id, MApp, MComponent, MContainer, MNode, MPage } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\nimport StageCore from '@tmagic/stage';\nimport { getNodePath, isNumber, isPage, isPop } from '@tmagic/utils';\n\nimport historyService, { StepValue } from '../services/history';\nimport storageService, { Protocol } from '../services/storage';\nimport type { AddMNode, EditorNodeInfo, PastePosition, StoreState } from '../type';\nimport { LayerOffset, Layout } from '../type';\nimport {\n change2Fixed,\n COPY_STORAGE_KEY,\n Fixed2Other,\n fixNodePosition,\n getInitPositionStyle,\n getNodeIndex,\n isFixed,\n setLayout,\n} from '../utils/editor';\nimport { beforePaste, getAddParent } from '../utils/operator';\n\nimport BaseService from './BaseService';\nimport propsService from './props';\n\nclass Editor extends BaseService {\n public state: StoreState = reactive({\n root: null,\n page: null,\n parent: null,\n node: null,\n nodes: [],\n stage: null,\n highlightNode: null,\n modifiedNodeIds: new Map(),\n pageLength: 0,\n });\n private isHistoryStateChange = false;\n\n constructor() {\n super(\n [\n 'getLayout',\n 'select',\n 'doAdd',\n 'add',\n 'doRemove',\n 'remove',\n 'doUpdate',\n 'update',\n 'sort',\n 'copy',\n 'paste',\n 'doPaste',\n 'duAlignCenter',\n 'alignCenter',\n 'moveLayer',\n 'moveToContainer',\n 'move',\n 'undo',\n 'redo',\n 'highlight',\n ],\n // 需要注意循环依赖问题,如果函数间有相互调用的话,不能设置为串行调用\n ['select', 'update', 'moveLayer'],\n );\n }\n\n /**\n * 设置当前指点节点配置\n * @param name 'root' | 'page' | 'parent' | 'node' | 'highlightNode' | 'nodes'\n * @param value MNode\n * @returns MNode\n */\n public set<T = MNode>(name: keyof StoreState, value: T) {\n this.state[name] = value as any;\n // set nodes时将node设置为nodes第一个元素\n if (name === 'nodes') {\n this.set('node', (value as unknown as MNode[])[0]);\n }\n if (name === 'root') {\n this.state.pageLength = (value as unknown as MApp)?.items?.length || 0;\n this.emit('root-change', value);\n }\n }\n\n /**\n * 获取当前指点节点配置\n * @param name 'root' | 'page' | 'parent' | 'node' | 'highlightNode' | 'nodes'\n * @returns MNode\n */\n public get<T = MNode>(name: keyof StoreState): T {\n return (this.state as any)[name];\n }\n\n /**\n * 根据id获取组件、组件的父组件以及组件所属的页面节点\n * @param {number | string} id 组件id\n * @param {boolean} raw 是否使用toRaw\n * @returns {EditorNodeInfo}\n */\n public getNodeInfo(id: Id, raw = true): EditorNodeInfo {\n let root = this.get<MApp | null>('root');\n if (raw) {\n root = toRaw(root);\n }\n if (!root) return {};\n\n if (id === root.id) {\n return { node: root };\n }\n\n const path = getNodePath(id, root.items);\n\n if (!path.length) return {};\n\n path.unshift(root);\n const info: EditorNodeInfo = {};\n\n info.node = path[path.length - 1] as MComponent;\n info.parent = path[path.length - 2] as MContainer;\n\n path.forEach((item) => {\n if (item.type === NodeType.PAGE) {\n info.page = item as MPage;\n return;\n }\n });\n\n return info;\n }\n\n /**\n * 根据ID获取指点节点配置\n * @param id 组件ID\n * @param {boolean} raw 是否使用toRaw\n * @returns 组件节点配置\n */\n public getNodeById(id: Id, raw = true): MNode | undefined {\n const { node } = this.getNodeInfo(id, raw);\n return node;\n }\n\n /**\n * 根据ID获取指点节点的父节点配置\n * @param id 组件ID\n * @param {boolean} raw 是否使用toRaw\n * @returns 指点组件的父节点配置\n */\n public getParentById(id: Id, raw = true): MContainer | undefined {\n if (!this.get<MApp | null>('root')) return;\n const { parent } = this.getNodeInfo(id, raw);\n return parent;\n }\n\n /**\n * 只有容器拥有布局\n */\n public async getLayout(parent: MNode, node?: MNode): Promise<Layout> {\n if (node && typeof node !== 'function' && isFixed(node)) return Layout.FIXED;\n\n if (parent.layout) {\n return parent.layout;\n }\n\n // 如果该节点没有设置position,则认为是流式布局,例如获取root的布局时\n if (!parent.style?.position) {\n return Layout.RELATIVE;\n }\n\n return Layout.ABSOLUTE;\n }\n\n /**\n * 选中指定节点(将指定节点设置成当前选中状态)\n * @param config 指定节点配置或者ID\n * @returns 当前选中的节点配置\n */\n public async select(config: MNode | Id): Promise<MNode> | never {\n const { node, page, parent } = this.selectedConfigExceptionHandler(config);\n this.set('nodes', [node]);\n this.set('page', page || null);\n this.set('parent', parent || null);\n\n if (page) {\n historyService.changePage(toRaw(page));\n } else {\n historyService.empty();\n }\n\n if (node?.id) {\n this.get<StageCore>('stage')\n ?.renderer.runtime?.getApp?.()\n ?.emit(\n 'editor:select',\n {\n node,\n page,\n parent,\n },\n getNodePath(node.id, this.get<MApp>('root').items),\n );\n }\n\n this.emit('select', node);\n\n return node!;\n }\n\n public async selectNextNode(): Promise<MNode> | never {\n const node = toRaw(this.get('node'));\n\n if (!node || isPage(node) || node.type === NodeType.ROOT) return node;\n\n const parent = toRaw(this.getParentById(node.id));\n\n if (!parent) return node;\n\n const index = getNodeIndex(node, parent);\n\n const nextNode = parent.items[index + 1] || parent.items[0];\n\n await this.select(nextNode);\n this.get<StageCore>('stage')?.select(nextNode.id);\n\n return nextNode;\n }\n\n public async selectNextPage(): Promise<MNode> | never {\n const root = toRaw(this.get<MApp>('root'));\n const page = toRaw(this.get('page'));\n\n const index = getNodeIndex(page, root);\n\n const nextPage = root.items[index + 1] || root.items[0];\n\n await this.select(nextPage);\n this.get<StageCore>('stage')?.select(nextPage.id);\n\n return nextPage;\n }\n\n /**\n * 高亮指定节点\n * @param config 指定节点配置或者ID\n * @returns 当前高亮的节点配置\n */\n public highlight(config: MNode | Id): void {\n const { node } = this.selectedConfigExceptionHandler(config);\n const currentHighlightNode = this.get('highlightNode');\n if (currentHighlightNode === node) return;\n this.set('highlightNode', node);\n }\n\n /**\n * 多选\n * @param ids 指定节点ID\n * @returns 加入多选的节点配置\n */\n public multiSelect(ids: Id[]): void {\n const nodes: MNode[] = [];\n const idsUnique = uniq(ids);\n idsUnique.forEach((id) => {\n const { node } = this.getNodeInfo(id);\n if (!node) return;\n nodes.push(node);\n });\n this.set('nodes', nodes);\n }\n\n public async doAdd(node: MNode, parent: MContainer): Promise<MNode> {\n const root = this.get<MApp>('root');\n const curNode = this.get<MNode>('node');\n const stage = this.get<StageCore | null>('stage');\n\n if ((parent?.type === NodeType.ROOT || curNode.type === NodeType.ROOT) && node.type !== NodeType.PAGE) {\n throw new Error('app下不能添加组件');\n }\n\n if (parent.id !== curNode.id) {\n const index = parent.items.indexOf(curNode);\n parent?.items?.splice(index + 1, 0, node);\n } else {\n // 新增节点添加到配置中\n parent?.items?.push(node);\n }\n\n const layout = await this.getLayout(toRaw(parent), node as MNode);\n node.style = getInitPositionStyle(node.style, layout);\n\n await stage?.add({\n config: cloneDeep(node),\n parent: cloneDeep(parent),\n parentId: parent.id,\n root: cloneDeep(root),\n });\n\n node.style = fixNodePosition(node, parent, stage);\n\n await stage?.update({ config: cloneDeep(node), parentId: parent.id, root: cloneDeep(root) });\n\n this.addModifiedNodeId(node.id);\n\n return node;\n }\n\n /**\n * 向指点容器添加组件节点\n * @param addConfig 将要添加的组件节点配置\n * @param parent 要添加到的容器组件节点配置,如果不设置,默认为当前选中的组件的父节点\n * @returns 添加后的节点\n */\n public async add(addNode: AddMNode | MNode[], parent?: MContainer | null): Promise<MNode | MNode[]> {\n const stage = this.get<StageCore | null>('stage');\n\n // 新增多个组件只存在于粘贴多个组件,粘贴的是一个完整的config,所以不再需要getPropsValue\n const addNodes = [];\n if (!Array.isArray(addNode)) {\n const { type, inputEvent, ...config } = addNode;\n\n if (!type) throw new Error('组件类型不能为空');\n\n addNodes.push({ ...toRaw(await propsService.getPropsValue(type, config)) });\n } else {\n addNodes.push(...addNode);\n }\n\n const newNodes = await Promise.all(\n addNodes.map((node) => {\n const parentNode = parent && typeof parent !== 'function' ? parent : getAddParent(node);\n if (!parentNode) throw new Error('未找到父元素');\n return this.doAdd(node, parentNode);\n }),\n );\n\n if (newNodes.length > 1) {\n const newNodeIds = newNodes.map((node) => node.id);\n // 触发选中样式\n stage?.multiSelect(newNodeIds);\n await this.multiSelect(newNodeIds);\n } else {\n await this.select(newNodes[0]);\n\n if (isPage(newNodes[0])) {\n this.state.pageLength += 1;\n } else {\n // 新增页面,这个时候页面还有渲染出来,此时select会出错,在runtime-ready的时候回去select\n stage?.select(newNodes[0].id);\n }\n }\n\n this.pushHistoryState();\n\n this.emit('add', newNodes);\n\n return Array.isArray(addNode) ? newNodes : newNodes[0];\n }\n\n public async doRemove(node: MNode): Promise<void> {\n const root = this.get<MApp | null>('root');\n\n if (!root) throw new Error('没有root');\n\n const { parent, node: curNode } = this.getNodeInfo(node.id);\n\n if (!parent || !curNode) throw new Error('找不要删除的节点');\n\n const index = getNodeIndex(curNode, parent);\n\n if (typeof index !== 'number' || index === -1) throw new Error('找不要删除的节点');\n\n parent.items?.splice(index, 1);\n const stage = this.get<StageCore | null>('stage');\n stage?.remove({ id: node.id, parentId: parent.id, root: cloneDeep(root) });\n\n if (node.type === NodeType.PAGE) {\n this.state.pageLength -= 1;\n\n if (root.items[0]) {\n await this.select(root.items[0]);\n stage?.select(root.items[0].id);\n } else {\n this.set('nodes', [root]);\n this.set('parent', null);\n this.set('page', null);\n this.set('stage', null);\n this.set('highlightNode', null);\n this.resetModifiedNodeId();\n historyService.reset();\n\n return;\n }\n } else {\n await this.select(parent);\n stage?.select(parent.id);\n }\n\n this.addModifiedNodeId(parent.id);\n }\n\n /**\n * 删除组件\n * @param {Object} node\n * @return {Object} 删除的组件配置\n */\n public async remove(nodeOrNodeList: MNode | MNode[]): Promise<void> {\n const nodes = Array.isArray(nodeOrNodeList) ? nodeOrNodeList : [nodeOrNodeList];\n\n await Promise.all(nodes.map((node) => this.doRemove(node)));\n\n // 更新历史记录\n this.pushHistoryState();\n\n this.emit('remove', nodes);\n }\n\n public async doUpdate(config: MNode) {\n if (!config?.id) throw new Error('没有配置或者配置缺少id值');\n\n const info = this.getNodeInfo(config.id, false);\n\n if (!info.node) throw new Error(`获取不到id为${config.id}的节点`);\n\n const node = cloneDeep(toRaw(info.node));\n\n let newConfig = await this.toggleFixedPosition(toRaw(config), node, this.get<MApp>('root'));\n\n newConfig = mergeWith(cloneDeep(node), newConfig, (objValue, srcValue) => {\n if (Array.isArray(srcValue)) {\n return srcValue;\n }\n });\n\n if (!newConfig.type) throw new Error('配置缺少type值');\n\n if (newConfig.type === NodeType.ROOT) {\n this.set('root', newConfig);\n return newConfig;\n }\n\n const { parent } = info;\n if (!parent) throw new Error('获取不到父级节点');\n\n const parentNodeItems = parent.items;\n const index = getNodeIndex(newConfig, parent);\n\n if (!parentNodeItems || typeof index === 'undefined' || index === -1) throw new Error('更新的节点未找到');\n\n const newLayout = await this.getLayout(newConfig);\n const layout = await this.getLayout(node);\n if (newLayout !== layout) {\n newConfig = setLayout(newConfig, newLayout);\n }\n\n parentNodeItems[index] = newConfig;\n\n // 将update后的配置更新到nodes中\n const nodes = this.get('nodes');\n const targetIndex = nodes.findIndex((nodeItem: MNode) => `${nodeItem.id}` === `${newConfig.id}`);\n nodes.splice(targetIndex, 1, newConfig);\n this.set('nodes', nodes);\n\n this.get<StageCore | null>('stage')?.update({\n config: cloneDeep(newConfig),\n parentId: parent.id,\n root: cloneDeep(this.get('root')),\n });\n\n if (newConfig.type === NodeType.PAGE) {\n this.set('page', newConfig);\n }\n\n this.addModifiedNodeId(newConfig.id);\n\n return newConfig;\n }\n\n /**\n * 更新节点\n * @param config 新的节点配置,配置中需要有id信息\n * @returns 更新后的节点配置\n */\n public async update(config: MNode | MNode[]): Promise<MNode | MNode[]> {\n const nodes = Array.isArray(config) ? config : [config];\n\n const newNodes = await Promise.all(nodes.map((node) => this.doUpdate(node)));\n\n this.pushHistoryState();\n\n this.emit('update', newNodes);\n\n return Array.isArray(config) ? newNodes : newNodes[0];\n }\n\n /**\n * 将id为id1的组件移动到id为id2的组件位置上,例如:[1,2,3,4] -> sort(1,3) -> [2,1,3,4]\n * @param id1 组件ID\n * @param id2 组件ID\n * @returns void\n */\n public async sort(id1: Id, id2: Id): Promise<void> {\n const node = this.get<MNode>('node');\n const parent = cloneDeep(toRaw(this.get<MContainer>('parent')));\n const index2 = parent.items.findIndex((node: MNode) => `${node.id}` === `${id2}`);\n // 在 id1 的兄弟组件中若无 id2 则直接 return\n if (index2 < 0) return;\n const index1 = parent.items.findIndex((node: MNode) => `${node.id}` === `${id1}`);\n\n parent.items.splice(index2, 0, ...parent.items.splice(index1, 1));\n\n await this.update(parent);\n await this.select(node);\n\n this.get<StageCore | null>('stage')?.update({\n config: cloneDeep(node),\n parentId: parent.id,\n root: cloneDeep(this.get('root')),\n });\n\n this.addModifiedNodeId(parent.id);\n this.pushHistoryState();\n }\n\n /**\n * 将组将节点配置转化成string,然后存储到localStorage中\n * @param config 组件节点配置\n * @returns 组件节点配置\n */\n public async copy(config: MNode | MNode[]): Promise<void> {\n await storageService.setItem(COPY_STORAGE_KEY, Array.isArray(config) ? config : [config], {\n protocol: Protocol.OBJECT,\n });\n }\n\n /**\n * 从localStorage中获取节点,然后添加到当前容器中\n * @param position 粘贴的坐标\n * @returns 添加后的组件节点配置\n */\n public async paste(position: PastePosition = {}): Promise<MNode | MNode[] | void> {\n const config: MNode[] = await storageService.getItem(COPY_STORAGE_KEY);\n\n if (!Array.isArray(config)) return;\n\n const pasteConfigs = await this.doPaste(config, position);\n\n return this.add(pasteConfigs);\n }\n\n public async doPaste(config: MNode[], position: PastePosition = {}): Promise<MNode[]> {\n const pasteConfigs = await beforePaste(position, cloneDeep(config));\n return pasteConfigs;\n }\n\n public async doAlignCenter(config: MNode): Promise<MNode> {\n const parent = this.getParentById(config.id);\n\n if (!parent) throw new Error('找不到父节点');\n\n const node = cloneDeep(toRaw(config));\n const layout = await this.getLayout(parent, node);\n if (layout === Layout.RELATIVE) {\n return config;\n }\n\n if (!node.style) return config;\n\n const stage = this.get<StageCore>('stage');\n const doc = stage?.renderer.contentWindow?.document;\n\n if (doc) {\n const el = doc.getElementById(`${node.id}`);\n const parentEl = el?.offsetParent;\n if (parentEl && el) {\n node.style.left = (parentEl.clientWidth - el.clientWidth) / 2;\n }\n } else if (parent.style && isNumber(parent.style?.width) && isNumber(node.style?.width)) {\n node.style.left = (parent.style.width - node.style.width) / 2;\n }\n\n return node;\n }\n\n /**\n * 将指点节点设置居中\n * @param config 组件节点配置\n * @returns 当前组件节点配置\n */\n public async alignCenter(config: MNode | MNode[]): Promise<MNode | MNode[]> {\n const nodes = Array.isArray(config) ? config : [config];\n const stage = this.get<StageCore | null>('stage');\n\n const newNodes = await Promise.all(nodes.map((node) => this.doAlignCenter(node)));\n\n const newNode = await this.update(newNodes);\n\n await stage?.multiSelect(newNodes.map((node) => node.id));\n\n return newNode;\n }\n\n /**\n * 移动当前选中节点位置\n * @param offset 偏移量\n */\n public async moveLayer(offset: number | LayerOffset): Promise<void> {\n const parent = this.get<MContainer>('parent');\n const node = this.get<MNode>('node');\n const brothers: MNode[] = parent?.items || [];\n const index = brothers.findIndex((item) => `${item.id}` === `${node?.id}`);\n\n if (offset === LayerOffset.TOP) {\n brothers.splice(brothers.length - 1, 0, brothers.splice(index, 1)[0]);\n } else if (offset === LayerOffset.BOTTOM) {\n brothers.splice(0, 0, brothers.splice(index, 1)[0]);\n } else {\n brothers.splice(index + parseInt(`${offset}`, 10), 0, brothers.splice(index, 1)[0]);\n }\n\n const grandparent = this.getParentById(parent.id);\n this.get<StageCore | null>('stage')?.update({\n config: cloneDeep(toRaw(parent)),\n parentId: grandparent?.id,\n root: cloneDeep(this.get<MApp>('root')),\n });\n\n this.addModifiedNodeId(parent.id);\n this.pushHistoryState();\n }\n\n /**\n * 移动到指定容器中\n * @param config 需要移动的节点\n * @param targetId 容器ID\n */\n public async moveToContainer(config: MNode, targetId: Id): Promise<MNode | undefined> {\n const { node, parent } = this.getNodeInfo(config.id, false);\n const target = this.getNodeById(targetId, false) as MContainer;\n\n const stage = this.get<StageCore | null>('stage');\n\n if (node && parent && stage) {\n const root = cloneDeep(this.get<MApp>('root'));\n const index = getNodeIndex(node, parent);\n parent.items?.splice(index, 1);\n\n await stage.remove({ id: node.id, parentId: parent.id, root });\n\n const layout = await this.getLayout(target);\n\n const newConfig = mergeWith(cloneDeep(node), config, (objValue, srcValue) => {\n if (Array.isArray(srcValue)) {\n return srcValue;\n }\n });\n newConfig.style = getInitPositionStyle(newConfig.style, layout);\n\n target.items.push(newConfig);\n\n await stage.select(targetId);\n\n const targetParent = this.getParentById(target.id);\n await stage.update({ config: cloneDeep(target), parentId: targetParent?.id, root });\n\n await this.select(newConfig);\n stage.select(newConfig.id);\n\n this.addModifiedNodeId(target.id);\n this.addModifiedNodeId(parent.id);\n this.pushHistoryState();\n\n return newConfig;\n }\n }\n\n /**\n * 撤销当前操作\n * @returns 上一次数据\n */\n public async undo(): Promise<StepValue | null> {\n const value = historyService.undo();\n await this.changeHistoryState(value);\n return value;\n }\n\n /**\n * 恢复到下一步\n * @returns 下一步数据\n */\n public async redo(): Promise<StepValue | null> {\n const value = historyService.redo();\n await this.changeHistoryState(value);\n return value;\n }\n\n public async move(left: number, top: number) {\n const node = toRaw(this.get('node'));\n if (!node || isPage(node)) return;\n\n const { style, id, type } = node;\n if (!style || style.position !== 'absolute') return;\n\n if (top && !isNumber(style.top)) return;\n if (left && !isNumber(style.left)) return;\n\n this.update({\n id,\n type,\n style: {\n ...style,\n left: Number(style.left) + left,\n top: Number(style.top) + top,\n },\n });\n }\n\n public destroy() {\n this.removeAllListeners();\n this.set('root', null);\n this.set('node', null);\n this.set('nodes', []);\n this.set('page', null);\n this.set('parent', null);\n this.set('stage', null);\n this.set('highlightNode', null);\n this.set('modifiedNodeIds', new Map());\n this.set('pageLength', new Map());\n }\n\n public resetModifiedNodeId() {\n this.get<Map<Id, Id>>('modifiedNodeIds').clear();\n }\n\n private addModifiedNodeId(id: Id) {\n if (!this.isHistoryStateChange) {\n this.get<Map<Id, Id>>('modifiedNodeIds').set(id, id);\n }\n }\n\n private pushHistoryState() {\n const curNode = cloneDeep(toRaw(this.get('node')));\n if (!this.isHistoryStateChange) {\n historyService.push({\n data: cloneDeep(toRaw(this.get('page'))),\n modifiedNodeIds: this.get<Map<Id, Id>>('modifiedNodeIds'),\n nodeId: curNode.id,\n });\n }\n this.isHistoryStateChange = false;\n }\n\n private async changeHistoryState(value: StepValue | null) {\n if (!value) return;\n\n this.isHistoryStateChange = true;\n await this.update(value.data);\n this.set('modifiedNodeIds', value.modifiedNodeIds);\n setTimeout(async () => {\n if (!value.nodeId) return;\n await this.select(value.nodeId);\n this.get<StageCore | null>('stage')?.select(value.nodeId);\n }, 0);\n }\n\n private async toggleFixedPosition(dist: MNode, src: MNode, root: MApp) {\n const newConfig = cloneDeep(dist);\n\n if (!isPop(src) && newConfig.style?.position) {\n if (isFixed(newConfig) && !isFixed(src)) {\n newConfig.style = change2Fixed(newConfig, root);\n } else if (!isFixed(newConfig) && isFixed(src)) {\n newConfig.style = await Fixed2Other(newConfig, root, this.getLayout);\n }\n }\n\n return newConfig;\n }\n\n private selectedConfigExceptionHandler(config: MNode | Id): EditorNodeInfo {\n let id: Id;\n if (typeof config === 'string' || typeof config === 'number') {\n id = config;\n } else {\n id = config.id;\n }\n if (!id) {\n throw new Error('没有ID,无法选中');\n }\n\n const { node, parent, page } = this.getNodeInfo(id);\n if (!node) throw new Error('获取不到组件信息');\n\n if (node.id === this.state.root?.id) {\n throw new Error('不能选根节点');\n }\n return {\n node,\n parent,\n page,\n };\n }\n}\n\nexport type EditorService = Editor;\n\nexport default new Editor();\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 { reactive } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport { DEFAULT_EVENTS, DEFAULT_METHODS, EventOption } from '@tmagic/core';\nimport { toLine } from '@tmagic/utils';\n\nimport type { ComponentGroup } from '../type';\n\nimport BaseService from './BaseService';\n\nlet eventMap: Record<string, EventOption[]> = reactive({});\nlet methodMap: Record<string, EventOption[]> = reactive({});\n\nclass Events extends BaseService {\n constructor() {\n super([]);\n }\n\n public init(componentGroupList: ComponentGroup[]) {\n componentGroupList.forEach((group) => {\n group.items.forEach((element) => {\n const type = toLine(element.type);\n if (!this.getEvent(type)) {\n this.setEvent(type, DEFAULT_EVENTS);\n }\n if (!this.getMethod(type)) {\n this.setMethod(type, DEFAULT_METHODS);\n }\n });\n });\n }\n\n public setEvents(events: Record<string, EventOption[]>) {\n Object.keys(events).forEach((type: string) => {\n this.setEvent(toLine(type), events[type] || []);\n });\n }\n\n public setEvent(type: string, events: EventOption[]) {\n eventMap[type] = [...DEFAULT_EVENTS, ...events];\n }\n\n public getEvent(type: string): EventOption[] {\n return cloneDeep(eventMap[type] || DEFAULT_EVENTS);\n }\n\n public setMethods(methods: Record<string, EventOption[]>) {\n Object.keys(methods).forEach((type: string) => {\n this.setMethod(toLine(type), methods[type] || []);\n });\n }\n\n public setMethod(type: string, method: EventOption[]) {\n methodMap[type] = [...DEFAULT_METHODS, ...method];\n }\n\n public getMethod(type: string) {\n return cloneDeep(methodMap[type] || DEFAULT_METHODS);\n }\n\n public destroy() {\n eventMap = reactive({});\n methodMap = reactive({});\n this.removeAllListeners();\n }\n}\n\nexport type EventsService = Events;\n\nexport default new Events();\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 { FormConfig, FormState } from '@tmagic/form';\n\nimport editorService from '../services/editor';\nimport eventsService from '../services/events';\n\n/**\n * 统一为组件属性表单加上事件、高级、样式配置\n * @param config 组件属性配置\n * @returns Object\n */\nexport const fillConfig = (config: FormConfig = []) => [\n {\n type: 'tab',\n items: [\n {\n title: '属性',\n labelWidth: '80px',\n items: [\n // 组件类型,必须要有\n {\n text: 'type',\n name: 'type',\n type: 'hidden',\n },\n // 组件id,必须要有\n {\n name: 'id',\n type: 'display',\n text: 'id',\n },\n {\n name: 'name',\n text: '组件名称',\n },\n ...config,\n ],\n },\n {\n title: '样式',\n labelWidth: '80px',\n items: [\n {\n name: 'style',\n items: [\n {\n type: 'fieldset',\n legend: '位置',\n items: [\n {\n name: 'position',\n type: 'checkbox',\n activeValue: 'fixed',\n inactiveValue: 'absolute',\n defaultValue: 'absolute',\n text: '固定定位',\n },\n {\n name: 'left',\n text: 'left',\n },\n {\n name: 'top',\n text: 'top',\n disabled: (vm: FormState, { model }: any) =>\n model.position === 'fixed' && model._magic_position === 'fixedBottom',\n },\n {\n name: 'right',\n text: 'right',\n },\n {\n name: 'bottom',\n text: 'bottom',\n disabled: (vm: FormState, { model }: any) =>\n model.position === 'fixed' && model._magic_position === 'fixedTop',\n },\n ],\n },\n {\n type: 'fieldset',\n legend: '盒子',\n items: [\n {\n name: 'width',\n text: '宽度',\n },\n {\n name: 'height',\n text: '高度',\n },\n ],\n },\n {\n type: 'fieldset',\n legend: '背景',\n items: [\n {\n name: 'backgroundImage',\n text: '背景图',\n },\n {\n name: 'backgroundColor',\n text: '背景颜色',\n type: 'colorPicker',\n },\n {\n name: 'backgroundRepeat',\n text: '背景图重复',\n type: 'select',\n defaultValue: 'no-repeat',\n options: [\n { text: 'repeat', value: 'repeat' },\n { text: 'repeat-x', value: 'repeat-x' },\n { text: 'repeat-y', value: 'repeat-y' },\n { text: 'no-repeat', value: 'no-repeat' },\n { text: 'inherit', value: 'inherit' },\n ],\n },\n {\n name: 'backgroundSize',\n text: '背景图大小',\n defaultValue: '100% 100%',\n },\n ],\n },\n {\n type: 'fieldset',\n legend: '字体',\n items: [\n {\n name: 'color',\n text: '颜色',\n type: 'colorPicker',\n },\n {\n name: 'fontSize',\n text: '大小',\n },\n {\n name: 'fontWeight',\n text: '粗细',\n },\n ],\n },\n {\n type: 'fieldset',\n legend: '变形',\n name: 'transform',\n items: [\n {\n name: 'rotate',\n text: '旋转角度',\n },\n {\n name: 'scale',\n text: '缩放',\n },\n ],\n },\n ],\n },\n ],\n },\n {\n title: '事件',\n items: [\n {\n type: 'table',\n name: 'events',\n items: [\n {\n name: 'name',\n label: '事件名',\n type: 'select',\n options: (mForm: FormState, { formValue }: any) =>\n eventsService.getEvent(formValue.type).map((option) => ({\n text: option.label,\n value: option.value,\n })),\n },\n {\n name: 'to',\n label: '联动组件',\n type: 'ui-select',\n },\n {\n name: 'method',\n label: '动作',\n type: 'select',\n options: (mForm: FormState, { model }: any) => {\n const node = editorService.getNodeById(model.to);\n if (!node?.type) return [];\n\n return eventsService.getMethod(node.type).map((option) => ({\n text: option.label,\n value: option.value,\n }));\n },\n },\n ],\n },\n ],\n },\n {\n title: '高级',\n labelWidth: '80px',\n items: [\n {\n type: 'code-link',\n name: 'created',\n text: 'created',\n formTitle: 'created',\n },\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\nexport const log = (...args: any[]) => {\n if (process.env.NODE_ENV === 'development') {\n console.log('magic editor: ', ...args);\n }\n};\n\nexport const info = (...args: any[]) => {\n if (process.env.NODE_ENV === 'development') {\n console.info('magic editor: ', ...args);\n }\n};\n\nexport const warn = (...args: any[]) => {\n if (process.env.NODE_ENV === 'development') {\n console.warn('magic editor: ', ...args);\n }\n};\n\nexport const debug = (...args: any[]) => {\n if (process.env.NODE_ENV === 'development') {\n console.debug('magic editor: ', ...args);\n }\n};\n\nexport const error = (...args: any[]) => {\n if (process.env.NODE_ENV === 'development') {\n console.error('magic editor: ', ...args);\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 { reactive, toRaw } from 'vue';\n\nimport type StageCore from '@tmagic/stage';\n\nimport editorService from '../services/editor';\nimport type { GetColumnWidth, SetColumnWidth, StageRect, UiState } from '../type';\n\nimport BaseService from './BaseService';\n\nconst DEFAULT_LEFT_COLUMN_WIDTH = 310;\nconst MIN_LEFT_COLUMN_WIDTH = 45;\nconst DEFAULT_RIGHT_COLUMN_WIDTH = 480;\nconst MIN_RIGHT_COLUMN_WIDTH = 1;\n\nconst COLUMN_WIDTH_STORAGE_KEY = '$MagicEditorColumnWidthData';\n\nconst defaultColumnWidth = {\n left: DEFAULT_LEFT_COLUMN_WIDTH,\n center: globalThis.document.body.clientWidth - DEFAULT_LEFT_COLUMN_WIDTH - DEFAULT_RIGHT_COLUMN_WIDTH,\n right: DEFAULT_RIGHT_COLUMN_WIDTH,\n};\n\nconst state = reactive<UiState>({\n uiSelectMode: false,\n showSrc: false,\n zoom: 1,\n stageContainerRect: {\n width: 0,\n height: 0,\n },\n stageRect: {\n width: 375,\n height: 817,\n },\n columnWidth: defaultColumnWidth,\n showGuides: true,\n showRule: true,\n propsPanelSize: 'small',\n showAddPageButton: true,\n});\n\nclass Ui extends BaseService {\n constructor() {\n super([]);\n globalThis.addEventListener('resize', () => {\n this.setColumnWidth({\n center: 'auto',\n });\n });\n }\n\n public set<T = any>(name: keyof UiState, value: T) {\n const mask = editorService.get<StageCore>('stage')?.mask;\n\n if (name === 'columnWidth') {\n this.setColumnWidth(value as unknown as SetColumnWidth);\n return;\n }\n\n if (name === 'stageRect') {\n this.setStageRect(value as unknown as StageRect);\n return;\n }\n\n if (name === 'showGuides') {\n mask?.showGuides(value as unknown as boolean);\n }\n\n if (name === 'showRule') {\n mask?.showRule(value as unknown as boolean);\n }\n\n (state as any)[name] = value;\n }\n\n public get<T>(name: keyof typeof state): T {\n return (state as any)[name];\n }\n\n public initColumnWidth() {\n const columnWidthCacheData = globalThis.localStorage.getItem(COLUMN_WIDTH_STORAGE_KEY);\n if (columnWidthCacheData) {\n try {\n const columnWidthCache = JSON.parse(columnWidthCacheData);\n this.setColumnWidth(columnWidthCache);\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n public zoom(zoom: number) {\n this.set('zoom', (this.get<number>('zoom') * 100 + zoom * 100) / 100);\n if (this.get<number>('zoom') < 0.1) this.set('zoom', 0.1);\n }\n\n public calcZoom() {\n const { stageRect, stageContainerRect } = state;\n const { height, width } = stageContainerRect;\n if (!width || !height) return 1;\n\n // 30为标尺的大小\n const stageWidth = stageRect.width + 30;\n const stageHeight = stageRect.height + 30;\n\n if (width > stageWidth && height > stageHeight) {\n return 1;\n }\n // 60/80是为了不要让画布太过去贴住四周(这样好看些)\n return Math.min((width - 60) / stageWidth || 1, (height - 80) / stageHeight || 1);\n }\n\n public destroy() {\n this.removeAllListeners();\n }\n\n private setColumnWidth({ left, center, right }: SetColumnWidth) {\n const columnWidth = {\n ...toRaw(this.get<GetColumnWidth>('columnWidth')),\n };\n\n if (left) {\n columnWidth.left = Math.max(left, MIN_LEFT_COLUMN_WIDTH);\n }\n\n if (right) {\n columnWidth.right = Math.max(right, MIN_RIGHT_COLUMN_WIDTH);\n }\n\n if (!center || center === 'auto') {\n const bodyWidth = globalThis.document.body.clientWidth;\n columnWidth.center = bodyWidth - (columnWidth?.left || 0) - (columnWidth?.right || 0);\n if (columnWidth.center <= 0) {\n columnWidth.left = defaultColumnWidth.left;\n columnWidth.center = defaultColumnWidth.center;\n columnWidth.right = defaultColumnWidth.right;\n }\n } else {\n columnWidth.center = center;\n }\n\n globalThis.localStorage.setItem(COLUMN_WIDTH_STORAGE_KEY, JSON.stringify(columnWidth));\n\n state.columnWidth = columnWidth;\n }\n\n private setStageRect(value: StageRect) {\n state.stageRect = {\n ...state.stageRect,\n ...value,\n };\n state.zoom = this.calcZoom();\n }\n}\n\nexport type UiService = Ui;\n\nexport default new Ui();\n","import { computed } from 'vue';\n\nimport { MApp, MPage } from '@tmagic/schema';\nimport StageCore, { GuidesType, SortEventData, UpdateEventData } from '@tmagic/stage';\n\nimport editorService from '../services/editor';\nimport uiService from '../services/ui';\nimport { H_GUIDE_LINE_STORAGE_KEY, StageOptions, V_GUIDE_LINE_STORAGE_KEY } from '../type';\n\nimport { getGuideLineFromCache } from './editor';\n\nconst root = computed(() => editorService.get<MApp>('root'));\nconst page = computed(() => editorService.get<MPage>('page'));\nconst zoom = computed(() => uiService.get<number>('zoom') || 1);\nconst uiSelectMode = computed(() => uiService.get<boolean>('uiSelectMode'));\n\nconst getGuideLineKey = (key: string) => `${key}_${root.value?.id}_${page.value?.id}`;\n\nexport const useStage = (stageOptions: StageOptions) => {\n const stage = new StageCore({\n render: stageOptions.render,\n runtimeUrl: stageOptions.runtimeUrl,\n zoom: zoom.value,\n autoScrollIntoView: stageOptions.autoScrollIntoView,\n isContainer: stageOptions.isContainer,\n containerHighlightClassName: stageOptions.containerHighlightClassName,\n containerHighlightDuration: stageOptions.containerHighlightDuration,\n containerHighlightType: stageOptions.containerHighlightType,\n canSelect: (el, event, stop) => {\n const elCanSelect = stageOptions.canSelect(el);\n // 在组件联动过程中不能再往下选择,返回并触发 ui-select\n if (uiSelectMode.value && elCanSelect && event.type === 'mousedown') {\n document.dispatchEvent(new CustomEvent('ui-select', { detail: el }));\n return stop();\n }\n\n return elCanSelect;\n },\n moveableOptions: stageOptions.moveableOptions,\n updateDragEl: stageOptions.updateDragEl,\n });\n\n stage.mask.setGuides([\n getGuideLineFromCache(getGuideLineKey(H_GUIDE_LINE_STORAGE_KEY)),\n getGuideLineFromCache(getGuideLineKey(V_GUIDE_LINE_STORAGE_KEY)),\n ]);\n\n stage.on('select', (el: HTMLElement) => {\n editorService.select(el.id);\n });\n\n stage.on('highlight', (el: HTMLElement) => {\n editorService.highlight(el.id);\n });\n\n stage.on('multiSelect', (els: HTMLElement[]) => {\n editorService.multiSelect(els.map((el) => el.id));\n });\n\n stage.on('update', (ev: UpdateEventData) => {\n if (ev.parentEl) {\n for (const data of ev.data) {\n editorService.moveToContainer({ id: data.el.id, style: data.style }, ev.parentEl.id);\n }\n return;\n }\n\n editorService.update(ev.data.map((data) => ({ id: data.el.id, style: data.style })));\n });\n\n stage.on('sort', (ev: SortEventData) => {\n editorService.sort(ev.src, ev.dist);\n });\n\n stage.on('changeGuides', (e) => {\n uiService.set('showGuides', true);\n\n if (!root.value || !page.value) return;\n\n const storageKey = getGuideLineKey(\n e.type === GuidesType.HORIZONTAL ? H_GUIDE_LINE_STORAGE_KEY : V_GUIDE_LINE_STORAGE_KEY,\n );\n if (e.guides.length) {\n globalThis.localStorage.setItem(storageKey, JSON.stringify(e.guides));\n } else {\n globalThis.localStorage.removeItem(storageKey);\n }\n });\n\n return stage;\n};\n","<template>\n <div class=\"m-editor-empty-panel\">\n <div class=\"m-editor-empty-content\">\n <div class=\"m-editor-empty-button\" @click=\"clickHandler\">\n <div>\n <el-icon><plus /></el-icon>\n </div>\n <p>新增页面</p>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, inject, toRaw } from 'vue';\nimport { Plus } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport type { Services } from '../type';\nimport { generatePageNameByApp } from '../utils';\n\nexport default defineComponent({\n components: { Plus },\n\n setup() {\n const services = inject<Services>('services');\n\n return {\n clickHandler() {\n const { editorService } = services || {};\n\n if (!editorService) return;\n\n editorService.add({\n type: NodeType.PAGE,\n name: generatePageNameByApp(toRaw(editorService.get('root'))),\n });\n },\n };\n },\n});\n</script>\n","<template>\n <span ref=\"target\" class=\"m-editor-resizer\">\n <slot></slot>\n </span>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, inject, onMounted, onUnmounted, ref, toRaw } from 'vue';\nimport Gesto from 'gesto';\n\nimport { Services } from '../type';\n\nexport default defineComponent({\n name: 'm-editor-resize',\n\n props: {\n type: {\n type: String,\n },\n },\n\n setup(props) {\n const services = inject<Services>('services');\n\n const target = ref<HTMLSpanElement>();\n\n let getso: Gesto;\n\n onMounted(() => {\n if (!target.value) return;\n getso = new Gesto(target.value, {\n container: window,\n pinchOutside: true,\n }).on('drag', (e) => {\n if (!target.value || !services) return;\n\n let { left, right } = {\n ...toRaw(services.uiService.get('columnWidth')),\n };\n if (props.type === 'left') {\n left += e.deltaX;\n } else if (props.type === 'right') {\n right -= e.deltaX;\n }\n services.uiService.set('columnWidth', {\n left,\n right,\n });\n });\n });\n\n onUnmounted(() => {\n getso?.unset();\n });\n\n return {\n target,\n };\n },\n});\n</script>\n","<template>\n <div class=\"m-editor\">\n <slot name=\"nav\" class=\"m-editor-nav-menu\"></slot>\n\n <magic-code-editor\n v-if=\"showSrc\"\n class=\"m-editor-content\"\n :init-values=\"root\"\n :options=\"codeOptions\"\n @save=\"saveCode\"\n ></magic-code-editor>\n\n <div class=\"m-editor-content\" v-else>\n <div class=\"m-editor-framework-left\" :style=\"`width: ${columnWidth?.left}px`\">\n <slot name=\"sidebar\"></slot>\n </div>\n\n <resizer type=\"left\"></resizer>\n\n <template v-if=\"pageLength > 0\">\n <div class=\"m-editor-framework-center\" :style=\"`width: ${columnWidth?.center}px`\">\n <slot name=\"workspace\"></slot>\n </div>\n\n <resizer type=\"right\"></resizer>\n\n <div class=\"m-editor-framework-right\" :style=\"`width: ${columnWidth?.right}px`\">\n <el-scrollbar>\n <slot name=\"props-panel\"></slot>\n </el-scrollbar>\n </div>\n </template>\n\n <slot v-else name=\"empty\">\n <add-page-box></add-page-box>\n </slot>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject } from 'vue';\n\nimport type { MApp } from '@tmagic/schema';\n\nimport { GetColumnWidth, Services } from '../type';\n\nimport AddPageBox from './AddPageBox.vue';\nimport Resizer from './Resizer.vue';\n\nexport default defineComponent({\n components: {\n AddPageBox,\n Resizer,\n },\n\n props: {\n codeOptions: {\n type: Object,\n default: () => ({}),\n },\n },\n\n setup() {\n const { editorService, uiService } = inject<Services>('services') || {};\n\n const root = computed(() => editorService?.get<MApp>('root'));\n\n return {\n root,\n pageLength: computed(() => editorService?.get<number>('pageLength') || 0),\n showSrc: computed(() => uiService?.get<boolean>('showSrc')),\n columnWidth: computed(() => uiService?.get<GetColumnWidth>('columnWidth')),\n\n saveCode(value: string) {\n try {\n // eslint-disable-next-line no-eval\n editorService?.set('root', eval(value));\n } catch (e: any) {\n console.error(e);\n }\n },\n };\n },\n});\n</script>\n","<template>\n <div\n v-if=\"display\"\n class=\"menu-item\"\n :class=\"`${data.type} ${data.className || ''}`\"\n @click=\"clickHandler(data, $event)\"\n @mousedown=\"mousedownHandler(data, $event)\"\n @mouseup=\"mouseupHandler(data, $event)\"\n >\n <el-divider v-if=\"data.type === 'divider'\" :direction=\"data.direction || 'vertical'\"></el-divider>\n <div v-else-if=\"data.type === 'text'\" class=\"menu-item-text\">{{ data.text }}</div>\n\n <template v-else-if=\"data.type === 'button'\">\n <el-tooltip v-if=\"data.tooltip\" effect=\"dark\" placement=\"bottom-start\" :content=\"data.tooltip\">\n <el-button size=\"small\" text :disabled=\"disabled\"\n ><MIcon v-if=\"data.icon\" :icon=\"data.icon\"></MIcon><span>{{ data.text }}</span></el-button\n >\n </el-tooltip>\n <el-button v-else size=\"small\" text :disabled=\"disabled\"\n ><MIcon v-if=\"data.icon\" :icon=\"data.icon\"></MIcon><span>{{ data.text }}</span></el-button\n >\n </template>\n\n <el-dropdown v-else-if=\"data.type === 'dropdown'\" trigger=\"click\" :disabled=\"disabled\" @command=\"dropdownHandler\">\n <span class=\"el-dropdown-link menubar-menu-button\">\n {{ data.text }}<el-icon class=\"el-icon--right\"><ArrowDown></ArrowDown></el-icon>\n </span>\n <template #dropdown>\n <el-dropdown-menu v-if=\"data.items && data.items.length\">\n <el-dropdown-item v-for=\"(subItem, index) in data.items\" :key=\"index\" :command=\"{ data, subItem }\">{{\n subItem.text\n }}</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n\n <component v-else-if=\"data.type === 'component'\" v-bind=\"data.props || {}\" :is=\"data.component\"></component>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue';\nimport { ArrowDown } from '@element-plus/icons-vue';\n\nimport MIcon from '../components/Icon.vue';\nimport type { MenuButton, MenuComponent, Services } from '../type';\n\nconst props = withDefaults(\n defineProps<{\n data?: MenuButton | MenuComponent;\n eventType?: 'mousedown' | 'mouseup' | 'click';\n }>(),\n {\n data: () => ({\n type: 'text',\n display: false,\n }),\n eventType: 'click',\n },\n);\nconst services = inject<Services>('services');\n\nconst disabled = computed(() => {\n if (typeof props.data === 'string') return false;\n if (props.data.type === 'component') return false;\n if (typeof props.data.disabled === 'function') {\n return props.data.disabled(services);\n }\n return props.data.disabled;\n});\n\nconst display = computed(() => {\n if (!props.data) return false;\n if (typeof props.data === 'string') return true;\n if (typeof props.data.display === 'function') {\n return props.data.display(services);\n }\n return props.data.display ?? true;\n});\n\nconst buttonHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (disabled.value) return;\n if (typeof (item as MenuButton).handler === 'function' && services) {\n (item as MenuButton).handler?.(services, event);\n }\n};\n\nconst dropdownHandler = (command: any) => {\n if (command.item.handler) {\n command.item.handler(services);\n }\n};\n\nconst clickHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'click') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n\nconst mousedownHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'mousedown') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n\nconst mouseupHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'mouseup') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n</script>\n","<template>\n <div class=\"m-editor-nav-menu\" :style=\"{ height: `${height}px` }\">\n <div v-for=\"key in keys\" :class=\"`menu-${key}`\" :key=\"key\" :style=\"`width: ${columnWidth?.[key]}px`\">\n <tool-button :data=\"item\" v-for=\"(item, index) in buttons[key]\" :key=\"index\"></tool-button>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, markRaw } from 'vue';\nimport { Back, Delete, FullScreen, Grid, Memo, Right, ScaleToOriginal, ZoomIn, ZoomOut } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport ToolButton from '../components/ToolButton.vue';\nimport { ColumnLayout, GetColumnWidth, MenuBarData, MenuButton, MenuComponent, MenuItem, Services } from '../type';\n\nconst props = withDefaults(\n defineProps<{\n data?: MenuBarData;\n height?: number;\n }>(),\n {\n data: () => ({}),\n height: 35,\n },\n);\n\nconst services = inject<Services>('services');\nconst uiService = services?.uiService;\n\nconst columnWidth = computed(() => services?.uiService.get<GetColumnWidth>('columnWidth'));\nconst keys = Object.values(ColumnLayout);\n\nconst showGuides = computed((): boolean => uiService?.get<boolean>('showGuides') ?? true);\nconst showRule = computed((): boolean => uiService?.get<boolean>('showRule') ?? true);\nconst zoom = computed((): number => uiService?.get<number>('zoom') ?? 1);\n\nconst isMac = /mac os x/.test(navigator.userAgent.toLowerCase());\nconst ctrl = isMac ? 'Command' : 'Ctrl';\n\nconst getConfig = (item: MenuItem): (MenuButton | MenuComponent)[] => {\n if (typeof item !== 'string') {\n return [item];\n }\n const config: (MenuButton | MenuComponent)[] = [];\n switch (item) {\n case '/':\n config.push({\n type: 'divider',\n className: 'divider',\n });\n break;\n case 'zoom':\n config.push(\n ...getConfig('zoom-out'),\n ...getConfig(`${parseInt(`${zoom.value * 100}`, 10)}%`),\n ...getConfig('zoom-in'),\n ...getConfig('scale-to-original'),\n ...getConfig('scale-to-fit'),\n );\n break;\n case 'delete':\n config.push({\n type: 'button',\n className: 'delete',\n icon: markRaw(Delete),\n tooltip: `刪除(Delete)`,\n disabled: () => services?.editorService.get('node')?.type === NodeType.PAGE,\n handler: () => services?.editorService.remove(services?.editorService.get('node')),\n });\n break;\n case 'undo':\n config.push({\n type: 'button',\n className: 'undo',\n icon: markRaw(Back),\n tooltip: `后退(${ctrl}+z)`,\n disabled: () => !services?.historyService.state.canUndo,\n handler: () => services?.editorService.undo(),\n });\n break;\n case 'redo':\n config.push({\n type: 'button',\n className: 'redo',\n icon: markRaw(Right),\n tooltip: `前进(${ctrl}+Shift+z)`,\n disabled: () => !services?.historyService.state.canRedo,\n handler: () => services?.editorService.redo(),\n });\n break;\n case 'zoom-in':\n config.push({\n type: 'button',\n className: 'zoom-in',\n icon: markRaw(ZoomIn),\n tooltip: `放大(${ctrl}+=)`,\n handler: () => uiService?.zoom(0.1),\n });\n break;\n case 'zoom-out':\n config.push({\n type: 'button',\n className: 'zoom-out',\n icon: markRaw(ZoomOut),\n tooltip: `縮小(${ctrl}+-)`,\n handler: () => uiService?.zoom(-0.1),\n });\n break;\n case 'scale-to-original':\n config.push({\n type: 'button',\n className: 'scale-to-original',\n icon: markRaw(ScaleToOriginal),\n tooltip: `缩放到实际大小(${ctrl}+1)`,\n handler: () => uiService?.set('zoom', 1),\n });\n break;\n case 'scale-to-fit':\n config.push({\n type: 'button',\n className: 'scale-to-fit',\n icon: markRaw(FullScreen),\n tooltip: `缩放以适应(${ctrl}+0)`,\n handler: () => uiService?.set('zoom', uiService.calcZoom()),\n });\n break;\n case 'rule':\n config.push({\n type: 'button',\n className: 'rule',\n icon: markRaw(Memo),\n tooltip: showRule.value ? '隐藏标尺' : '显示标尺',\n handler: () => uiService?.set('showRule', !showRule.value),\n });\n break;\n case 'guides':\n config.push({\n type: 'button',\n className: 'guides',\n icon: markRaw(Grid),\n tooltip: showGuides.value ? '隐藏参考线' : '显示参考线',\n handler: () => uiService?.set('showGuides', !showGuides.value),\n });\n break;\n default:\n config.push({\n type: 'text',\n text: item,\n });\n }\n return config;\n};\n\nconst buttons = computed(() => {\n const data: {\n [ColumnLayout.LEFT]: (MenuButton | MenuComponent)[];\n [ColumnLayout.CENTER]: (MenuButton | MenuComponent)[];\n [ColumnLayout.RIGHT]: (MenuButton | MenuComponent)[];\n } = {\n [ColumnLayout.LEFT]: [],\n [ColumnLayout.CENTER]: [],\n [ColumnLayout.RIGHT]: [],\n };\n keys.forEach((key) => {\n const items = props.data[key] || [];\n items.forEach((item) => {\n data[key].push(...getConfig(item));\n });\n });\n return data;\n});\n</script>\n","<template>\n <div class=\"`m-editor-props-panel\">\n <slot name=\"props-panel-header\"></slot>\n <m-form\n ref=\"configForm\"\n :class=\"`m-editor-props-panel ${propsPanelSize}`\"\n :popper-class=\"`m-editor-props-panel-popper ${propsPanelSize}`\"\n :size=\"propsPanelSize\"\n :init-values=\"values\"\n :config=\"curFormConfig\"\n @change=\"submit\"\n ></m-form>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, getCurrentInstance, inject, onMounted, ref, watchEffect } from 'vue';\nimport { ElMessage } from 'element-plus';\n\nimport type { FormValue, MForm } from '@tmagic/form';\nimport type { MNode } from '@tmagic/schema';\nimport type StageCore from '@tmagic/stage';\n\nimport type { Services } from '../type';\n\nconst emit = defineEmits(['mounted']);\n\nconst internalInstance = getCurrentInstance();\nconst values = ref<FormValue>({});\nconst configForm = ref<InstanceType<typeof MForm>>();\n// ts类型应该是FormConfig, 但是打包时会出错,所以暂时用any\nconst curFormConfig = ref<any>([]);\nconst services = inject<Services>('services');\nconst node = computed(() => services?.editorService.get<MNode | null>('node'));\nconst propsPanelSize = computed(() => services?.uiService.get('propsPanelSize') || 'small');\nconst stage = computed(() => services?.editorService.get<StageCore>('stage'));\n\nconst init = async () => {\n if (!node.value) {\n curFormConfig.value = [];\n return;\n }\n\n const type = node.value.type || (node.value.items ? 'container' : 'text');\n curFormConfig.value = (await services?.propsService.getPropsConfig(type)) || [];\n values.value = node.value;\n};\n\nwatchEffect(init);\nservices?.propsService.on('props-configs-change', init);\n\nonMounted(() => {\n emit('mounted', internalInstance);\n});\n\nwatchEffect(() => {\n if (configForm.value && stage.value) {\n configForm.value.formState.stage = stage.value;\n }\n});\n\nconst submit = async () => {\n try {\n const values = await configForm.value?.submitForm();\n services?.editorService.update(values);\n } catch (e: any) {\n console.error(e);\n ElMessage.closeAll();\n ElMessage.error({\n duration: 10000,\n showClose: true,\n message: e.message,\n dangerouslyUseHTMLString: true,\n });\n }\n};\n\ndefineExpose({ submit });\n</script>\n","<template>\n <el-scrollbar>\n <slot name=\"component-list-panel-header\"></slot>\n\n <el-collapse class=\"ui-component-panel\" :model-value=\"collapseValue\">\n <el-input\n prefix-icon=\"el-icon-search\"\n placeholder=\"输入关键字进行过滤\"\n class=\"search-input\"\n size=\"small\"\n clearable\n v-model=\"searchText\"\n />\n <template v-for=\"(group, index) in list\">\n <el-collapse-item v-if=\"group.items && group.items.length\" :key=\"index\" :name=\"index\">\n <template #title><i class=\"el-icon-s-grid\"></i>{{ group.title }}</template>\n <div\n class=\"component-item\"\n v-for=\"item in group.items\"\n draggable=\"true\"\n :key=\"item.type\"\n @click=\"appendComponent(item)\"\n @dragstart=\"dragstartHandler(item, $event)\"\n @dragend=\"dragendHandler\"\n @drag=\"dragHandler\"\n >\n <slot name=\"component-list-item\" :component=\"item\">\n <MIcon :icon=\"item.icon\"></MIcon>\n\n <el-tooltip effect=\"dark\" placement=\"bottom\" :content=\"item.text\">\n <span>{{ item.text }}</span>\n </el-tooltip>\n </slot>\n </div>\n </el-collapse-item>\n </template>\n </el-collapse>\n </el-scrollbar>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, ref } from 'vue';\nimport serialize from 'serialize-javascript';\n\nimport type StageCore from '@tmagic/stage';\nimport { removeClassNameByClassName } from '@tmagic/utils';\n\nimport MIcon from '../../components/Icon.vue';\nimport type { ComponentGroup, ComponentItem, Services, StageOptions } from '../../type';\n\nconst searchText = ref('');\nconst services = inject<Services>('services');\nconst stageOptions = inject<StageOptions>('stageOptions');\n\nconst stage = computed(() => services?.editorService.get<StageCore>('stage'));\nconst list = computed(() =>\n services?.componentListService.getList().map((group: ComponentGroup) => ({\n ...group,\n items: group.items.filter((item: ComponentItem) => item.text.includes(searchText.value)),\n })),\n);\nconst collapseValue = computed(() =>\n Array(list.value?.length)\n .fill(1)\n .map((x, i) => i),\n);\n\nlet timeout: NodeJS.Timeout | undefined;\nlet clientX: number;\nlet clientY: number;\n\nconst appendComponent = ({ text, type, data = {} }: ComponentItem): void => {\n services?.editorService.add({\n name: text,\n type,\n ...data,\n });\n};\n\nconst dragstartHandler = ({ text, type, data = {} }: ComponentItem, e: DragEvent) => {\n if (e.dataTransfer) {\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData(\n 'data',\n serialize({\n name: text,\n type,\n ...data,\n }).replace(/\"(\\w+)\":\\s/g, '$1: '),\n );\n }\n};\n\nconst dragendHandler = () => {\n if (timeout) {\n globalThis.clearTimeout(timeout);\n timeout = undefined;\n }\n const doc = stage.value?.renderer.contentWindow?.document;\n if (doc && stageOptions) {\n removeClassNameByClassName(doc, stageOptions.containerHighlightClassName);\n }\n clientX = 0;\n clientY = 0;\n};\n\nconst dragHandler = (e: DragEvent) => {\n if (e.clientX !== clientX || e.clientY !== clientY) {\n clientX = e.clientX;\n clientY = e.clientY;\n if (timeout) {\n globalThis.clearTimeout(timeout);\n timeout = undefined;\n }\n return;\n }\n\n if (timeout || !stage.value) return;\n\n timeout = stage.value.getAddContainerHighlightClassNameTimeout(e);\n};\n</script>\n","<template>\n <div v-if=\"menuData.length && visible\" class=\"magic-editor-content-menu\" ref=\"menu\" :style=\"menuStyle\">\n <div>\n <tool-button\n v-for=\"(item, index) in menuData\"\n event-type=\"mouseup\"\n :data=\"item\"\n :key=\"index\"\n @mouseup=\"hide\"\n @mouseenter=\"showSubMenu(item)\"\n ></tool-button>\n </div>\n <teleport to=\"body\">\n <content-menu\n class=\"sub-menu\"\n ref=\"subMenu\"\n :menu-data=\"subMenuData\"\n :is-sub-menu=\"true\"\n @hide=\"hide\"\n ></content-menu>\n </teleport>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { nextTick, onMounted, onUnmounted, ref } from 'vue';\n\nimport { MenuButton, MenuComponent } from '../type';\n\nimport ToolButton from './ToolButton.vue';\n\nconst props = withDefaults(\n defineProps<{\n menuData?: (MenuButton | MenuComponent)[];\n isSubMenu?: boolean;\n }>(),\n {\n menuData: () => [],\n isSubMenu: false,\n },\n);\n\nconst emit = defineEmits(['hide', 'show']);\n\nconst menu = ref<HTMLDivElement>();\nconst subMenu = ref<any>();\nconst visible = ref(false);\nconst subMenuData = ref<(MenuButton | MenuComponent)[]>([]);\nconst menuStyle = ref({\n left: '0',\n top: '0',\n});\n\nconst hide = () => {\n if (!visible.value) return;\n\n visible.value = false;\n subMenu.value?.hide();\n\n emit('hide');\n};\n\nconst hideHandler = (e: MouseEvent) => {\n const target = e.target as HTMLElement | undefined;\n if (!visible.value || !target) {\n return;\n }\n if (menu.value?.contains(target) || subMenu.value?.$el?.contains(target)) {\n return;\n }\n hide();\n};\n\nconst show = (e: MouseEvent) => {\n // 加settimeout是以为,如果菜单中的按钮监听的是mouseup,那么菜单显示出来时鼠标如果正好在菜单上就会马上触发按钮的mouseup\n setTimeout(() => {\n visible.value = true;\n\n nextTick(() => {\n const menuHeight = menu.value?.clientHeight || 0;\n\n let top = e.clientY;\n if (menuHeight + e.clientY > document.body.clientHeight) {\n top = document.body.clientHeight - menuHeight;\n }\n\n menuStyle.value = {\n top: `${top}px`,\n left: `${e.clientX}px`,\n };\n\n emit('show');\n });\n }, 300);\n};\n\nconst showSubMenu = (item: MenuButton | MenuComponent) => {\n const menuItem = item as MenuButton;\n if (typeof item !== 'object' || !menuItem.items?.length) {\n return;\n }\n\n subMenuData.value = menuItem.items;\n if (menu.value) {\n subMenu.value.show({\n clientX: menu.value.offsetLeft + menu.value.clientWidth,\n clientY: menu.value.offsetTop,\n });\n }\n};\n\nonMounted(() => {\n if (props.isSubMenu) return;\n\n globalThis.addEventListener('mousedown', hideHandler, true);\n});\n\nonUnmounted(() => {\n if (props.isSubMenu) return;\n\n globalThis.removeEventListener('mousedown', hideHandler, true);\n});\n\ndefineExpose({\n hide,\n show,\n});\n</script>\n","<template>\n <content-menu :menu-data=\"menuData\" ref=\"menu\" style=\"overflow: initial\"></content-menu>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, markRaw, ref } from 'vue';\nimport { Delete, DocumentCopy, Files, Plus } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport ContentMenu from '../../components/ContentMenu.vue';\nimport type { ComponentGroup, MenuButton, MenuComponent, Services } from '../../type';\n\nexport default defineComponent({\n components: { ContentMenu },\n\n setup() {\n const services = inject<Services>('services');\n const menu = ref<InstanceType<typeof ContentMenu>>();\n const node = computed(() => services?.editorService.get('node'));\n const isRoot = computed(() => node.value?.type === NodeType.ROOT);\n const isPage = computed(() => node.value?.type === NodeType.PAGE);\n const componentList = computed(() => services?.componentListService.getList() || []);\n\n const layerContentMenu = inject<(MenuComponent | MenuButton)[]>('layerContentMenu', []);\n\n const createMenuItems = (group: ComponentGroup): MenuButton[] =>\n group.items.map((component) => ({\n text: component.text,\n type: 'button',\n icon: component.icon,\n handler: () => {\n services?.editorService.add({\n name: component.text,\n type: component.type,\n ...(component.data || {}),\n });\n },\n }));\n\n const getSubMenuData = computed<MenuButton[]>(() => {\n if (node.value?.type === 'tabs') {\n return [\n {\n text: '标签页',\n type: 'button',\n icon: Files,\n handler: () => {\n services?.editorService.add({\n type: 'tab-pane',\n });\n },\n },\n ];\n }\n if (node.value?.items) {\n return (\n componentList.value.reduce(\n (subMenuData: MenuButton[], group: ComponentGroup, index) =>\n subMenuData.concat(\n createMenuItems(group),\n index < componentList.value.length - 1\n ? [\n {\n type: 'divider',\n direction: 'horizontal',\n },\n ]\n : [],\n ),\n [],\n ) || []\n );\n }\n return [];\n });\n\n return {\n menu,\n menuData: computed<(MenuButton | MenuComponent)[]>(() => [\n {\n type: 'button',\n text: '新增',\n icon: markRaw(Plus),\n display: () => node.value?.items,\n items: getSubMenuData.value,\n },\n {\n type: 'button',\n text: '复制',\n icon: markRaw(DocumentCopy),\n display: () => !isRoot.value,\n handler: () => {\n node.value && services?.editorService.copy(node.value);\n },\n },\n {\n type: 'button',\n text: '删除',\n icon: markRaw(Delete),\n display: () => !isRoot.value && !isPage.value,\n handler: () => {\n node.value && services?.editorService.remove(node.value);\n },\n },\n ...layerContentMenu,\n ]),\n\n show(e: MouseEvent) {\n menu.value?.show(e);\n },\n };\n },\n});\n</script>\n","<template>\n <el-scrollbar class=\"magic-editor-layer-panel\">\n <slot name=\"layer-panel-header\"></slot>\n\n <el-input\n class=\"filterInput\"\n size=\"small\"\n placeholder=\"输入关键字进行过滤\"\n clearable\n v-model=\"filterText\"\n @change=\"filterTextChangeHandler\"\n ></el-input>\n\n <el-tree\n v-if=\"values.length\"\n ref=\"tree\"\n node-key=\"id\"\n empty-text=\"页面空荡荡的\"\n draggable\n :default-expanded-keys=\"expandedKeys\"\n :load=\"loadItems\"\n :data=\"values\"\n :expand-on-click-node=\"false\"\n :highlight-current=\"true\"\n :props=\"{\n children: 'items',\n }\"\n :filter-node-method=\"filterNode\"\n :allow-drop=\"allowDrop\"\n @node-click=\"clickHandler\"\n @node-contextmenu=\"contextmenu\"\n @node-drag-end=\"handleDragEnd\"\n @node-collapse=\"handleCollapse\"\n @node-expand=\"handleExpand\"\n >\n <template #default=\"{ node, data }\">\n <div\n :id=\"data.id\"\n class=\"cus-tree-node\"\n @mousedown=\"toggleClickFlag\"\n @mouseup=\"toggleClickFlag\"\n @mouseenter=\"highlightHandler(data)\"\n :class=\"{ 'cus-tree-node-hover': canHighlight && data.id === highlightNode?.id }\"\n >\n <slot name=\"layer-node-content\" :node=\"node\" :data=\"data\">\n <span>\n {{ `${data.name} (${data.id})` }}\n </span>\n </slot>\n </div>\n </template>\n </el-tree>\n\n <teleport to=\"body\">\n <layer-menu ref=\"menu\"></layer-menu>\n </teleport>\n </el-scrollbar>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, Ref, ref, watchEffect } from 'vue';\nimport type { ElTree } from 'element-plus';\nimport { throttle } from 'lodash-es';\n\nimport type { Id, MNode, MPage } from '@tmagic/schema';\nimport { MContainer, NodeType } from '@tmagic/schema';\nimport StageCore from '@tmagic/stage';\n\nimport type { EditorService } from '../../services/editor';\nimport type { Services } from '../../type';\nimport { Layout } from '../../type';\n\nimport LayerMenu from './LayerMenu.vue';\n\nconst throttleTime = 150;\n\nconst select = async (data: MNode, editorService?: EditorService) => {\n if (!data.id) {\n throw new Error('没有id');\n }\n\n await editorService?.select(data);\n editorService?.get<StageCore>('stage')?.select(data.id);\n};\n\nconst highlight = (data: MNode, editorService?: EditorService) => {\n if (!data?.id) {\n throw new Error('没有id');\n }\n editorService?.highlight(data);\n editorService?.get<StageCore>('stage')?.highlight(data.id);\n};\n\nconst useDrop = (tree: Ref<InstanceType<typeof ElTree> | undefined>, editorService?: EditorService) => ({\n allowDrop: (draggingNode: any, dropNode: any, type: string): boolean => {\n const { data } = dropNode || {};\n const { data: ingData } = draggingNode;\n\n const { type: ingType } = ingData;\n\n if (ingType !== NodeType.PAGE && data.type === NodeType.PAGE) return false;\n if (ingType === NodeType.PAGE && data.type !== NodeType.PAGE) return false;\n if (!data || !data.type) return false;\n if (['prev', 'next'].includes(type)) return true;\n if (data.items || data.type === 'container') return true;\n\n return false;\n },\n\n async handleDragEnd(e: any) {\n if (!tree.value) return;\n const { data: node } = e;\n const parent = editorService?.getParentById(node.id, false) as MContainer;\n const layout = await editorService?.getLayout(parent);\n node.style.position = layout;\n if (layout === Layout.RELATIVE) {\n node.style.top = 0;\n node.style.left = 0;\n }\n const { data } = tree.value;\n const [page] = data as [MPage];\n editorService?.update(page);\n },\n});\n\nconst useStatus = (tree: Ref<InstanceType<typeof ElTree> | undefined>, editorService?: EditorService) => {\n const node = ref<MNode>();\n const page = computed(() => editorService?.get('page'));\n const expandedKeys = new Map<Id, Id>();\n\n const expandNodes = () => {\n expandedKeys.forEach((key) => {\n if (!tree.value) return;\n tree.value.getNode(key)?.expand();\n });\n };\n\n watchEffect(() => {\n if (!tree.value) return;\n if (!editorService) return;\n node.value = editorService.get('node');\n\n if (!node.value) return;\n\n tree.value.setCurrentKey(node.value.id, true);\n\n const parent = editorService.get('parent');\n if (!parent?.id) return;\n\n const treeNode = tree.value.getNode(parent.id);\n treeNode?.updateChildren();\n\n setTimeout(() => {\n tree.value &&\n Object.entries(tree.value.store.nodesMap).forEach(([id, node]) => {\n if (node.expanded && node.data.items) {\n expandedKeys.set(id, id);\n }\n });\n expandNodes();\n });\n });\n\n return {\n values: computed(() => (page.value ? [page.value] : [])),\n\n loadItems: (node: any, resolve: Function) => {\n if (Array.isArray(node.data)) {\n return resolve(node.data);\n }\n if (Array.isArray(node.data?.items)) {\n return resolve(node.data?.items);\n }\n resolve([]);\n },\n\n highlightNode: computed(() => editorService?.get('highlightNode')),\n clickNode: node,\n expandedKeys: computed(() => (node.value ? [node.value.id] : [])),\n\n handleCollapse: (data: MNode) => {\n expandedKeys.delete(data.id);\n },\n\n handleExpand: (data: MNode) => {\n const parent = editorService?.getParentById(data.id);\n if (!parent?.id) return;\n expandedKeys.set(parent.id, parent.id);\n },\n };\n};\n\nconst useFilter = (tree: Ref<InstanceType<typeof ElTree> | undefined>) => ({\n filterText: ref(''),\n\n filterNode: (value: string, data: MNode): boolean => {\n if (!value) {\n return true;\n }\n let name = '';\n if (data.name) {\n name = data.name;\n } else if (data.items) {\n name = 'container';\n }\n return `${data.id}${name}${data.type}`.indexOf(value) !== -1;\n },\n\n filterTextChangeHandler(val: string) {\n tree.value?.filter(val);\n },\n});\n\nexport default defineComponent({\n name: 'magic-editor-layer-panel',\n\n components: { LayerMenu },\n\n setup() {\n const services = inject<Services>('services');\n const tree = ref<InstanceType<typeof ElTree>>();\n const menu = ref<InstanceType<typeof LayerMenu>>();\n const clicked = ref(false);\n const editorService = services?.editorService;\n const highlightHandler = throttle((data: MNode) => {\n highlight(data, editorService);\n }, throttleTime);\n\n const toggleClickFlag = () => {\n clicked.value = !clicked.value;\n };\n\n const statusData = useStatus(tree, editorService);\n const canHighlight = computed(\n () => statusData.highlightNode.value?.id !== statusData.clickNode.value?.id && !clicked.value,\n );\n\n editorService?.on('remove', () => {\n setTimeout(() => {\n tree.value?.getNode(editorService.get('node').id)?.updateChildren();\n }, 0);\n });\n\n return {\n tree,\n menu,\n ...statusData,\n ...useDrop(tree, editorService),\n ...useFilter(tree),\n\n highlightHandler,\n toggleClickFlag,\n canHighlight,\n\n clickHandler(data: MNode): void {\n if (services?.uiService.get<boolean>('uiSelectMode')) {\n document.dispatchEvent(new CustomEvent('ui-select', { detail: data }));\n return;\n }\n tree.value?.setCurrentKey(data.id);\n select(data, editorService);\n },\n\n async contextmenu(event: MouseEvent, data: MNode) {\n event.preventDefault();\n await select(data, editorService);\n menu.value?.show(event);\n },\n };\n },\n});\n</script>\n","<template>\n <el-tab-pane v-if=\"config\" :name=\"config.text\">\n <template #label>\n <div :key=\"config.text\">\n <m-icon v-if=\"config.icon\" :icon=\"config.icon\"></m-icon>\n <div v-if=\"config.text\" class=\"magic-editor-tab-panel-title\">{{ config.text }}</div>\n </div>\n </template>\n\n <component :is=\"config.component\" v-bind=\"config.props || {}\" v-on=\"config?.listeners || {}\">\n <template #component-list-panel-header v-if=\"data === 'component-list' || config.slots?.componentListPanelHeader\">\n <slot v-if=\"data === 'component-list'\" name=\"component-list-panel-header\"></slot>\n <component v-else-if=\"config.slots?.componentListPanelHeader\" :is=\"config.slots.componentListPanelHeader\" />\n </template>\n\n <template\n #component-list-item=\"{ component }\"\n v-if=\"data === 'component-list' || config.slots?.componentListItem\"\n >\n <slot v-if=\"data === 'component-list'\" name=\"component-list-item\" :component=\"component\"></slot>\n <component\n v-else-if=\"config.slots?.componentListItem\"\n :is=\"config.slots.componentListItem\"\n :component=\"component\"\n />\n </template>\n\n <template #layer-panel-header v-if=\"data === 'layer' || config.slots?.layerPanelHeader\">\n <slot v-if=\"data === 'layer'\" name=\"layer-panel-header\"></slot>\n <component v-else-if=\"config.slots?.layerPanelHeader\" :is=\"config.slots.layerPanelHeader\" />\n </template>\n\n <template #layer-node-content=\"{ data, node }\" v-if=\"config.slots?.layerNodeContent\">\n <component :is=\"config.slots?.layerNodeContent\" :data=\"data\" :node=\"node\" />\n </template>\n </component>\n </el-tab-pane>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType } from 'vue';\nimport { Coin, Files } from '@element-plus/icons-vue';\n\nimport MIcon from '../../components/Icon.vue';\nimport { SideComponent, SideItem } from '../../type';\n\nimport ComponentListPanel from './ComponentListPanel.vue';\nimport LayerPanel from './LayerPanel.vue';\n\nexport default defineComponent({\n components: { MIcon },\n\n props: {\n data: {\n type: [Object, String] as PropType<SideItem>,\n },\n },\n\n setup(props) {\n return {\n config: computed<SideComponent | undefined>(() => {\n if (typeof props.data !== 'string') {\n return props.data;\n }\n\n switch (props.data) {\n case 'component-list':\n return {\n type: 'component',\n icon: Coin,\n text: '组件',\n component: ComponentListPanel,\n slots: {},\n };\n case 'layer':\n return {\n type: 'component',\n icon: Files,\n text: '已选组件',\n component: LayerPanel,\n slots: {},\n };\n default:\n return undefined;\n }\n }),\n };\n },\n});\n</script>\n","<template>\n <el-tabs\n v-if=\"data.type === 'tabs' && data.items.length\"\n class=\"m-editor-sidebar\"\n v-model=\"activeTabName\"\n type=\"card\"\n tab-position=\"left\"\n >\n <tab-pane v-for=\"(item, index) in data.items\" :key=\"index\" :data=\"item\">\n <template #layer-panel-header v-if=\"item === 'layer'\">\n <slot name=\"layer-panel-header\"></slot>\n </template>\n\n <template #component-list-panel-header v-if=\"item === 'component-list'\">\n <slot name=\"component-list-panel-header\"></slot>\n </template>\n\n <template #component-list-item=\"{ component }\" v-if=\"item === 'component-list'\">\n <slot name=\"component-list-item\" :component=\"component\"></slot>\n </template>\n </tab-pane>\n </el-tabs>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType, ref, watch } from 'vue';\n\nimport { SideBarData } from '../../type';\n\nimport TabPane from './TabPane.vue';\n\nexport default defineComponent({\n components: { TabPane },\n\n name: 'm-sidebar',\n\n props: {\n data: {\n type: Object as PropType<SideBarData>,\n default: () => ({ type: 'tabs', status: '组件', items: ['component-list', 'layer'] }),\n },\n },\n\n setup(props) {\n const activeTabName = ref(props.data?.status);\n\n watch(\n () => props.data?.status,\n (status) => {\n activeTabName.value = status || '0';\n },\n );\n\n return {\n activeTabName,\n };\n },\n});\n</script>\n","<template>\n <div class=\"m-editor-page-bar\" ref=\"pageBar\">\n <div\n v-if=\"showAddPageButton\"\n id=\"m-editor-page-bar-add-icon\"\n class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\"\n @click=\"addPage\"\n >\n <el-icon><plus></plus></el-icon>\n </div>\n <div v-else style=\"width: 21px\"></div>\n <div v-if=\"canScroll\" class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\" @click=\"scroll('left')\">\n <el-icon><arrow-left-bold></arrow-left-bold></el-icon>\n </div>\n <div v-if=\"root\" class=\"m-editor-page-bar-items\" ref=\"itemsContainer\" :style=\"`width: ${itemsContainerWidth}px`\">\n <slot></slot>\n </div>\n <div v-if=\"canScroll\" class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\" @click=\"scroll('right')\">\n <el-icon><arrow-right-bold></arrow-right-bold></el-icon>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, onMounted, onUnmounted, ref, toRaw, watch } from 'vue';\nimport { ArrowLeftBold, ArrowRightBold, Plus } from '@element-plus/icons-vue';\n\nimport { MApp, NodeType } from '@tmagic/schema';\n\nimport type { Services } from '../../type';\nimport { generatePageNameByApp } from '../../utils/editor';\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\nconst uiService = services?.uiService;\n\nconst pageBar = ref<HTMLDivElement>();\nconst itemsContainer = ref<HTMLDivElement>();\nconst pageBarWidth = ref(0);\nconst canScroll = ref(false);\n\nconst showAddPageButton = computed(() => uiService?.get('showAddPageButton'));\n\n// 减去新增、左移、右移三个按钮的宽度\nconst itemsContainerWidth = computed(() => pageBarWidth.value - 35 * 2 - (showAddPageButton.value ? 35 : 21));\n\nlet translateLeft = 0;\nconst resizeObserver = new ResizeObserver((entries) => {\n for (const { contentRect } of entries) {\n const { width } = contentRect;\n pageBarWidth.value = width || 0;\n\n setCanScroll();\n }\n});\n\nconst setCanScroll = () => {\n if (itemsContainer.value) {\n canScroll.value = itemsContainer.value.scrollWidth > itemsContainerWidth.value;\n }\n};\n\nconst scroll = (type: 'left' | 'right' | 'start' | 'end') => {\n if (!itemsContainer.value) return;\n\n const maxScrollLeft = itemsContainer.value.scrollWidth - itemsContainerWidth.value;\n\n if (type === 'left') {\n translateLeft += 100;\n\n if (translateLeft > 0) {\n translateLeft = 0;\n }\n } else if (type === 'right') {\n translateLeft -= 100;\n\n if (-translateLeft > maxScrollLeft) {\n translateLeft = -maxScrollLeft;\n }\n } else if (type === 'start') {\n translateLeft = 0;\n } else if (type === 'end') {\n translateLeft = -maxScrollLeft;\n }\n\n itemsContainer.value.style.transform = `translate(${translateLeft}px, 0px)`;\n};\n\nonMounted(() => {\n pageBar.value && resizeObserver.observe(pageBar.value);\n});\n\nonUnmounted(() => {\n resizeObserver.disconnect();\n});\n\nconst root = computed(() => editorService?.get<MApp>('root'));\n\nwatch(\n () => root.value?.items.length,\n (length = 0, preLength = 0) => {\n setTimeout(() => {\n setCanScroll();\n if (length < preLength) {\n scroll('start');\n } else {\n scroll('end');\n }\n });\n },\n);\n\nconst addPage = () => {\n if (!editorService) return;\n const pageConfig = {\n type: NodeType.PAGE,\n name: generatePageNameByApp(toRaw(editorService.get('root'))),\n };\n editorService.add(pageConfig);\n};\n</script>\n","<template>\n <PageBarScrollContainer>\n <div\n v-for=\"item in (root && root.items) || []\"\n class=\"m-editor-page-bar-item\"\n :key=\"item.key\"\n :class=\"{ active: page?.id === item.id }\"\n @click=\"switchPage(item)\"\n >\n <div class=\"m-editor-page-bar-title\">\n <slot name=\"page-bar-title\" :page=\"item\">\n <el-tooltip effect=\"dark\" placement=\"top-start\" :content=\"item.name\">\n <span>{{ item.name || item.id }}</span>\n </el-tooltip>\n </slot>\n </div>\n\n <el-popover popper-class=\"page-bar-popover\" placement=\"top\" :width=\"160\" trigger=\"hover\">\n <div>\n <slot name=\"page-bar-popover\" :page=\"item\">\n <tool-button\n :data=\"{\n type: 'button',\n text: '复制',\n icon: DocumentCopy,\n handler: () => copy(item),\n }\"\n ></tool-button>\n <tool-button\n :data=\"{\n type: 'button',\n text: '删除',\n icon: Delete,\n handler: () => remove(item),\n }\"\n ></tool-button>\n </slot>\n </div>\n <template #reference>\n <el-icon class=\"m-editor-page-bar-menu-icon\">\n <CaretBottom></CaretBottom>\n </el-icon>\n </template>\n </el-popover>\n </div>\n </PageBarScrollContainer>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue';\nimport { CaretBottom, Delete, DocumentCopy } from '@element-plus/icons-vue';\n\nimport type { MApp, MPage } from '@tmagic/schema';\n\nimport ToolButton from '../../components/ToolButton.vue';\nimport type { Services } from '../../type';\n\nimport PageBarScrollContainer from './PageBarScrollContainer.vue';\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\n\nconst root = computed(() => editorService?.get<MApp>('root'));\n\nconst page = computed(() => editorService?.get('page'));\n\nconst switchPage = (page: MPage) => {\n editorService?.select(page);\n};\n\nconst copy = (node: MPage) => {\n node && editorService?.copy(node);\n editorService?.paste({\n left: 0,\n top: 0,\n });\n};\n\nconst remove = (node: MPage) => {\n editorService?.remove(node);\n};\n</script>\n","import { EventEmitter } from 'events';\n\ninterface ScrollViewerOptions {\n container: HTMLDivElement;\n target: HTMLDivElement;\n zoom: number;\n}\n\nexport class ScrollViewer extends EventEmitter {\n private container: HTMLDivElement;\n private target: HTMLDivElement;\n private zoom = 1;\n\n private scrollLeft = 0;\n private scrollTop = 0;\n\n private scrollHeight = 0;\n private scrollWidth = 0;\n\n private width = 0;\n private height = 0;\n\n private translateXCorrectionValue = 0;\n private translateYCorrectionValue = 0;\n\n private resizeObserver = new ResizeObserver(() => {\n this.setSize();\n this.setScrollSize();\n });\n\n constructor(options: ScrollViewerOptions) {\n super();\n\n this.container = options.container;\n this.target = options.target;\n this.zoom = options.zoom;\n\n this.container.addEventListener('wheel', this.wheelHandler, false);\n\n this.setSize();\n this.setScrollSize();\n this.resizeObserver.observe(this.container);\n }\n\n public destroy() {\n this.resizeObserver.disconnect();\n this.container.removeEventListener('wheel', this.wheelHandler, false);\n this.removeAllListeners();\n }\n\n public setZoom(zoom: number) {\n this.zoom = zoom;\n this.setScrollSize();\n }\n\n public scrollTo({ left, top }: { left?: number; top?: number }) {\n if (typeof left !== 'undefined') {\n this.scrollLeft = left;\n }\n\n if (typeof top !== 'undefined') {\n this.scrollTop = top;\n }\n\n const translateX = -this.scrollLeft + this.translateXCorrectionValue;\n const translateY = -this.scrollTop + this.translateYCorrectionValue;\n this.target.style.transform = `translate(${translateX}px, ${translateY}px)`;\n }\n\n private wheelHandler = (event: WheelEvent) => {\n const { deltaX, deltaY, currentTarget } = event;\n\n if (currentTarget !== this.container) return;\n\n let top: number | undefined;\n if (this.scrollHeight > this.height) {\n top = this.scrollTop + this.getPos(deltaY, this.scrollTop, this.scrollHeight, this.height);\n }\n\n let left: number | undefined;\n if (this.scrollWidth > this.width) {\n left = this.scrollLeft + this.getPos(deltaX, this.scrollLeft, this.scrollWidth, this.width);\n }\n\n this.scrollTo({ left, top });\n this.emit('scroll', {\n scrollLeft: this.scrollLeft,\n scrollTop: this.scrollTop,\n scrollHeight: this.scrollHeight,\n scrollWidth: this.scrollWidth,\n });\n };\n\n private getPos(delta: number, scrollPos: number, scrollSize: number, size: number) {\n let pos = 0;\n if (delta < 0) {\n if (scrollPos > 0) {\n pos = Math.max(delta, -scrollPos);\n }\n } else {\n const leftPos = scrollSize - size - scrollPos;\n if (leftPos > 0) {\n pos = Math.min(delta, leftPos);\n }\n }\n return pos;\n }\n\n private setScrollSize = () => {\n const targetRect = this.target.getBoundingClientRect();\n this.scrollWidth = targetRect.width * this.zoom + 100;\n const targetMarginTop = Number(this.target.style.marginTop) || 0;\n this.scrollHeight = (targetRect.height + targetMarginTop) * this.zoom + 100;\n\n let left: number | undefined;\n let top: number | undefined;\n if (this.scrollWidth < this.width) {\n left = 0;\n this.translateXCorrectionValue = 0;\n } else {\n this.translateXCorrectionValue = (this.scrollWidth - this.width) / 2;\n }\n if (this.scrollHeight < this.height) {\n top = 0;\n this.translateYCorrectionValue = 0;\n } else {\n this.translateYCorrectionValue = (this.scrollHeight - this.height) / 2;\n }\n\n this.scrollTo({\n left,\n top,\n });\n\n this.emit('scroll', {\n scrollLeft: this.scrollLeft,\n scrollTop: this.scrollTop,\n scrollHeight: this.scrollHeight,\n scrollWidth: this.scrollWidth,\n });\n };\n\n private setSize = () => {\n const { width, height } = this.container.getBoundingClientRect();\n this.width = width;\n this.height = height;\n };\n}\n","<template>\n <div ref=\"bar\" class=\"m-editor-scroll-bar\" :class=\"isHorizontal ? 'horizontal' : 'vertical'\">\n <div ref=\"thumb\" class=\"m-editor-scroll-bar-thumb\" :style=\"thumbStyle\"></div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onMounted, onUnmounted, ref } from 'vue';\nimport Gesto from 'gesto';\n\nconst props = defineProps<{\n size: number;\n scrollSize: number;\n isHorizontal?: boolean;\n pos: number;\n}>();\n\nconst emit = defineEmits(['scroll']);\n\nconst bar = ref<HTMLDivElement>();\nconst thumb = ref<HTMLDivElement>();\n\nconst thumbSize = computed(() => props.size * (props.size / props.scrollSize));\nconst thumbPos = computed(() => (props.pos / props.scrollSize) * props.size);\n\nconst thumbStyle = computed(() => ({\n [props.isHorizontal ? 'width' : 'height']: `${thumbSize.value}px`,\n transform: `translate${props.isHorizontal ? 'X' : 'Y'}(${thumbPos.value}px)`,\n}));\n\nlet gesto: Gesto;\n\nonMounted(() => {\n if (!thumb.value) return;\n const thumbEl = thumb.value;\n gesto = new Gesto(thumbEl, {\n container: window,\n });\n\n gesto\n .on('dragStart', (e) => {\n e.inputEvent.stopPropagation();\n e.inputEvent.preventDefault();\n })\n .on('drag', (e) => {\n scrollBy(getDelta(e));\n });\n\n bar.value?.addEventListener('wheel', wheelHandler, false);\n});\n\nonUnmounted(() => {\n if (gesto) gesto.off();\n bar.value?.removeEventListener('wheel', wheelHandler, false);\n});\n\nconst wheelHandler = (e: WheelEvent) => {\n const delta = props.isHorizontal ? e.deltaX : e.deltaY;\n if (delta) {\n e.preventDefault();\n }\n scrollBy(delta);\n};\n\nconst getDelta = (e: any) => {\n const ratio = (props.isHorizontal ? e.deltaX : e.deltaY) / props.size;\n return props.scrollSize * ratio;\n};\n\nconst scrollBy = (delta: number) => {\n if (delta < 0) {\n if (props.pos <= 0) {\n emit('scroll', 0);\n } else {\n emit('scroll', -Math.min(-delta, props.pos));\n }\n } else {\n const leftPos = props.size - (thumbSize.value + thumbPos.value);\n if (leftPos <= 0) {\n emit('scroll', 0);\n } else {\n emit('scroll', Math.min(delta, leftPos));\n }\n }\n};\n</script>\n\n<style lang=\"scss\">\n.m-editor-scroll-bar {\n position: absolute;\n background-color: transparent;\n opacity: 0.3;\n transition: background-color 0.2s linear, opacity 0.2s linear;\n\n .m-editor-scroll-bar-thumb {\n background-color: #aaa;\n border-radius: 6px;\n position: absolute;\n }\n\n &.horizontal {\n width: 100%;\n height: 15px;\n bottom: 0;\n\n .m-editor-scroll-bar-thumb {\n height: 6px;\n transition: background-color 0.2s linear, height 0.2s ease-in-out;\n bottom: 2px;\n }\n }\n\n &.vertical {\n height: 100%;\n width: 15px;\n right: 5px;\n\n .m-editor-scroll-bar-thumb {\n width: 6px;\n transition: background-color 0.2s linear, width 0.2s ease-in-out;\n right: 2px;\n }\n }\n\n &:hover,\n &:focus {\n background-color: #eee;\n opacity: 0.9;\n\n .m-editor-scroll-bar-thumb {\n background-color: #999;\n }\n\n &.horizontal {\n .m-editor-scroll-bar-thumb {\n height: 11px;\n }\n }\n\n &.vertical {\n .m-editor-scroll-bar-thumb {\n width: 11px;\n }\n }\n }\n}\n</style>\n","<template>\n <div class=\"m-editor-scroll-viewer-container\" ref=\"container\">\n <div ref=\"el\" :style=\"style\">\n <slot></slot>\n </div>\n\n <ScrollBar\n v-if=\"scrollHeight > wrapHeight\"\n :scroll-size=\"scrollHeight\"\n :size=\"wrapHeight\"\n :pos=\"vOffset\"\n @scroll=\"vScrollHandler\"\n ></ScrollBar>\n <ScrollBar\n v-if=\"scrollWidth > wrapWidth\"\n :is-horizontal=\"true\"\n :scroll-size=\"scrollWidth\"\n :pos=\"hOffset\"\n :size=\"wrapWidth\"\n @scroll=\"hScrollHandler\"\n ></ScrollBar>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onMounted, onUnmounted, ref, watch } from 'vue';\n\nimport { ScrollViewerEvent } from '../type';\nimport { ScrollViewer } from '../utils/scroll-viewer';\n\nimport ScrollBar from './ScrollBar.vue';\n\nconst props = withDefaults(\n defineProps<{\n width?: number;\n height?: number;\n wrapWidth?: number;\n wrapHeight?: number;\n zoom?: number;\n }>(),\n {\n width: 0,\n height: 0,\n wrapWidth: 0,\n wrapHeight: 0,\n zoom: 1,\n },\n);\n\nconst container = ref<HTMLDivElement>();\nconst el = ref<HTMLDivElement>();\nconst style = computed(\n () => `\n width: ${props.width}px;\n height: ${props.height}px;\n position: absolute;\n margin-top: 30px;\n `,\n);\n\nconst scrollWidth = ref(0);\nconst scrollHeight = ref(0);\n\nlet scrollViewer: ScrollViewer;\n\nonMounted(() => {\n if (!container.value || !el.value) return;\n scrollViewer = new ScrollViewer({\n container: container.value,\n target: el.value,\n zoom: props.zoom,\n });\n\n scrollViewer.on('scroll', (data: ScrollViewerEvent) => {\n hOffset.value = data.scrollLeft;\n vOffset.value = data.scrollTop;\n scrollWidth.value = data.scrollWidth;\n scrollHeight.value = data.scrollHeight;\n });\n});\n\nonUnmounted(() => {\n scrollViewer.destroy();\n});\n\nwatch(\n () => props.zoom,\n () => {\n scrollViewer.setZoom(props.zoom);\n },\n);\n\nconst vOffset = ref(0);\nconst vScrollHandler = (delta: number) => {\n vOffset.value += delta;\n scrollViewer.scrollTo({\n top: vOffset.value,\n });\n};\nconst hOffset = ref(0);\nconst hScrollHandler = (delta: number) => {\n hOffset.value += delta;\n scrollViewer.scrollTo({\n left: hOffset.value,\n });\n};\n\ndefineExpose({\n container,\n});\n</script>\n","<template>\n <content-menu :menu-data=\"menuData\" ref=\"menu\"></content-menu>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, markRaw, reactive, ref, watch } from 'vue';\nimport { Bottom, Delete, DocumentCopy, Top } from '@element-plus/icons-vue';\n\nimport { MNode, NodeType } from '@tmagic/schema';\nimport StageCore from '@tmagic/stage';\nimport { isPage } from '@tmagic/utils';\n\nimport ContentMenu from '../../components/ContentMenu.vue';\nimport storageService from '../../services/storage';\nimport { LayerOffset, Layout, MenuButton, MenuComponent, Services } from '../../type';\nimport { COPY_STORAGE_KEY } from '../../utils/editor';\n\nconst props = withDefaults(defineProps<{ isMultiSelect?: boolean }>(), { isMultiSelect: false });\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\nconst menu = ref<InstanceType<typeof ContentMenu>>();\nconst canPaste = ref(false);\nconst canCenter = ref(false);\n\nconst node = computed(() => editorService?.get<MNode>('node'));\nconst nodes = computed(() => editorService?.get<MNode[]>('nodes'));\nconst parent = computed(() => editorService?.get('parent'));\nconst stage = computed(() => editorService?.get<StageCore>('stage'));\n\nconst stageContentMenu = inject<(MenuButton | MenuComponent)[]>('stageContentMenu', []);\n\nconst menuData = reactive<(MenuButton | MenuComponent)[]>([\n {\n type: 'button',\n text: '水平居中',\n display: () => canCenter.value,\n handler: () => {\n if (!nodes.value) return;\n editorService?.alignCenter(nodes.value);\n },\n },\n {\n type: 'button',\n text: '复制',\n icon: markRaw(DocumentCopy),\n handler: () => {\n nodes.value && editorService?.copy(nodes.value);\n canPaste.value = true;\n },\n },\n {\n type: 'button',\n text: '粘贴',\n display: () => canPaste.value,\n handler: () => {\n const rect = menu.value?.$el.getBoundingClientRect();\n const parentRect = stage.value?.container?.getBoundingClientRect();\n const initialLeft = (rect?.left || 0) - (parentRect?.left || 0);\n const initialTop = (rect?.top || 0) - (parentRect?.top || 0);\n\n if (!nodes.value || nodes.value.length === 0) return;\n editorService?.paste({ left: initialLeft, top: initialTop });\n },\n },\n {\n type: 'divider',\n direction: 'horizontal',\n display: () => {\n if (!node.value) return false;\n return !isPage(node.value);\n },\n },\n {\n type: 'button',\n text: '上移一层',\n icon: markRaw(Top),\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(1);\n },\n },\n {\n type: 'button',\n text: '下移一层',\n icon: markRaw(Bottom),\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(-1);\n },\n },\n {\n type: 'button',\n text: '置顶',\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(LayerOffset.TOP);\n },\n },\n {\n type: 'button',\n text: '置底',\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(LayerOffset.BOTTOM);\n },\n },\n {\n type: 'divider',\n direction: 'horizontal',\n display: () => !isPage(node.value) && !props.isMultiSelect,\n },\n {\n type: 'button',\n text: '删除',\n icon: Delete,\n display: () => !isPage(node.value),\n handler: () => {\n nodes.value && editorService?.remove(nodes.value);\n },\n },\n {\n type: 'divider',\n direction: 'horizontal',\n },\n {\n type: 'button',\n text: '清空参考线',\n handler: () => {\n editorService?.get<StageCore>('stage').clearGuides();\n },\n },\n ...stageContentMenu,\n]);\n\nwatch(\n parent,\n async () => {\n if (!parent.value || !editorService) return (canCenter.value = false);\n const layout = await editorService.getLayout(parent.value);\n const isLayoutConform = [Layout.ABSOLUTE, Layout.FIXED].includes(layout);\n const isTypeConform = nodes.value?.every(\n (selectedNode) => ![NodeType.ROOT, NodeType.PAGE, 'pop'].includes(`${selectedNode?.type}`),\n );\n canCenter.value = isLayoutConform && !!isTypeConform;\n },\n { immediate: true },\n);\n\nconst show = async (e: MouseEvent) => {\n menu.value?.show(e);\n const data = await storageService.getItem(COPY_STORAGE_KEY);\n canPaste.value = data !== 'undefined' && !!data;\n};\n\ndefineExpose({ show });\n</script>\n","<template>\n <scroll-viewer\n class=\"m-editor-stage\"\n ref=\"stageWrap\"\n :width=\"stageRect?.width\"\n :height=\"stageRect?.height\"\n :wrap-width=\"stageContainerRect?.width\"\n :wrap-height=\"stageContainerRect?.height\"\n :zoom=\"zoom\"\n >\n <div\n class=\"m-editor-stage-container\"\n ref=\"stageContainer\"\n :style=\"`transform: scale(${zoom});`\"\n @contextmenu=\"contextmenuHandler\"\n @drop=\"dropHandler\"\n @dragover=\"dragoverHandler\"\n ></div>\n <teleport to=\"body\">\n <viewer-menu ref=\"menu\" :is-multi-select=\"isMultiSelect\"></viewer-menu>\n </teleport>\n </scroll-viewer>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, markRaw, onMounted, onUnmounted, ref, toRaw, watch, watchEffect } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport type { MApp, MContainer, MNode, MPage } from '@tmagic/schema';\nimport StageCore, { calcValueByFontsize, getOffset, Runtime } from '@tmagic/stage';\n\nimport ScrollViewer from '../../components/ScrollViewer.vue';\nimport { Layout, Services, StageOptions, StageRect } from '../../type';\nimport { useStage } from '../../utils/stage';\n\nimport ViewerMenu from './ViewerMenu.vue';\n\nlet stage: StageCore | null = null;\nlet runtime: Runtime | null = null;\n\nconst services = inject<Services>('services');\nconst stageOptions = inject<StageOptions>('stageOptions');\n\nconst stageWrap = ref<InstanceType<typeof ScrollViewer>>();\nconst stageContainer = ref<HTMLDivElement>();\nconst menu = ref<InstanceType<typeof ViewerMenu>>();\n\nconst isMultiSelect = computed(() => services?.editorService.get('nodes')?.length > 1);\nconst stageRect = computed(() => services?.uiService.get<StageRect>('stageRect'));\nconst stageContainerRect = computed(() => services?.uiService.get<StageRect>('stageContainerRect'));\nconst root = computed(() => services?.editorService.get<MApp>('root'));\nconst page = computed(() => services?.editorService.get<MPage>('page'));\nconst zoom = computed(() => services?.uiService.get<number>('zoom') || 1);\nconst node = computed(() => services?.editorService.get<MNode>('node'));\n\nwatchEffect(() => {\n if (stage) return;\n\n if (!stageContainer.value) return;\n if (!(stageOptions?.runtimeUrl || stageOptions?.render) || !root.value) return;\n\n stage = useStage(stageOptions);\n\n services?.editorService.set('stage', markRaw(stage));\n\n stage?.mount(stageContainer.value);\n\n if (!node.value?.id) return;\n stage?.on('runtime-ready', (rt) => {\n runtime = rt;\n // toRaw返回的值是一个引用而非快照,需要cloneDeep\n root.value && runtime?.updateRootConfig?.(cloneDeep(toRaw(root.value)));\n page.value?.id && runtime?.updatePageId?.(page.value.id);\n setTimeout(() => {\n node.value && stage?.select(toRaw(node.value.id));\n });\n });\n});\n\nwatch(zoom, (zoom) => {\n if (!stage || !zoom) return;\n stage.setZoom(zoom);\n});\n\nwatch(root, (root) => {\n if (runtime && root) {\n runtime.updateRootConfig?.(cloneDeep(toRaw(root)));\n }\n});\n\nconst resizeObserver = new ResizeObserver((entries) => {\n for (const { contentRect } of entries) {\n services?.uiService.set('stageContainerRect', {\n width: contentRect.width,\n height: contentRect.height,\n });\n }\n});\n\nonMounted(() => {\n stageWrap.value?.container && resizeObserver.observe(stageWrap.value.container);\n});\n\nonUnmounted(() => {\n stage?.destroy();\n resizeObserver.disconnect();\n services?.editorService.set('stage', null);\n});\n\nconst contextmenuHandler = (e: MouseEvent) => {\n e.preventDefault();\n menu.value?.show(e);\n};\n\nconst dragoverHandler = (e: DragEvent) => {\n e.preventDefault();\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = 'move';\n }\n};\n\nconst dropHandler = async (e: DragEvent) => {\n e.preventDefault();\n\n const doc = stage?.renderer.contentWindow?.document;\n const parentEl: HTMLElement | null | undefined = doc?.querySelector(`.${stageOptions?.containerHighlightClassName}`);\n\n let parent: MContainer | undefined = page.value;\n if (parentEl) {\n parent = services?.editorService.getNodeById(parentEl.id, false) as MContainer;\n }\n\n if (e.dataTransfer && parent && stageContainer.value && stage) {\n // eslint-disable-next-line no-eval\n const config = eval(`(${e.dataTransfer.getData('data')})`);\n const layout = await services?.editorService.getLayout(parent);\n\n const containerRect = stageContainer.value.getBoundingClientRect();\n const { scrollTop, scrollLeft } = stage.mask;\n const { style = {} } = config;\n\n let top = 0;\n let left = 0;\n let position = 'relative';\n\n if (layout === Layout.ABSOLUTE) {\n position = 'absolute';\n top = e.clientY - containerRect.top + scrollTop;\n left = e.clientX - containerRect.left + scrollLeft;\n\n if (parentEl && doc) {\n const { left: parentLeft, top: parentTop } = getOffset(parentEl);\n left = left - calcValueByFontsize(doc, parentLeft);\n top = top - calcValueByFontsize(doc, parentTop);\n }\n }\n\n config.style = {\n ...style,\n position,\n top: top / zoom.value,\n left: left / zoom.value,\n };\n\n config.inputEvent = e;\n\n services?.editorService.add(config, parent);\n }\n};\n</script>\n","<template>\n <div class=\"m-editor-workspace\" tabindex=\"1\" ref=\"workspace\">\n <slot name=\"stage\">\n <MagicStage :key=\"page?.id\"></MagicStage>\n </slot>\n\n <slot name=\"workspace-content\"></slot>\n\n <PageBar>\n <template #page-bar-title=\"{ page }\"><slot name=\"page-bar-title\" :page=\"page\"></slot></template>\n <template #page-bar-popover=\"{ page }\"><slot name=\"page-bar-popover\" :page=\"page\"></slot></template>\n </PageBar>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, onMounted, onUnmounted, ref } from 'vue';\nimport KeyController from 'keycon';\n\nimport type { MNode, MPage } from '@tmagic/schema';\nimport { isPage } from '@tmagic/utils';\n\nimport type { Services } from '../../type';\n\nimport PageBar from './PageBar.vue';\nimport MagicStage from './Stage.vue';\n\nconst services = inject<Services>('services');\nconst workspace = ref<HTMLDivElement>();\nconst nodes = computed(() => services?.editorService.get<MNode[]>('nodes'));\nconst page = computed(() => services?.editorService.get<MPage>('page'));\n\nconst mouseenterHandler = () => {\n workspace.value?.focus();\n};\n\nconst mouseleaveHandler = () => {\n workspace.value?.blur();\n};\n\nlet keycon: KeyController;\n\nonMounted(() => {\n workspace.value?.addEventListener('mouseenter', mouseenterHandler);\n workspace.value?.addEventListener('mouseleave', mouseleaveHandler);\n\n keycon = new KeyController(workspace.value);\n\n const isMac = /mac os x/.test(navigator.userAgent.toLowerCase());\n\n const ctrl = isMac ? 'meta' : 'ctrl';\n\n keycon\n .keyup('delete', (e) => {\n e.inputEvent.preventDefault();\n if (!nodes.value || isPage(nodes.value[0])) return;\n services?.editorService.remove(nodes.value);\n })\n .keyup('backspace', (e) => {\n e.inputEvent.preventDefault();\n if (!nodes.value || isPage(nodes.value[0])) return;\n services?.editorService.remove(nodes.value);\n })\n .keydown([ctrl, 'c'], (e) => {\n e.inputEvent.preventDefault();\n nodes.value && services?.editorService.copy(nodes.value);\n })\n .keydown([ctrl, 'v'], (e) => {\n e.inputEvent.preventDefault();\n nodes.value && services?.editorService.paste({ offsetX: 10, offsetY: 10 });\n })\n .keydown([ctrl, 'x'], (e) => {\n e.inputEvent.preventDefault();\n if (!nodes.value || isPage(nodes.value[0])) return;\n services?.editorService.copy(nodes.value);\n services?.editorService.remove(nodes.value);\n })\n .keydown([ctrl, 'z'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.undo();\n })\n .keydown([ctrl, 'shift', 'z'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.redo();\n })\n .keydown('up', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(0, -1);\n })\n .keydown('down', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(0, 1);\n })\n .keydown('left', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(-1, 0);\n })\n .keydown('right', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(1, 0);\n })\n .keydown([ctrl, 'up'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(0, -10);\n })\n .keydown([ctrl, 'down'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(0, 10);\n })\n .keydown([ctrl, 'left'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(-10, 0);\n })\n .keydown([ctrl, 'right'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(10, 0);\n })\n .keydown('tab', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.selectNextNode();\n })\n .keydown([ctrl, 'tab'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.selectNextPage();\n })\n .keydown([ctrl, '='], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.zoom(0.1);\n })\n .keydown([ctrl, 'numpadplus'], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.zoom(0.1);\n })\n .keydown([ctrl, '-'], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.zoom(-0.1);\n })\n .keydown([ctrl, 'numpad-'], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.zoom(-0.1);\n })\n .keydown([ctrl, '0'], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.set('zoom', services.uiService.calcZoom());\n })\n .keydown([ctrl, '1'], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.set('zoom', 1);\n });\n});\n\nonUnmounted(() => {\n workspace.value?.removeEventListener('mouseenter', mouseenterHandler);\n workspace.value?.removeEventListener('mouseleave', mouseleaveHandler);\n keycon.destroy();\n});\n</script>\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 { reactive } from 'vue';\n\nimport type { ComponentGroup, ComponentGroupState } from '../type';\n\nimport BaseService from './BaseService';\n\nclass ComponentList extends BaseService {\n private state = reactive<ComponentGroupState>({\n list: [],\n });\n\n constructor() {\n super([]);\n }\n\n /**\n * @param componentGroupList 组件列表配置\n */\n public setList(componentGroupList: ComponentGroup[]): void {\n this.state.list = componentGroupList;\n }\n\n public getList(): ComponentGroup[] {\n return this.state.list;\n }\n\n public destroy() {\n this.state.list = [];\n this.removeAllListeners();\n }\n}\n\nexport type ComponentListService = ComponentList;\n\nexport default new ComponentList();\n","<template>\n <framework :code-options=\"codeOptions\">\n <template #nav>\n <slot name=\"nav\" :editorService=\"editorService\"><nav-menu :data=\"menu\"></nav-menu></slot>\n </template>\n\n <template #sidebar>\n <slot name=\"sidebar\" :editorService=\"editorService\">\n <sidebar :data=\"sidebar\">\n <template #layer-panel-header>\n <slot name=\"layer-panel-header\"></slot>\n </template>\n\n <template #component-list-panel-header>\n <slot name=\"component-list-panel-header\"></slot>\n </template>\n\n <template #component-list-item=\"{ component }\">\n <slot name=\"component-list-item\" :component=\"component\"></slot>\n </template>\n </sidebar>\n </slot>\n </template>\n\n <template #workspace>\n <slot name=\"workspace\" :editorService=\"editorService\">\n <workspace>\n <template #stage><slot name=\"stage\"></slot></template>\n <template #workspace-content><slot name=\"workspace-content\" :editorService=\"editorService\"></slot></template>\n <template #page-bar-title=\"{ page }\"><slot name=\"page-bar-title\" :page=\"page\"></slot></template>\n <template #page-bar-popover=\"{ page }\"><slot name=\"page-bar-popover\" :page=\"page\"></slot></template>\n </workspace>\n </slot>\n </template>\n\n <template #props-panel>\n <slot name=\"props-panel\">\n <props-panel @mounted=\"(instance: any) => $emit('props-panel-mounted', instance)\">\n <template #props-panel-header>\n <slot name=\"props-panel-header\"></slot>\n </template>\n </props-panel>\n </slot>\n </template>\n\n <template #empty><slot name=\"empty\" :editorService=\"editorService\"></slot></template>\n </framework>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, onUnmounted, PropType, provide, reactive, toRaw, watch } from 'vue';\n\nimport { EventOption } from '@tmagic/core';\nimport type { FormConfig } from '@tmagic/form';\nimport type { MApp, MNode } from '@tmagic/schema';\nimport type StageCore from '@tmagic/stage';\nimport { CONTAINER_HIGHLIGHT_CLASS, ContainerHighlightType, MoveableOptions } from '@tmagic/stage';\n\nimport Framework from './layouts/Framework.vue';\nimport NavMenu from './layouts/NavMenu.vue';\nimport PropsPanel from './layouts/PropsPanel.vue';\nimport Sidebar from './layouts/sidebar/Sidebar.vue';\nimport Workspace from './layouts/workspace/Workspace.vue';\nimport componentListService from './services/componentList';\nimport editorService from './services/editor';\nimport eventsService from './services/events';\nimport historyService from './services/history';\nimport propsService from './services/props';\nimport storageService from './services/storage';\nimport uiService from './services/ui';\nimport type { ComponentGroup, MenuBarData, MenuButton, MenuComponent, Services, SideBarData, StageRect } from './type';\n\nexport default defineComponent({\n name: 'm-editor',\n\n components: {\n NavMenu,\n Sidebar,\n Workspace,\n PropsPanel,\n Framework,\n },\n\n props: {\n /** 页面初始值 */\n modelValue: {\n type: Object as PropType<MApp>,\n default: () => ({}),\n require: true,\n },\n\n /** 左侧面板中的组件列表 */\n componentGroupList: {\n type: Array as PropType<ComponentGroup[]>,\n default: () => [],\n },\n\n /** 左侧面板配置 */\n sidebar: {\n type: Object as PropType<SideBarData>,\n },\n\n layerContentMenu: {\n type: Array as PropType<(MenuButton | MenuComponent)[]>,\n default: () => [],\n },\n\n stageContentMenu: {\n type: Array as PropType<(MenuButton | MenuComponent)[]>,\n default: () => [],\n },\n\n /** 顶部工具栏配置 */\n menu: {\n type: Object as PropType<MenuBarData>,\n default: () => ({ left: [], right: [] }),\n },\n\n /** 中间工作区域中画布渲染的内容 */\n render: {\n type: Function as PropType<() => HTMLDivElement>,\n },\n\n /** 中间工作区域中画布通过iframe渲染时的页面url */\n runtimeUrl: String,\n\n /** 选中时是否自动滚动到可视区域 */\n autoScrollIntoView: Boolean,\n\n /** 组件的属性配置表单的dsl */\n propsConfigs: {\n type: Object as PropType<Record<string, FormConfig>>,\n default: () => ({}),\n },\n\n /** 添加组件时的默认值 */\n propsValues: {\n type: Object as PropType<Record<string, MNode>>,\n default: () => ({}),\n },\n\n /** 组件联动事件选项列表 */\n eventMethodList: {\n type: Object,\n default: () => ({}),\n },\n\n /** 画布中组件选中框的移动范围 */\n moveableOptions: {\n type: [Object, Function] as PropType<MoveableOptions | ((core?: StageCore) => MoveableOptions)>,\n },\n\n /** 编辑器初始化时默认选中的组件ID */\n defaultSelected: {\n type: [Number, String],\n },\n\n canSelect: {\n type: Function as PropType<(el: HTMLElement) => boolean | Promise<boolean>>,\n default: (el: HTMLElement) => Boolean(el.id),\n },\n\n isContainer: {\n type: Function as PropType<(el: HTMLElement) => boolean | Promise<boolean>>,\n default: (el: HTMLElement) => el.classList.contains('magic-ui-container'),\n },\n\n containerHighlightClassName: {\n type: String,\n default: CONTAINER_HIGHLIGHT_CLASS,\n },\n\n containerHighlightDuration: {\n type: Number,\n default: 800,\n },\n\n containerHighlightType: {\n type: String as PropType<ContainerHighlightType>,\n default: ContainerHighlightType.DEFAULT,\n },\n\n stageRect: {\n type: [String, Object] as PropType<StageRect>,\n },\n\n codeOptions: {\n type: Object,\n default: () => ({}),\n },\n\n updateDragEl: {\n type: Function as PropType<(el: HTMLDivElement, target: HTMLElement) => void>,\n },\n },\n\n emits: ['props-panel-mounted', 'update:modelValue'],\n\n setup(props, { emit }) {\n editorService.on('root-change', (value) => {\n const node = editorService.get<MNode | null>('node');\n const nodeId = node?.id || props.defaultSelected;\n if (nodeId && node !== value) {\n editorService.select(nodeId);\n } else {\n editorService.set('nodes', [value]);\n }\n\n emit('update:modelValue', toRaw(editorService.get('root')));\n });\n\n // 初始值变化,重新设置节点信息\n watch(\n () => props.modelValue,\n (modelValue) => editorService.set('root', modelValue),\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.componentGroupList,\n (componentGroupList) => componentListService.setList(componentGroupList),\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.propsConfigs,\n (configs) => propsService.setPropsConfigs(configs),\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.propsValues,\n (values) => propsService.setPropsValues(values),\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.eventMethodList,\n (eventMethodList) => {\n const eventsList: Record<string, EventOption[]> = {};\n const methodsList: Record<string, EventOption[]> = {};\n\n Object.keys(eventMethodList).forEach((type: string) => {\n eventsList[type] = eventMethodList[type].events;\n methodsList[type] = eventMethodList[type].methods;\n });\n\n eventsService.setEvents(eventsList);\n eventsService.setMethods(methodsList);\n },\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.defaultSelected,\n (defaultSelected) => defaultSelected && editorService.select(defaultSelected),\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.stageRect,\n (stageRect) => stageRect && uiService.set('stageRect', stageRect),\n {\n immediate: true,\n },\n );\n\n uiService.initColumnWidth();\n\n onUnmounted(() => {\n editorService.destroy();\n historyService.destroy();\n propsService.destroy();\n uiService.destroy();\n componentListService.destroy();\n storageService.destroy();\n });\n\n const services: Services = {\n componentListService,\n eventsService,\n historyService,\n propsService,\n editorService,\n uiService,\n storageService,\n };\n\n provide('services', services);\n\n provide('layerContentMenu', props.layerContentMenu);\n provide('stageContentMenu', props.stageContentMenu);\n provide(\n 'stageOptions',\n reactive({\n runtimeUrl: props.runtimeUrl,\n autoScrollIntoView: props.autoScrollIntoView,\n render: props.render,\n moveableOptions: props.moveableOptions,\n canSelect: props.canSelect,\n updateDragEl: props.updateDragEl,\n isContainer: props.isContainer,\n containerHighlightClassName: props.containerHighlightClassName,\n containerHighlightDuration: props.containerHighlightDuration,\n containerHighlightType: props.containerHighlightType,\n }),\n );\n\n return services;\n },\n});\n</script>\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 */\nimport { App } from 'vue';\n\nimport Code from './fields/Code.vue';\nimport CodeLink from './fields/CodeLink.vue';\nimport uiSelect from './fields/UISelect.vue';\nimport CodeEditor from './layouts/CodeEditor.vue';\nimport { setConfig } from './utils/config';\nimport Editor from './Editor.vue';\nimport type { InstallOptions } from './type';\n\nimport './theme/index.scss';\n\nexport type { MoveableOptions } from '@tmagic/stage';\nexport * from './type';\nexport * from './utils';\nexport { default as TMagicEditor } from './Editor.vue';\nexport { default as TMagicCodeEditor } from './layouts/CodeEditor.vue';\nexport { default as editorService } from './services/editor';\nexport { default as propsService } from './services/props';\nexport { default as historyService } from './services/history';\nexport { default as storageService } from './services/storage';\nexport { default as eventsService } from './services/events';\nexport { default as uiService } from './services/ui';\nexport { default as ComponentListPanel } from './layouts/sidebar/ComponentListPanel.vue';\nexport { default as LayerPanel } from './layouts/sidebar/LayerPanel.vue';\nexport { default as PropsPanel } from './layouts/PropsPanel.vue';\nexport { default as ToolButton } from './components/ToolButton.vue';\nexport { default as ContentMenu } from './components/ContentMenu.vue';\nexport { default as Icon } from './components/Icon.vue';\n\nconst defaultInstallOpt: InstallOptions = {\n // @todo, 自定义图片上传方法等编辑器依赖的外部选项\n};\n\nexport default {\n install: (app: App, opt?: InstallOptions): void => {\n const option = Object.assign(defaultInstallOpt, opt || {});\n\n // eslint-disable-next-line no-param-reassign\n app.config.globalProperties.$TMAGIC_EDITOR = option;\n setConfig(option);\n\n app.component(Editor.name, Editor);\n app.component('m-fields-ui-select', uiSelect);\n app.component(CodeLink.name, CodeLink);\n app.component(Code.name, Code);\n app.component(CodeEditor.name, CodeEditor);\n },\n};\n"],"names":["_resolveComponent","_openBlock","_normalizeStyle","_createBlock","_hoisted_1","Editor","_createElementBlock","_createElementVNode","_hoisted_2","_createVNode","_withCtx","_sfc_render","_renderSlot","_Fragment","ContentMenu","_normalizeClass","_createCommentVNode","_Teleport","MIcon","ComponentListPanel","_toDisplayString","_resolveDynamicComponent","_mergeProps","_toHandlers","_createSlots","_renderList","NavMenu","Workspace","PropsPanel","uiSelect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tmagic-editor.mjs","sources":["../src/fields/Code.vue","../src/fields/CodeLink.vue","../src/fields/UISelect.vue","../src/layouts/CodeEditor.vue","../src/utils/config.ts","../src/utils/undo-redo.ts","../src/utils/compose.ts","../src/services/BaseService.ts","../src/services/history.ts","../src/services/storage.ts","../src/type.ts","../src/utils/editor.ts","../src/services/props.ts","../src/utils/operator.ts","../src/services/editor.ts","../src/services/events.ts","../src/utils/props.ts","../src/utils/logger.ts","../src/services/ui.ts","../src/utils/stage.ts","../src/layouts/AddPageBox.vue","../src/layouts/Resizer.vue","../src/layouts/Framework.vue","../src/components/ToolButton.vue","../src/layouts/NavMenu.vue","../src/layouts/PropsPanel.vue","../src/layouts/sidebar/ComponentListPanel.vue","../src/components/ContentMenu.vue","../src/layouts/sidebar/LayerMenu.vue","../src/layouts/sidebar/LayerPanel.vue","../src/layouts/sidebar/TabPane.vue","../src/layouts/sidebar/Sidebar.vue","../src/layouts/workspace/PageBarScrollContainer.vue","../src/layouts/workspace/PageBar.vue","../src/utils/scroll-viewer.ts","../src/components/ScrollBar.vue","../src/components/ScrollViewer.vue","../src/layouts/workspace/ViewerMenu.vue","../src/layouts/workspace/Stage.vue","../src/layouts/workspace/Workspace.vue","../src/services/componentList.ts","../src/Editor.vue","../src/index.ts"],"sourcesContent":["<template>\n <magic-code-editor\n :style=\"`height: ${height}`\"\n :init-values=\"model[name]\"\n :language=\"language\"\n @save=\"save\"\n ></magic-code-editor>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'm-fields-vs-code',\n\n props: ['model', 'name', 'config', 'prop'],\n\n emits: ['change'],\n\n setup(props, { emit }) {\n const language = computed(() => props.config.language || 'javascript');\n const height = computed(() => `${document.body.clientHeight - 168}px`);\n\n return {\n height,\n language,\n\n save(v: string) {\n props.model[props.name] = v;\n emit('change', v);\n },\n };\n },\n});\n</script>\n","<template>\n <m-fields-link :config=\"formConfig\" :model=\"modelValue\" name=\"form\" @change=\"changeHandler\"></m-fields-link>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType, ref, watchEffect } from 'vue';\nimport serialize from 'serialize-javascript';\n\ninterface CodeLinkConfig {\n type: 'code-link';\n name: string;\n text?: string;\n formTitle?: string;\n}\n\nexport default defineComponent({\n name: 'm-fields-code-link',\n\n props: {\n config: {\n type: Object as PropType<CodeLinkConfig>,\n },\n\n model: {\n type: Object,\n },\n\n name: {\n type: String,\n },\n\n prop: {\n type: String,\n },\n },\n\n emits: ['change'],\n\n setup(props, { emit }) {\n const modelValue = ref<{ form: Record<string, any> }>({\n form: {},\n });\n\n watchEffect(() => {\n if (!props.model || !props.name) return;\n modelValue.value.form[props.name] = serialize(props.model[props.name], {\n space: 2,\n unsafe: true,\n }).replace(/\"(\\w+)\":\\s/g, '$1: ');\n });\n\n return {\n modelValue,\n\n formConfig: computed(() => ({\n ...props.config,\n text: '',\n type: 'link',\n form: [\n {\n name: props.name,\n type: 'vs-code',\n },\n ],\n })),\n\n changeHandler(v: Record<string, any>) {\n if (!props.name || !props.model) return;\n\n try {\n // eslint-disable-next-line no-eval\n props.model[props.name] = eval(`${v[props.name]}`);\n emit('change', props.model[props.name]);\n } catch (e) {\n console.error(e);\n }\n },\n };\n },\n});\n</script>\n","<template>\n <div class=\"m-fields-ui-select\" v-if=\"uiSelectMode\" @click=\"cancelHandler\">\n <el-button type=\"danger\" :icon=\"Delete\" text style=\"padding: 0\">取消</el-button>\n </div>\n <div class=\"m-fields-ui-select\" v-else @click=\"startSelect\" style=\"display: flex\">\n <el-tooltip v-if=\"val\" content=\"清除\">\n <el-button style=\"padding: 0\" type=\"danger\" :icon=\"Close\" text @click.stop=\"deleteHandler\"></el-button>\n </el-tooltip>\n <el-tooltip :content=\"val ? toName + '_' + val : '点击此处选择'\">\n <el-button text style=\"padding: 0; margin: 0\">{{ val ? toName + '_' + val : '点击此处选择' }}</el-button>\n </el-tooltip>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, ref } from 'vue';\nimport { Close, Delete } from '@element-plus/icons-vue';\n\nimport { FormState } from '@tmagic/form';\n\nimport { Services } from '../type';\n\nconst props = defineProps<{\n config: any;\n model: any;\n prop: string;\n name: string;\n}>();\n\nconst emit = defineEmits(['change']);\n\nconst services = inject<Services>('services');\nconst mForm = inject<FormState>('mForm');\nconst val = computed(() => props.model[props.name]);\nconst uiSelectMode = ref(false);\n\nconst cancelHandler = () => {\n if (!services?.uiService) return;\n services.uiService.set<boolean>('uiSelectMode', false);\n uiSelectMode.value = false;\n globalThis.document.removeEventListener('ui-select', clickHandler as EventListener);\n};\n\nconst clickHandler = ({ detail }: Event & { detail: any }) => {\n if (detail.id) {\n props.model[props.name] = detail.id;\n emit('change', detail.id);\n mForm?.$emit('field-change', props.prop, detail.id);\n }\n\n if (cancelHandler) {\n cancelHandler();\n }\n};\n\nconst toName = computed(() => {\n const config = services?.editorService.getNodeById(val.value);\n return config?.name || '';\n});\n\nconst startSelect = () => {\n if (!services?.uiService) return;\n services.uiService.set<boolean>('uiSelectMode', true);\n uiSelectMode.value = true;\n globalThis.document.addEventListener('ui-select', clickHandler as EventListener);\n};\n\nconst deleteHandler = () => {\n if (props.model) {\n props.model[props.name] = '';\n emit('change', '');\n mForm?.$emit('field-change', props.prop, '');\n }\n};\n</script>\n\n<style lang=\"scss\">\n.m-fields-ui-select {\n cursor: pointer;\n i {\n margin-right: 3px;\n }\n span {\n color: #2882e0;\n }\n}\n</style>\n","<template>\n <div ref=\"codeEditor\" class=\"magic-code-editor\"></div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, onMounted, onUnmounted, ref, watch } from 'vue';\nimport { throttle } from 'lodash-es';\nimport * as monaco from 'monaco-editor';\nimport serialize from 'serialize-javascript';\n\nconst toString = (v: string | any, language: string): string => {\n let value = '';\n if (typeof v !== 'string') {\n value = serialize(v, {\n space: 2,\n unsafe: true,\n }).replace(/\"(\\w+)\":\\s/g, '$1: ');\n } else {\n value = v;\n }\n if (language === 'javascript' && value.startsWith('{') && value.endsWith('}')) {\n value = `(${value})`;\n }\n return value;\n};\n\nexport default defineComponent({\n name: 'magic-code-editor',\n\n props: {\n initValues: {\n type: [String, Object],\n },\n\n modifiedValues: {\n type: [String, Object],\n },\n\n type: {\n type: String,\n default: () => '',\n },\n\n language: {\n type: String,\n default: () => 'javascript',\n },\n\n options: {\n type: Object,\n default: () => ({}),\n },\n },\n\n emits: ['initd', 'save'],\n\n setup(props, { emit }) {\n let vsEditor: monaco.editor.IStandaloneCodeEditor | null = null;\n let vsDiffEditor: monaco.editor.IStandaloneDiffEditor | null = null;\n\n const values = ref('');\n const loading = ref(false);\n const codeEditor = ref<HTMLDivElement>();\n\n const resizeObserver = new globalThis.ResizeObserver(\n throttle((): void => {\n vsEditor?.layout();\n vsDiffEditor?.layout();\n }, 300),\n );\n\n const setEditorValue = (v: string | any, m: string | any) => {\n values.value = toString(v, props.language);\n\n if (props.type === 'diff') {\n const originalModel = monaco.editor.createModel(values.value, 'text/javascript');\n const modifiedModel = monaco.editor.createModel(toString(m, props.language), 'text/javascript');\n\n return vsDiffEditor?.setModel({\n original: originalModel,\n modified: modifiedModel,\n });\n }\n\n return vsEditor?.setValue(values.value);\n };\n\n const getEditorValue = () =>\n props.type === 'diff' ? vsDiffEditor?.getModifiedEditor().getValue() : vsEditor?.getValue();\n\n const init = async () => {\n if (!codeEditor.value) return;\n\n const options = {\n value: values.value,\n language: props.language,\n theme: 'vs-dark',\n ...props.options,\n };\n\n if (props.type === 'diff') {\n vsDiffEditor = monaco.editor.createDiffEditor(codeEditor.value, options);\n } else {\n vsEditor = monaco.editor.create(codeEditor.value, options);\n }\n\n setEditorValue(props.initValues, props.modifiedValues);\n\n loading.value = false;\n\n emit('initd', vsEditor);\n\n codeEditor.value.addEventListener('keydown', (e) => {\n if (e.keyCode === 83 && (navigator.platform.match('Mac') ? e.metaKey : e.ctrlKey)) {\n e.preventDefault();\n e.stopPropagation();\n emit('save', getEditorValue());\n }\n });\n\n if (props.type !== 'diff') {\n vsEditor?.onDidBlurEditorWidget(() => {\n emit('save', getEditorValue());\n });\n }\n\n resizeObserver.observe(codeEditor.value);\n };\n\n watch(\n () => props.initValues,\n (v, preV) => {\n if (v !== preV) {\n setEditorValue(props.initValues, props.modifiedValues);\n }\n },\n {\n deep: true,\n immediate: true,\n },\n );\n\n onMounted(async () => {\n loading.value = true;\n\n init();\n });\n\n onUnmounted(() => {\n resizeObserver.disconnect();\n });\n\n return {\n values,\n loading,\n codeEditor,\n\n getEditor() {\n return vsEditor || vsDiffEditor;\n },\n\n setEditorValue,\n\n focus() {\n vsEditor?.focus();\n vsDiffEditor?.focus();\n },\n };\n },\n});\n</script>\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 { InstallOptions } from '../type';\n\nlet $TMAGIC_EDITOR: InstallOptions = {} as any;\n\nconst setConfig = (option: InstallOptions): void => {\n $TMAGIC_EDITOR = option;\n};\n\nconst getConfig = (key: keyof InstallOptions): unknown => $TMAGIC_EDITOR[key];\n\nexport { getConfig, setConfig };\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 { cloneDeep } from 'lodash-es';\n\nexport class UndoRedo<T = any> {\n private elementList: T[];\n private listCursor: number;\n private listMaxSize: number;\n\n constructor(listMaxSize = 200) {\n const minListMaxSize = 2;\n this.elementList = [];\n this.listCursor = 0;\n this.listMaxSize = listMaxSize > minListMaxSize ? listMaxSize : minListMaxSize;\n }\n\n public pushElement(element: T): void {\n // 新元素进来时,把游标之外的元素全部丢弃,并把新元素放进来\n this.elementList.splice(this.listCursor, this.elementList.length - this.listCursor, cloneDeep(element));\n this.listCursor += 1;\n // 如果list中的元素超过maxSize,则移除第一个元素\n if (this.elementList.length > this.listMaxSize) {\n this.elementList.shift();\n this.listCursor -= 1;\n }\n }\n\n public canUndo(): boolean {\n return this.listCursor > 1;\n }\n\n // 返回undo后的当前元素\n public undo(): T | null {\n if (!this.canUndo()) {\n return null;\n }\n this.listCursor -= 1;\n return this.getCurrentElement();\n }\n\n public canRedo() {\n return this.elementList.length > this.listCursor;\n }\n\n // 返回redo后的当前元素\n public redo(): T | null {\n if (!this.canRedo()) {\n return null;\n }\n this.listCursor += 1;\n return this.getCurrentElement();\n }\n\n public getCurrentElement(): T | null {\n if (this.listCursor < 1) {\n return null;\n }\n return cloneDeep(this.elementList[this.listCursor - 1]);\n }\n}\n","/**\n * @param {Array} middleware\n * @return {Function}\n */\nexport const compose = (middleware: Function[]) => {\n if (!Array.isArray(middleware)) throw new TypeError('Middleware 必须是一个数组!');\n for (const fn of middleware) {\n if (typeof fn !== 'function') throw new TypeError('Middleware 必须由函数组成!');\n }\n\n /**\n * @param {Object} args\n * @return {Promise}\n * @api public\n */\n return (args: any[], next?: Function) => {\n // last called middleware #\n let index = -1;\n return dispatch(0);\n function dispatch(i: number): Promise<void> {\n if (i <= index) return Promise.reject(new Error('next() 被多次调用'));\n index = i;\n let fn = middleware[i];\n if (i === middleware.length && next) fn = next;\n if (!fn) return Promise.resolve();\n try {\n return Promise.resolve(fn(...args, dispatch.bind(null, i + 1)));\n } catch (err) {\n return Promise.reject(err);\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 { compose } from '../utils/compose';\n\nconst methodName = (prefix: string, name: string) => `${prefix}${name[0].toUpperCase()}${name.substring(1)}`;\n\nconst isError = (error: any): boolean => Object.prototype.toString.call(error) === '[object Error]';\n\nconst doAction = async (\n args: any[],\n scope: any,\n sourceMethod: any,\n beforeMethodName: string,\n afterMethodName: string,\n fn: (args: any[], next?: Function | undefined) => Promise<void>,\n) => {\n try {\n let beforeArgs = args;\n\n for (const beforeMethod of scope.pluginOptionsList[beforeMethodName]) {\n beforeArgs = (await beforeMethod(...beforeArgs)) || [];\n\n if (isError(beforeArgs)) throw beforeArgs;\n\n if (!Array.isArray(beforeArgs)) {\n beforeArgs = [beforeArgs];\n }\n }\n\n let returnValue: any = await fn(beforeArgs, sourceMethod.bind(scope));\n\n for (const afterMethod of scope.pluginOptionsList[afterMethodName]) {\n returnValue = await afterMethod(returnValue, ...beforeArgs);\n\n if (isError(returnValue)) throw returnValue;\n }\n\n return returnValue;\n } catch (error) {\n throw error;\n }\n};\n\n/**\n * 提供两种方式对Class进行扩展\n * 方法1:\n * 给Class中的每个方法都添加before after两个钩子\n * 给Class添加一个usePlugin方法,use方法可以传入一个包含before或者after方法的对象\n *\n * 例如:\n * Class EditorService extends BaseService {\n * constructor() {\n * super(['add']);\n * }\n * add(value) { return result; }\n * };\n *\n * const editorService = new EditorService();\n *\n * editorService.usePlugin({\n * beforeAdd(value) { return [value] },\n * afterAdd(value, result) {},\n * });\n *\n * editorService.add(); 最终会变成 () => {\n * editorService.beforeAdd();\n * editorService.add();\n * editorService.afterAdd();\n * }\n *\n * 调用时的参数会透传到before方法的参数中, 然后before的return 会作为原方法的参数和after的参数,after第一个参数则是原方法的return值;\n * 如需终止后续方法调用可以return new Error();\n *\n * 方法2:\n * 给Class中的每个方法都添加中间件\n * 给Class添加一个use方法,use方法可以传入一个包含源对象方法名作为key值的对象\n *\n * 例如:\n * Class EditorService extends BaseService {\n * constructor() {\n * super(['add']);\n * }\n * add(value) { return result; }\n * };\n *\n * const editorService = new EditorService();\n * editorService.use({\n * add(value, next) { console.log(value); next() },\n * });\n */\nexport default class extends EventEmitter {\n private pluginOptionsList: Record<string, Function[]> = {};\n private middleware: Record<string, Function[]> = {};\n private taskList: (() => Promise<void>)[] = [];\n private doingTask = false;\n\n constructor(methods: string[] = [], serialMethods: string[] = []) {\n super();\n\n methods.forEach((propertyName: string) => {\n const scope = this as any;\n\n const sourceMethod = scope[propertyName];\n\n const beforeMethodName = methodName('before', propertyName);\n const afterMethodName = methodName('after', propertyName);\n\n this.pluginOptionsList[beforeMethodName] = [];\n this.pluginOptionsList[afterMethodName] = [];\n this.middleware[propertyName] = [];\n\n const fn = compose(this.middleware[propertyName]);\n Object.defineProperty(scope, propertyName, {\n value: async (...args: any[]) => {\n if (!serialMethods.includes(propertyName)) {\n return doAction(args, scope, sourceMethod, beforeMethodName, afterMethodName, fn);\n }\n\n // 由于async await,所以会出现函数执行到await时让出线程,导致执行顺序出错,例如调用了select(1) -> update -> select(2),这个时候就有可能出现update了2;\n // 这里保证函数调用严格按顺序执行;\n const promise = new Promise<any>((resolve, reject) => {\n this.taskList.push(async () => {\n try {\n const value = await doAction(args, scope, sourceMethod, beforeMethodName, afterMethodName, fn);\n resolve(value);\n } catch (e) {\n reject(e);\n }\n });\n });\n\n if (!this.doingTask) {\n this.doTask();\n }\n\n return promise;\n },\n });\n });\n }\n\n public use(options: Record<string, Function>) {\n Object.entries(options).forEach(([methodName, method]: [string, Function]) => {\n if (typeof method === 'function') this.middleware[methodName].push(method);\n });\n }\n\n public usePlugin(options: Record<string, Function>) {\n Object.entries(options).forEach(([methodName, method]: [string, Function]) => {\n if (typeof method === 'function') this.pluginOptionsList[methodName].push(method);\n });\n }\n\n private async doTask() {\n this.doingTask = true;\n let task = this.taskList.shift();\n while (task) {\n await task();\n task = this.taskList.shift();\n }\n this.doingTask = false;\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 { reactive } from 'vue';\n\nimport type { Id, MPage } from '@tmagic/schema';\n\nimport { UndoRedo } from '../utils/undo-redo';\n\nimport BaseService from './BaseService';\n\nexport interface StepValue {\n data: MPage;\n modifiedNodeIds: Map<Id, Id>;\n nodeId: Id;\n}\n\nexport interface HistoryState {\n pageId?: Id;\n pageSteps: Record<Id, UndoRedo<StepValue>>;\n canRedo: boolean;\n canUndo: boolean;\n}\n\nclass History extends BaseService {\n public state = reactive<HistoryState>({\n pageSteps: {},\n pageId: undefined,\n canRedo: false,\n canUndo: false,\n });\n\n constructor() {\n super([]);\n\n this.on('change', this.setCanUndoRedo);\n }\n\n public reset() {\n this.state.pageSteps = {};\n this.state.pageId = undefined;\n this.state.canRedo = false;\n this.state.canUndo = false;\n }\n\n public changePage(page: MPage): void {\n if (!page) return;\n\n this.state.pageId = page.id;\n\n if (!this.state.pageSteps[this.state.pageId]) {\n const undoRedo = new UndoRedo<StepValue>();\n\n undoRedo.pushElement({\n data: page,\n modifiedNodeIds: new Map(),\n nodeId: page.id,\n });\n\n this.state.pageSteps[this.state.pageId] = undoRedo;\n }\n\n this.setCanUndoRedo();\n }\n\n public empty(): void {\n this.state.pageId = undefined;\n this.state.pageSteps = {};\n this.state.canRedo = false;\n this.state.canUndo = false;\n }\n\n public push(state: StepValue): StepValue | null {\n const undoRedo = this.getUndoRedo();\n if (!undoRedo) return null;\n undoRedo.pushElement(state);\n this.emit('change', state);\n return state;\n }\n\n public undo(): StepValue | null {\n const undoRedo = this.getUndoRedo();\n if (!undoRedo) return null;\n const state = undoRedo.undo();\n this.emit('change', state);\n return state;\n }\n\n public redo(): StepValue | null {\n const undoRedo = this.getUndoRedo();\n if (!undoRedo) return null;\n const state = undoRedo.redo();\n this.emit('change', state);\n return state;\n }\n\n public destroy(): void {\n this.empty();\n this.removeAllListeners();\n }\n\n private getUndoRedo() {\n if (!this.state.pageId) return null;\n return this.state.pageSteps[this.state.pageId];\n }\n\n private setCanUndoRedo(): void {\n const undoRedo = this.getUndoRedo();\n this.state.canRedo = undoRedo?.canRedo() || false;\n this.state.canUndo = undoRedo?.canUndo() || false;\n }\n}\n\nexport type HistoryService = History;\n\nexport default new History();\n","import serialize from 'serialize-javascript';\n\nimport BaseService from './BaseService';\n\ninterface Options {\n namespace?: string;\n protocol?: Protocol;\n}\n\nexport enum Protocol {\n OBJECT = 'object',\n JSON = 'json',\n STRING = 'string',\n NUMBER = 'number',\n BOOLEAN = 'boolean',\n}\n\n/**\n * 数据存储服务\n */\nexport class WebStorage extends BaseService {\n private storage: Storage = globalThis.localStorage;\n private namespace = 'tmagic';\n\n constructor() {\n super(['getStorage', 'getNamespace', 'clear', 'getItem', 'removeItem', 'setItem']);\n }\n\n /**\n * 获取数据存储对象,可以通过\n * const storageService = new StorageService();\n * storageService.usePlugin({\n * // 替换存储对象为 sessionStorage\n * async afterGetStorage(): Promise<Storage> {\n * return window.sessionStorage;\n * },\n * });\n */\n public async getStorage(): Promise<Storage> {\n return this.storage;\n }\n\n public async getNamespace(): Promise<string> {\n return this.namespace;\n }\n\n /**\n * 清理,支持storageService.usePlugin\n */\n public async clear(): Promise<void> {\n const storage = await this.getStorage();\n storage.clear();\n }\n /**\n * 获取存储项,支持storageService.usePlugin\n */\n public async getItem(key: string, options: Options = {}): Promise<any> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n const { protocol = options.protocol, item } = this.getValueAndProtocol(\n storage.getItem(`${options.namespace || namespace}:${key}`),\n );\n\n if (item === null) return null;\n\n switch (protocol) {\n case Protocol.OBJECT:\n // eslint-disable-next-line no-eval\n return eval(`(${item})`);\n case Protocol.JSON:\n return JSON.parse(item);\n case Protocol.NUMBER:\n return Number(item);\n case Protocol.BOOLEAN:\n return Boolean(item);\n default:\n return item;\n }\n }\n /**\n * 获取指定索引位置的key\n */\n public async key(index: number): Promise<string | null> {\n const storage = await this.getStorage();\n return storage.key(index);\n }\n\n /**\n * 移除存储项,支持storageService.usePlugin\n */\n public async removeItem(key: string, options: Options = {}): Promise<void> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n storage.removeItem(`${options.namespace || namespace}:${key}`);\n }\n\n /**\n * 设置存储项,支持storageService.usePlugin\n */\n public async setItem(key: string, value: any, options: Options = {}): Promise<void> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n let item = value;\n const protocol = options.protocol ? `${options.protocol}:` : '';\n if (typeof value === Protocol.STRING || typeof value === Protocol.NUMBER) {\n item = `${protocol}${value}`;\n } else {\n item = `${protocol}${serialize(value)}`;\n }\n storage.setItem(`${options.namespace || namespace}:${key}`, item);\n }\n\n public destroy() {\n this.removeAllListeners();\n }\n\n private getValueAndProtocol(value: string | null) {\n let protocol = '';\n\n if (value === null) {\n return {\n item: value,\n protocol,\n };\n }\n\n const item = value.replace(new RegExp(`^(${Object.values(Protocol).join('|')})(:)(.+)`), (_$0, $1, _$2, $3) => {\n protocol = $1;\n return $3;\n });\n\n return {\n protocol,\n item,\n };\n }\n}\n\nexport type StorageService = WebStorage;\nexport default new WebStorage();\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 type { Component } from 'vue';\n\nimport type { FormConfig } from '@tmagic/form';\nimport type { Id, MApp, MContainer, MNode, MPage } from '@tmagic/schema';\nimport type StageCore from '@tmagic/stage';\nimport type { ContainerHighlightType, MoveableOptions } from '@tmagic/stage';\n\nimport type { ComponentListService } from './services/componentList';\nimport type { EditorService } from './services/editor';\nimport type { EventsService } from './services/events';\nimport type { HistoryService } from './services/history';\nimport type { PropsService } from './services/props';\nimport type { StorageService } from './services/storage';\nimport type { UiService } from './services/ui';\n\nexport type BeforeAdd = (config: MNode, parent: MContainer) => Promise<MNode> | MNode;\nexport type GetConfig = (config: FormConfig) => Promise<FormConfig> | FormConfig;\n\nexport interface InstallOptions {\n [key: string]: any;\n}\n\nexport interface Services {\n editorService: EditorService;\n historyService: HistoryService;\n storageService: StorageService;\n eventsService: EventsService;\n propsService: PropsService;\n componentListService: ComponentListService;\n uiService: UiService;\n}\n\nexport interface StageOptions {\n runtimeUrl: string;\n autoScrollIntoView: boolean;\n containerHighlightClassName: string;\n containerHighlightDuration: number;\n containerHighlightType: ContainerHighlightType;\n render: () => HTMLDivElement;\n moveableOptions: MoveableOptions | ((core?: StageCore) => MoveableOptions);\n canSelect: (el: HTMLElement) => boolean | Promise<boolean>;\n isContainer: (el: HTMLElement) => boolean | Promise<boolean>;\n updateDragEl: (el: HTMLDivElement) => void;\n}\n\nexport interface StoreState {\n root: MApp | null;\n page: MPage | null;\n parent: MContainer | null;\n node: MNode | null;\n highlightNode: MNode | null;\n nodes: MNode[];\n stage: StageCore | null;\n modifiedNodeIds: Map<Id, Id>;\n pageLength: number;\n}\n\nexport interface PropsState {\n propsConfigMap: Record<string, FormConfig>;\n propsValueMap: Record<string, MNode>;\n}\n\nexport interface ComponentGroupState {\n list: ComponentGroup[];\n}\n\nexport enum ColumnLayout {\n LEFT = 'left',\n CENTER = 'center',\n RIGHT = 'right',\n}\n\nexport interface SetColumnWidth {\n [ColumnLayout.LEFT]?: number;\n [ColumnLayout.CENTER]?: number | 'auto';\n [ColumnLayout.RIGHT]?: number;\n}\n\nexport interface GetColumnWidth {\n [ColumnLayout.LEFT]: number;\n [ColumnLayout.CENTER]: number;\n [ColumnLayout.RIGHT]: number;\n}\n\nexport interface StageRect {\n width: number;\n height: number;\n}\n\nexport interface UiState {\n /** 当前点击画布是否触发选中,true: 不触发,false: 触发,默认为false */\n uiSelectMode: boolean;\n /** 是否显示整个配置源码, true: 显示, false: 不显示,默认为false */\n showSrc: boolean;\n /** 画布显示放大倍数,默认为 1 */\n zoom: number;\n /** 画布容器的宽高 */\n stageContainerRect: StageRect;\n /** 画布顶层div的宽高,可用于改变画布的大小 */\n stageRect: StageRect;\n /** 编辑器列布局每一列的宽度,分为左中右三列 */\n columnWidth: GetColumnWidth;\n /** 是否显示画布参考线,true: 显示,false: 不显示,默认为true */\n showGuides: boolean;\n /** 是否显示标尺,true: 显示,false: 不显示,默认为true */\n showRule: boolean;\n /** 用于控制该属性配置表单内组件的尺寸 */\n propsPanelSize: 'large' | 'default' | 'small';\n /** 是否显示新增页面按钮 */\n showAddPageButton: boolean;\n}\n\nexport interface EditorNodeInfo {\n node?: MNode;\n parent?: MContainer;\n page?: MPage;\n}\n\nexport interface AddMNode {\n type: string;\n name?: string;\n inputEvent?: DragEvent;\n [key: string]: any;\n}\n\nexport interface PastePosition {\n left?: number;\n top?: number;\n /**\n * 粘贴位置X方向偏移量\n */\n offsetX?: number;\n /**\n * 粘贴位置Y方向偏移量\n */\n offsetY?: number;\n}\n\n/**\n * 菜单按钮\n */\nexport interface MenuButton {\n /**\n * 按钮类型\n * button: 只有文字不带边框的按钮\n * text: 纯文本\n * dropdown: 下拉菜单\n * divider: 分隔线\n * zoom: 放大缩小\n */\n type: 'button' | 'dropdown' | 'text' | 'divider' | 'zoom';\n /** 当type为divider时有效,分割线方向, 默认vertical */\n direction?: 'horizontal' | 'vertical';\n /** 展示的文案 */\n text?: string;\n /** 鼠标悬浮是显示的气泡中的文案 */\n tooltip?: string;\n /** element-plus icon class */\n icon?: string | Component<{}, {}, any>;\n /** 是否置灰,默认为false */\n disabled?: boolean | ((data?: Services) => boolean);\n /** 是否显示,默认为true */\n display?: boolean | ((data?: Services) => boolean);\n /** type为button/dropdown时点击运行的方法 */\n handler?: (data: Services, event: MouseEvent) => Promise<any> | any;\n /** type为dropdown时,下拉的菜单列表, 或者有子菜单时 */\n className?: string;\n items?: MenuButton[];\n}\n\nexport interface MenuComponent {\n type: 'component';\n /** Vue3组件 */\n component: any;\n /** 传入组件的props对象 */\n props?: Record<string, any>;\n /** 组件监听的事件对象,如:{ click: () => { console.log('click'); } } */\n listeners?: Record<string, Function>;\n slots?: Record<string, any>;\n /** 是否显示,默认为true */\n className?: string;\n display?: boolean | ((data?: Services) => Promise<boolean> | boolean);\n}\n\n/**\n * '/': 分隔符\n * 'delete': 删除按钮\n * 'undo': 撤销按钮\n * 'redo': 恢复按钮\n * 'zoom-in': 放大按钮\n * 'zoom-out': 缩小按钮\n */\nexport type MenuItem =\n | '/'\n | 'delete'\n | 'undo'\n | 'redo'\n | 'zoom'\n | 'zoom-in'\n | 'zoom-out'\n | 'guides'\n | 'rule'\n | MenuButton\n | MenuComponent\n | string;\n\n/** 工具栏 */\nexport interface MenuBarData {\n /** 顶部工具栏左边项 */\n [ColumnLayout.LEFT]?: MenuItem[];\n /** 顶部工具栏中间项 */\n [ColumnLayout.CENTER]?: MenuItem[];\n /** 顶部工具栏右边项 */\n [ColumnLayout.RIGHT]?: MenuItem[];\n}\n\nexport interface SideComponent extends MenuComponent {\n /** 显示文案 */\n text: string;\n /** element-plus icon class */\n icon: Component<{}, {}, any>;\n}\n\n/**\n * component-list: 组件列表\n * layer: 已选组件树\n */\nexport type SideItem = 'component-list' | 'layer' | SideComponent;\n\n/** 工具栏 */\nexport interface SideBarData {\n /** 容器类型 */\n type: 'tabs';\n /** 默认激活的内容 */\n status: string;\n /** panel列表 */\n items: SideItem[];\n}\n\nexport interface ComponentItem {\n /** 显示文案 */\n text: string;\n /** 组件类型 */\n type: string;\n /** element-plus icon class */\n icon?: string | Component;\n data?: {\n [key: string]: any;\n };\n}\n\nexport interface ComponentGroup {\n /** 显示文案 */\n title: string;\n /** 组内列表 */\n items: ComponentItem[];\n}\n\nexport interface UpdateData {\n id: Id;\n [key: string]: any;\n}\n\nexport enum LayerOffset {\n TOP = 'top',\n BOTTOM = 'bottom',\n}\n\n/** 容器布局 */\nexport enum Layout {\n FLEX = 'flex',\n FIXED = 'fixed',\n RELATIVE = 'relative',\n ABSOLUTE = 'absolute',\n}\n\nexport enum Keys {\n ESCAPE = 'Space',\n}\n\nexport const H_GUIDE_LINE_STORAGE_KEY = '$MagicStageHorizontalGuidelinesData';\nexport const V_GUIDE_LINE_STORAGE_KEY = '$MagicStageVerticalGuidelinesData';\n\nexport interface ScrollViewerEvent {\n scrollLeft: number;\n scrollTop: number;\n scrollHeight: number;\n scrollWidth: number;\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 type { MApp, MContainer, MNode, MPage } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\nimport type StageCore from '@tmagic/stage';\nimport { getNodePath, isNumber, isPage, isPop } from '@tmagic/utils';\n\nimport { Layout } from '../type';\n\nexport const COPY_STORAGE_KEY = '$MagicEditorCopyData';\n\n/**\n * 获取所有页面配置\n * @param app DSL跟节点\n * @returns 所有页面配置\n */\nexport const getPageList = (app: MApp): MPage[] => {\n if (app.items && Array.isArray(app.items)) {\n return app.items.filter((item: MPage) => item.type === NodeType.PAGE);\n }\n return [];\n};\n\n/**\n * 获取所有页面名称\n * @param pages 所有页面配置\n * @returns 所有页面名称\n */\nexport const getPageNameList = (pages: MPage[]): string[] => pages.map((page: MPage) => page.name || 'index');\n\n/**\n * 新增页面时,生成页面名称\n * @param {Object} pageNameList 所有页面名称\n * @returns {string}\n */\nexport const generatePageName = (pageNameList: string[]): string => {\n let pageLength = pageNameList.length;\n\n if (!pageLength) return 'index';\n\n let pageName = `page_${pageLength}`;\n while (pageNameList.includes(pageName)) {\n pageLength += 1;\n pageName = `page_${pageLength}`;\n }\n\n return pageName;\n};\n\n/**\n * 新增页面时,生成页面名称\n * @param {Object} app 所有页面配置\n * @returns {string}\n */\nexport const generatePageNameByApp = (app: MApp): string => generatePageName(getPageNameList(getPageList(app)));\n\n/**\n * @param {Object} node\n * @returns {boolean}\n */\nexport const isFixed = (node: MNode): boolean => node.style?.position === 'fixed';\n\nexport const getNodeIndex = (node: MNode, parent: MContainer | MApp): number => {\n const items = parent?.items || [];\n return items.findIndex((item: MNode) => `${item.id}` === `${node.id}`);\n};\n\nexport const getRelativeStyle = (style: Record<string, any> = {}): Record<string, any> => ({\n ...style,\n position: 'relative',\n top: 0,\n left: 0,\n});\n\nconst getMiddleTop = (node: MNode, parentNode: MNode, stage: StageCore | null) => {\n let height = node.style?.height || 0;\n\n if (!stage || typeof node.style?.top !== 'undefined' || !parentNode.style) return node.style?.top;\n\n if (!isNumber(height)) {\n height = 0;\n }\n\n const { height: parentHeight } = parentNode.style;\n\n if (isPage(parentNode)) {\n const { scrollTop = 0, wrapperHeight } = stage.mask;\n return (wrapperHeight - height) / 2 + scrollTop;\n }\n\n return (parentHeight - height) / 2;\n};\n\nexport const getInitPositionStyle = (style: Record<string, any> = {}, layout: Layout) => {\n if (layout === Layout.ABSOLUTE) {\n return {\n ...style,\n position: 'absolute',\n };\n }\n\n if (layout === Layout.RELATIVE) {\n return getRelativeStyle(style);\n }\n\n return style;\n};\n\nexport const setLayout = (node: MNode, layout: Layout) => {\n node.items?.forEach((child: MNode) => {\n if (isPop(child)) return;\n\n const style = child.style || {};\n\n // 是 fixed 不做处理\n if (style.position === 'fixed') return;\n\n if (layout !== Layout.RELATIVE) {\n style.position = 'absolute';\n } else {\n child.style = getRelativeStyle(style);\n child.style.right = 'auto';\n child.style.bottom = 'auto';\n }\n });\n return node;\n};\n\nexport const change2Fixed = (node: MNode, root: MApp) => {\n const path = getNodePath(node.id, root.items);\n const offset = {\n left: 0,\n top: 0,\n };\n\n path.forEach((value) => {\n offset.left = offset.left + globalThis.parseFloat(value.style?.left || 0);\n offset.top = offset.top + globalThis.parseFloat(value.style?.top || 0);\n });\n\n return {\n ...(node.style || {}),\n ...offset,\n };\n};\n\nexport const Fixed2Other = async (\n node: MNode,\n root: MApp,\n getLayout: (parent: MNode, node?: MNode) => Promise<Layout>,\n) => {\n const path = getNodePath(node.id, root.items);\n const cur = path.pop();\n const offset = {\n left: cur?.style?.left || 0,\n top: cur?.style?.top || 0,\n right: '',\n bottom: '',\n };\n\n path.forEach((value) => {\n offset.left = offset.left - globalThis.parseFloat(value.style?.left || 0);\n offset.top = offset.top - globalThis.parseFloat(value.style?.top || 0);\n });\n const style = node.style || {};\n\n const parent = path.pop();\n if (!parent) {\n return getRelativeStyle(style);\n }\n\n const layout = await getLayout(parent);\n if (layout !== Layout.RELATIVE) {\n return {\n ...style,\n ...offset,\n position: 'absolute',\n };\n }\n\n return getRelativeStyle(style);\n};\n\nexport const getGuideLineFromCache = (key: string): number[] => {\n if (!key) return [];\n\n const guideLineCacheData = globalThis.localStorage.getItem(key);\n if (guideLineCacheData) {\n try {\n return JSON.parse(guideLineCacheData) || [];\n } catch (e) {\n console.error(e);\n }\n }\n\n return [];\n};\n\nexport const fixNodeLeft = (config: MNode, parent: MContainer, doc?: Document) => {\n if (!doc || !config.style || !isNumber(config.style.left)) return config.style?.left;\n\n const el = doc.getElementById(`${config.id}`);\n const parentEl = doc.getElementById(`${parent.id}`);\n\n const left = Number(config.style?.left) || 0;\n if (el && parentEl && el.offsetWidth + left > parentEl.offsetWidth) {\n return parentEl.offsetWidth - el.offsetWidth;\n }\n\n return config.style.left;\n};\n\nexport const fixNodePosition = (config: MNode, parent: MContainer, stage: StageCore | null) => {\n if (config.style?.position !== 'absolute') {\n return config.style;\n }\n\n return {\n ...(config.style || {}),\n top: getMiddleTop(config, parent, stage),\n left: fixNodeLeft(config, parent, stage?.renderer.contentWindow?.document),\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 { reactive } from 'vue';\nimport { cloneDeep, mergeWith } from 'lodash-es';\n\nimport type { FormConfig } from '@tmagic/form';\nimport type { MComponent, MNode } from '@tmagic/schema';\nimport { toLine } from '@tmagic/utils';\n\nimport type { PropsState } from '../type';\nimport { fillConfig } from '../utils/props';\n\nimport BaseService from './BaseService';\n\nclass Props extends BaseService {\n private state = reactive<PropsState>({\n propsConfigMap: {},\n propsValueMap: {},\n });\n\n constructor() {\n super([\n 'setPropsConfig',\n 'getPropsConfig',\n 'setPropsValue',\n 'getPropsValue',\n 'createId',\n 'setNewItemId',\n 'fillConfig',\n 'getDefaultPropsValue',\n ]);\n }\n\n public setPropsConfigs(configs: Record<string, FormConfig>) {\n Object.keys(configs).forEach((type: string) => {\n this.setPropsConfig(toLine(type), configs[type]);\n });\n this.emit('props-configs-change');\n }\n\n public async fillConfig(config: FormConfig) {\n return fillConfig(config);\n }\n\n /**\n * 为指定类型组件设置组件属性表单配置\n * @param type 组件类型\n * @param config 组件属性表单配置\n */\n public async setPropsConfig(type: string, config: FormConfig) {\n this.state.propsConfigMap[type] = await this.fillConfig(Array.isArray(config) ? config : [config]);\n }\n\n /**\n * 获取指点类型的组件属性表单配置\n * @param type 组件类型\n * @returns 组件属性表单配置\n */\n public async getPropsConfig(type: string): Promise<FormConfig> {\n if (type === 'area') {\n return await this.getPropsConfig('button');\n }\n\n return cloneDeep(this.state.propsConfigMap[type] || (await this.fillConfig([])));\n }\n\n public setPropsValues(values: Record<string, MNode>) {\n Object.keys(values).forEach((type: string) => {\n this.setPropsValue(toLine(type), values[type]);\n });\n }\n\n /**\n * 为指点类型组件设置组件初始值\n * @param type 组件类型\n * @param value 组件初始值\n */\n public setPropsValue(type: string, value: MNode) {\n this.state.propsValueMap[type] = value;\n }\n\n /**\n * 获取指定类型的组件初始值\n * @param type 组件类型\n * @returns 组件初始值\n */\n public async getPropsValue(type: string, { inputEvent, ...defaultValue }: Record<string, any> = {}) {\n if (type === 'area') {\n const value = (await this.getPropsValue('button')) as MComponent;\n value.className = 'action-area';\n value.text = '';\n if (value.style) {\n value.style.backgroundColor = 'rgba(255, 255, 255, 0)';\n }\n return value;\n }\n\n const [id, defaultPropsValue, data] = await Promise.all([\n this.createId(type),\n this.getDefaultPropsValue(type),\n this.setNewItemId(\n cloneDeep({\n type,\n ...defaultValue,\n } as any),\n ),\n ]);\n\n return {\n id,\n ...defaultPropsValue,\n ...mergeWith({}, cloneDeep(this.state.propsValueMap[type] || {}), data),\n };\n }\n\n public async createId(type: string | number): Promise<string> {\n return `${type}_${this.guid()}`;\n }\n\n /**\n * 将组件与组件的子元素配置中的id都设置成一个新的ID\n * @param {Object} config 组件配置\n */\n /* eslint no-param-reassign: [\"error\", { \"props\": false }] */\n public async setNewItemId(config: MNode) {\n config.id = await this.createId(config.type || 'component');\n\n if (config.items && Array.isArray(config.items)) {\n for (const item of config.items) {\n await this.setNewItemId(item);\n }\n }\n\n return config;\n }\n\n /**\n * 获取默认属性配置\n * @param type 组件类型\n * @returns Object\n */\n public async getDefaultPropsValue(type: string) {\n return ['page', 'container'].includes(type)\n ? {\n type,\n layout: 'absolute',\n style: {},\n name: type,\n items: [],\n }\n : {\n type,\n style: {},\n name: type,\n };\n }\n\n public destroy() {\n this.state.propsConfigMap = {};\n this.state.propsValueMap = {};\n this.removeAllListeners();\n }\n\n /**\n * 生成指定位数的GUID,无【-】格式\n * @param digit 位数,默认值8\n * @returns\n */\n private guid(digit = 8): string {\n return 'x'.repeat(digit).replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\nexport type PropsService = Props;\n\nexport default new Props();\n","import { toRaw } from 'vue';\nimport { isEmpty } from 'lodash-es';\n\nimport { Id, MApp, MContainer, MNode } from '@tmagic/schema';\nimport StageCore from '@tmagic/stage';\nimport { isPage } from '@tmagic/utils';\n\nimport editorService from '../services/editor';\nimport propsService from '../services/props';\nimport { AddMNode, PastePosition } from '../type';\nimport { generatePageNameByApp, getInitPositionStyle } from '../utils/editor';\n\n/**\n * 粘贴前置操作:返回分配了新id以及校准了坐标的配置\n * @param position 粘贴的坐标\n * @param config 待粘贴的元素配置(复制时保存的那份配置)\n * @returns\n */\nexport const beforePaste = async (position: PastePosition, config: MNode[]): Promise<MNode[]> => {\n if (!config[0]?.style) return config;\n const curNode = editorService.get<MContainer>('node');\n // 将数组中第一个元素的坐标作为参照点\n const { left: referenceLeft, top: referenceTop } = config[0].style;\n // 坐标校准后的粘贴数据\n const pasteConfigs: MNode[] = await Promise.all(\n config.map(async (configItem: MNode): Promise<MNode> => {\n // 解构 position 对象,从 position 删除 offsetX、offsetY字段\n const { offsetX = 0, offsetY = 0, ...positionClone } = position;\n let pastePosition = positionClone;\n\n if (!isEmpty(pastePosition) && curNode.items) {\n // 如果没有传入粘贴坐标则可能为键盘操作,不再转换\n // 如果粘贴时选中了容器,则将元素粘贴到容器内,坐标需要转换为相对于容器的坐标\n pastePosition = getPositionInContainer(pastePosition, curNode.id);\n }\n\n // 将所有待粘贴元素坐标相对于多选第一个元素坐标重新计算,以保证多选粘贴后元素间距不变\n if (pastePosition.left && configItem.style?.left) {\n pastePosition.left = configItem.style.left - referenceLeft + pastePosition.left;\n }\n if (pastePosition.top && configItem.style?.top) {\n pastePosition.top = configItem.style?.top - referenceTop + pastePosition.top;\n }\n\n const pasteConfig = await propsService.setNewItemId(configItem);\n\n if (pasteConfig.style) {\n const { left, top } = pasteConfig.style;\n // 判断能转换为数字时,做粘贴偏移量计算\n if (typeof left === 'number' || (!!left && !isNaN(Number(left)))) {\n pasteConfig.style.left = Number(left) + offsetX;\n }\n if (typeof top === 'number' || (!!top && !isNaN(Number(top)))) {\n pasteConfig.style.top = Number(top) + offsetY;\n }\n\n pasteConfig.style = {\n ...pasteConfig.style,\n ...pastePosition,\n };\n }\n if (isPage(pasteConfig)) {\n pasteConfig.name = generatePageNameByApp(editorService.get('root'));\n }\n return pasteConfig as MNode;\n }),\n );\n return pasteConfigs;\n};\n\n/**\n * 将元素粘贴到容器内时,将相对于画布坐标转换为相对于容器的坐标\n * @param position PastePosition 粘贴时相对于画布的坐标\n * @param id 元素id\n * @returns PastePosition 转换后的坐标\n */\nexport const getPositionInContainer = (position: PastePosition = {}, id: Id) => {\n let { left = 0, top = 0 } = position;\n const parentEl = editorService.get<StageCore>('stage')?.renderer?.contentWindow?.document.getElementById(`${id}`);\n const parentElRect = parentEl?.getBoundingClientRect();\n left = left - (parentElRect?.left || 0);\n top = top - (parentElRect?.top || 0);\n return {\n left,\n top,\n };\n};\n\nexport const getAddParent = (node: MNode) => {\n const curNode = editorService.get<MContainer>('node');\n\n let parentNode;\n if (isPage(node)) {\n parentNode = editorService.get<MApp>('root');\n } else if (curNode.items) {\n parentNode = curNode;\n } else {\n parentNode = editorService.getParentById(curNode.id, false);\n }\n return parentNode;\n};\n\nexport const getDefaultConfig = async (addNode: AddMNode, parentNode: MContainer) => {\n const { type, inputEvent, ...config } = addNode;\n const layout = await editorService.getLayout(toRaw(parentNode), addNode as MNode);\n const newNode = { ...toRaw(await propsService.getPropsValue(type, config)) };\n newNode.style = getInitPositionStyle(newNode.style, layout);\n return newNode;\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 { reactive, toRaw } from 'vue';\nimport { cloneDeep, mergeWith, uniq } from 'lodash-es';\n\nimport type { Id, MApp, MComponent, MContainer, MNode, MPage } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\nimport StageCore from '@tmagic/stage';\nimport { getNodePath, isNumber, isPage, isPop } from '@tmagic/utils';\n\nimport historyService, { StepValue } from '../services/history';\nimport storageService, { Protocol } from '../services/storage';\nimport type { AddMNode, EditorNodeInfo, PastePosition, StoreState } from '../type';\nimport { LayerOffset, Layout } from '../type';\nimport {\n change2Fixed,\n COPY_STORAGE_KEY,\n Fixed2Other,\n fixNodePosition,\n getInitPositionStyle,\n getNodeIndex,\n isFixed,\n setLayout,\n} from '../utils/editor';\nimport { beforePaste, getAddParent } from '../utils/operator';\n\nimport BaseService from './BaseService';\nimport propsService from './props';\n\nclass Editor extends BaseService {\n public state: StoreState = reactive({\n root: null,\n page: null,\n parent: null,\n node: null,\n nodes: [],\n stage: null,\n highlightNode: null,\n modifiedNodeIds: new Map(),\n pageLength: 0,\n });\n private isHistoryStateChange = false;\n\n constructor() {\n super(\n [\n 'getLayout',\n 'select',\n 'doAdd',\n 'add',\n 'doRemove',\n 'remove',\n 'doUpdate',\n 'update',\n 'sort',\n 'copy',\n 'paste',\n 'doPaste',\n 'duAlignCenter',\n 'alignCenter',\n 'moveLayer',\n 'moveToContainer',\n 'move',\n 'undo',\n 'redo',\n 'highlight',\n ],\n // 需要注意循环依赖问题,如果函数间有相互调用的话,不能设置为串行调用\n ['select', 'update', 'moveLayer'],\n );\n }\n\n /**\n * 设置当前指点节点配置\n * @param name 'root' | 'page' | 'parent' | 'node' | 'highlightNode' | 'nodes'\n * @param value MNode\n * @returns MNode\n */\n public set<T = MNode>(name: keyof StoreState, value: T) {\n this.state[name] = value as any;\n // set nodes时将node设置为nodes第一个元素\n if (name === 'nodes') {\n this.set('node', (value as unknown as MNode[])[0]);\n }\n if (name === 'root') {\n this.state.pageLength = (value as unknown as MApp)?.items?.length || 0;\n this.emit('root-change', value);\n }\n }\n\n /**\n * 获取当前指点节点配置\n * @param name 'root' | 'page' | 'parent' | 'node' | 'highlightNode' | 'nodes'\n * @returns MNode\n */\n public get<T = MNode>(name: keyof StoreState): T {\n return (this.state as any)[name];\n }\n\n /**\n * 根据id获取组件、组件的父组件以及组件所属的页面节点\n * @param {number | string} id 组件id\n * @param {boolean} raw 是否使用toRaw\n * @returns {EditorNodeInfo}\n */\n public getNodeInfo(id: Id, raw = true): EditorNodeInfo {\n let root = this.get<MApp | null>('root');\n if (raw) {\n root = toRaw(root);\n }\n if (!root) return {};\n\n if (id === root.id) {\n return { node: root };\n }\n\n const path = getNodePath(id, root.items);\n\n if (!path.length) return {};\n\n path.unshift(root);\n const info: EditorNodeInfo = {};\n\n info.node = path[path.length - 1] as MComponent;\n info.parent = path[path.length - 2] as MContainer;\n\n path.forEach((item) => {\n if (item.type === NodeType.PAGE) {\n info.page = item as MPage;\n return;\n }\n });\n\n return info;\n }\n\n /**\n * 根据ID获取指点节点配置\n * @param id 组件ID\n * @param {boolean} raw 是否使用toRaw\n * @returns 组件节点配置\n */\n public getNodeById(id: Id, raw = true): MNode | undefined {\n const { node } = this.getNodeInfo(id, raw);\n return node;\n }\n\n /**\n * 根据ID获取指点节点的父节点配置\n * @param id 组件ID\n * @param {boolean} raw 是否使用toRaw\n * @returns 指点组件的父节点配置\n */\n public getParentById(id: Id, raw = true): MContainer | undefined {\n if (!this.get<MApp | null>('root')) return;\n const { parent } = this.getNodeInfo(id, raw);\n return parent;\n }\n\n /**\n * 只有容器拥有布局\n */\n public async getLayout(parent: MNode, node?: MNode): Promise<Layout> {\n if (node && typeof node !== 'function' && isFixed(node)) return Layout.FIXED;\n\n if (parent.layout) {\n return parent.layout;\n }\n\n // 如果该节点没有设置position,则认为是流式布局,例如获取root的布局时\n if (!parent.style?.position) {\n return Layout.RELATIVE;\n }\n\n return Layout.ABSOLUTE;\n }\n\n /**\n * 选中指定节点(将指定节点设置成当前选中状态)\n * @param config 指定节点配置或者ID\n * @returns 当前选中的节点配置\n */\n public async select(config: MNode | Id): Promise<MNode> | never {\n const { node, page, parent } = this.selectedConfigExceptionHandler(config);\n this.set('nodes', [node]);\n this.set('page', page || null);\n this.set('parent', parent || null);\n\n if (page) {\n historyService.changePage(toRaw(page));\n } else {\n historyService.empty();\n }\n\n if (node?.id) {\n this.get<StageCore>('stage')\n ?.renderer.runtime?.getApp?.()\n ?.emit(\n 'editor:select',\n {\n node,\n page,\n parent,\n },\n getNodePath(node.id, this.get<MApp>('root').items),\n );\n }\n\n this.emit('select', node);\n\n return node!;\n }\n\n public async selectNextNode(): Promise<MNode> | never {\n const node = toRaw(this.get('node'));\n\n if (!node || isPage(node) || node.type === NodeType.ROOT) return node;\n\n const parent = toRaw(this.getParentById(node.id));\n\n if (!parent) return node;\n\n const index = getNodeIndex(node, parent);\n\n const nextNode = parent.items[index + 1] || parent.items[0];\n\n await this.select(nextNode);\n this.get<StageCore>('stage')?.select(nextNode.id);\n\n return nextNode;\n }\n\n public async selectNextPage(): Promise<MNode> | never {\n const root = toRaw(this.get<MApp>('root'));\n const page = toRaw(this.get('page'));\n\n const index = getNodeIndex(page, root);\n\n const nextPage = root.items[index + 1] || root.items[0];\n\n await this.select(nextPage);\n this.get<StageCore>('stage')?.select(nextPage.id);\n\n return nextPage;\n }\n\n /**\n * 高亮指定节点\n * @param config 指定节点配置或者ID\n * @returns 当前高亮的节点配置\n */\n public highlight(config: MNode | Id): void {\n const { node } = this.selectedConfigExceptionHandler(config);\n const currentHighlightNode = this.get('highlightNode');\n if (currentHighlightNode === node) return;\n this.set('highlightNode', node);\n }\n\n /**\n * 多选\n * @param ids 指定节点ID\n * @returns 加入多选的节点配置\n */\n public multiSelect(ids: Id[]): void {\n const nodes: MNode[] = [];\n const idsUnique = uniq(ids);\n idsUnique.forEach((id) => {\n const { node } = this.getNodeInfo(id);\n if (!node) return;\n nodes.push(node);\n });\n this.set('nodes', nodes);\n }\n\n public async doAdd(node: MNode, parent: MContainer): Promise<MNode> {\n const root = this.get<MApp>('root');\n const curNode = this.get<MNode>('node');\n const stage = this.get<StageCore | null>('stage');\n\n if ((parent?.type === NodeType.ROOT || curNode.type === NodeType.ROOT) && node.type !== NodeType.PAGE) {\n throw new Error('app下不能添加组件');\n }\n\n if (parent.id !== curNode.id && node.type !== NodeType.PAGE) {\n const index = parent.items.indexOf(curNode);\n parent?.items?.splice(index + 1, 0, node);\n } else {\n // 新增节点添加到配置中\n parent?.items?.push(node);\n }\n\n const layout = await this.getLayout(toRaw(parent), node as MNode);\n node.style = getInitPositionStyle(node.style, layout);\n\n await stage?.add({\n config: cloneDeep(node),\n parent: cloneDeep(parent),\n parentId: parent.id,\n root: cloneDeep(root),\n });\n\n node.style = fixNodePosition(node, parent, stage);\n\n await stage?.update({ config: cloneDeep(node), parentId: parent.id, root: cloneDeep(root) });\n\n this.addModifiedNodeId(node.id);\n\n return node;\n }\n\n /**\n * 向指点容器添加组件节点\n * @param addConfig 将要添加的组件节点配置\n * @param parent 要添加到的容器组件节点配置,如果不设置,默认为当前选中的组件的父节点\n * @returns 添加后的节点\n */\n public async add(addNode: AddMNode | MNode[], parent?: MContainer | null): Promise<MNode | MNode[]> {\n const stage = this.get<StageCore | null>('stage');\n\n // 新增多个组件只存在于粘贴多个组件,粘贴的是一个完整的config,所以不再需要getPropsValue\n const addNodes = [];\n if (!Array.isArray(addNode)) {\n const { type, inputEvent, ...config } = addNode;\n\n if (!type) throw new Error('组件类型不能为空');\n\n addNodes.push({ ...toRaw(await propsService.getPropsValue(type, config)) });\n } else {\n addNodes.push(...addNode);\n }\n\n const newNodes = await Promise.all(\n addNodes.map((node) => {\n const parentNode = parent && typeof parent !== 'function' ? parent : getAddParent(node);\n if (!parentNode) throw new Error('未找到父元素');\n return this.doAdd(node, parentNode);\n }),\n );\n\n if (newNodes.length > 1) {\n const newNodeIds = newNodes.map((node) => node.id);\n // 触发选中样式\n stage?.multiSelect(newNodeIds);\n await this.multiSelect(newNodeIds);\n } else {\n await this.select(newNodes[0]);\n\n if (isPage(newNodes[0])) {\n this.state.pageLength += 1;\n } else {\n // 新增页面,这个时候页面还有渲染出来,此时select会出错,在runtime-ready的时候回去select\n stage?.select(newNodes[0].id);\n }\n }\n\n this.pushHistoryState();\n\n this.emit('add', newNodes);\n\n return Array.isArray(addNode) ? newNodes : newNodes[0];\n }\n\n public async doRemove(node: MNode): Promise<void> {\n const root = this.get<MApp | null>('root');\n\n if (!root) throw new Error('没有root');\n\n const { parent, node: curNode } = this.getNodeInfo(node.id);\n\n if (!parent || !curNode) throw new Error('找不要删除的节点');\n\n const index = getNodeIndex(curNode, parent);\n\n if (typeof index !== 'number' || index === -1) throw new Error('找不要删除的节点');\n\n parent.items?.splice(index, 1);\n const stage = this.get<StageCore | null>('stage');\n stage?.remove({ id: node.id, parentId: parent.id, root: cloneDeep(root) });\n\n if (node.type === NodeType.PAGE) {\n this.state.pageLength -= 1;\n\n if (root.items[0]) {\n await this.select(root.items[0]);\n stage?.select(root.items[0].id);\n } else {\n this.set('nodes', [root]);\n this.set('parent', null);\n this.set('page', null);\n this.set('stage', null);\n this.set('highlightNode', null);\n this.resetModifiedNodeId();\n historyService.reset();\n\n return;\n }\n } else {\n await this.select(parent);\n stage?.select(parent.id);\n }\n\n this.addModifiedNodeId(parent.id);\n }\n\n /**\n * 删除组件\n * @param {Object} node\n * @return {Object} 删除的组件配置\n */\n public async remove(nodeOrNodeList: MNode | MNode[]): Promise<void> {\n const nodes = Array.isArray(nodeOrNodeList) ? nodeOrNodeList : [nodeOrNodeList];\n\n await Promise.all(nodes.map((node) => this.doRemove(node)));\n\n // 更新历史记录\n this.pushHistoryState();\n\n this.emit('remove', nodes);\n }\n\n public async doUpdate(config: MNode) {\n if (!config?.id) throw new Error('没有配置或者配置缺少id值');\n\n const info = this.getNodeInfo(config.id, false);\n\n if (!info.node) throw new Error(`获取不到id为${config.id}的节点`);\n\n const node = cloneDeep(toRaw(info.node));\n\n let newConfig = await this.toggleFixedPosition(toRaw(config), node, this.get<MApp>('root'));\n\n newConfig = mergeWith(cloneDeep(node), newConfig, (objValue, srcValue) => {\n if (Array.isArray(srcValue)) {\n return srcValue;\n }\n });\n\n if (!newConfig.type) throw new Error('配置缺少type值');\n\n if (newConfig.type === NodeType.ROOT) {\n this.set('root', newConfig);\n return newConfig;\n }\n\n const { parent } = info;\n if (!parent) throw new Error('获取不到父级节点');\n\n const parentNodeItems = parent.items;\n const index = getNodeIndex(newConfig, parent);\n\n if (!parentNodeItems || typeof index === 'undefined' || index === -1) throw new Error('更新的节点未找到');\n\n const newLayout = await this.getLayout(newConfig);\n const layout = await this.getLayout(node);\n if (newLayout !== layout) {\n newConfig = setLayout(newConfig, newLayout);\n }\n\n parentNodeItems[index] = newConfig;\n\n // 将update后的配置更新到nodes中\n const nodes = this.get('nodes');\n const targetIndex = nodes.findIndex((nodeItem: MNode) => `${nodeItem.id}` === `${newConfig.id}`);\n nodes.splice(targetIndex, 1, newConfig);\n this.set('nodes', nodes);\n\n this.get<StageCore | null>('stage')?.update({\n config: cloneDeep(newConfig),\n parentId: parent.id,\n root: cloneDeep(this.get('root')),\n });\n\n if (newConfig.type === NodeType.PAGE) {\n this.set('page', newConfig);\n }\n\n this.addModifiedNodeId(newConfig.id);\n\n return newConfig;\n }\n\n /**\n * 更新节点\n * @param config 新的节点配置,配置中需要有id信息\n * @returns 更新后的节点配置\n */\n public async update(config: MNode | MNode[]): Promise<MNode | MNode[]> {\n const nodes = Array.isArray(config) ? config : [config];\n\n const newNodes = await Promise.all(nodes.map((node) => this.doUpdate(node)));\n\n this.pushHistoryState();\n\n this.emit('update', newNodes);\n\n return Array.isArray(config) ? newNodes : newNodes[0];\n }\n\n /**\n * 将id为id1的组件移动到id为id2的组件位置上,例如:[1,2,3,4] -> sort(1,3) -> [2,1,3,4]\n * @param id1 组件ID\n * @param id2 组件ID\n * @returns void\n */\n public async sort(id1: Id, id2: Id): Promise<void> {\n const node = this.get<MNode>('node');\n const parent = cloneDeep(toRaw(this.get<MContainer>('parent')));\n const index2 = parent.items.findIndex((node: MNode) => `${node.id}` === `${id2}`);\n // 在 id1 的兄弟组件中若无 id2 则直接 return\n if (index2 < 0) return;\n const index1 = parent.items.findIndex((node: MNode) => `${node.id}` === `${id1}`);\n\n parent.items.splice(index2, 0, ...parent.items.splice(index1, 1));\n\n await this.update(parent);\n await this.select(node);\n\n this.get<StageCore | null>('stage')?.update({\n config: cloneDeep(node),\n parentId: parent.id,\n root: cloneDeep(this.get('root')),\n });\n\n this.addModifiedNodeId(parent.id);\n this.pushHistoryState();\n }\n\n /**\n * 将组将节点配置转化成string,然后存储到localStorage中\n * @param config 组件节点配置\n * @returns 组件节点配置\n */\n public async copy(config: MNode | MNode[]): Promise<void> {\n await storageService.setItem(COPY_STORAGE_KEY, Array.isArray(config) ? config : [config], {\n protocol: Protocol.OBJECT,\n });\n }\n\n /**\n * 从localStorage中获取节点,然后添加到当前容器中\n * @param position 粘贴的坐标\n * @returns 添加后的组件节点配置\n */\n public async paste(position: PastePosition = {}): Promise<MNode | MNode[] | void> {\n const config: MNode[] = await storageService.getItem(COPY_STORAGE_KEY);\n\n if (!Array.isArray(config)) return;\n\n const pasteConfigs = await this.doPaste(config, position);\n\n return this.add(pasteConfigs);\n }\n\n public async doPaste(config: MNode[], position: PastePosition = {}): Promise<MNode[]> {\n const pasteConfigs = await beforePaste(position, cloneDeep(config));\n return pasteConfigs;\n }\n\n public async doAlignCenter(config: MNode): Promise<MNode> {\n const parent = this.getParentById(config.id);\n\n if (!parent) throw new Error('找不到父节点');\n\n const node = cloneDeep(toRaw(config));\n const layout = await this.getLayout(parent, node);\n if (layout === Layout.RELATIVE) {\n return config;\n }\n\n if (!node.style) return config;\n\n const stage = this.get<StageCore>('stage');\n const doc = stage?.renderer.contentWindow?.document;\n\n if (doc) {\n const el = doc.getElementById(`${node.id}`);\n const parentEl = el?.offsetParent;\n if (parentEl && el) {\n node.style.left = (parentEl.clientWidth - el.clientWidth) / 2;\n }\n } else if (parent.style && isNumber(parent.style?.width) && isNumber(node.style?.width)) {\n node.style.left = (parent.style.width - node.style.width) / 2;\n }\n\n return node;\n }\n\n /**\n * 将指点节点设置居中\n * @param config 组件节点配置\n * @returns 当前组件节点配置\n */\n public async alignCenter(config: MNode | MNode[]): Promise<MNode | MNode[]> {\n const nodes = Array.isArray(config) ? config : [config];\n const stage = this.get<StageCore | null>('stage');\n\n const newNodes = await Promise.all(nodes.map((node) => this.doAlignCenter(node)));\n\n const newNode = await this.update(newNodes);\n\n await stage?.multiSelect(newNodes.map((node) => node.id));\n\n return newNode;\n }\n\n /**\n * 移动当前选中节点位置\n * @param offset 偏移量\n */\n public async moveLayer(offset: number | LayerOffset): Promise<void> {\n const parent = this.get<MContainer>('parent');\n const node = this.get<MNode>('node');\n const brothers: MNode[] = parent?.items || [];\n const index = brothers.findIndex((item) => `${item.id}` === `${node?.id}`);\n\n // 流式布局与绝对定位布局操作的相反的\n const layout = await this.getLayout(parent, node);\n const isRelative = layout === Layout.RELATIVE;\n\n brothers.splice(index, 1);\n\n if (offset === LayerOffset.TOP) {\n brothers.splice(isRelative ? 0 : brothers.length - 1, 0, node);\n } else if (offset === LayerOffset.BOTTOM) {\n brothers.splice(isRelative ? brothers.length - 1 : 0, 0, node);\n } else {\n brothers.splice(index + (isRelative ? -offset : offset), 0, node);\n }\n\n const grandparent = this.getParentById(parent.id);\n this.get<StageCore | null>('stage')?.update({\n config: cloneDeep(toRaw(parent)),\n parentId: grandparent?.id,\n root: cloneDeep(this.get<MApp>('root')),\n });\n\n this.addModifiedNodeId(parent.id);\n this.pushHistoryState();\n }\n\n /**\n * 移动到指定容器中\n * @param config 需要移动的节点\n * @param targetId 容器ID\n */\n public async moveToContainer(config: MNode, targetId: Id): Promise<MNode | undefined> {\n const { node, parent } = this.getNodeInfo(config.id, false);\n const target = this.getNodeById(targetId, false) as MContainer;\n\n const stage = this.get<StageCore | null>('stage');\n\n if (node && parent && stage) {\n const root = cloneDeep(this.get<MApp>('root'));\n const index = getNodeIndex(node, parent);\n parent.items?.splice(index, 1);\n\n await stage.remove({ id: node.id, parentId: parent.id, root });\n\n const layout = await this.getLayout(target);\n\n const newConfig = mergeWith(cloneDeep(node), config, (objValue, srcValue) => {\n if (Array.isArray(srcValue)) {\n return srcValue;\n }\n });\n newConfig.style = getInitPositionStyle(newConfig.style, layout);\n\n target.items.push(newConfig);\n\n await stage.select(targetId);\n\n const targetParent = this.getParentById(target.id);\n await stage.update({ config: cloneDeep(target), parentId: targetParent?.id, root });\n\n await this.select(newConfig);\n stage.select(newConfig.id);\n\n this.addModifiedNodeId(target.id);\n this.addModifiedNodeId(parent.id);\n this.pushHistoryState();\n\n return newConfig;\n }\n }\n\n /**\n * 撤销当前操作\n * @returns 上一次数据\n */\n public async undo(): Promise<StepValue | null> {\n const value = historyService.undo();\n await this.changeHistoryState(value);\n return value;\n }\n\n /**\n * 恢复到下一步\n * @returns 下一步数据\n */\n public async redo(): Promise<StepValue | null> {\n const value = historyService.redo();\n await this.changeHistoryState(value);\n return value;\n }\n\n public async move(left: number, top: number) {\n const node = toRaw(this.get('node'));\n if (!node || isPage(node)) return;\n\n const { style, id, type } = node;\n if (!style || style.position !== 'absolute') return;\n\n if (top && !isNumber(style.top)) return;\n if (left && !isNumber(style.left)) return;\n\n this.update({\n id,\n type,\n style: {\n ...style,\n left: Number(style.left) + left,\n top: Number(style.top) + top,\n },\n });\n }\n\n public destroy() {\n this.removeAllListeners();\n this.set('root', null);\n this.set('node', null);\n this.set('nodes', []);\n this.set('page', null);\n this.set('parent', null);\n this.set('stage', null);\n this.set('highlightNode', null);\n this.set('modifiedNodeIds', new Map());\n this.set('pageLength', new Map());\n }\n\n public resetModifiedNodeId() {\n this.get<Map<Id, Id>>('modifiedNodeIds').clear();\n }\n\n private addModifiedNodeId(id: Id) {\n if (!this.isHistoryStateChange) {\n this.get<Map<Id, Id>>('modifiedNodeIds').set(id, id);\n }\n }\n\n private pushHistoryState() {\n const curNode = cloneDeep(toRaw(this.get('node')));\n if (!this.isHistoryStateChange) {\n historyService.push({\n data: cloneDeep(toRaw(this.get('page'))),\n modifiedNodeIds: this.get<Map<Id, Id>>('modifiedNodeIds'),\n nodeId: curNode.id,\n });\n }\n this.isHistoryStateChange = false;\n }\n\n private async changeHistoryState(value: StepValue | null) {\n if (!value) return;\n\n this.isHistoryStateChange = true;\n await this.update(value.data);\n this.set('modifiedNodeIds', value.modifiedNodeIds);\n setTimeout(async () => {\n if (!value.nodeId) return;\n await this.select(value.nodeId);\n this.get<StageCore | null>('stage')?.select(value.nodeId);\n }, 0);\n }\n\n private async toggleFixedPosition(dist: MNode, src: MNode, root: MApp) {\n const newConfig = cloneDeep(dist);\n\n if (!isPop(src) && newConfig.style?.position) {\n if (isFixed(newConfig) && !isFixed(src)) {\n newConfig.style = change2Fixed(newConfig, root);\n } else if (!isFixed(newConfig) && isFixed(src)) {\n newConfig.style = await Fixed2Other(newConfig, root, this.getLayout);\n }\n }\n\n return newConfig;\n }\n\n private selectedConfigExceptionHandler(config: MNode | Id): EditorNodeInfo {\n let id: Id;\n if (typeof config === 'string' || typeof config === 'number') {\n id = config;\n } else {\n id = config.id;\n }\n if (!id) {\n throw new Error('没有ID,无法选中');\n }\n\n const { node, parent, page } = this.getNodeInfo(id);\n if (!node) throw new Error('获取不到组件信息');\n\n if (node.id === this.state.root?.id) {\n throw new Error('不能选根节点');\n }\n return {\n node,\n parent,\n page,\n };\n }\n}\n\nexport type EditorService = Editor;\n\nexport default new Editor();\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 { reactive } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport { DEFAULT_EVENTS, DEFAULT_METHODS, EventOption } from '@tmagic/core';\nimport { toLine } from '@tmagic/utils';\n\nimport type { ComponentGroup } from '../type';\n\nimport BaseService from './BaseService';\n\nlet eventMap: Record<string, EventOption[]> = reactive({});\nlet methodMap: Record<string, EventOption[]> = reactive({});\n\nclass Events extends BaseService {\n constructor() {\n super([]);\n }\n\n public init(componentGroupList: ComponentGroup[]) {\n componentGroupList.forEach((group) => {\n group.items.forEach((element) => {\n const type = toLine(element.type);\n if (!this.getEvent(type)) {\n this.setEvent(type, DEFAULT_EVENTS);\n }\n if (!this.getMethod(type)) {\n this.setMethod(type, DEFAULT_METHODS);\n }\n });\n });\n }\n\n public setEvents(events: Record<string, EventOption[]>) {\n Object.keys(events).forEach((type: string) => {\n this.setEvent(toLine(type), events[type] || []);\n });\n }\n\n public setEvent(type: string, events: EventOption[]) {\n eventMap[type] = [...DEFAULT_EVENTS, ...events];\n }\n\n public getEvent(type: string): EventOption[] {\n return cloneDeep(eventMap[type] || DEFAULT_EVENTS);\n }\n\n public setMethods(methods: Record<string, EventOption[]>) {\n Object.keys(methods).forEach((type: string) => {\n this.setMethod(toLine(type), methods[type] || []);\n });\n }\n\n public setMethod(type: string, method: EventOption[]) {\n methodMap[type] = [...DEFAULT_METHODS, ...method];\n }\n\n public getMethod(type: string) {\n return cloneDeep(methodMap[type] || DEFAULT_METHODS);\n }\n\n public destroy() {\n eventMap = reactive({});\n methodMap = reactive({});\n this.removeAllListeners();\n }\n}\n\nexport type EventsService = Events;\n\nexport default new Events();\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 { FormConfig, FormState } from '@tmagic/form';\n\nimport editorService from '../services/editor';\nimport eventsService from '../services/events';\n\n/**\n * 统一为组件属性表单加上事件、高级、样式配置\n * @param config 组件属性配置\n * @returns Object\n */\nexport const fillConfig = (config: FormConfig = []) => [\n {\n type: 'tab',\n items: [\n {\n title: '属性',\n labelWidth: '80px',\n items: [\n // 组件类型,必须要有\n {\n text: 'type',\n name: 'type',\n type: 'hidden',\n },\n // 组件id,必须要有\n {\n name: 'id',\n type: 'display',\n text: 'id',\n },\n {\n name: 'name',\n text: '组件名称',\n },\n ...config,\n ],\n },\n {\n title: '样式',\n labelWidth: '80px',\n items: [\n {\n name: 'style',\n items: [\n {\n type: 'fieldset',\n legend: '位置',\n items: [\n {\n name: 'position',\n type: 'checkbox',\n activeValue: 'fixed',\n inactiveValue: 'absolute',\n defaultValue: 'absolute',\n text: '固定定位',\n },\n {\n name: 'left',\n text: 'left',\n },\n {\n name: 'top',\n text: 'top',\n disabled: (vm: FormState, { model }: any) =>\n model.position === 'fixed' && model._magic_position === 'fixedBottom',\n },\n {\n name: 'right',\n text: 'right',\n },\n {\n name: 'bottom',\n text: 'bottom',\n disabled: (vm: FormState, { model }: any) =>\n model.position === 'fixed' && model._magic_position === 'fixedTop',\n },\n ],\n },\n {\n type: 'fieldset',\n legend: '盒子',\n items: [\n {\n name: 'width',\n text: '宽度',\n },\n {\n name: 'height',\n text: '高度',\n },\n ],\n },\n {\n type: 'fieldset',\n legend: '背景',\n items: [\n {\n name: 'backgroundImage',\n text: '背景图',\n },\n {\n name: 'backgroundColor',\n text: '背景颜色',\n type: 'colorPicker',\n },\n {\n name: 'backgroundRepeat',\n text: '背景图重复',\n type: 'select',\n defaultValue: 'no-repeat',\n options: [\n { text: 'repeat', value: 'repeat' },\n { text: 'repeat-x', value: 'repeat-x' },\n { text: 'repeat-y', value: 'repeat-y' },\n { text: 'no-repeat', value: 'no-repeat' },\n { text: 'inherit', value: 'inherit' },\n ],\n },\n {\n name: 'backgroundSize',\n text: '背景图大小',\n defaultValue: '100% 100%',\n },\n ],\n },\n {\n type: 'fieldset',\n legend: '字体',\n items: [\n {\n name: 'color',\n text: '颜色',\n type: 'colorPicker',\n },\n {\n name: 'fontSize',\n text: '大小',\n },\n {\n name: 'fontWeight',\n text: '粗细',\n },\n ],\n },\n {\n type: 'fieldset',\n legend: '变形',\n name: 'transform',\n items: [\n {\n name: 'rotate',\n text: '旋转角度',\n },\n {\n name: 'scale',\n text: '缩放',\n },\n ],\n },\n ],\n },\n ],\n },\n {\n title: '事件',\n items: [\n {\n type: 'table',\n name: 'events',\n items: [\n {\n name: 'name',\n label: '事件名',\n type: 'select',\n options: (mForm: FormState, { formValue }: any) =>\n eventsService.getEvent(formValue.type).map((option) => ({\n text: option.label,\n value: option.value,\n })),\n },\n {\n name: 'to',\n label: '联动组件',\n type: 'ui-select',\n },\n {\n name: 'method',\n label: '动作',\n type: 'select',\n options: (mForm: FormState, { model }: any) => {\n const node = editorService.getNodeById(model.to);\n if (!node?.type) return [];\n\n return eventsService.getMethod(node.type).map((option) => ({\n text: option.label,\n value: option.value,\n }));\n },\n },\n ],\n },\n ],\n },\n {\n title: '高级',\n labelWidth: '80px',\n items: [\n {\n type: 'code-link',\n name: 'created',\n text: 'created',\n formTitle: 'created',\n },\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\nexport const log = (...args: any[]) => {\n if (process.env.NODE_ENV === 'development') {\n console.log('magic editor: ', ...args);\n }\n};\n\nexport const info = (...args: any[]) => {\n if (process.env.NODE_ENV === 'development') {\n console.info('magic editor: ', ...args);\n }\n};\n\nexport const warn = (...args: any[]) => {\n if (process.env.NODE_ENV === 'development') {\n console.warn('magic editor: ', ...args);\n }\n};\n\nexport const debug = (...args: any[]) => {\n if (process.env.NODE_ENV === 'development') {\n console.debug('magic editor: ', ...args);\n }\n};\n\nexport const error = (...args: any[]) => {\n if (process.env.NODE_ENV === 'development') {\n console.error('magic editor: ', ...args);\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 { reactive, toRaw } from 'vue';\n\nimport type StageCore from '@tmagic/stage';\n\nimport editorService from '../services/editor';\nimport type { GetColumnWidth, SetColumnWidth, StageRect, UiState } from '../type';\n\nimport BaseService from './BaseService';\n\nconst DEFAULT_LEFT_COLUMN_WIDTH = 310;\nconst MIN_LEFT_COLUMN_WIDTH = 45;\nconst DEFAULT_RIGHT_COLUMN_WIDTH = 480;\nconst MIN_RIGHT_COLUMN_WIDTH = 1;\n\nconst COLUMN_WIDTH_STORAGE_KEY = '$MagicEditorColumnWidthData';\n\nconst defaultColumnWidth = {\n left: DEFAULT_LEFT_COLUMN_WIDTH,\n center: globalThis.document.body.clientWidth - DEFAULT_LEFT_COLUMN_WIDTH - DEFAULT_RIGHT_COLUMN_WIDTH,\n right: DEFAULT_RIGHT_COLUMN_WIDTH,\n};\n\nconst state = reactive<UiState>({\n uiSelectMode: false,\n showSrc: false,\n zoom: 1,\n stageContainerRect: {\n width: 0,\n height: 0,\n },\n stageRect: {\n width: 375,\n height: 817,\n },\n columnWidth: defaultColumnWidth,\n showGuides: true,\n showRule: true,\n propsPanelSize: 'small',\n showAddPageButton: true,\n});\n\nclass Ui extends BaseService {\n constructor() {\n super(['initColumnWidth', 'zoom', 'calcZoom']);\n globalThis.addEventListener('resize', () => {\n this.setColumnWidth({\n center: 'auto',\n });\n });\n }\n\n public set<T = any>(name: keyof UiState, value: T) {\n const mask = editorService.get<StageCore>('stage')?.mask;\n\n if (name === 'columnWidth') {\n this.setColumnWidth(value as unknown as SetColumnWidth);\n return;\n }\n\n if (name === 'stageRect') {\n this.setStageRect(value as unknown as StageRect);\n return;\n }\n\n if (name === 'showGuides') {\n mask?.showGuides(value as unknown as boolean);\n }\n\n if (name === 'showRule') {\n mask?.showRule(value as unknown as boolean);\n }\n\n (state as any)[name] = value;\n }\n\n public get<T>(name: keyof typeof state): T {\n return (state as any)[name];\n }\n\n public async initColumnWidth() {\n const columnWidthCacheData = globalThis.localStorage.getItem(COLUMN_WIDTH_STORAGE_KEY);\n if (columnWidthCacheData) {\n try {\n const columnWidthCache = JSON.parse(columnWidthCacheData);\n this.setColumnWidth(columnWidthCache);\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n public async zoom(zoom: number) {\n this.set('zoom', (this.get<number>('zoom') * 100 + zoom * 100) / 100);\n if (this.get<number>('zoom') < 0.1) this.set('zoom', 0.1);\n }\n\n public async calcZoom() {\n const { stageRect, stageContainerRect } = state;\n const { height, width } = stageContainerRect;\n if (!width || !height) return 1;\n\n // 30为标尺的大小\n const stageWidth = stageRect.width + 30;\n const stageHeight = stageRect.height + 30;\n\n if (width > stageWidth && height > stageHeight) {\n return 1;\n }\n // 60/80是为了不要让画布太过去贴住四周(这样好看些)\n return Math.min((width - 60) / stageWidth || 1, (height - 80) / stageHeight || 1);\n }\n\n public destroy() {\n this.removeAllListeners();\n }\n\n private setColumnWidth({ left, center, right }: SetColumnWidth) {\n const columnWidth = {\n ...toRaw(this.get<GetColumnWidth>('columnWidth')),\n };\n\n if (left) {\n columnWidth.left = Math.max(left, MIN_LEFT_COLUMN_WIDTH);\n }\n\n if (right) {\n columnWidth.right = Math.max(right, MIN_RIGHT_COLUMN_WIDTH);\n }\n\n if (!center || center === 'auto') {\n const bodyWidth = globalThis.document.body.clientWidth;\n columnWidth.center = bodyWidth - (columnWidth?.left || 0) - (columnWidth?.right || 0);\n if (columnWidth.center <= 0) {\n columnWidth.left = defaultColumnWidth.left;\n columnWidth.center = defaultColumnWidth.center;\n columnWidth.right = defaultColumnWidth.right;\n }\n } else {\n columnWidth.center = center;\n }\n\n globalThis.localStorage.setItem(COLUMN_WIDTH_STORAGE_KEY, JSON.stringify(columnWidth));\n\n state.columnWidth = columnWidth;\n }\n\n private async setStageRect(value: StageRect) {\n state.stageRect = {\n ...state.stageRect,\n ...value,\n };\n state.zoom = await this.calcZoom();\n }\n}\n\nexport type UiService = Ui;\n\nexport default new Ui();\n","import { computed } from 'vue';\n\nimport { MApp, MPage } from '@tmagic/schema';\nimport StageCore, { GuidesType, SortEventData, UpdateEventData } from '@tmagic/stage';\n\nimport editorService from '../services/editor';\nimport uiService from '../services/ui';\nimport { H_GUIDE_LINE_STORAGE_KEY, StageOptions, V_GUIDE_LINE_STORAGE_KEY } from '../type';\n\nimport { getGuideLineFromCache } from './editor';\n\nconst root = computed(() => editorService.get<MApp>('root'));\nconst page = computed(() => editorService.get<MPage>('page'));\nconst zoom = computed(() => uiService.get<number>('zoom') || 1);\nconst uiSelectMode = computed(() => uiService.get<boolean>('uiSelectMode'));\n\nconst getGuideLineKey = (key: string) => `${key}_${root.value?.id}_${page.value?.id}`;\n\nexport const useStage = (stageOptions: StageOptions) => {\n const stage = new StageCore({\n render: stageOptions.render,\n runtimeUrl: stageOptions.runtimeUrl,\n zoom: zoom.value,\n autoScrollIntoView: stageOptions.autoScrollIntoView,\n isContainer: stageOptions.isContainer,\n containerHighlightClassName: stageOptions.containerHighlightClassName,\n containerHighlightDuration: stageOptions.containerHighlightDuration,\n containerHighlightType: stageOptions.containerHighlightType,\n canSelect: (el, event, stop) => {\n const elCanSelect = stageOptions.canSelect(el);\n // 在组件联动过程中不能再往下选择,返回并触发 ui-select\n if (uiSelectMode.value && elCanSelect && event.type === 'mousedown') {\n document.dispatchEvent(new CustomEvent('ui-select', { detail: el }));\n return stop();\n }\n\n return elCanSelect;\n },\n moveableOptions: stageOptions.moveableOptions,\n updateDragEl: stageOptions.updateDragEl,\n });\n\n stage.mask.setGuides([\n getGuideLineFromCache(getGuideLineKey(H_GUIDE_LINE_STORAGE_KEY)),\n getGuideLineFromCache(getGuideLineKey(V_GUIDE_LINE_STORAGE_KEY)),\n ]);\n\n stage.on('select', (el: HTMLElement) => {\n editorService.select(el.id);\n });\n\n stage.on('highlight', (el: HTMLElement) => {\n editorService.highlight(el.id);\n });\n\n stage.on('multiSelect', (els: HTMLElement[]) => {\n editorService.multiSelect(els.map((el) => el.id));\n });\n\n stage.on('update', (ev: UpdateEventData) => {\n if (ev.parentEl) {\n for (const data of ev.data) {\n editorService.moveToContainer({ id: data.el.id, style: data.style }, ev.parentEl.id);\n }\n return;\n }\n\n editorService.update(ev.data.map((data) => ({ id: data.el.id, style: data.style })));\n });\n\n stage.on('sort', (ev: SortEventData) => {\n editorService.sort(ev.src, ev.dist);\n });\n\n stage.on('changeGuides', (e) => {\n uiService.set('showGuides', true);\n\n if (!root.value || !page.value) return;\n\n const storageKey = getGuideLineKey(\n e.type === GuidesType.HORIZONTAL ? H_GUIDE_LINE_STORAGE_KEY : V_GUIDE_LINE_STORAGE_KEY,\n );\n if (e.guides.length) {\n globalThis.localStorage.setItem(storageKey, JSON.stringify(e.guides));\n } else {\n globalThis.localStorage.removeItem(storageKey);\n }\n });\n\n return stage;\n};\n","<template>\n <div class=\"m-editor-empty-panel\">\n <div class=\"m-editor-empty-content\">\n <div class=\"m-editor-empty-button\" @click=\"clickHandler\">\n <div>\n <el-icon><plus /></el-icon>\n </div>\n <p>新增页面</p>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, inject, toRaw } from 'vue';\nimport { Plus } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport type { Services } from '../type';\nimport { generatePageNameByApp } from '../utils';\n\nexport default defineComponent({\n components: { Plus },\n\n setup() {\n const services = inject<Services>('services');\n\n return {\n clickHandler() {\n const { editorService } = services || {};\n\n if (!editorService) return;\n\n editorService.add({\n type: NodeType.PAGE,\n name: generatePageNameByApp(toRaw(editorService.get('root'))),\n });\n },\n };\n },\n});\n</script>\n","<template>\n <span ref=\"target\" class=\"m-editor-resizer\">\n <slot></slot>\n </span>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, inject, onMounted, onUnmounted, ref, toRaw } from 'vue';\nimport Gesto from 'gesto';\n\nimport { Services } from '../type';\n\nexport default defineComponent({\n name: 'm-editor-resize',\n\n props: {\n type: {\n type: String,\n },\n },\n\n setup(props) {\n const services = inject<Services>('services');\n\n const target = ref<HTMLSpanElement>();\n\n let getso: Gesto;\n\n onMounted(() => {\n if (!target.value) return;\n getso = new Gesto(target.value, {\n container: window,\n pinchOutside: true,\n }).on('drag', (e) => {\n if (!target.value || !services) return;\n\n let { left, right } = {\n ...toRaw(services.uiService.get('columnWidth')),\n };\n if (props.type === 'left') {\n left += e.deltaX;\n } else if (props.type === 'right') {\n right -= e.deltaX;\n }\n services.uiService.set('columnWidth', {\n left,\n right,\n });\n });\n });\n\n onUnmounted(() => {\n getso?.unset();\n });\n\n return {\n target,\n };\n },\n});\n</script>\n","<template>\n <div class=\"m-editor\">\n <slot name=\"nav\" class=\"m-editor-nav-menu\"></slot>\n\n <magic-code-editor\n v-if=\"showSrc\"\n class=\"m-editor-content\"\n :init-values=\"root\"\n :options=\"codeOptions\"\n @save=\"saveCode\"\n ></magic-code-editor>\n\n <div class=\"m-editor-content\" v-else>\n <div class=\"m-editor-framework-left\" :style=\"`width: ${columnWidth?.left}px`\">\n <slot name=\"sidebar\"></slot>\n </div>\n\n <resizer type=\"left\"></resizer>\n\n <template v-if=\"pageLength > 0\">\n <div class=\"m-editor-framework-center\" :style=\"`width: ${columnWidth?.center}px`\">\n <slot name=\"workspace\"></slot>\n </div>\n\n <resizer type=\"right\"></resizer>\n\n <div class=\"m-editor-framework-right\" :style=\"`width: ${columnWidth?.right}px`\">\n <el-scrollbar>\n <slot name=\"props-panel\"></slot>\n </el-scrollbar>\n </div>\n </template>\n\n <slot v-else name=\"empty\">\n <add-page-box></add-page-box>\n </slot>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject } from 'vue';\n\nimport type { MApp } from '@tmagic/schema';\n\nimport { GetColumnWidth, Services } from '../type';\n\nimport AddPageBox from './AddPageBox.vue';\nimport Resizer from './Resizer.vue';\n\nexport default defineComponent({\n components: {\n AddPageBox,\n Resizer,\n },\n\n props: {\n codeOptions: {\n type: Object,\n default: () => ({}),\n },\n },\n\n setup() {\n const { editorService, uiService } = inject<Services>('services') || {};\n\n const root = computed(() => editorService?.get<MApp>('root'));\n\n return {\n root,\n pageLength: computed(() => editorService?.get<number>('pageLength') || 0),\n showSrc: computed(() => uiService?.get<boolean>('showSrc')),\n columnWidth: computed(() => uiService?.get<GetColumnWidth>('columnWidth')),\n\n saveCode(value: string) {\n try {\n // eslint-disable-next-line no-eval\n editorService?.set('root', eval(value));\n } catch (e: any) {\n console.error(e);\n }\n },\n };\n },\n});\n</script>\n","<template>\n <div\n v-if=\"display\"\n class=\"menu-item\"\n :class=\"`${data.type} ${data.className || ''}`\"\n @click=\"clickHandler(data, $event)\"\n @mousedown=\"mousedownHandler(data, $event)\"\n @mouseup=\"mouseupHandler(data, $event)\"\n >\n <el-divider v-if=\"data.type === 'divider'\" :direction=\"data.direction || 'vertical'\"></el-divider>\n <div v-else-if=\"data.type === 'text'\" class=\"menu-item-text\">{{ data.text }}</div>\n\n <template v-else-if=\"data.type === 'button'\">\n <el-tooltip v-if=\"data.tooltip\" effect=\"dark\" placement=\"bottom-start\" :content=\"data.tooltip\">\n <el-button size=\"small\" text :disabled=\"disabled\"\n ><MIcon v-if=\"data.icon\" :icon=\"data.icon\"></MIcon><span>{{ data.text }}</span></el-button\n >\n </el-tooltip>\n <el-button v-else size=\"small\" text :disabled=\"disabled\"\n ><MIcon v-if=\"data.icon\" :icon=\"data.icon\"></MIcon><span>{{ data.text }}</span></el-button\n >\n </template>\n\n <el-dropdown v-else-if=\"data.type === 'dropdown'\" trigger=\"click\" :disabled=\"disabled\" @command=\"dropdownHandler\">\n <span class=\"el-dropdown-link menubar-menu-button\">\n {{ data.text }}<el-icon class=\"el-icon--right\"><ArrowDown></ArrowDown></el-icon>\n </span>\n <template #dropdown>\n <el-dropdown-menu v-if=\"data.items && data.items.length\">\n <el-dropdown-item v-for=\"(subItem, index) in data.items\" :key=\"index\" :command=\"{ data, subItem }\">{{\n subItem.text\n }}</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n\n <component v-else-if=\"data.type === 'component'\" v-bind=\"data.props || {}\" :is=\"data.component\"></component>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue';\nimport { ArrowDown } from '@element-plus/icons-vue';\n\nimport MIcon from '../components/Icon.vue';\nimport type { MenuButton, MenuComponent, Services } from '../type';\n\nconst props = withDefaults(\n defineProps<{\n data?: MenuButton | MenuComponent;\n eventType?: 'mousedown' | 'mouseup' | 'click';\n }>(),\n {\n data: () => ({\n type: 'text',\n display: false,\n }),\n eventType: 'click',\n },\n);\nconst services = inject<Services>('services');\n\nconst disabled = computed(() => {\n if (typeof props.data === 'string') return false;\n if (props.data.type === 'component') return false;\n if (typeof props.data.disabled === 'function') {\n return props.data.disabled(services);\n }\n return props.data.disabled;\n});\n\nconst display = computed(() => {\n if (!props.data) return false;\n if (typeof props.data === 'string') return true;\n if (typeof props.data.display === 'function') {\n return props.data.display(services);\n }\n return props.data.display ?? true;\n});\n\nconst buttonHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (disabled.value) return;\n if (typeof (item as MenuButton).handler === 'function' && services) {\n (item as MenuButton).handler?.(services, event);\n }\n};\n\nconst dropdownHandler = (command: any) => {\n if (command.item.handler) {\n command.item.handler(services);\n }\n};\n\nconst clickHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'click') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n\nconst mousedownHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'mousedown') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n\nconst mouseupHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'mouseup') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n</script>\n","<template>\n <div class=\"m-editor-nav-menu\" :style=\"{ height: `${height}px` }\">\n <div v-for=\"key in keys\" :class=\"`menu-${key}`\" :key=\"key\" :style=\"`width: ${columnWidth?.[key]}px`\">\n <tool-button :data=\"item\" v-for=\"(item, index) in buttons[key]\" :key=\"index\"></tool-button>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, markRaw } from 'vue';\nimport { Back, Delete, FullScreen, Grid, Memo, Right, ScaleToOriginal, ZoomIn, ZoomOut } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport ToolButton from '../components/ToolButton.vue';\nimport { ColumnLayout, GetColumnWidth, MenuBarData, MenuButton, MenuComponent, MenuItem, Services } from '../type';\n\nconst props = withDefaults(\n defineProps<{\n data?: MenuBarData;\n height?: number;\n }>(),\n {\n data: () => ({}),\n height: 35,\n },\n);\n\nconst services = inject<Services>('services');\nconst uiService = services?.uiService;\n\nconst columnWidth = computed(() => services?.uiService.get<GetColumnWidth>('columnWidth'));\nconst keys = Object.values(ColumnLayout);\n\nconst showGuides = computed((): boolean => uiService?.get<boolean>('showGuides') ?? true);\nconst showRule = computed((): boolean => uiService?.get<boolean>('showRule') ?? true);\nconst zoom = computed((): number => uiService?.get<number>('zoom') ?? 1);\n\nconst isMac = /mac os x/.test(navigator.userAgent.toLowerCase());\nconst ctrl = isMac ? 'Command' : 'Ctrl';\n\nconst getConfig = (item: MenuItem): (MenuButton | MenuComponent)[] => {\n if (typeof item !== 'string') {\n return [item];\n }\n const config: (MenuButton | MenuComponent)[] = [];\n switch (item) {\n case '/':\n config.push({\n type: 'divider',\n className: 'divider',\n });\n break;\n case 'zoom':\n config.push(\n ...getConfig('zoom-out'),\n ...getConfig(`${parseInt(`${zoom.value * 100}`, 10)}%`),\n ...getConfig('zoom-in'),\n ...getConfig('scale-to-original'),\n ...getConfig('scale-to-fit'),\n );\n break;\n case 'delete':\n config.push({\n type: 'button',\n className: 'delete',\n icon: markRaw(Delete),\n tooltip: `刪除(Delete)`,\n disabled: () => services?.editorService.get('node')?.type === NodeType.PAGE,\n handler: () => services?.editorService.remove(services?.editorService.get('node')),\n });\n break;\n case 'undo':\n config.push({\n type: 'button',\n className: 'undo',\n icon: markRaw(Back),\n tooltip: `后退(${ctrl}+z)`,\n disabled: () => !services?.historyService.state.canUndo,\n handler: () => services?.editorService.undo(),\n });\n break;\n case 'redo':\n config.push({\n type: 'button',\n className: 'redo',\n icon: markRaw(Right),\n tooltip: `前进(${ctrl}+Shift+z)`,\n disabled: () => !services?.historyService.state.canRedo,\n handler: () => services?.editorService.redo(),\n });\n break;\n case 'zoom-in':\n config.push({\n type: 'button',\n className: 'zoom-in',\n icon: markRaw(ZoomIn),\n tooltip: `放大(${ctrl}+=)`,\n handler: () => uiService?.zoom(0.1),\n });\n break;\n case 'zoom-out':\n config.push({\n type: 'button',\n className: 'zoom-out',\n icon: markRaw(ZoomOut),\n tooltip: `縮小(${ctrl}+-)`,\n handler: () => uiService?.zoom(-0.1),\n });\n break;\n case 'scale-to-original':\n config.push({\n type: 'button',\n className: 'scale-to-original',\n icon: markRaw(ScaleToOriginal),\n tooltip: `缩放到实际大小(${ctrl}+1)`,\n handler: () => uiService?.set('zoom', 1),\n });\n break;\n case 'scale-to-fit':\n config.push({\n type: 'button',\n className: 'scale-to-fit',\n icon: markRaw(FullScreen),\n tooltip: `缩放以适应(${ctrl}+0)`,\n handler: async () => uiService?.set('zoom', await uiService.calcZoom()),\n });\n break;\n case 'rule':\n config.push({\n type: 'button',\n className: 'rule',\n icon: markRaw(Memo),\n tooltip: showRule.value ? '隐藏标尺' : '显示标尺',\n handler: () => uiService?.set('showRule', !showRule.value),\n });\n break;\n case 'guides':\n config.push({\n type: 'button',\n className: 'guides',\n icon: markRaw(Grid),\n tooltip: showGuides.value ? '隐藏参考线' : '显示参考线',\n handler: () => uiService?.set('showGuides', !showGuides.value),\n });\n break;\n default:\n config.push({\n type: 'text',\n text: item,\n });\n }\n return config;\n};\n\nconst buttons = computed(() => {\n const data: {\n [ColumnLayout.LEFT]: (MenuButton | MenuComponent)[];\n [ColumnLayout.CENTER]: (MenuButton | MenuComponent)[];\n [ColumnLayout.RIGHT]: (MenuButton | MenuComponent)[];\n } = {\n [ColumnLayout.LEFT]: [],\n [ColumnLayout.CENTER]: [],\n [ColumnLayout.RIGHT]: [],\n };\n keys.forEach((key) => {\n const items = props.data[key] || [];\n items.forEach((item) => {\n data[key].push(...getConfig(item));\n });\n });\n return data;\n});\n</script>\n","<template>\n <div class=\"`m-editor-props-panel\">\n <slot name=\"props-panel-header\"></slot>\n <m-form\n ref=\"configForm\"\n :class=\"`m-editor-props-panel ${propsPanelSize}`\"\n :popper-class=\"`m-editor-props-panel-popper ${propsPanelSize}`\"\n :size=\"propsPanelSize\"\n :init-values=\"values\"\n :config=\"curFormConfig\"\n @change=\"submit\"\n ></m-form>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, getCurrentInstance, inject, onMounted, ref, watchEffect } from 'vue';\nimport { ElMessage } from 'element-plus';\n\nimport type { FormValue, MForm } from '@tmagic/form';\nimport type { MNode } from '@tmagic/schema';\nimport type StageCore from '@tmagic/stage';\n\nimport type { Services } from '../type';\n\nconst emit = defineEmits(['mounted']);\n\nconst internalInstance = getCurrentInstance();\nconst values = ref<FormValue>({});\nconst configForm = ref<InstanceType<typeof MForm>>();\n// ts类型应该是FormConfig, 但是打包时会出错,所以暂时用any\nconst curFormConfig = ref<any>([]);\nconst services = inject<Services>('services');\nconst node = computed(() => services?.editorService.get<MNode | null>('node'));\nconst propsPanelSize = computed(() => services?.uiService.get('propsPanelSize') || 'small');\nconst stage = computed(() => services?.editorService.get<StageCore>('stage'));\n\nconst init = async () => {\n if (!node.value) {\n curFormConfig.value = [];\n return;\n }\n\n const type = node.value.type || (node.value.items ? 'container' : 'text');\n curFormConfig.value = (await services?.propsService.getPropsConfig(type)) || [];\n values.value = node.value;\n};\n\nwatchEffect(init);\nservices?.propsService.on('props-configs-change', init);\n\nonMounted(() => {\n emit('mounted', internalInstance);\n});\n\nwatchEffect(() => {\n if (configForm.value && stage.value) {\n configForm.value.formState.stage = stage.value;\n }\n});\n\nconst submit = async () => {\n try {\n const values = await configForm.value?.submitForm();\n services?.editorService.update(values);\n } catch (e: any) {\n console.error(e);\n ElMessage.closeAll();\n ElMessage.error({\n duration: 10000,\n showClose: true,\n message: e.message,\n dangerouslyUseHTMLString: true,\n });\n }\n};\n\ndefineExpose({ submit });\n</script>\n","<template>\n <el-scrollbar>\n <slot name=\"component-list-panel-header\"></slot>\n\n <el-collapse class=\"ui-component-panel\" :model-value=\"collapseValue\">\n <el-input\n prefix-icon=\"el-icon-search\"\n placeholder=\"输入关键字进行过滤\"\n class=\"search-input\"\n size=\"small\"\n clearable\n v-model=\"searchText\"\n />\n <template v-for=\"(group, index) in list\">\n <el-collapse-item v-if=\"group.items && group.items.length\" :key=\"index\" :name=\"index\">\n <template #title><i class=\"el-icon-s-grid\"></i>{{ group.title }}</template>\n <div\n v-for=\"item in group.items\"\n class=\"component-item\"\n draggable=\"true\"\n :key=\"item.type\"\n @click=\"appendComponent(item)\"\n @dragstart=\"dragstartHandler(item, $event)\"\n @dragend=\"dragendHandler\"\n @drag=\"dragHandler\"\n >\n <slot name=\"component-list-item\" :component=\"item\">\n <MIcon :icon=\"item.icon\"></MIcon>\n\n <el-tooltip effect=\"dark\" placement=\"bottom\" :content=\"item.text\">\n <span>{{ item.text }}</span>\n </el-tooltip>\n </slot>\n </div>\n </el-collapse-item>\n </template>\n </el-collapse>\n </el-scrollbar>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, ref } from 'vue';\nimport serialize from 'serialize-javascript';\n\nimport type StageCore from '@tmagic/stage';\nimport { removeClassNameByClassName } from '@tmagic/utils';\n\nimport MIcon from '../../components/Icon.vue';\nimport type { ComponentGroup, ComponentItem, Services, StageOptions } from '../../type';\n\nconst searchText = ref('');\nconst services = inject<Services>('services');\nconst stageOptions = inject<StageOptions>('stageOptions');\n\nconst stage = computed(() => services?.editorService.get<StageCore>('stage'));\nconst list = computed(() =>\n services?.componentListService.getList().map((group: ComponentGroup) => ({\n ...group,\n items: group.items.filter((item: ComponentItem) => item.text.includes(searchText.value)),\n })),\n);\nconst collapseValue = computed(() =>\n Array(list.value?.length)\n .fill(1)\n .map((x, i) => i),\n);\n\nlet timeout: NodeJS.Timeout | undefined;\nlet clientX: number;\nlet clientY: number;\n\nconst appendComponent = ({ text, type, data = {} }: ComponentItem): void => {\n services?.editorService.add({\n name: text,\n type,\n ...data,\n });\n};\n\nconst dragstartHandler = ({ text, type, data = {} }: ComponentItem, e: DragEvent) => {\n if (e.dataTransfer) {\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData(\n 'data',\n serialize({\n name: text,\n type,\n ...data,\n }).replace(/\"(\\w+)\":\\s/g, '$1: '),\n );\n }\n};\n\nconst dragendHandler = () => {\n if (timeout) {\n globalThis.clearTimeout(timeout);\n timeout = undefined;\n }\n const doc = stage.value?.renderer.contentWindow?.document;\n if (doc && stageOptions) {\n removeClassNameByClassName(doc, stageOptions.containerHighlightClassName);\n }\n clientX = 0;\n clientY = 0;\n};\n\nconst dragHandler = (e: DragEvent) => {\n if (e.clientX !== clientX || e.clientY !== clientY) {\n clientX = e.clientX;\n clientY = e.clientY;\n if (timeout) {\n globalThis.clearTimeout(timeout);\n timeout = undefined;\n }\n return;\n }\n\n if (timeout || !stage.value) return;\n\n timeout = stage.value.getAddContainerHighlightClassNameTimeout(e);\n};\n</script>\n","<template>\n <div v-if=\"menuData.length && visible\" class=\"magic-editor-content-menu\" ref=\"menu\" :style=\"menuStyle\">\n <div>\n <tool-button\n v-for=\"(item, index) in menuData\"\n event-type=\"mouseup\"\n :data=\"item\"\n :key=\"index\"\n @mouseup=\"hide\"\n @mouseenter=\"showSubMenu(item)\"\n ></tool-button>\n </div>\n <teleport to=\"body\">\n <content-menu\n class=\"sub-menu\"\n ref=\"subMenu\"\n :menu-data=\"subMenuData\"\n :is-sub-menu=\"true\"\n @hide=\"hide\"\n ></content-menu>\n </teleport>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { nextTick, onMounted, onUnmounted, ref } from 'vue';\n\nimport { MenuButton, MenuComponent } from '../type';\n\nimport ToolButton from './ToolButton.vue';\n\nconst props = withDefaults(\n defineProps<{\n menuData?: (MenuButton | MenuComponent)[];\n isSubMenu?: boolean;\n }>(),\n {\n menuData: () => [],\n isSubMenu: false,\n },\n);\n\nconst emit = defineEmits(['hide', 'show']);\n\nconst menu = ref<HTMLDivElement>();\nconst subMenu = ref<any>();\nconst visible = ref(false);\nconst subMenuData = ref<(MenuButton | MenuComponent)[]>([]);\nconst menuStyle = ref({\n left: '0',\n top: '0',\n});\n\nconst hide = () => {\n if (!visible.value) return;\n\n visible.value = false;\n subMenu.value?.hide();\n\n emit('hide');\n};\n\nconst hideHandler = (e: MouseEvent) => {\n const target = e.target as HTMLElement | undefined;\n if (!visible.value || !target) {\n return;\n }\n if (menu.value?.contains(target) || subMenu.value?.$el?.contains(target)) {\n return;\n }\n hide();\n};\n\nconst show = (e: MouseEvent) => {\n // 加settimeout是以为,如果菜单中的按钮监听的是mouseup,那么菜单显示出来时鼠标如果正好在菜单上就会马上触发按钮的mouseup\n setTimeout(() => {\n visible.value = true;\n\n nextTick(() => {\n const menuHeight = menu.value?.clientHeight || 0;\n\n let top = e.clientY;\n if (menuHeight + e.clientY > document.body.clientHeight) {\n top = document.body.clientHeight - menuHeight;\n }\n\n menuStyle.value = {\n top: `${top}px`,\n left: `${e.clientX}px`,\n };\n\n emit('show');\n });\n }, 300);\n};\n\nconst showSubMenu = (item: MenuButton | MenuComponent) => {\n const menuItem = item as MenuButton;\n if (typeof item !== 'object' || !menuItem.items?.length) {\n return;\n }\n\n subMenuData.value = menuItem.items;\n if (menu.value) {\n subMenu.value.show({\n clientX: menu.value.offsetLeft + menu.value.clientWidth,\n clientY: menu.value.offsetTop,\n });\n }\n};\n\nonMounted(() => {\n if (props.isSubMenu) return;\n\n globalThis.addEventListener('mousedown', hideHandler, true);\n});\n\nonUnmounted(() => {\n if (props.isSubMenu) return;\n\n globalThis.removeEventListener('mousedown', hideHandler, true);\n});\n\ndefineExpose({\n hide,\n show,\n});\n</script>\n","<template>\n <content-menu :menu-data=\"menuData\" ref=\"menu\" style=\"overflow: initial\"></content-menu>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, markRaw, ref } from 'vue';\nimport { Delete, DocumentCopy, Files, Plus } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport ContentMenu from '../../components/ContentMenu.vue';\nimport type { ComponentGroup, MenuButton, MenuComponent, Services } from '../../type';\n\nexport default defineComponent({\n components: { ContentMenu },\n\n setup() {\n const services = inject<Services>('services');\n const menu = ref<InstanceType<typeof ContentMenu>>();\n const node = computed(() => services?.editorService.get('node'));\n const isRoot = computed(() => node.value?.type === NodeType.ROOT);\n const isPage = computed(() => node.value?.type === NodeType.PAGE);\n const componentList = computed(() => services?.componentListService.getList() || []);\n\n const layerContentMenu = inject<(MenuComponent | MenuButton)[]>('layerContentMenu', []);\n\n const createMenuItems = (group: ComponentGroup): MenuButton[] =>\n group.items.map((component) => ({\n text: component.text,\n type: 'button',\n icon: component.icon,\n handler: () => {\n services?.editorService.add({\n name: component.text,\n type: component.type,\n ...(component.data || {}),\n });\n },\n }));\n\n const getSubMenuData = computed<MenuButton[]>(() => {\n if (node.value?.type === 'tabs') {\n return [\n {\n text: '标签页',\n type: 'button',\n icon: Files,\n handler: () => {\n services?.editorService.add({\n type: 'tab-pane',\n });\n },\n },\n ];\n }\n if (node.value?.items) {\n return (\n componentList.value.reduce(\n (subMenuData: MenuButton[], group: ComponentGroup, index) =>\n subMenuData.concat(\n createMenuItems(group),\n index < componentList.value.length - 1\n ? [\n {\n type: 'divider',\n direction: 'horizontal',\n },\n ]\n : [],\n ),\n [],\n ) || []\n );\n }\n return [];\n });\n\n return {\n menu,\n menuData: computed<(MenuButton | MenuComponent)[]>(() => [\n {\n type: 'button',\n text: '新增',\n icon: markRaw(Plus),\n display: () => node.value?.items,\n items: getSubMenuData.value,\n },\n {\n type: 'button',\n text: '复制',\n icon: markRaw(DocumentCopy),\n display: () => !isRoot.value,\n handler: () => {\n node.value && services?.editorService.copy(node.value);\n },\n },\n {\n type: 'button',\n text: '删除',\n icon: markRaw(Delete),\n display: () => !isRoot.value && !isPage.value,\n handler: () => {\n node.value && services?.editorService.remove(node.value);\n },\n },\n ...layerContentMenu,\n ]),\n\n show(e: MouseEvent) {\n menu.value?.show(e);\n },\n };\n },\n});\n</script>\n","<template>\n <el-scrollbar class=\"magic-editor-layer-panel\">\n <slot name=\"layer-panel-header\"></slot>\n\n <el-input\n class=\"filterInput\"\n size=\"small\"\n placeholder=\"输入关键字进行过滤\"\n clearable\n v-model=\"filterText\"\n @change=\"filterTextChangeHandler\"\n ></el-input>\n\n <el-tree\n v-if=\"values.length\"\n ref=\"tree\"\n node-key=\"id\"\n empty-text=\"页面空荡荡的\"\n draggable\n :default-expanded-keys=\"expandedKeys\"\n :load=\"loadItems\"\n :data=\"values\"\n :expand-on-click-node=\"false\"\n :highlight-current=\"true\"\n :props=\"{\n children: 'items',\n }\"\n :filter-node-method=\"filterNode\"\n :allow-drop=\"allowDrop\"\n @node-click=\"clickHandler\"\n @node-contextmenu=\"contextmenu\"\n @node-drag-end=\"handleDragEnd\"\n @node-collapse=\"handleCollapse\"\n @node-expand=\"handleExpand\"\n >\n <template #default=\"{ node, data }\">\n <div\n :id=\"data.id\"\n class=\"cus-tree-node\"\n @mousedown=\"toggleClickFlag\"\n @mouseup=\"toggleClickFlag\"\n @mouseenter=\"highlightHandler(data)\"\n :class=\"{ 'cus-tree-node-hover': canHighlight && data.id === highlightNode?.id }\"\n >\n <slot name=\"layer-node-content\" :node=\"node\" :data=\"data\">\n <span>\n {{ `${data.name} (${data.id})` }}\n </span>\n </slot>\n </div>\n </template>\n </el-tree>\n\n <teleport to=\"body\">\n <layer-menu ref=\"menu\"></layer-menu>\n </teleport>\n </el-scrollbar>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, Ref, ref, watchEffect } from 'vue';\nimport type { ElTree } from 'element-plus';\nimport { throttle } from 'lodash-es';\n\nimport type { Id, MNode, MPage } from '@tmagic/schema';\nimport { MContainer, NodeType } from '@tmagic/schema';\nimport StageCore from '@tmagic/stage';\n\nimport type { EditorService } from '../../services/editor';\nimport type { Services } from '../../type';\nimport { Layout } from '../../type';\n\nimport LayerMenu from './LayerMenu.vue';\n\nconst throttleTime = 150;\n\nconst select = async (data: MNode, editorService?: EditorService) => {\n if (!data.id) {\n throw new Error('没有id');\n }\n\n await editorService?.select(data);\n editorService?.get<StageCore>('stage')?.select(data.id);\n};\n\nconst highlight = (data: MNode, editorService?: EditorService) => {\n if (!data?.id) {\n throw new Error('没有id');\n }\n editorService?.highlight(data);\n editorService?.get<StageCore>('stage')?.highlight(data.id);\n};\n\nconst useDrop = (tree: Ref<InstanceType<typeof ElTree> | undefined>, editorService?: EditorService) => ({\n allowDrop: (draggingNode: any, dropNode: any, type: string): boolean => {\n const { data } = dropNode || {};\n const { data: ingData } = draggingNode;\n\n const { type: ingType } = ingData;\n\n if (ingType !== NodeType.PAGE && data.type === NodeType.PAGE) return false;\n if (ingType === NodeType.PAGE && data.type !== NodeType.PAGE) return false;\n if (!data || !data.type) return false;\n if (['prev', 'next'].includes(type)) return true;\n if (data.items || data.type === 'container') return true;\n\n return false;\n },\n\n async handleDragEnd(e: any) {\n if (!tree.value) return;\n const { data: node } = e;\n const parent = editorService?.getParentById(node.id, false) as MContainer;\n const layout = await editorService?.getLayout(parent);\n node.style.position = layout;\n if (layout === Layout.RELATIVE) {\n node.style.top = 0;\n node.style.left = 0;\n }\n const { data } = tree.value;\n const [page] = data as [MPage];\n editorService?.update(page);\n },\n});\n\nconst useStatus = (tree: Ref<InstanceType<typeof ElTree> | undefined>, editorService?: EditorService) => {\n const node = ref<MNode>();\n const page = computed(() => editorService?.get('page'));\n const expandedKeys = new Map<Id, Id>();\n\n const expandNodes = () => {\n expandedKeys.forEach((key) => {\n if (!tree.value) return;\n tree.value.getNode(key)?.expand();\n });\n };\n\n watchEffect(() => {\n if (!tree.value) return;\n if (!editorService) return;\n node.value = editorService.get('node');\n\n if (!node.value) return;\n\n tree.value.setCurrentKey(node.value.id, true);\n\n const parent = editorService.get('parent');\n if (!parent?.id) return;\n\n const treeNode = tree.value.getNode(parent.id);\n treeNode?.updateChildren();\n\n setTimeout(() => {\n tree.value &&\n Object.entries(tree.value.store.nodesMap).forEach(([id, node]) => {\n if (node.expanded && node.data.items) {\n expandedKeys.set(id, id);\n }\n });\n expandNodes();\n });\n });\n\n return {\n values: computed(() => (page.value ? [page.value] : [])),\n\n loadItems: (node: any, resolve: Function) => {\n if (Array.isArray(node.data)) {\n return resolve(node.data);\n }\n if (Array.isArray(node.data?.items)) {\n return resolve(node.data?.items);\n }\n resolve([]);\n },\n\n highlightNode: computed(() => editorService?.get('highlightNode')),\n clickNode: node,\n expandedKeys: computed(() => (node.value ? [node.value.id] : [])),\n\n handleCollapse: (data: MNode) => {\n expandedKeys.delete(data.id);\n },\n\n handleExpand: (data: MNode) => {\n const parent = editorService?.getParentById(data.id);\n if (!parent?.id) return;\n expandedKeys.set(parent.id, parent.id);\n },\n };\n};\n\nconst useFilter = (tree: Ref<InstanceType<typeof ElTree> | undefined>) => ({\n filterText: ref(''),\n\n filterNode: (value: string, data: MNode): boolean => {\n if (!value) {\n return true;\n }\n let name = '';\n if (data.name) {\n name = data.name;\n } else if (data.items) {\n name = 'container';\n }\n return `${data.id}${name}${data.type}`.indexOf(value) !== -1;\n },\n\n filterTextChangeHandler(val: string) {\n tree.value?.filter(val);\n },\n});\n\nexport default defineComponent({\n name: 'magic-editor-layer-panel',\n\n components: { LayerMenu },\n\n setup() {\n const services = inject<Services>('services');\n const tree = ref<InstanceType<typeof ElTree>>();\n const menu = ref<InstanceType<typeof LayerMenu>>();\n const clicked = ref(false);\n const editorService = services?.editorService;\n const highlightHandler = throttle((data: MNode) => {\n highlight(data, editorService);\n }, throttleTime);\n\n const toggleClickFlag = () => {\n clicked.value = !clicked.value;\n };\n\n const statusData = useStatus(tree, editorService);\n const canHighlight = computed(\n () => statusData.highlightNode.value?.id !== statusData.clickNode.value?.id && !clicked.value,\n );\n\n editorService?.on('remove', () => {\n setTimeout(() => {\n tree.value?.getNode(editorService.get('node').id)?.updateChildren();\n }, 0);\n });\n\n return {\n tree,\n menu,\n ...statusData,\n ...useDrop(tree, editorService),\n ...useFilter(tree),\n\n highlightHandler,\n toggleClickFlag,\n canHighlight,\n\n clickHandler(data: MNode): void {\n if (services?.uiService.get<boolean>('uiSelectMode')) {\n document.dispatchEvent(new CustomEvent('ui-select', { detail: data }));\n return;\n }\n tree.value?.setCurrentKey(data.id);\n select(data, editorService);\n },\n\n async contextmenu(event: MouseEvent, data: MNode) {\n event.preventDefault();\n await select(data, editorService);\n menu.value?.show(event);\n },\n };\n },\n});\n</script>\n","<template>\n <el-tab-pane v-if=\"config\" :name=\"config.text\">\n <template #label>\n <div :key=\"config.text\">\n <m-icon v-if=\"config.icon\" :icon=\"config.icon\"></m-icon>\n <div v-if=\"config.text\" class=\"magic-editor-tab-panel-title\">{{ config.text }}</div>\n </div>\n </template>\n\n <component :is=\"config.component\" v-bind=\"config.props || {}\" v-on=\"config?.listeners || {}\">\n <template #component-list-panel-header v-if=\"data === 'component-list' || config.slots?.componentListPanelHeader\">\n <slot v-if=\"data === 'component-list'\" name=\"component-list-panel-header\"></slot>\n <component v-else-if=\"config.slots?.componentListPanelHeader\" :is=\"config.slots.componentListPanelHeader\" />\n </template>\n\n <template\n #component-list-item=\"{ component }\"\n v-if=\"data === 'component-list' || config.slots?.componentListItem\"\n >\n <slot v-if=\"data === 'component-list'\" name=\"component-list-item\" :component=\"component\"></slot>\n <component\n v-else-if=\"config.slots?.componentListItem\"\n :is=\"config.slots.componentListItem\"\n :component=\"component\"\n />\n </template>\n\n <template #layer-panel-header v-if=\"data === 'layer' || config.slots?.layerPanelHeader\">\n <slot v-if=\"data === 'layer'\" name=\"layer-panel-header\"></slot>\n <component v-else-if=\"config.slots?.layerPanelHeader\" :is=\"config.slots.layerPanelHeader\" />\n </template>\n\n <template #layer-node-content=\"{ data, node }\" v-if=\"config.slots?.layerNodeContent\">\n <component :is=\"config.slots?.layerNodeContent\" :data=\"data\" :node=\"node\" />\n </template>\n </component>\n </el-tab-pane>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, PropType } from 'vue';\nimport { Coin, Files } from '@element-plus/icons-vue';\n\nimport MIcon from '../../components/Icon.vue';\nimport { SideComponent, SideItem } from '../../type';\n\nimport ComponentListPanel from './ComponentListPanel.vue';\nimport LayerPanel from './LayerPanel.vue';\n\nexport default defineComponent({\n components: { MIcon },\n\n props: {\n data: {\n type: [Object, String] as PropType<SideItem>,\n },\n },\n\n setup(props) {\n return {\n config: computed<SideComponent | undefined>(() => {\n if (typeof props.data !== 'string') {\n return props.data;\n }\n\n switch (props.data) {\n case 'component-list':\n return {\n type: 'component',\n icon: Coin,\n text: '组件',\n component: ComponentListPanel,\n slots: {},\n };\n case 'layer':\n return {\n type: 'component',\n icon: Files,\n text: '已选组件',\n component: LayerPanel,\n slots: {},\n };\n default:\n return undefined;\n }\n }),\n };\n },\n});\n</script>\n","<template>\n <el-tabs\n v-if=\"data.type === 'tabs' && data.items.length\"\n class=\"m-editor-sidebar\"\n v-model=\"activeTabName\"\n type=\"card\"\n tab-position=\"left\"\n >\n <tab-pane v-for=\"(item, index) in data.items\" :key=\"index\" :data=\"item\">\n <template #layer-panel-header v-if=\"item === 'layer'\">\n <slot name=\"layer-panel-header\"></slot>\n </template>\n\n <template #component-list-panel-header v-if=\"item === 'component-list'\">\n <slot name=\"component-list-panel-header\"></slot>\n </template>\n\n <template #component-list-item=\"{ component }\" v-if=\"item === 'component-list'\">\n <slot name=\"component-list-item\" :component=\"component\"></slot>\n </template>\n </tab-pane>\n </el-tabs>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType, ref, watch } from 'vue';\n\nimport { SideBarData } from '../../type';\n\nimport TabPane from './TabPane.vue';\n\nexport default defineComponent({\n components: { TabPane },\n\n name: 'm-sidebar',\n\n props: {\n data: {\n type: Object as PropType<SideBarData>,\n default: () => ({ type: 'tabs', status: '组件', items: ['component-list', 'layer'] }),\n },\n },\n\n setup(props) {\n const activeTabName = ref(props.data?.status);\n\n watch(\n () => props.data?.status,\n (status) => {\n activeTabName.value = status || '0';\n },\n );\n\n return {\n activeTabName,\n };\n },\n});\n</script>\n","<template>\n <div class=\"m-editor-page-bar\" ref=\"pageBar\">\n <div\n v-if=\"showAddPageButton\"\n id=\"m-editor-page-bar-add-icon\"\n class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\"\n @click=\"addPage\"\n >\n <Icon :icon=\"Plus\"></Icon>\n </div>\n <div v-else style=\"width: 21px\"></div>\n <div v-if=\"canScroll\" class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\" @click=\"scroll('left')\">\n <Icon :icon=\"ArrowLeftBold\"></Icon>\n </div>\n <div\n v-if=\"pageLength\"\n class=\"m-editor-page-bar-items\"\n ref=\"itemsContainer\"\n :style=\"`width: ${itemsContainerWidth}px`\"\n >\n <slot></slot>\n </div>\n <div v-if=\"canScroll\" class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\" @click=\"scroll('right')\">\n <Icon :icon=\"ArrowRightBold\"></Icon>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, nextTick, onMounted, onUnmounted, ref, toRaw, watch } from 'vue';\nimport { ArrowLeftBold, ArrowRightBold, Plus } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport Icon from '../../components/Icon.vue';\nimport type { Services } from '../../type';\nimport { generatePageNameByApp } from '../../utils/editor';\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\nconst uiService = services?.uiService;\n\nconst itemsContainer = ref<HTMLDivElement>();\nconst canScroll = ref(false);\n\nconst showAddPageButton = computed(() => uiService?.get('showAddPageButton'));\n\nconst itemsContainerWidth = ref(0);\n\nconst setCanScroll = () => {\n // 减去新增、左移、右移三个按钮的宽度\n // 37 = icon width 16 + padding 10 * 2 + border-right 1\n itemsContainerWidth.value = (pageBar.value?.clientWidth || 0) - 37 * 2 - (showAddPageButton.value ? 37 : 21);\n\n nextTick(() => {\n if (itemsContainer.value) {\n canScroll.value = itemsContainer.value.scrollWidth - itemsContainerWidth.value > 1;\n }\n });\n};\n\nconst resizeObserver = new ResizeObserver(() => {\n setCanScroll();\n});\n\nconst pageBar = ref<HTMLDivElement>();\nonMounted(() => {\n pageBar.value && resizeObserver.observe(pageBar.value);\n});\n\nonUnmounted(() => {\n resizeObserver.disconnect();\n});\n\nlet translateLeft = 0;\n\nconst scroll = (type: 'left' | 'right' | 'start' | 'end') => {\n if (!itemsContainer.value) return;\n\n const maxScrollLeft = itemsContainer.value.scrollWidth - itemsContainerWidth.value;\n\n if (type === 'left') {\n translateLeft += 100;\n\n if (translateLeft > 0) {\n translateLeft = 0;\n }\n } else if (type === 'right') {\n translateLeft -= 100;\n\n if (-translateLeft > maxScrollLeft) {\n translateLeft = -maxScrollLeft;\n }\n } else if (type === 'start') {\n translateLeft = 0;\n } else if (type === 'end') {\n translateLeft = -maxScrollLeft;\n }\n\n itemsContainer.value.style.transform = `translate(${translateLeft}px, 0px)`;\n};\n\nconst pageLength = computed(() => editorService?.get<number>('pageLength'));\n\nwatch(pageLength, (length = 0, preLength = 0) => {\n setTimeout(() => {\n setCanScroll();\n if (length < preLength) {\n scroll('start');\n } else {\n scroll('end');\n }\n });\n});\n\nconst addPage = () => {\n if (!editorService) return;\n const pageConfig = {\n type: NodeType.PAGE,\n name: generatePageNameByApp(toRaw(editorService.get('root'))),\n };\n editorService.add(pageConfig);\n};\n</script>\n","<template>\n <PageBarScrollContainer>\n <div\n v-for=\"item in (root && root.items) || []\"\n class=\"m-editor-page-bar-item\"\n :key=\"item.key\"\n :class=\"{ active: page?.id === item.id }\"\n @click=\"switchPage(item)\"\n >\n <div class=\"m-editor-page-bar-title\">\n <slot name=\"page-bar-title\" :page=\"item\">\n <el-tooltip effect=\"dark\" placement=\"top-start\" :content=\"item.name\">\n <span>{{ item.name || item.id }}</span>\n </el-tooltip>\n </slot>\n </div>\n\n <el-popover popper-class=\"page-bar-popover\" placement=\"top\" :width=\"160\" trigger=\"hover\">\n <div>\n <slot name=\"page-bar-popover\" :page=\"item\">\n <tool-button\n :data=\"{\n type: 'button',\n text: '复制',\n icon: DocumentCopy,\n handler: () => copy(item),\n }\"\n ></tool-button>\n <tool-button\n :data=\"{\n type: 'button',\n text: '删除',\n icon: Delete,\n handler: () => remove(item),\n }\"\n ></tool-button>\n </slot>\n </div>\n <template #reference>\n <el-icon class=\"m-editor-page-bar-menu-icon\">\n <CaretBottom></CaretBottom>\n </el-icon>\n </template>\n </el-popover>\n </div>\n </PageBarScrollContainer>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue';\nimport { CaretBottom, Delete, DocumentCopy } from '@element-plus/icons-vue';\n\nimport type { MApp, MPage } from '@tmagic/schema';\n\nimport ToolButton from '../../components/ToolButton.vue';\nimport type { Services } from '../../type';\n\nimport PageBarScrollContainer from './PageBarScrollContainer.vue';\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\n\nconst root = computed(() => editorService?.get<MApp>('root'));\n\nconst page = computed(() => editorService?.get('page'));\n\nconst switchPage = (page: MPage) => {\n editorService?.select(page);\n};\n\nconst copy = (node: MPage) => {\n node && editorService?.copy(node);\n editorService?.paste({\n left: 0,\n top: 0,\n });\n};\n\nconst remove = (node: MPage) => {\n editorService?.remove(node);\n};\n</script>\n","import { EventEmitter } from 'events';\n\ninterface ScrollViewerOptions {\n container: HTMLDivElement;\n target: HTMLDivElement;\n zoom: number;\n}\n\nexport class ScrollViewer extends EventEmitter {\n private container: HTMLDivElement;\n private target: HTMLDivElement;\n private zoom = 1;\n\n private scrollLeft = 0;\n private scrollTop = 0;\n\n private scrollHeight = 0;\n private scrollWidth = 0;\n\n private width = 0;\n private height = 0;\n\n private translateXCorrectionValue = 0;\n private translateYCorrectionValue = 0;\n\n private resizeObserver = new ResizeObserver(() => {\n this.setSize();\n this.setScrollSize();\n });\n\n constructor(options: ScrollViewerOptions) {\n super();\n\n this.container = options.container;\n this.target = options.target;\n this.zoom = options.zoom;\n\n this.container.addEventListener('wheel', this.wheelHandler, false);\n\n this.setSize();\n this.setScrollSize();\n this.resizeObserver.observe(this.container);\n this.resizeObserver.observe(this.target);\n }\n\n public destroy() {\n this.resizeObserver.disconnect();\n this.container.removeEventListener('wheel', this.wheelHandler, false);\n this.removeAllListeners();\n }\n\n public setZoom(zoom: number) {\n this.zoom = zoom;\n this.setScrollSize();\n }\n\n public scrollTo({ left, top }: { left?: number; top?: number }) {\n if (typeof left !== 'undefined') {\n this.scrollLeft = left;\n }\n\n if (typeof top !== 'undefined') {\n this.scrollTop = top;\n }\n\n const translateX = -this.scrollLeft + this.translateXCorrectionValue;\n const translateY = -this.scrollTop + this.translateYCorrectionValue;\n this.target.style.transform = `translate(${translateX}px, ${translateY}px)`;\n }\n\n private wheelHandler = (event: WheelEvent) => {\n const { deltaX, deltaY, currentTarget } = event;\n\n if (currentTarget !== this.container) return;\n\n let top: number | undefined;\n if (this.scrollHeight > this.height) {\n top = this.scrollTop + this.getPos(deltaY, this.scrollTop, this.scrollHeight, this.height);\n }\n\n let left: number | undefined;\n if (this.scrollWidth > this.width) {\n left = this.scrollLeft + this.getPos(deltaX, this.scrollLeft, this.scrollWidth, this.width);\n }\n\n this.scrollTo({ left, top });\n this.emit('scroll', {\n scrollLeft: this.scrollLeft,\n scrollTop: this.scrollTop,\n scrollHeight: this.scrollHeight,\n scrollWidth: this.scrollWidth,\n });\n };\n\n private getPos(delta: number, scrollPos: number, scrollSize: number, size: number) {\n let pos = 0;\n if (delta < 0) {\n if (scrollPos > 0) {\n pos = Math.max(delta, -scrollPos);\n }\n } else {\n const leftPos = scrollSize - size - scrollPos;\n if (leftPos > 0) {\n pos = Math.min(delta, leftPos);\n }\n }\n return pos;\n }\n\n private setScrollSize = () => {\n const targetRect = this.target.getBoundingClientRect();\n this.scrollWidth = targetRect.width * this.zoom + 100;\n const targetMarginTop = Number(this.target.style.marginTop) || 0;\n this.scrollHeight = (targetRect.height + targetMarginTop) * this.zoom + 100;\n\n let left: number | undefined;\n let top: number | undefined;\n if (this.scrollWidth < this.width) {\n left = 0;\n this.translateXCorrectionValue = 0;\n } else {\n this.translateXCorrectionValue = (this.scrollWidth - this.width) / 2;\n }\n if (this.scrollHeight < this.height) {\n top = 0;\n this.translateYCorrectionValue = 0;\n } else {\n this.translateYCorrectionValue = (this.scrollHeight - this.height) / 2;\n }\n\n this.scrollTo({\n left,\n top,\n });\n\n this.emit('scroll', {\n scrollLeft: this.scrollLeft,\n scrollTop: this.scrollTop,\n scrollHeight: this.scrollHeight,\n scrollWidth: this.scrollWidth,\n });\n };\n\n private setSize = () => {\n const { width, height } = this.container.getBoundingClientRect();\n this.width = width;\n this.height = height;\n };\n}\n","<template>\n <div ref=\"bar\" class=\"m-editor-scroll-bar\" :class=\"isHorizontal ? 'horizontal' : 'vertical'\">\n <div ref=\"thumb\" class=\"m-editor-scroll-bar-thumb\" :style=\"thumbStyle\"></div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onMounted, onUnmounted, ref } from 'vue';\nimport Gesto from 'gesto';\n\nconst props = defineProps<{\n size: number;\n scrollSize: number;\n isHorizontal?: boolean;\n pos: number;\n}>();\n\nconst emit = defineEmits(['scroll']);\n\nconst bar = ref<HTMLDivElement>();\nconst thumb = ref<HTMLDivElement>();\n\nconst thumbSize = computed(() => props.size * (props.size / props.scrollSize));\nconst thumbPos = computed(() => (props.pos / props.scrollSize) * props.size);\n\nconst thumbStyle = computed(() => ({\n [props.isHorizontal ? 'width' : 'height']: `${thumbSize.value}px`,\n transform: `translate${props.isHorizontal ? 'X' : 'Y'}(${thumbPos.value}px)`,\n}));\n\nlet gesto: Gesto;\n\nonMounted(() => {\n if (!thumb.value) return;\n const thumbEl = thumb.value;\n gesto = new Gesto(thumbEl, {\n container: window,\n });\n\n gesto\n .on('dragStart', (e) => {\n e.inputEvent.stopPropagation();\n e.inputEvent.preventDefault();\n })\n .on('drag', (e) => {\n scrollBy(getDelta(e));\n });\n\n bar.value?.addEventListener('wheel', wheelHandler, false);\n});\n\nonUnmounted(() => {\n if (gesto) gesto.off();\n bar.value?.removeEventListener('wheel', wheelHandler, false);\n});\n\nconst wheelHandler = (e: WheelEvent) => {\n const delta = props.isHorizontal ? e.deltaX : e.deltaY;\n if (delta) {\n e.preventDefault();\n }\n scrollBy(delta);\n};\n\nconst getDelta = (e: any) => {\n const ratio = (props.isHorizontal ? e.deltaX : e.deltaY) / props.size;\n return props.scrollSize * ratio;\n};\n\nconst scrollBy = (delta: number) => {\n if (delta < 0) {\n if (props.pos <= 0) {\n emit('scroll', 0);\n } else {\n emit('scroll', -Math.min(-delta, props.pos));\n }\n } else {\n const leftPos = props.size - (thumbSize.value + thumbPos.value);\n if (leftPos <= 0) {\n emit('scroll', 0);\n } else {\n emit('scroll', Math.min(delta, leftPos));\n }\n }\n};\n</script>\n\n<style lang=\"scss\">\n.m-editor-scroll-bar {\n position: absolute;\n background-color: transparent;\n opacity: 0.3;\n transition: background-color 0.2s linear, opacity 0.2s linear;\n\n .m-editor-scroll-bar-thumb {\n background-color: #aaa;\n border-radius: 6px;\n position: absolute;\n }\n\n &.horizontal {\n width: 100%;\n height: 15px;\n bottom: 0;\n\n .m-editor-scroll-bar-thumb {\n height: 6px;\n transition: background-color 0.2s linear, height 0.2s ease-in-out;\n bottom: 2px;\n }\n }\n\n &.vertical {\n height: 100%;\n width: 15px;\n right: 5px;\n\n .m-editor-scroll-bar-thumb {\n width: 6px;\n transition: background-color 0.2s linear, width 0.2s ease-in-out;\n right: 2px;\n }\n }\n\n &:hover,\n &:focus {\n background-color: #eee;\n opacity: 0.9;\n\n .m-editor-scroll-bar-thumb {\n background-color: #999;\n }\n\n &.horizontal {\n .m-editor-scroll-bar-thumb {\n height: 11px;\n }\n }\n\n &.vertical {\n .m-editor-scroll-bar-thumb {\n width: 11px;\n }\n }\n }\n}\n</style>\n","<template>\n <div class=\"m-editor-scroll-viewer-container\" ref=\"container\">\n <div ref=\"el\" :style=\"style\">\n <slot></slot>\n </div>\n\n <ScrollBar\n v-if=\"scrollHeight > wrapHeight\"\n :scroll-size=\"scrollHeight\"\n :size=\"wrapHeight\"\n :pos=\"vOffset\"\n @scroll=\"vScrollHandler\"\n ></ScrollBar>\n <ScrollBar\n v-if=\"scrollWidth > wrapWidth\"\n :is-horizontal=\"true\"\n :scroll-size=\"scrollWidth\"\n :pos=\"hOffset\"\n :size=\"wrapWidth\"\n @scroll=\"hScrollHandler\"\n ></ScrollBar>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onMounted, onUnmounted, ref, watch } from 'vue';\n\nimport { ScrollViewerEvent } from '../type';\nimport { ScrollViewer } from '../utils/scroll-viewer';\n\nimport ScrollBar from './ScrollBar.vue';\n\nconst props = withDefaults(\n defineProps<{\n width?: number;\n height?: number;\n wrapWidth?: number;\n wrapHeight?: number;\n zoom?: number;\n }>(),\n {\n width: 0,\n height: 0,\n wrapWidth: 0,\n wrapHeight: 0,\n zoom: 1,\n },\n);\n\nconst container = ref<HTMLDivElement>();\nconst el = ref<HTMLDivElement>();\nconst style = computed(\n () => `\n width: ${props.width}px;\n height: ${props.height}px;\n position: absolute;\n margin-top: 30px;\n `,\n);\n\nconst scrollWidth = ref(0);\nconst scrollHeight = ref(0);\n\nlet scrollViewer: ScrollViewer;\n\nonMounted(() => {\n if (!container.value || !el.value) return;\n scrollViewer = new ScrollViewer({\n container: container.value,\n target: el.value,\n zoom: props.zoom,\n });\n\n scrollViewer.on('scroll', (data: ScrollViewerEvent) => {\n hOffset.value = data.scrollLeft;\n vOffset.value = data.scrollTop;\n scrollWidth.value = data.scrollWidth;\n scrollHeight.value = data.scrollHeight;\n });\n});\n\nonUnmounted(() => {\n scrollViewer.destroy();\n});\n\nwatch(\n () => props.zoom,\n () => {\n scrollViewer.setZoom(props.zoom);\n },\n);\n\nconst vOffset = ref(0);\nconst vScrollHandler = (delta: number) => {\n vOffset.value += delta;\n scrollViewer.scrollTo({\n top: vOffset.value,\n });\n};\nconst hOffset = ref(0);\nconst hScrollHandler = (delta: number) => {\n hOffset.value += delta;\n scrollViewer.scrollTo({\n left: hOffset.value,\n });\n};\n\ndefineExpose({\n container,\n});\n</script>\n","<template>\n <content-menu :menu-data=\"menuData\" ref=\"menu\"></content-menu>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, markRaw, reactive, ref, watch } from 'vue';\nimport { Bottom, Delete, DocumentCopy, Top } from '@element-plus/icons-vue';\n\nimport { MNode, NodeType } from '@tmagic/schema';\nimport StageCore from '@tmagic/stage';\nimport { isPage } from '@tmagic/utils';\n\nimport ContentMenu from '../../components/ContentMenu.vue';\nimport storageService from '../../services/storage';\nimport { LayerOffset, Layout, MenuButton, MenuComponent, Services } from '../../type';\nimport { COPY_STORAGE_KEY } from '../../utils/editor';\n\nconst props = withDefaults(defineProps<{ isMultiSelect?: boolean }>(), { isMultiSelect: false });\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\nconst menu = ref<InstanceType<typeof ContentMenu>>();\nconst canPaste = ref(false);\nconst canCenter = ref(false);\n\nconst node = computed(() => editorService?.get<MNode>('node'));\nconst nodes = computed(() => editorService?.get<MNode[]>('nodes'));\nconst parent = computed(() => editorService?.get('parent'));\nconst stage = computed(() => editorService?.get<StageCore>('stage'));\n\nconst stageContentMenu = inject<(MenuButton | MenuComponent)[]>('stageContentMenu', []);\n\nconst menuData = reactive<(MenuButton | MenuComponent)[]>([\n {\n type: 'button',\n text: '水平居中',\n display: () => canCenter.value,\n handler: () => {\n if (!nodes.value) return;\n editorService?.alignCenter(nodes.value);\n },\n },\n {\n type: 'button',\n text: '复制',\n icon: markRaw(DocumentCopy),\n handler: () => {\n nodes.value && editorService?.copy(nodes.value);\n canPaste.value = true;\n },\n },\n {\n type: 'button',\n text: '粘贴',\n display: () => canPaste.value,\n handler: () => {\n const rect = menu.value?.$el.getBoundingClientRect();\n const parentRect = stage.value?.container?.getBoundingClientRect();\n const initialLeft = (rect?.left || 0) - (parentRect?.left || 0);\n const initialTop = (rect?.top || 0) - (parentRect?.top || 0);\n\n if (!nodes.value || nodes.value.length === 0) return;\n editorService?.paste({ left: initialLeft, top: initialTop });\n },\n },\n {\n type: 'divider',\n direction: 'horizontal',\n display: () => {\n if (!node.value) return false;\n return !isPage(node.value);\n },\n },\n {\n type: 'button',\n text: '上移一层',\n icon: markRaw(Top),\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(1);\n },\n },\n {\n type: 'button',\n text: '下移一层',\n icon: markRaw(Bottom),\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(-1);\n },\n },\n {\n type: 'button',\n text: '置顶',\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(LayerOffset.TOP);\n },\n },\n {\n type: 'button',\n text: '置底',\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(LayerOffset.BOTTOM);\n },\n },\n {\n type: 'divider',\n direction: 'horizontal',\n display: () => !isPage(node.value) && !props.isMultiSelect,\n },\n {\n type: 'button',\n text: '删除',\n icon: Delete,\n display: () => !isPage(node.value),\n handler: () => {\n nodes.value && editorService?.remove(nodes.value);\n },\n },\n {\n type: 'divider',\n direction: 'horizontal',\n },\n {\n type: 'button',\n text: '清空参考线',\n handler: () => {\n editorService?.get<StageCore>('stage').clearGuides();\n },\n },\n ...stageContentMenu,\n]);\n\nwatch(\n parent,\n async () => {\n if (!parent.value || !editorService) return (canCenter.value = false);\n const layout = await editorService.getLayout(parent.value);\n const isLayoutConform = [Layout.ABSOLUTE, Layout.FIXED].includes(layout);\n const isTypeConform = nodes.value?.every(\n (selectedNode) => ![NodeType.ROOT, NodeType.PAGE, 'pop'].includes(`${selectedNode?.type}`),\n );\n canCenter.value = isLayoutConform && !!isTypeConform;\n },\n { immediate: true },\n);\n\nconst show = async (e: MouseEvent) => {\n menu.value?.show(e);\n const data = await storageService.getItem(COPY_STORAGE_KEY);\n canPaste.value = data !== 'undefined' && !!data;\n};\n\ndefineExpose({ show });\n</script>\n","<template>\n <scroll-viewer\n class=\"m-editor-stage\"\n ref=\"stageWrap\"\n :width=\"stageRect?.width\"\n :height=\"stageRect?.height\"\n :wrap-width=\"stageContainerRect?.width\"\n :wrap-height=\"stageContainerRect?.height\"\n :zoom=\"zoom\"\n >\n <div\n class=\"m-editor-stage-container\"\n ref=\"stageContainer\"\n :style=\"`transform: scale(${zoom});`\"\n @contextmenu=\"contextmenuHandler\"\n @drop=\"dropHandler\"\n @dragover=\"dragoverHandler\"\n ></div>\n <teleport to=\"body\">\n <viewer-menu ref=\"menu\" :is-multi-select=\"isMultiSelect\"></viewer-menu>\n </teleport>\n </scroll-viewer>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, markRaw, onMounted, onUnmounted, ref, toRaw, watch, watchEffect } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport type { MApp, MContainer, MNode, MPage } from '@tmagic/schema';\nimport StageCore, { calcValueByFontsize, getOffset, Runtime } from '@tmagic/stage';\n\nimport ScrollViewer from '../../components/ScrollViewer.vue';\nimport { Layout, Services, StageOptions, StageRect } from '../../type';\nimport { useStage } from '../../utils/stage';\n\nimport ViewerMenu from './ViewerMenu.vue';\n\nlet stage: StageCore | null = null;\nlet runtime: Runtime | null = null;\n\nconst services = inject<Services>('services');\nconst stageOptions = inject<StageOptions>('stageOptions');\n\nconst stageWrap = ref<InstanceType<typeof ScrollViewer>>();\nconst stageContainer = ref<HTMLDivElement>();\nconst menu = ref<InstanceType<typeof ViewerMenu>>();\n\nconst isMultiSelect = computed(() => services?.editorService.get('nodes')?.length > 1);\nconst stageRect = computed(() => services?.uiService.get<StageRect>('stageRect'));\nconst stageContainerRect = computed(() => services?.uiService.get<StageRect>('stageContainerRect'));\nconst root = computed(() => services?.editorService.get<MApp>('root'));\nconst page = computed(() => services?.editorService.get<MPage>('page'));\nconst zoom = computed(() => services?.uiService.get<number>('zoom') || 1);\nconst node = computed(() => services?.editorService.get<MNode>('node'));\n\nwatchEffect(() => {\n if (stage) return;\n\n if (!stageContainer.value) return;\n if (!(stageOptions?.runtimeUrl || stageOptions?.render) || !root.value) return;\n\n stage = useStage(stageOptions);\n\n services?.editorService.set('stage', markRaw(stage));\n\n stage?.mount(stageContainer.value);\n\n if (!node.value?.id) return;\n stage?.on('runtime-ready', (rt) => {\n runtime = rt;\n // toRaw返回的值是一个引用而非快照,需要cloneDeep\n root.value && runtime?.updateRootConfig?.(cloneDeep(toRaw(root.value)));\n page.value?.id && runtime?.updatePageId?.(page.value.id);\n setTimeout(() => {\n node.value && stage?.select(toRaw(node.value.id));\n });\n });\n});\n\nwatch(zoom, (zoom) => {\n if (!stage || !zoom) return;\n stage.setZoom(zoom);\n});\n\nwatch(root, (root) => {\n if (runtime && root) {\n runtime.updateRootConfig?.(cloneDeep(toRaw(root)));\n }\n});\n\nconst resizeObserver = new ResizeObserver((entries) => {\n for (const { contentRect } of entries) {\n services?.uiService.set('stageContainerRect', {\n width: contentRect.width,\n height: contentRect.height,\n });\n }\n});\n\nonMounted(() => {\n stageWrap.value?.container && resizeObserver.observe(stageWrap.value.container);\n});\n\nonUnmounted(() => {\n stage?.destroy();\n resizeObserver.disconnect();\n services?.editorService.set('stage', null);\n});\n\nconst contextmenuHandler = (e: MouseEvent) => {\n e.preventDefault();\n menu.value?.show(e);\n};\n\nconst dragoverHandler = (e: DragEvent) => {\n e.preventDefault();\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = 'move';\n }\n};\n\nconst dropHandler = async (e: DragEvent) => {\n e.preventDefault();\n\n const doc = stage?.renderer.contentWindow?.document;\n const parentEl: HTMLElement | null | undefined = doc?.querySelector(`.${stageOptions?.containerHighlightClassName}`);\n\n let parent: MContainer | undefined = page.value;\n if (parentEl) {\n parent = services?.editorService.getNodeById(parentEl.id, false) as MContainer;\n }\n\n if (e.dataTransfer && parent && stageContainer.value && stage) {\n // eslint-disable-next-line no-eval\n const config = eval(`(${e.dataTransfer.getData('data')})`);\n const layout = await services?.editorService.getLayout(parent);\n\n const containerRect = stageContainer.value.getBoundingClientRect();\n const { scrollTop, scrollLeft } = stage.mask;\n const { style = {} } = config;\n\n let top = 0;\n let left = 0;\n let position = 'relative';\n\n if (layout === Layout.ABSOLUTE) {\n position = 'absolute';\n top = e.clientY - containerRect.top + scrollTop;\n left = e.clientX - containerRect.left + scrollLeft;\n\n if (parentEl && doc) {\n const { left: parentLeft, top: parentTop } = getOffset(parentEl);\n left = left - calcValueByFontsize(doc, parentLeft);\n top = top - calcValueByFontsize(doc, parentTop);\n }\n }\n\n config.style = {\n ...style,\n position,\n top: top / zoom.value,\n left: left / zoom.value,\n };\n\n config.inputEvent = e;\n\n services?.editorService.add(config, parent);\n }\n};\n</script>\n","<template>\n <div class=\"m-editor-workspace\" tabindex=\"-1\" ref=\"workspace\">\n <slot name=\"stage\">\n <MagicStage :key=\"page?.id\"></MagicStage>\n </slot>\n\n <slot name=\"workspace-content\"></slot>\n\n <PageBar>\n <template #page-bar-title=\"{ page }\"><slot name=\"page-bar-title\" :page=\"page\"></slot></template>\n <template #page-bar-popover=\"{ page }\"><slot name=\"page-bar-popover\" :page=\"page\"></slot></template>\n </PageBar>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, onMounted, onUnmounted, ref } from 'vue';\nimport KeyController from 'keycon';\n\nimport type { MNode, MPage } from '@tmagic/schema';\nimport { isPage } from '@tmagic/utils';\n\nimport type { Services } from '../../type';\n\nimport PageBar from './PageBar.vue';\nimport MagicStage from './Stage.vue';\n\nconst services = inject<Services>('services');\nconst workspace = ref<HTMLDivElement>();\nconst nodes = computed(() => services?.editorService.get<MNode[]>('nodes'));\nconst page = computed(() => services?.editorService.get<MPage>('page'));\n\nconst mouseenterHandler = () => {\n workspace.value?.focus();\n};\n\nconst mouseleaveHandler = () => {\n workspace.value?.blur();\n};\n\nlet keycon: KeyController;\n\nonMounted(() => {\n workspace.value?.addEventListener('mouseenter', mouseenterHandler);\n workspace.value?.addEventListener('mouseleave', mouseleaveHandler);\n\n keycon = new KeyController(workspace.value);\n\n const isMac = /mac os x/.test(navigator.userAgent.toLowerCase());\n\n const ctrl = isMac ? 'meta' : 'ctrl';\n\n keycon\n .keyup('delete', (e) => {\n e.inputEvent.preventDefault();\n if (!nodes.value || isPage(nodes.value[0])) return;\n services?.editorService.remove(nodes.value);\n })\n .keyup('backspace', (e) => {\n e.inputEvent.preventDefault();\n if (!nodes.value || isPage(nodes.value[0])) return;\n services?.editorService.remove(nodes.value);\n })\n .keydown([ctrl, 'c'], (e) => {\n e.inputEvent.preventDefault();\n nodes.value && services?.editorService.copy(nodes.value);\n })\n .keydown([ctrl, 'v'], (e) => {\n e.inputEvent.preventDefault();\n nodes.value && services?.editorService.paste({ offsetX: 10, offsetY: 10 });\n })\n .keydown([ctrl, 'x'], (e) => {\n e.inputEvent.preventDefault();\n if (!nodes.value || isPage(nodes.value[0])) return;\n services?.editorService.copy(nodes.value);\n services?.editorService.remove(nodes.value);\n })\n .keydown([ctrl, 'z'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.undo();\n })\n .keydown([ctrl, 'shift', 'z'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.redo();\n })\n .keydown('up', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(0, -1);\n })\n .keydown('down', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(0, 1);\n })\n .keydown('left', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(-1, 0);\n })\n .keydown('right', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(1, 0);\n })\n .keydown([ctrl, 'up'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(0, -10);\n })\n .keydown([ctrl, 'down'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(0, 10);\n })\n .keydown([ctrl, 'left'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(-10, 0);\n })\n .keydown([ctrl, 'right'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(10, 0);\n })\n .keydown('tab', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.selectNextNode();\n })\n .keydown([ctrl, 'tab'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.selectNextPage();\n })\n .keydown([ctrl, '='], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.zoom(0.1);\n })\n .keydown([ctrl, 'numpadplus'], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.zoom(0.1);\n })\n .keydown([ctrl, '-'], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.zoom(-0.1);\n })\n .keydown([ctrl, 'numpad-'], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.zoom(-0.1);\n })\n .keydown([ctrl, '0'], async (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.set('zoom', await services.uiService.calcZoom());\n })\n .keydown([ctrl, '1'], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.set('zoom', 1);\n });\n});\n\nonUnmounted(() => {\n workspace.value?.removeEventListener('mouseenter', mouseenterHandler);\n workspace.value?.removeEventListener('mouseleave', mouseleaveHandler);\n keycon.destroy();\n});\n</script>\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 { reactive } from 'vue';\n\nimport type { ComponentGroup, ComponentGroupState } from '../type';\n\nimport BaseService from './BaseService';\n\nclass ComponentList extends BaseService {\n private state = reactive<ComponentGroupState>({\n list: [],\n });\n\n constructor() {\n super([]);\n }\n\n /**\n * @param componentGroupList 组件列表配置\n */\n public setList(componentGroupList: ComponentGroup[]): void {\n this.state.list = componentGroupList;\n }\n\n public getList(): ComponentGroup[] {\n return this.state.list;\n }\n\n public destroy() {\n this.state.list = [];\n this.removeAllListeners();\n }\n}\n\nexport type ComponentListService = ComponentList;\n\nexport default new ComponentList();\n","<template>\n <framework :code-options=\"codeOptions\">\n <template #nav>\n <slot name=\"nav\" :editorService=\"editorService\"><nav-menu :data=\"menu\"></nav-menu></slot>\n </template>\n\n <template #sidebar>\n <slot name=\"sidebar\" :editorService=\"editorService\">\n <sidebar :data=\"sidebar\">\n <template #layer-panel-header>\n <slot name=\"layer-panel-header\"></slot>\n </template>\n\n <template #component-list-panel-header>\n <slot name=\"component-list-panel-header\"></slot>\n </template>\n\n <template #component-list-item=\"{ component }\">\n <slot name=\"component-list-item\" :component=\"component\"></slot>\n </template>\n </sidebar>\n </slot>\n </template>\n\n <template #workspace>\n <slot name=\"workspace\" :editorService=\"editorService\">\n <workspace>\n <template #stage><slot name=\"stage\"></slot></template>\n <template #workspace-content><slot name=\"workspace-content\" :editorService=\"editorService\"></slot></template>\n <template #page-bar-title=\"{ page }\"><slot name=\"page-bar-title\" :page=\"page\"></slot></template>\n <template #page-bar-popover=\"{ page }\"><slot name=\"page-bar-popover\" :page=\"page\"></slot></template>\n </workspace>\n </slot>\n </template>\n\n <template #props-panel>\n <slot name=\"props-panel\">\n <props-panel @mounted=\"(instance: any) => $emit('props-panel-mounted', instance)\">\n <template #props-panel-header>\n <slot name=\"props-panel-header\"></slot>\n </template>\n </props-panel>\n </slot>\n </template>\n\n <template #empty><slot name=\"empty\" :editorService=\"editorService\"></slot></template>\n </framework>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, onUnmounted, PropType, provide, reactive, toRaw, watch } from 'vue';\n\nimport { EventOption } from '@tmagic/core';\nimport type { FormConfig } from '@tmagic/form';\nimport type { MApp, MNode } from '@tmagic/schema';\nimport type StageCore from '@tmagic/stage';\nimport { CONTAINER_HIGHLIGHT_CLASS, ContainerHighlightType, MoveableOptions } from '@tmagic/stage';\n\nimport Framework from './layouts/Framework.vue';\nimport NavMenu from './layouts/NavMenu.vue';\nimport PropsPanel from './layouts/PropsPanel.vue';\nimport Sidebar from './layouts/sidebar/Sidebar.vue';\nimport Workspace from './layouts/workspace/Workspace.vue';\nimport componentListService from './services/componentList';\nimport editorService from './services/editor';\nimport eventsService from './services/events';\nimport historyService from './services/history';\nimport propsService from './services/props';\nimport storageService from './services/storage';\nimport uiService from './services/ui';\nimport type { ComponentGroup, MenuBarData, MenuButton, MenuComponent, Services, SideBarData, StageRect } from './type';\n\nexport default defineComponent({\n name: 'm-editor',\n\n components: {\n NavMenu,\n Sidebar,\n Workspace,\n PropsPanel,\n Framework,\n },\n\n props: {\n /** 页面初始值 */\n modelValue: {\n type: Object as PropType<MApp>,\n default: () => ({}),\n require: true,\n },\n\n /** 左侧面板中的组件列表 */\n componentGroupList: {\n type: Array as PropType<ComponentGroup[]>,\n default: () => [],\n },\n\n /** 左侧面板配置 */\n sidebar: {\n type: Object as PropType<SideBarData>,\n },\n\n layerContentMenu: {\n type: Array as PropType<(MenuButton | MenuComponent)[]>,\n default: () => [],\n },\n\n stageContentMenu: {\n type: Array as PropType<(MenuButton | MenuComponent)[]>,\n default: () => [],\n },\n\n /** 顶部工具栏配置 */\n menu: {\n type: Object as PropType<MenuBarData>,\n default: () => ({ left: [], right: [] }),\n },\n\n /** 中间工作区域中画布渲染的内容 */\n render: {\n type: Function as PropType<() => HTMLDivElement>,\n },\n\n /** 中间工作区域中画布通过iframe渲染时的页面url */\n runtimeUrl: String,\n\n /** 选中时是否自动滚动到可视区域 */\n autoScrollIntoView: Boolean,\n\n /** 组件的属性配置表单的dsl */\n propsConfigs: {\n type: Object as PropType<Record<string, FormConfig>>,\n default: () => ({}),\n },\n\n /** 添加组件时的默认值 */\n propsValues: {\n type: Object as PropType<Record<string, MNode>>,\n default: () => ({}),\n },\n\n /** 组件联动事件选项列表 */\n eventMethodList: {\n type: Object,\n default: () => ({}),\n },\n\n /** 画布中组件选中框的移动范围 */\n moveableOptions: {\n type: [Object, Function] as PropType<MoveableOptions | ((core?: StageCore) => MoveableOptions)>,\n },\n\n /** 编辑器初始化时默认选中的组件ID */\n defaultSelected: {\n type: [Number, String],\n },\n\n canSelect: {\n type: Function as PropType<(el: HTMLElement) => boolean | Promise<boolean>>,\n default: (el: HTMLElement) => Boolean(el.id),\n },\n\n isContainer: {\n type: Function as PropType<(el: HTMLElement) => boolean | Promise<boolean>>,\n default: (el: HTMLElement) => el.classList.contains('magic-ui-container'),\n },\n\n containerHighlightClassName: {\n type: String,\n default: CONTAINER_HIGHLIGHT_CLASS,\n },\n\n containerHighlightDuration: {\n type: Number,\n default: 800,\n },\n\n containerHighlightType: {\n type: String as PropType<ContainerHighlightType>,\n default: ContainerHighlightType.DEFAULT,\n },\n\n stageRect: {\n type: [String, Object] as PropType<StageRect>,\n },\n\n codeOptions: {\n type: Object,\n default: () => ({}),\n },\n\n updateDragEl: {\n type: Function as PropType<(el: HTMLDivElement, target: HTMLElement) => void>,\n },\n },\n\n emits: ['props-panel-mounted', 'update:modelValue'],\n\n setup(props, { emit }) {\n editorService.on('root-change', (value) => {\n const node = editorService.get<MNode | null>('node');\n const nodeId = node?.id || props.defaultSelected;\n if (nodeId && node !== value) {\n editorService.select(nodeId);\n } else {\n editorService.set('nodes', [value]);\n }\n\n emit('update:modelValue', toRaw(editorService.get('root')));\n });\n\n // 初始值变化,重新设置节点信息\n watch(\n () => props.modelValue,\n (modelValue) => editorService.set('root', modelValue),\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.componentGroupList,\n (componentGroupList) => componentListService.setList(componentGroupList),\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.propsConfigs,\n (configs) => propsService.setPropsConfigs(configs),\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.propsValues,\n (values) => propsService.setPropsValues(values),\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.eventMethodList,\n (eventMethodList) => {\n const eventsList: Record<string, EventOption[]> = {};\n const methodsList: Record<string, EventOption[]> = {};\n\n Object.keys(eventMethodList).forEach((type: string) => {\n eventsList[type] = eventMethodList[type].events;\n methodsList[type] = eventMethodList[type].methods;\n });\n\n eventsService.setEvents(eventsList);\n eventsService.setMethods(methodsList);\n },\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.defaultSelected,\n (defaultSelected) => defaultSelected && editorService.select(defaultSelected),\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.stageRect,\n (stageRect) => stageRect && uiService.set('stageRect', stageRect),\n {\n immediate: true,\n },\n );\n\n uiService.initColumnWidth();\n\n onUnmounted(() => {\n editorService.destroy();\n historyService.destroy();\n propsService.destroy();\n uiService.destroy();\n componentListService.destroy();\n storageService.destroy();\n });\n\n const services: Services = {\n componentListService,\n eventsService,\n historyService,\n propsService,\n editorService,\n uiService,\n storageService,\n };\n\n provide('services', services);\n\n provide('layerContentMenu', props.layerContentMenu);\n provide('stageContentMenu', props.stageContentMenu);\n provide(\n 'stageOptions',\n reactive({\n runtimeUrl: props.runtimeUrl,\n autoScrollIntoView: props.autoScrollIntoView,\n render: props.render,\n moveableOptions: props.moveableOptions,\n canSelect: props.canSelect,\n updateDragEl: props.updateDragEl,\n isContainer: props.isContainer,\n containerHighlightClassName: props.containerHighlightClassName,\n containerHighlightDuration: props.containerHighlightDuration,\n containerHighlightType: props.containerHighlightType,\n }),\n );\n\n return services;\n },\n});\n</script>\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 */\nimport { App } from 'vue';\n\nimport Code from './fields/Code.vue';\nimport CodeLink from './fields/CodeLink.vue';\nimport uiSelect from './fields/UISelect.vue';\nimport CodeEditor from './layouts/CodeEditor.vue';\nimport { setConfig } from './utils/config';\nimport Editor from './Editor.vue';\nimport type { InstallOptions } from './type';\n\nimport './theme/index.scss';\n\nexport type { MoveableOptions } from '@tmagic/stage';\nexport * from './type';\nexport * from './utils';\nexport { default as TMagicEditor } from './Editor.vue';\nexport { default as TMagicCodeEditor } from './layouts/CodeEditor.vue';\nexport { default as editorService } from './services/editor';\nexport { default as propsService } from './services/props';\nexport { default as historyService } from './services/history';\nexport { default as storageService } from './services/storage';\nexport { default as eventsService } from './services/events';\nexport { default as uiService } from './services/ui';\nexport { default as ComponentListPanel } from './layouts/sidebar/ComponentListPanel.vue';\nexport { default as LayerPanel } from './layouts/sidebar/LayerPanel.vue';\nexport { default as PropsPanel } from './layouts/PropsPanel.vue';\nexport { default as ToolButton } from './components/ToolButton.vue';\nexport { default as ContentMenu } from './components/ContentMenu.vue';\nexport { default as Icon } from './components/Icon.vue';\n\nconst defaultInstallOpt: InstallOptions = {\n // @todo, 自定义图片上传方法等编辑器依赖的外部选项\n};\n\nexport default {\n install: (app: App, opt?: InstallOptions): void => {\n const option = Object.assign(defaultInstallOpt, opt || {});\n\n // eslint-disable-next-line no-param-reassign\n app.config.globalProperties.$TMAGIC_EDITOR = option;\n setConfig(option);\n\n app.component(Editor.name, Editor);\n app.component('m-fields-ui-select', uiSelect);\n app.component(CodeLink.name, CodeLink);\n app.component(Code.name, Code);\n app.component(CodeEditor.name, CodeEditor);\n },\n};\n"],"names":["_resolveComponent","_openBlock","_normalizeStyle","_createBlock","_hoisted_1","Editor","_createElementBlock","_createElementVNode","_hoisted_2","_createVNode","_withCtx","_sfc_render","_renderSlot","_Fragment","ContentMenu","_normalizeClass","_createCommentVNode","_Teleport","MIcon","ComponentListPanel","_toDisplayString","_resolveDynamicComponent","_mergeProps","_toHandlers","_createSlots","_renderList","NavMenu","Workspace","PropsPanel","uiSelect"],"mappings":"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"}
|