@tmagic/editor 1.0.1 → 1.0.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.es.js +43 -8
- package/dist/tmagic-editor.es.js.map +1 -1
- package/dist/tmagic-editor.umd.js +43 -8
- package/dist/tmagic-editor.umd.js.map +1 -1
- package/dist/types/src/Editor.vue.d.ts +2 -1
- package/dist/types/src/components/Icon.vue.d.ts +2 -1
- package/dist/types/src/components/ScrollViewer.vue.d.ts +2 -1
- package/dist/types/src/fields/Code.vue.d.ts +2 -1
- package/dist/types/src/fields/CodeLink.vue.d.ts +3 -1
- package/dist/types/src/layouts/AddPageBox.vue.d.ts +1 -1
- package/dist/types/src/layouts/CodeEditor.vue.d.ts +2 -1
- package/dist/types/src/layouts/Framework.vue.d.ts +2 -1
- package/dist/types/src/layouts/NavMenu.vue.d.ts +3 -1
- package/dist/types/src/layouts/PropsPanel.vue.d.ts +2 -1
- package/dist/types/src/layouts/Resizer.vue.d.ts +2 -1
- package/dist/types/src/layouts/sidebar/ComponentListPanel.vue.d.ts +2 -1
- package/dist/types/src/layouts/sidebar/Sidebar.vue.d.ts +3 -1
- package/dist/types/src/layouts/sidebar/TabPane.vue.d.ts +3 -1
- package/dist/types/src/layouts/workspace/Workspace.vue.d.ts +2 -1
- package/dist/types/src/services/history.d.ts +1 -1
- package/package.json +13 -14
- package/src/Editor.vue +11 -3
- package/src/layouts/AddPageBox.vue +1 -1
- package/src/layouts/Framework.vue +1 -1
- package/src/layouts/sidebar/ComponentListPanel.vue +1 -0
- package/src/layouts/sidebar/LayerPanel.vue +2 -0
- package/src/layouts/sidebar/Sidebar.vue +9 -1
- package/src/layouts/sidebar/TabPane.vue +8 -0
- package/src/services/history.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmagic-editor.es.js","sources":["../src/utils/polyfills.ts","../plugin-vue:export-helper","../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/props.ts","../src/type.ts","../src/utils/editor.ts","../src/utils/logger.ts","../src/services/editor.ts","../src/services/events.ts","../src/utils/props.ts","../src/layouts/AddPageBox.vue","../src/layouts/Resizer.vue","../src/layouts/Framework.vue","../src/components/Icon.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/PageBar.vue","../src/utils/scroll-viewer.ts","../src/components/ScrollViewer.vue","../src/layouts/workspace/ViewerMenu.vue","../src/layouts/workspace/Stage.vue","../src/layouts/workspace/Workspace.vue","../src/services/componentList.ts","../src/services/ui.ts","../src/Editor.vue","../src/index.ts"],"sourcesContent":["// serialize-javascript 依赖的 randombytes 依赖全局的 global 对象,因此此处需添加 global polyfill\nif (typeof global === 'undefined') {\n (window as any).global = window;\n}\n\nif (typeof globalThis === 'undefined') {\n (window as any).globalThis = window;\n}\n","\nexport default (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n}\n","<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 content=\"清除\">\n <el-button v-if=\"val\" 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\">\nimport { computed, defineComponent, inject, markRaw, ref } from 'vue';\nimport { Close, Delete, Pointer } from '@element-plus/icons';\n\nimport { FormState } from '@tmagic/form';\n\nimport { Services } from '@editor/type';\n\nexport default defineComponent({\n name: 'm-fields-ui-select',\n\n props: {\n labelWidth: String,\n config: Object,\n model: Object,\n prop: {\n type: String,\n default() {\n return '';\n },\n },\n name: String,\n },\n\n emits: ['change'],\n\n setup(props: any, { emit }) {\n const services = inject<Services>('services');\n const mForm = inject<FormState>('mForm');\n const val = computed(() => props.model[props.name]);\n const uiSelectMode = ref(false);\n\n const 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\n const 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\n return {\n Delete: markRaw(Delete),\n Pointer: markRaw(Pointer),\n Close: markRaw(Close),\n\n val,\n uiSelectMode,\n toName: computed(() => {\n const config = services?.editorService.getNodeById(val.value);\n return config?.name || '';\n }),\n\n 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\n cancelHandler,\n\n deleteHandler() {\n if (props.model) {\n props.model[props.name] = '';\n emit('change', '');\n mForm?.$emit('field-change', props.prop, '');\n }\n },\n };\n },\n});\n</script>\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 '@editor/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 '@editor/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 let beforeReturnValue = (await beforeMethod(...beforeArgs)) || [];\n\n if (isError(beforeReturnValue)) throw beforeReturnValue;\n\n if (!Array.isArray(beforeReturnValue)) {\n beforeReturnValue = [beforeReturnValue];\n }\n\n beforeArgs = beforeArgs.map((v: any, index: number) => {\n if (typeof beforeReturnValue[index] === 'undefined') return v;\n return beforeReturnValue[index];\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 { Id, MPage } from '@tmagic/schema';\n\nimport { UndoRedo } from '@editor/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","/*\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, random } from 'lodash-es';\n\nimport type { FormConfig } from '@tmagic/form';\nimport type { Id, MComponent, MNode, MPage } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\nimport { isPop, toLine } from '@tmagic/utils';\n\nimport type { PropsState } from '@editor/type';\nimport { DEFAULT_CONFIG, fillConfig, getDefaultPropsValue } from '@editor/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(['setPropsConfig', 'getPropsConfig', 'setPropsValue', 'getPropsValue', 'createId', 'setNewItemId']);\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 /**\n * 为指定类型组件设置组件属性表单配置\n * @param type 组件类型\n * @param config 组件属性表单配置\n */\n public setPropsConfig(type: string, config: FormConfig) {\n this.state.propsConfigMap[type] = 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] || DEFAULT_CONFIG);\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, 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 data = cloneDeep(defaultValue as any);\n\n await this.setNewItemId(data);\n\n return {\n ...getDefaultPropsValue(type, await this.createId(type)),\n ...mergeWith(cloneDeep(this.state.propsValueMap[type] || {}), data),\n };\n }\n\n public async createId(type: string | number): Promise<string> {\n return `${type}_${random(10000, false)}`;\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, parent?: MPage) {\n const oldId = config.id;\n\n config.id = await this.createId(config.type || 'component');\n\n // 只有弹窗在页面下的一级子元素才有效\n if (isPop(config) && parent?.type === NodeType.PAGE) {\n updatePopId(oldId, config.id, parent);\n }\n\n if (config.items && Array.isArray(config.items)) {\n for (const item of config.items) {\n await this.setNewItemId(item, config as MPage);\n }\n }\n }\n}\n\n/**\n * 复制页面时,需要把组件下关联的弹窗id换测复制出来的弹窗的id\n * @param {number} oldId 复制的源弹窗id\n * @param {number} popId 新的弹窗id\n * @param {Object} pageConfig 页面配置\n */\nconst updatePopId = (oldId: Id, popId: Id, pageConfig: MPage) => {\n pageConfig.items?.forEach((config) => {\n if (config.pop === oldId) {\n config.pop = popId;\n return;\n }\n\n if (config.popId === oldId) {\n config.popId = popId;\n return;\n }\n\n if (Array.isArray(config.items)) {\n updatePopId(oldId, popId, config as MPage);\n }\n });\n};\n\nexport type PropsService = Props;\n\nexport default new Props();\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 { MoveableOptions } from '@tmagic/stage';\n\nimport type { ComponentListService } from '@editor/services/componentList';\nimport type { EditorService } from '@editor/services/editor';\nimport type { EventsService } from '@editor/services/events';\nimport type { HistoryService } from '@editor/services/history';\nimport type { PropsService } from '@editor/services/props';\nimport type { UiService } from '@editor/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 eventsService: EventsService;\n propsService: PropsService;\n componentListService: ComponentListService;\n uiService: UiService;\n}\n\nexport interface StageOptions {\n runtimeUrl: string;\n autoScrollIntoView: boolean;\n render: () => HTMLDivElement;\n moveableOptions: MoveableOptions | ((core?: StageCore) => MoveableOptions);\n canSelect: (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 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 interface SetColumnWidth {\n left?: number;\n center?: number | 'auto';\n right?: number;\n}\n\nexport interface GetColumnWidth {\n left: number;\n center: number;\n 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\nexport interface EditorNodeInfo {\n node?: MNode;\n parent?: MContainer;\n page?: MPage;\n}\n\nexport interface AddMNode {\n type: string;\n name?: string;\n [key: string]: any;\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 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 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\n/** 工具栏 */\nexport interface MenuBarData {\n /** 顶部工具栏左边项 */\n left?: MenuItem[];\n /** 顶部工具栏中间项 */\n center?: MenuItem[];\n /** 顶部工具栏右边项 */\n 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","/*\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 '@editor/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 toRelative = (node: MNode) => {\n node.style = {\n ...(node.style || {}),\n position: 'relative',\n top: 0,\n left: 0,\n };\n return node;\n};\n\nconst setTop2Middle = (node: MNode, parentNode: MNode, stage: StageCore) => {\n const style = node.style || {};\n let height = style.height || 0;\n\n if (!stage || typeof style.top !== 'undefined' || !parentNode.style) return style;\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 style.top = (wrapperHeight - height) / 2 + scrollTop;\n } else {\n style.top = (parentHeight - height) / 2;\n }\n\n return style;\n};\n\nexport const initPosition = (node: MNode, layout: Layout, parentNode: MNode, stage: StageCore) => {\n if (layout === Layout.ABSOLUTE) {\n node.style = {\n position: 'absolute',\n ...setTop2Middle(node, parentNode, stage),\n };\n return node;\n }\n\n if (layout === Layout.RELATIVE) {\n return toRelative(node);\n }\n\n return node;\n};\n\nexport const setLayout = (node: MNode, layout: Layout) => {\n node.items?.forEach((child: MNode) => {\n if (isPop(child)) return;\n\n child.style = child.style || {};\n\n // 是 fixed 不做处理\n if (child.style.position === 'fixed') return;\n\n if (layout !== Layout.RELATIVE) {\n child.style.position = 'absolute';\n } else {\n toRelative(child);\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 node.style = {\n ...(node.style || {}),\n ...offset,\n };\n return node;\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\n const parent = path.pop();\n if (!parent) {\n return toRelative(node);\n }\n\n const layout = await getLayout(parent);\n if (layout !== Layout.RELATIVE) {\n node.style = {\n ...(node.style || {}),\n ...offset,\n position: 'absolute',\n };\n return node;\n }\n\n return toRelative(node);\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","/*\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';\nimport { cloneDeep, mergeWith } from 'lodash-es';\nimport serialize from 'serialize-javascript';\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 '@editor/services/history';\nimport propsService from '@editor/services/props';\nimport type { AddMNode, EditorNodeInfo, StoreState } from '@editor/type';\nimport { LayerOffset, Layout } from '@editor/type';\nimport {\n change2Fixed,\n COPY_STORAGE_KEY,\n Fixed2Other,\n generatePageNameByApp,\n getNodeIndex,\n initPosition,\n isFixed,\n setLayout,\n} from '@editor/utils/editor';\nimport { log } from '@editor/utils/logger';\n\nimport BaseService from './BaseService';\n\nclass Editor extends BaseService {\n private isHistoryStateChange = false;\n\n private state = reactive<StoreState>({\n root: null,\n page: null,\n parent: null,\n node: null,\n stage: null,\n highlightNode: null,\n modifiedNodeIds: new Map(),\n pageLength: 0,\n });\n\n constructor() {\n super(\n [\n 'getLayout',\n 'select',\n 'add',\n 'remove',\n 'update',\n 'sort',\n 'copy',\n 'paste',\n 'alignCenter',\n 'moveLayer',\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'\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 log('store set ', name, ' ', value);\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'\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('node', 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 addConfig 将要添加的组件节点配置\n * @param parent 要添加到的容器组件节点配置,如果不设置,默认为当前选中的组件的父节点\n * @returns 添加后的节点\n */\n public async add(addNode: AddMNode, parent?: MContainer | null): Promise<MNode> {\n const { type, ...config } = addNode;\n const curNode = this.get<MContainer>('node');\n\n let parentNode: MNode | undefined;\n const isPage = type === NodeType.PAGE;\n\n if (isPage) {\n parentNode = this.get<MApp>('root');\n // 由于支持中间件扩展,在parent参数为undefined时,parent会变成next函数\n } else if (parent && typeof parent !== 'function') {\n parentNode = parent;\n } else if (curNode.items) {\n parentNode = curNode;\n } else {\n parentNode = this.getParentById(curNode.id, false);\n }\n\n if (!parentNode) throw new Error('未找到父元素');\n\n const layout = await this.getLayout(toRaw(parentNode), addNode as MNode);\n const newNode = initPosition(\n { ...toRaw(await propsService.getPropsValue(type, config)) },\n layout,\n parentNode,\n this.get<StageCore>('stage'),\n );\n\n if ((parentNode?.type === NodeType.ROOT || curNode.type === NodeType.ROOT) && newNode.type !== NodeType.PAGE) {\n throw new Error('app下不能添加组件');\n }\n\n parentNode?.items?.push(newNode);\n\n const stage = this.get<StageCore | null>('stage');\n\n await stage?.add({ config: cloneDeep(newNode), root: cloneDeep(this.get('root')) });\n\n await this.select(newNode);\n\n this.addModifiedNodeId(newNode.id);\n if (!isPage) {\n this.pushHistoryState();\n }\n\n stage?.select(newNode.id);\n\n if (isPage) {\n this.state.pageLength += 1;\n }\n\n this.emit('add', newNode);\n\n return newNode;\n }\n\n /**\n * 删除组件\n * @param {Object} node\n * @return {Object} 删除的组件配置\n */\n public async remove(node: MNode): Promise<MNode | void> {\n if (!node?.id) return;\n\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, false);\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, root: this.get('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('node', null);\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 this.emit('remove', node);\n\n return node;\n }\n } else {\n await this.select(parent);\n stage?.select(parent.id);\n }\n\n this.addModifiedNodeId(parent.id);\n this.pushHistoryState();\n\n this.emit('remove', node);\n\n return node;\n }\n\n /**\n * 更新节点\n * @param config 新的节点配置,配置中需要有id信息\n * @returns 更新后的节点配置\n */\n public async update(config: MNode): Promise<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 if (`${newConfig.id}` === `${this.get('node').id}`) {\n this.set('node', newConfig);\n }\n\n this.get<StageCore | null>('stage')?.update({ config: cloneDeep(newConfig), root: this.get('root') });\n\n if (newConfig.type === NodeType.PAGE) {\n this.set('page', newConfig);\n }\n\n this.addModifiedNodeId(newConfig.id);\n this.pushHistoryState();\n\n this.emit('update', newConfig);\n\n return newConfig;\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({ config: cloneDeep(node), root: this.get('root') });\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): Promise<void> {\n globalThis.localStorage.setItem(COPY_STORAGE_KEY, serialize(config));\n }\n\n /**\n * 从localStorage中获取节点,然后添加到当前容器中\n * @param position 如果设置,指定组件位置\n * @returns 添加后的组件节点配置\n */\n public async paste(position: { left?: number; top?: number } = {}): Promise<MNode | void> {\n const configStr = globalThis.localStorage.getItem(COPY_STORAGE_KEY);\n // eslint-disable-next-line prefer-const\n let config: any = {};\n if (!configStr) {\n return;\n }\n\n try {\n // eslint-disable-next-line no-eval\n eval(`config = ${configStr}`);\n } catch (e) {\n console.error(e);\n return;\n }\n\n await propsService.setNewItemId(config, this.get('root'));\n if (config.style) {\n config.style = {\n ...config.style,\n ...position,\n };\n }\n\n if (isPage(config)) {\n config.name = generatePageNameByApp(this.get('root'));\n }\n\n return await this.add(config);\n }\n\n /**\n * 将指点节点设置居中\n * @param config 组件节点配置\n * @returns 当前组件节点配置\n */\n public async alignCenter(config: MNode): Promise<MNode | void> {\n const parent = this.get<MContainer>('parent');\n const node = this.get<MNode>('node');\n const layout = await this.getLayout(toRaw(parent), toRaw(node));\n if (layout === Layout.RELATIVE) {\n return;\n }\n\n if (!node.style) return;\n\n const stage = this.get<StageCore>('stage');\n const doc = stage?.renderer.contentWindow?.document;\n\n if (doc) {\n const parentEl = doc.getElementById(`${parent.id}`);\n const el = doc.getElementById(`${node.id}`);\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 await this.update(node);\n this.get<StageCore | null>('stage')?.update({ config: cloneDeep(toRaw(node)), root: this.get('root') });\n this.addModifiedNodeId(config.id);\n this.pushHistoryState();\n\n return config;\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('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 this.get<StageCore | null>('stage')?.update({ config: cloneDeep(toRaw(parent)), root: this.get('root') });\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 } = 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 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('page', null);\n this.set('parent', null);\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 let newConfig = cloneDeep(dist);\n\n if (!isPop(src) && newConfig.style?.position) {\n if (isFixed(newConfig) && !isFixed(src)) {\n newConfig = change2Fixed(newConfig, root);\n } else if (!isFixed(newConfig) && isFixed(src)) {\n newConfig = 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 '@editor/type';\n\nimport BaseService from './BaseService';\n\nconst eventMap: Record<string, EventOption[]> = reactive({});\nconst 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\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 '@editor/services/editor';\nimport eventsService from '@editor/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// 默认组件属性表单配置\nexport const DEFAULT_CONFIG: FormConfig = fillConfig([]);\n\n/**\n * 获取默认属性配置\n * @param type 组件类型\n * @returns Object\n */\nexport const getDefaultPropsValue = (type: string, id: string) =>\n ['page', 'container'].includes(type)\n ? {\n type,\n id,\n layout: 'absolute',\n style: {},\n name: type,\n items: [],\n }\n : {\n type,\n id,\n style: {},\n name: type,\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';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport { Services } from '@editor/type';\nimport { generatePageNameByApp } from '@editor/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 '@editor/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=\"propsPanel\"></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 '@editor/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 <el-icon v-if=\"!icon\"><edit></edit></el-icon>\n <img v-else-if=\"typeof icon === 'string' && icon.startsWith('http')\" :src=\"icon\" />\n <i v-else-if=\"typeof icon === 'string'\" :class=\"icon\"></i>\n <el-icon v-else><component :is=\"toRaw(icon)\"></component></el-icon>\n</template>\n\n<script lang=\"ts\">\nimport { Component, defineComponent, PropType, toRaw } from 'vue';\nimport { Edit } from '@element-plus/icons';\n\nexport default defineComponent({\n name: 'm-icon',\n\n components: { Edit },\n\n props: {\n icon: {\n type: [String, Object] as PropType<string | Component>,\n },\n },\n\n setup() {\n return {\n toRaw,\n };\n },\n});\n</script>\n","<template>\n <div\n v-if=\"display\"\n class=\"menu-item\"\n :class=\"item.type\"\n @click=\"clickHandler(item, $event)\"\n @mousedown=\"mousedownHandler(item, $event)\"\n @mouseup=\"mouseupHandler(item, $event)\"\n >\n <el-divider v-if=\"item.type === 'divider'\" :direction=\"item.direction || 'vertical'\"></el-divider>\n <div v-else-if=\"item.type === 'text'\" class=\"menu-item-text\">{{ item.text }}</div>\n\n <template v-else-if=\"item.type === 'zoom'\">\n <tool-button\n :data=\"{ type: 'button', icon: ZoomOut, handler: zoomOutHandler, tooltip: '缩小' }\"\n :event-type=\"eventType\"\n ></tool-button>\n <span class=\"menu-item-text\" style=\"margin: 0 5px\">{{ parseInt(`${zoom * 100}`, 10) }}%</span>\n <tool-button\n :data=\"{ type: 'button', icon: ZoomIn, handler: zoomInHandler, tooltip: '放大' }\"\n :event-type=\"eventType\"\n ></tool-button>\n </template>\n\n <template v-else-if=\"item.type === 'button'\">\n <el-tooltip v-if=\"item.tooltip\" effect=\"dark\" placement=\"bottom-start\" :content=\"item.tooltip\">\n <el-button size=\"small\" text :disabled=\"disabled\"\n ><m-icon v-if=\"item.icon\" :icon=\"item.icon\"></m-icon><span>{{ item.text }}</span></el-button\n >\n </el-tooltip>\n <el-button v-else size=\"small\" text :disabled=\"disabled\"\n ><m-icon v-if=\"item.icon\" :icon=\"item.icon\"></m-icon><span>{{ item.text }}</span></el-button\n >\n </template>\n\n <el-dropdown v-else-if=\"item.type === 'dropdown'\" trigger=\"click\" :disabled=\"disabled\" @command=\"dropdownHandler\">\n <span class=\"el-dropdown-link menubar-menu-button\">\n {{ item.text }}<el-icon class=\"el-icon--right\"><arrow-down></arrow-down></el-icon>\n </span>\n <template #dropdown>\n <el-dropdown-menu v-if=\"item.items && item.items.length\">\n <el-dropdown-item v-for=\"(subItem, index) in item.items\" :key=\"index\" :command=\"{ item, subItem }\">{{\n subItem.text\n }}</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n\n <component v-else-if=\"item.type === 'component'\" v-bind=\"item.props || {}\" :is=\"item.component\"></component>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, markRaw, PropType } from 'vue';\nimport { ArrowDown, Back, Delete, Grid, Right, ScaleToOriginal, ZoomIn, ZoomOut } from '@element-plus/icons';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport MIcon from '@editor/components/Icon.vue';\nimport type { MenuButton, MenuComponent, MenuItem, Services } from '@editor/type';\n\nexport default defineComponent({\n components: { MIcon, ArrowDown },\n\n props: {\n data: {\n type: [Object, String] as PropType<MenuItem | string>,\n require: true,\n default: () => ({\n type: 'text',\n display: false,\n }),\n },\n\n eventType: {\n type: String as PropType<'mousedown' | 'mouseup' | 'click'>,\n default: 'click',\n },\n },\n\n setup(props) {\n const services = inject<Services>('services');\n const uiService = services?.uiService;\n\n const zoom = computed((): number => uiService?.get<number>('zoom') ?? 1);\n const showGuides = computed((): boolean => uiService?.get<boolean>('showGuides') ?? true);\n const showRule = computed((): boolean => uiService?.get<boolean>('showRule') ?? true);\n\n const zoomInHandler = () => uiService?.zoom(0.1);\n const zoomOutHandler = () => uiService?.zoom(-0.1);\n\n const item = computed((): MenuButton | MenuComponent => {\n if (typeof props.data !== 'string') {\n return props.data;\n }\n switch (props.data) {\n case '/':\n return {\n type: 'divider',\n };\n case 'zoom':\n return {\n type: 'zoom',\n };\n case 'delete':\n return {\n type: 'button',\n icon: markRaw(Delete),\n tooltip: '刪除',\n disabled: () => services?.editorService.get('node')?.type === NodeType.PAGE,\n handler: () => services?.editorService.remove(services?.editorService.get('node')),\n };\n case 'undo':\n return {\n type: 'button',\n icon: markRaw(Back),\n tooltip: '后退',\n disabled: () => !services?.historyService.state.canUndo,\n handler: () => services?.editorService.undo(),\n };\n case 'redo':\n return {\n type: 'button',\n icon: markRaw(Right),\n tooltip: '前进',\n disabled: () => !services?.historyService.state.canRedo,\n handler: () => services?.editorService.redo(),\n };\n case 'zoom-in':\n return {\n type: 'button',\n icon: markRaw(ZoomIn),\n tooltip: '放大',\n handler: zoomInHandler,\n };\n case 'zoom-out':\n return {\n type: 'button',\n icon: markRaw(ZoomOut),\n tooltip: '縮小',\n handler: zoomOutHandler,\n };\n case 'rule':\n return {\n type: 'button',\n icon: markRaw(ScaleToOriginal),\n tooltip: showRule.value ? '隐藏标尺' : '显示标尺',\n handler: () => uiService?.set('showRule', !showRule.value),\n };\n case 'guides':\n return {\n type: 'button',\n icon: markRaw(Grid),\n tooltip: showGuides.value ? '隐藏参考线' : '显示参考线',\n handler: () => uiService?.set('showGuides', !showGuides.value),\n };\n default:\n return {\n type: 'text',\n text: props.data,\n };\n }\n });\n\n const disabled = computed(() => {\n if (typeof item.value === 'string') return false;\n if (item.value.type === 'component') return false;\n if (typeof item.value.disabled === 'function') {\n return item.value.disabled(services);\n }\n return item.value.disabled;\n });\n\n const 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\n return {\n ZoomIn: markRaw(ZoomIn),\n ZoomOut: markRaw(ZoomOut),\n\n item,\n zoom,\n disabled,\n display: computed(() => {\n if (!item.value) return false;\n if (typeof item.value === 'string') return true;\n if (typeof item.value.display === 'function') {\n return item.value.display(services);\n }\n return item.value.display ?? true;\n }),\n\n zoomInHandler,\n zoomOutHandler,\n\n dropdownHandler(command: any) {\n if (command.item.handler) {\n command.item.handler(services);\n }\n },\n\n clickHandler(item: MenuButton | MenuComponent, event: MouseEvent) {\n if (props.eventType !== 'click') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n },\n\n mousedownHandler(item: MenuButton | MenuComponent, event: MouseEvent) {\n if (props.eventType !== 'mousedown') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n },\n\n mouseupHandler(item: MenuButton | MenuComponent, event: MouseEvent) {\n if (props.eventType !== 'mouseup') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n },\n };\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 data[key]\" :key=\"index\"></tool-button>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, PropType } from 'vue';\n\nimport ToolButton from '@editor/components/ToolButton.vue';\nimport { GetColumnWidth, MenuBarData, Services } from '@editor/type';\n\nexport default defineComponent({\n name: 'nav-menu',\n\n components: { ToolButton },\n\n props: {\n data: {\n type: Object as PropType<MenuBarData>,\n default: () => ({}),\n },\n\n height: {\n type: Number,\n },\n },\n\n setup(props) {\n const services = inject<Services>('services');\n\n return {\n keys: computed(() => Object.keys(props.data) as Array<keyof MenuBarData>),\n\n columnWidth: computed(() => services?.uiService.get<GetColumnWidth>('columnWidth')),\n };\n },\n});\n</script>\n","<template>\n <m-form\n :class=\"`m-editor-props-panel ${propsPanelSize}`\"\n :popper-class=\"`m-editor-props-panel-popper ${propsPanelSize}`\"\n ref=\"configForm\"\n :size=\"propsPanelSize\"\n :init-values=\"values\"\n :config=\"curFormConfig\"\n @change=\"submit\"\n ></m-form>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, 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';\n\nimport type { Services } from '@editor/type';\n\nexport default defineComponent({\n name: 'm-editor-props-panel',\n\n emits: ['mounted'],\n\n setup(props, { emit }) {\n const internalInstance = getCurrentInstance();\n const values = ref<FormValue>({});\n const configForm = ref<InstanceType<typeof MForm>>();\n // ts类型应该是FormConfig, 但是打包时会出错,所以暂时用any\n const curFormConfig = ref<any>([]);\n const services = inject<Services>('services');\n const node = computed(() => services?.editorService.get<MNode | null>('node'));\n\n const 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\n watchEffect(init);\n services?.propsService.on('props-configs-change', init);\n\n onMounted(() => {\n emit('mounted', internalInstance);\n });\n\n return {\n values,\n configForm,\n curFormConfig,\n propsPanelSize: computed(() => services?.uiService.get('propsPanelSize') || 'small'),\n\n async submit() {\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 };\n },\n});\n</script>\n","<template>\n <el-scrollbar>\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 >\n <m-icon :icon=\"item.icon\"></m-icon>\n\n <el-tooltip effect=\"dark\" placement=\"bottom\" :content=\"item.text\">\n <span>{{ item.text }}</span>\n </el-tooltip>\n </div>\n </el-collapse-item>\n </template>\n </el-collapse>\n </el-scrollbar>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, ref } from 'vue';\nimport serialize from 'serialize-javascript';\n\nimport MIcon from '@editor/components/Icon.vue';\nimport type { ComponentGroup, ComponentItem, Services } from '@editor/type';\n\nexport default defineComponent({\n name: 'ui-component-panel',\n\n components: { MIcon },\n\n setup() {\n const searchText = ref('');\n const services = inject<Services>('services');\n const 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 );\n const collapseValue = computed(() =>\n Array(list.value?.length)\n .fill(1)\n .map((x, i) => i),\n );\n\n return {\n searchText,\n collapseValue,\n list,\n\n appendComponent({ text, type, data = {} }: ComponentItem): void {\n services?.editorService.add({\n name: text,\n type,\n ...data,\n });\n },\n\n 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 };\n },\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\">\nimport { defineComponent, nextTick, onMounted, onUnmounted, PropType, ref } from 'vue';\n\nimport { MenuButton, MenuItem } from '@editor/type';\n\nimport ToolButton from './ToolButton.vue';\n\nexport default defineComponent({\n components: { ToolButton },\n\n props: {\n menuData: {\n type: Array as PropType<MenuItem[]>,\n default: () => [],\n },\n\n isSubMenu: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: ['hide', 'show'],\n\n setup(props, { emit }) {\n const menu = ref<HTMLDivElement>();\n const subMenu = ref<any>();\n const visible = ref(false);\n const subMenuData = ref<MenuItem[]>([]);\n const menuStyle = ref({\n left: '0',\n top: '0',\n });\n\n const hide = () => {\n if (!visible.value) return;\n\n visible.value = false;\n subMenu.value?.hide();\n\n emit('hide');\n };\n\n const 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\n onMounted(() => {\n if (props.isSubMenu) return;\n\n globalThis.addEventListener('mousedown', hideHandler, true);\n });\n\n onUnmounted(() => {\n if (props.isSubMenu) return;\n\n globalThis.removeEventListener('mousedown', hideHandler, true);\n });\n\n return {\n menu,\n subMenu,\n visible,\n menuStyle,\n subMenuData,\n\n hide,\n\n 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\n showSubMenu(item: MenuItem) {\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 };\n },\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';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport ContentMenu from '@editor/components/ContentMenu.vue';\nimport type { ComponentGroup, MenuButton, MenuItem, Services } from '@editor/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<MenuItem[]>('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<MenuItem[]>(() => [\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 <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 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 empty-text=\"页面空荡荡的\"\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 { MNode, MPage } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\nimport StageCore from '@tmagic/stage';\n\nimport type { EditorService } from '@editor/services/editor';\nimport type { Services } from '@editor/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 handleDragEnd() {\n if (!tree.value) return;\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 highlightNode = ref<MNode>();\n const node = ref<MNode>();\n const page = computed(() => editorService?.get('page'));\n\n watchEffect(() => {\n if (!tree.value) return;\n node.value = editorService?.get('node');\n node.value && 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 highlightNode.value = editorService?.get('highlightNode');\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,\n clickNode: node,\n expandedKeys: computed(() => (node.value ? [node.value.id] : [])),\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 #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';\n\nimport MIcon from '@editor/components/Icon.vue';\nimport { SideComponent, SideItem } from '@editor/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\"></tab-pane>\n </el-tabs>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, PropType, ref, watch } from 'vue';\n\nimport { SideBarData } from '@editor/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 id=\"m-editor-page-bar-add-icon\" class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\" @click=\"addPage\">\n <el-icon><plus></plus></el-icon>\n </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 <div\n v-for=\"item in root.items\"\n :key=\"item.key\"\n class=\"m-editor-page-bar-item\"\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 }}</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 <caret-bottom></caret-bottom>\n </el-icon>\n </template>\n </el-popover>\n </div>\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 lang=\"ts\">\nimport {\n computed,\n ComputedRef,\n defineComponent,\n inject,\n markRaw,\n onMounted,\n onUnmounted,\n ref,\n toRaw,\n watch,\n} from 'vue';\nimport { ArrowLeftBold, ArrowRightBold, CaretBottom, Delete, DocumentCopy, Plus } from '@element-plus/icons';\n\nimport type { MApp, MPage } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\n\nimport ToolButton from '@editor/components/ToolButton.vue';\nimport type { Services } from '@editor/type';\nimport { generatePageNameByApp } from '@editor/utils/editor';\n\nconst useScroll = (root: ComputedRef<MApp | undefined>) => {\n const pageBar = ref<HTMLDivElement>();\n const itemsContainer = ref<HTMLDivElement>();\n\n const pageBarWidth = ref(0);\n const canScroll = ref(false);\n\n const itemsContainerWidth = computed(() => pageBarWidth.value - 105);\n\n let translateLeft = 0;\n const 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\n const setCanScroll = () => {\n if (itemsContainer.value) {\n canScroll.value = itemsContainer.value.scrollWidth > pageBarWidth.value - 105;\n }\n };\n\n const 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\n onMounted(() => {\n pageBar.value && resizeObserver.observe(pageBar.value);\n });\n\n onUnmounted(() => {\n resizeObserver.disconnect();\n });\n\n watch(\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\n return {\n pageBar,\n itemsContainer,\n canScroll,\n\n itemsContainerWidth,\n\n scroll,\n };\n};\n\nexport default defineComponent({\n components: { ArrowLeftBold, ArrowRightBold, CaretBottom, Plus, ToolButton },\n\n setup() {\n const services = inject<Services>('services');\n const editorService = services?.editorService;\n\n const root = computed(() => editorService?.get<MApp>('root'));\n\n return {\n Delete: markRaw(Delete),\n DocumentCopy: markRaw(DocumentCopy),\n\n ...useScroll(root),\n\n root,\n page: computed(() => editorService?.get('page')),\n\n switchPage(page: MPage) {\n editorService?.select(page);\n },\n\n 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\n copy(node: MPage) {\n node && editorService?.copy(node);\n editorService?.paste({\n left: 0,\n top: 0,\n });\n },\n\n remove(node: MPage) {\n editorService?.remove(node);\n },\n };\n },\n});\n</script>\n","import { Keys } from '@editor/type';\n\ninterface ScrollViewerOptions {\n container: HTMLDivElement;\n target: HTMLDivElement;\n zoom: number;\n}\n\nexport class ScrollViewer {\n private enter = false;\n private targetEnter = false;\n private keydown = false;\n private container: HTMLDivElement;\n private target: HTMLDivElement;\n private zoom = 1;\n\n private scrollLeft = 0;\n private scrollTop = 0;\n\n private x = 0;\n private y = 0;\n\n private resizeObserver = new ResizeObserver((entries) => {\n for (const { contentRect } of entries) {\n const { width, height } = contentRect;\n const targetRect = this.target.getBoundingClientRect();\n const targetWidth = targetRect.width * this.zoom;\n const targetMarginTop = Number(this.target.style.marginTop) || 0;\n const targetHeight = (targetRect.height + targetMarginTop) * this.zoom;\n\n if (targetWidth < width) {\n (this.target as any)._left = 0;\n }\n if (targetHeight < height) {\n (this.target as any)._top = 0;\n }\n\n this.scroll();\n }\n });\n\n constructor(options: ScrollViewerOptions) {\n this.container = options.container;\n this.target = options.target;\n this.zoom = options.zoom;\n\n globalThis.addEventListener('keydown', this.keydownHandler);\n globalThis.addEventListener('keyup', this.keyupHandler);\n\n this.container.addEventListener('mouseenter', this.mouseEnterHandler);\n this.container.addEventListener('mouseleave', this.mouseLeaveHandler);\n this.target.addEventListener('mouseenter', this.targetMouseEnterHandler);\n this.target.addEventListener('mouseleave', this.targetMouseLeaveHandler);\n\n this.container.addEventListener('wheel', this.wheelHandler);\n\n this.resizeObserver.observe(this.container);\n }\n\n public destroy() {\n this.resizeObserver.disconnect();\n\n this.container.removeEventListener('mouseenter', this.mouseEnterHandler);\n this.container.removeEventListener('mouseleave', this.mouseLeaveHandler);\n this.target.removeEventListener('mouseenter', this.targetMouseEnterHandler);\n this.target.removeEventListener('mouseleave', this.targetMouseLeaveHandler);\n globalThis.removeEventListener('keydown', this.keydownHandler);\n globalThis.removeEventListener('keyup', this.keyupHandler);\n }\n\n public setZoom(zoom: number) {\n this.zoom = zoom;\n }\n\n private scroll() {\n const scrollLeft = (this.target as any)._left;\n const scrollTop = (this.target as any)._top;\n\n this.target.style.transform = `translate(${scrollLeft}px, ${scrollTop}px)`;\n }\n\n private removeHandler() {\n this.target.style.cursor = '';\n this.target.removeEventListener('mousedown', this.mousedownHandler);\n document.removeEventListener('mousemove', this.mousemoveHandler);\n document.removeEventListener('mouseup', this.mouseupHandler);\n }\n\n private wheelHandler = (event: WheelEvent) => {\n if (this.targetEnter) return;\n\n const { deltaX, deltaY, currentTarget } = event;\n\n if (currentTarget !== this.container) return;\n\n this.setScrollOffset(deltaX, deltaY);\n this.scroll();\n this.scrollLeft = (this.target as any)._left;\n this.scrollTop = (this.target as any)._top;\n };\n\n private mouseEnterHandler = () => {\n this.enter = true;\n };\n\n private mouseLeaveHandler = () => {\n this.enter = false;\n };\n\n private targetMouseEnterHandler = () => {\n this.targetEnter = true;\n };\n\n private targetMouseLeaveHandler = () => {\n this.targetEnter = false;\n };\n\n private mousedownHandler = (event: MouseEvent) => {\n if (!this.keydown) return;\n\n event.stopImmediatePropagation();\n event.stopPropagation();\n\n this.target.style.cursor = 'grabbing';\n\n this.x = event.clientX;\n this.y = event.clientY;\n\n document.addEventListener('mousemove', this.mousemoveHandler);\n document.addEventListener('mouseup', this.mouseupHandler);\n };\n\n private mouseupHandler = () => {\n this.x = 0;\n this.y = 0;\n\n this.scrollLeft = (this.target as any)._left;\n this.scrollTop = (this.target as any)._top;\n this.removeHandler();\n };\n\n private mousemoveHandler = (event: MouseEvent) => {\n event.stopImmediatePropagation();\n event.stopPropagation();\n\n const deltaX = event.clientX - this.x;\n const deltaY = event.clientY - this.y;\n\n this.setScrollOffset(deltaX, deltaY);\n this.scroll();\n };\n\n private keydownHandler = (event: KeyboardEvent) => {\n if (event.code === Keys.ESCAPE && this.enter) {\n event.preventDefault();\n event.stopImmediatePropagation();\n event.stopPropagation();\n }\n\n if (event.code !== Keys.ESCAPE || !this.enter || this.keydown) {\n return;\n }\n\n this.keydown = true;\n\n this.target.style.cursor = 'grab';\n this.container.addEventListener('mousedown', this.mousedownHandler);\n };\n\n private keyupHandler = (event: KeyboardEvent) => {\n if (event.code !== Keys.ESCAPE || !this.keydown) {\n return;\n }\n\n event.preventDefault();\n event.stopImmediatePropagation();\n event.stopPropagation();\n\n this.keydown = false;\n\n event.preventDefault();\n\n this.removeHandler();\n };\n\n private setScrollOffset(deltaX: number, deltaY: number) {\n const { width, height } = this.container.getBoundingClientRect();\n const targetRect = this.target.getBoundingClientRect();\n\n const targetWidth = targetRect.width * this.zoom;\n const targetHeight = targetRect.height * this.zoom;\n\n let y = 0;\n\n if (targetHeight > height) {\n if (deltaY > 0) {\n y = this.scrollTop + Math.min(targetHeight - height - this.scrollTop, deltaY);\n } else {\n y = this.scrollTop + Math.max(-(targetHeight - height + this.scrollTop), deltaY);\n }\n }\n\n let x = 0;\n\n if (targetWidth > width) {\n if (deltaX > 0) {\n x = this.scrollLeft + Math.min(targetWidth - width - this.scrollLeft, deltaX);\n } else {\n x = this.scrollLeft + Math.max(-(targetWidth - width + this.scrollLeft), deltaX);\n }\n }\n\n (this.target as any)._left = x;\n (this.target as any)._top = y;\n }\n}\n","<template>\n <div class=\"m-editor-scroll-viewer-container\" ref=\"container\">\n <div ref=\"el\" :style=\"style\">\n <slot></slot>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, onUnmounted, ref, watch } from 'vue';\n\nimport { ScrollViewer } from '@editor/utils/scroll-viewer';\n\nexport default defineComponent({\n name: 'm-editor-scroll-viewer',\n\n props: {\n width: Number,\n height: Number,\n zoom: {\n type: Number,\n default: 1,\n },\n },\n\n setup(props) {\n const container = ref<HTMLDivElement>();\n const el = ref<HTMLDivElement>();\n let scrollViewer: ScrollViewer;\n\n onMounted(() => {\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\n onUnmounted(() => {\n scrollViewer.destroy();\n });\n\n watch(\n () => props.zoom,\n () => {\n scrollViewer.setZoom(props.zoom);\n },\n );\n\n return {\n container,\n el,\n\n style: computed(\n () => `\n width: ${props.width}px;\n height: ${(props.height || 0) - 40}px;\n position: absolute;\n margin-top: 30px;\n `,\n ),\n };\n },\n});\n</script>\n","<template>\n <content-menu :menu-data=\"menuData\" ref=\"menu\"></content-menu>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, markRaw, onMounted, reactive, ref, watch } from 'vue';\nimport { Bottom, Delete, DocumentCopy, Top } from '@element-plus/icons';\n\nimport { NodeType } from '@tmagic/schema';\nimport type StageCore from '@tmagic/stage';\n\nimport ContentMenu from '@editor/components/ContentMenu.vue';\nimport { LayerOffset, Layout, MenuItem, Services } from '@editor/type';\nimport { COPY_STORAGE_KEY } from '@editor/utils/editor';\n\nexport default defineComponent({\n components: { ContentMenu },\n\n setup() {\n const services = inject<Services>('services');\n const editorService = services?.editorService;\n const menu = ref<InstanceType<typeof ContentMenu>>();\n const canPaste = ref(false);\n const canCenter = ref(false);\n\n const node = computed(() => editorService?.get('node'));\n const parent = computed(() => editorService?.get('parent'));\n const isPage = computed(() => node.value?.type === NodeType.PAGE);\n\n const stageContentMenu = inject<MenuItem[]>('stageContentMenu', []);\n\n onMounted(() => {\n const data = globalThis.localStorage.getItem(COPY_STORAGE_KEY);\n canPaste.value = data !== 'undefined' && !!data;\n });\n\n watch(\n parent,\n async () => {\n if (!parent.value || !editorService) return (canCenter.value = false);\n const layout = await editorService.getLayout(parent.value);\n canCenter.value =\n [Layout.ABSOLUTE, Layout.FIXED].includes(layout) &&\n ![NodeType.ROOT, NodeType.PAGE, 'pop'].includes(`${node.value?.type}`);\n },\n { immediate: true },\n );\n\n return {\n menu,\n menuData: reactive<MenuItem[]>([\n {\n type: 'button',\n text: '水平居中',\n display: () => canCenter.value,\n handler: () => {\n node.value && editorService?.alignCenter(node.value);\n },\n },\n {\n type: 'button',\n text: '复制',\n icon: markRaw(DocumentCopy),\n handler: () => {\n node.value && editorService?.copy(node.value);\n canPaste.value = true;\n },\n },\n {\n type: 'button',\n text: '粘贴',\n display: () => canPaste.value,\n handler: () => {\n const stage = editorService?.get<StageCore>('stage');\n\n const rect = menu.value?.$el.getBoundingClientRect();\n const parentRect = stage?.container?.getBoundingClientRect();\n let left = (rect?.left || 0) - (parentRect?.left || 0);\n let top = (rect?.top || 0) - (parentRect?.top || 0);\n\n if (node.value?.items && stage) {\n const parentEl = stage.renderer.contentWindow?.document.getElementById(`${node.value.id}`);\n const parentElRect = parentEl?.getBoundingClientRect();\n left = left - (parentElRect?.left || 0);\n top = top - (parentElRect?.top || 0);\n }\n\n editorService?.paste({ left, top });\n },\n },\n {\n type: 'divider',\n direction: 'horizontal',\n display: () => !isPage.value,\n },\n {\n type: 'button',\n text: '上移一层',\n icon: markRaw(Top),\n display: () => !isPage.value,\n handler: () => {\n editorService?.moveLayer(1);\n },\n },\n {\n type: 'button',\n text: '下移一层',\n icon: markRaw(Bottom),\n display: () => !isPage.value,\n handler: () => {\n editorService?.moveLayer(-1);\n },\n },\n {\n type: 'button',\n text: '置顶',\n display: () => !isPage.value,\n handler: () => {\n editorService?.moveLayer(LayerOffset.TOP);\n },\n },\n {\n type: 'button',\n text: '置底',\n display: () => !isPage.value,\n handler: () => {\n editorService?.moveLayer(LayerOffset.BOTTOM);\n },\n },\n {\n type: 'divider',\n direction: 'horizontal',\n display: () => !isPage.value,\n },\n {\n type: 'button',\n text: '删除',\n icon: Delete,\n display: () => !isPage.value,\n handler: () => {\n node.value && editorService?.remove(node.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\n show(e: MouseEvent) {\n menu.value?.show(e);\n },\n };\n },\n});\n</script>\n","<template>\n <scroll-viewer\n class=\"m-editor-stage\"\n ref=\"stageWrap\"\n :width=\"stageRect?.width\"\n :height=\"stageRect?.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\"></viewer-menu>\n </teleport>\n </scroll-viewer>\n</template>\n\n<script lang=\"ts\">\nimport {\n computed,\n defineComponent,\n inject,\n markRaw,\n onMounted,\n onUnmounted,\n ref,\n toRaw,\n watch,\n watchEffect,\n} from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport type { MApp, MNode, MPage } from '@tmagic/schema';\nimport StageCore, { GuidesType, Runtime, SortEventData, UpdateEventData } from '@tmagic/stage';\n\nimport ScrollViewer from '@editor/components/ScrollViewer.vue';\nimport {\n H_GUIDE_LINE_STORAGE_KEY,\n Layout,\n Services,\n StageOptions,\n StageRect,\n V_GUIDE_LINE_STORAGE_KEY,\n} from '@editor/type';\nimport { getGuideLineFromCache } from '@editor/utils';\n\nimport ViewerMenu from './ViewerMenu.vue';\n\nexport default defineComponent({\n name: 'magic-stage',\n\n components: {\n ViewerMenu,\n ScrollViewer,\n },\n\n setup() {\n const services = inject<Services>('services');\n const stageOptions = inject<StageOptions>('stageOptions');\n\n const stageWrap = ref<InstanceType<typeof ScrollViewer>>();\n const stageContainer = ref<HTMLDivElement>();\n const menu = ref<InstanceType<typeof ViewerMenu>>();\n\n const stageRect = computed(() => services?.uiService.get<StageRect>('stageRect'));\n const uiSelectMode = computed(() => services?.uiService.get<boolean>('uiSelectMode'));\n const root = computed(() => services?.editorService.get<MApp>('root'));\n const page = computed(() => services?.editorService.get<MPage>('page'));\n const zoom = computed(() => services?.uiService.get<number>('zoom') || 1);\n const node = computed(() => services?.editorService.get<MNode>('node'));\n\n let stage: StageCore | null = null;\n let runtime: Runtime | null = null;\n\n const getGuideLineKey = (key: string) => `${key}_${root.value?.id}_${page.value?.id}`;\n\n watchEffect(() => {\n if (stage) return;\n\n if (!stageContainer.value) return;\n if (!(stageOptions?.runtimeUrl || stageOptions?.render) || !root.value) return;\n\n stage = new StageCore({\n render: stageOptions.render,\n runtimeUrl: stageOptions.runtimeUrl,\n zoom: zoom.value,\n autoScrollIntoView: stageOptions.autoScrollIntoView,\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 services?.editorService.set('stage', markRaw(stage));\n\n stage?.mount(stageContainer.value);\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 services?.editorService.select(el.id);\n });\n\n stage?.on('highlight', (el: HTMLElement) => {\n services?.editorService.highlight(el.id);\n });\n\n stage?.on('update', (ev: UpdateEventData) => {\n services?.editorService.update({ id: ev.el.id, style: ev.style });\n });\n\n stage?.on('sort', (ev: SortEventData) => {\n services?.editorService.sort(ev.src, ev.dist);\n });\n\n stage?.on('changeGuides', (e) => {\n services?.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 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\n watch(zoom, (zoom) => {\n if (!stage || !zoom) return;\n stage.setZoom(zoom);\n });\n\n watch(root, (root) => {\n if (runtime && root) {\n runtime.updateRootConfig?.(cloneDeep(toRaw(root)));\n }\n });\n\n const 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\n onMounted(() => {\n stageWrap.value?.container && resizeObserver.observe(stageWrap.value.container);\n });\n\n onUnmounted(() => {\n stage?.destroy();\n resizeObserver.disconnect();\n services?.editorService.set('stage', null);\n });\n\n return {\n stageWrap,\n stageContainer,\n menu,\n stageRect,\n zoom,\n\n contextmenuHandler(e: MouseEvent) {\n e.preventDefault();\n menu.value?.show(e);\n },\n\n dragoverHandler(e: DragEvent) {\n e.preventDefault();\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = 'move';\n }\n },\n\n async dropHandler(e: DragEvent) {\n e.preventDefault();\n if (e.dataTransfer && page.value && 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(page.value);\n\n const containerRect = stageContainer.value.getBoundingClientRect();\n const { scrollTop, scrollLeft } = stage.mask;\n if (layout === Layout.ABSOLUTE) {\n config.style = {\n ...(config.style || {}),\n position: 'absolute',\n top: e.clientY - containerRect.top + scrollTop,\n left: e.clientX - containerRect.left + scrollLeft,\n };\n }\n\n services?.editorService.add(config, page.value);\n }\n },\n };\n },\n});\n</script>\n","<template>\n <div class=\"m-editor-workspace\" tabindex=\"1\" ref=\"workspace\">\n <magic-stage :key=\"page?.id\"></magic-stage>\n\n <slot name=\"workspace-content\"></slot>\n\n <page-bar>\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 </page-bar>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, 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 '@editor/type';\n\nimport PageBar from './PageBar.vue';\nimport MagicStage from './Stage.vue';\n\nexport default defineComponent({\n name: 'm-editor-workspace',\n\n components: {\n PageBar,\n MagicStage,\n },\n\n setup() {\n const services = inject<Services>('services');\n const workspace = ref<HTMLDivElement>();\n const node = computed(() => services?.editorService.get<MNode>('node'));\n let keycon: KeyController;\n\n const mouseenterHandler = () => {\n workspace.value?.focus();\n };\n\n const mouseleaveHandler = () => {\n workspace.value?.blur();\n };\n\n onMounted(() => {\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 (!node.value || isPage(node.value)) return;\n services?.editorService.remove(node.value);\n })\n .keyup('backspace', (e) => {\n e.inputEvent.preventDefault();\n if (!node.value || isPage(node.value)) return;\n services?.editorService.remove(node.value);\n })\n .keydown([ctrl, 'c'], (e) => {\n e.inputEvent.preventDefault();\n node.value && services?.editorService.copy(node.value);\n })\n .keydown([ctrl, 'v'], (e) => {\n e.inputEvent.preventDefault();\n node.value && services?.editorService.paste();\n })\n .keydown([ctrl, 'x'], (e) => {\n e.inputEvent.preventDefault();\n if (!node.value || isPage(node.value)) return;\n services?.editorService.copy(node.value);\n services?.editorService.remove(node.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 });\n\n onUnmounted(() => {\n workspace.value?.removeEventListener('mouseenter', mouseenterHandler);\n workspace.value?.removeEventListener('mouseleave', mouseleaveHandler);\n keycon.destroy();\n });\n\n return {\n workspace,\n\n page: computed(() => services?.editorService.get<MPage>('page')),\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 { reactive } from 'vue';\n\nimport type { ComponentGroup, ComponentGroupState } from '@editor/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[]) {\n this.state.list = componentGroupList;\n }\n\n public getList() {\n return this.state.list;\n }\n}\n\nexport type ComponentListService = ComponentList;\n\nexport default new ComponentList();\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 '@editor/services/editor';\nimport type { GetColumnWidth, SetColumnWidth, StageRect, UiState } from '@editor/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});\n\nclass Ui extends BaseService {\n constructor() {\n super([]);\n globalThis.addEventListener('resize', () => {\n this.setColumnWidth({\n center: 'auto',\n });\n });\n\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 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 if (name === 'stageContainerRect') {\n state.zoom = this.calcZoom();\n }\n }\n\n public get<T>(name: keyof typeof state): T {\n return (state as any)[name];\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 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 private calcZoom() {\n const { stageRect, stageContainerRect } = state;\n const { height, width } = stageContainerRect;\n if (!width || !height) return 1;\n if (width > stageRect.width && height > stageRect.height) {\n return 1;\n }\n return Math.min((width - 100) / stageRect.width || 1, (height - 100) / stageRect.height || 1);\n }\n}\n\nexport type UiService = Ui;\n\nexport default new Ui();\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\"></sidebar>\n </slot>\n </template>\n\n <template #workspace>\n <slot name=\"workspace\" :editorService=\"editorService\">\n <workspace>\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 #propsPanel>\n <slot name=\"propsPanel\">\n <props-panel ref=\"propsPanel\" @mounted=\"(instance) => $emit('props-panel-mounted', instance)\"></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 type { MoveableOptions } from '@tmagic/stage';\n\nimport Framework from '@editor/layouts/Framework.vue';\nimport NavMenu from '@editor/layouts/NavMenu.vue';\nimport PropsPanel from '@editor/layouts/PropsPanel.vue';\nimport Sidebar from '@editor/layouts/sidebar/Sidebar.vue';\nimport Workspace from '@editor/layouts/workspace/Workspace.vue';\nimport componentListService from '@editor/services/componentList';\nimport editorService from '@editor/services/editor';\nimport eventsService from '@editor/services/events';\nimport historyService from '@editor/services/history';\nimport propsService from '@editor/services/props';\nimport uiService from '@editor/services/ui';\nimport type { ComponentGroup, MenuBarData, MenuItem, Services, SideBarData, StageRect } from '@editor/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<MenuItem[]>,\n default: () => [],\n },\n\n stageContentMenu: {\n type: Array as PropType<MenuItem[]>,\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 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', () => {\n const node = editorService.get<MNode | null>('node') || props.defaultSelected;\n node && editorService.select(node);\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 onUnmounted(() => editorService.destroy());\n\n const services: Services = {\n componentListService,\n eventsService,\n historyService,\n propsService,\n editorService,\n uiService,\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 }),\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 './utils/polyfills';\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 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';\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(uiSelect.name, uiSelect);\n app.component(CodeLink.name, CodeLink);\n app.component(Code.name, Code);\n app.component(CodeEditor.name, CodeEditor);\n },\n};\n"],"names":["_sfc_main","_openBlock","_createBlock","_normalizeStyle","_createVNode","_withCtx","_withModifiers","_hoisted_1","Editor","_hoisted_2","_createElementBlock","_createElementVNode","_hoisted_3","_sfc_render","_renderSlot","_Fragment","_normalizeClass","_resolveDynamicComponent","_toDisplayString","_createCommentVNode","_renderList","_createTextVNode","_normalizeProps","_mergeProps","_Teleport","_toHandlers","_createSlots","ScrollViewer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tmagic-editor.es.js","sources":["../src/utils/polyfills.ts","../plugin-vue:export-helper","../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/props.ts","../src/type.ts","../src/utils/editor.ts","../src/utils/logger.ts","../src/services/editor.ts","../src/services/events.ts","../src/utils/props.ts","../src/layouts/AddPageBox.vue","../src/layouts/Resizer.vue","../src/layouts/Framework.vue","../src/components/Icon.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/PageBar.vue","../src/utils/scroll-viewer.ts","../src/components/ScrollViewer.vue","../src/layouts/workspace/ViewerMenu.vue","../src/layouts/workspace/Stage.vue","../src/layouts/workspace/Workspace.vue","../src/services/componentList.ts","../src/services/ui.ts","../src/Editor.vue","../src/index.ts"],"sourcesContent":["// serialize-javascript 依赖的 randombytes 依赖全局的 global 对象,因此此处需添加 global polyfill\nif (typeof global === 'undefined') {\n (window as any).global = window;\n}\n\nif (typeof globalThis === 'undefined') {\n (window as any).globalThis = window;\n}\n","\nexport default (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n}\n","<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 content=\"清除\">\n <el-button v-if=\"val\" 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\">\nimport { computed, defineComponent, inject, markRaw, ref } from 'vue';\nimport { Close, Delete, Pointer } from '@element-plus/icons';\n\nimport { FormState } from '@tmagic/form';\n\nimport { Services } from '@editor/type';\n\nexport default defineComponent({\n name: 'm-fields-ui-select',\n\n props: {\n labelWidth: String,\n config: Object,\n model: Object,\n prop: {\n type: String,\n default() {\n return '';\n },\n },\n name: String,\n },\n\n emits: ['change'],\n\n setup(props: any, { emit }) {\n const services = inject<Services>('services');\n const mForm = inject<FormState>('mForm');\n const val = computed(() => props.model[props.name]);\n const uiSelectMode = ref(false);\n\n const 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\n const 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\n return {\n Delete: markRaw(Delete),\n Pointer: markRaw(Pointer),\n Close: markRaw(Close),\n\n val,\n uiSelectMode,\n toName: computed(() => {\n const config = services?.editorService.getNodeById(val.value);\n return config?.name || '';\n }),\n\n 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\n cancelHandler,\n\n deleteHandler() {\n if (props.model) {\n props.model[props.name] = '';\n emit('change', '');\n mForm?.$emit('field-change', props.prop, '');\n }\n },\n };\n },\n});\n</script>\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 '@editor/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 '@editor/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 let beforeReturnValue = (await beforeMethod(...beforeArgs)) || [];\n\n if (isError(beforeReturnValue)) throw beforeReturnValue;\n\n if (!Array.isArray(beforeReturnValue)) {\n beforeReturnValue = [beforeReturnValue];\n }\n\n beforeArgs = beforeArgs.map((v: any, index: number) => {\n if (typeof beforeReturnValue[index] === 'undefined') return v;\n return beforeReturnValue[index];\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 '@editor/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","/*\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, random } from 'lodash-es';\n\nimport type { FormConfig } from '@tmagic/form';\nimport type { Id, MComponent, MNode, MPage } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\nimport { isPop, toLine } from '@tmagic/utils';\n\nimport type { PropsState } from '@editor/type';\nimport { DEFAULT_CONFIG, fillConfig, getDefaultPropsValue } from '@editor/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(['setPropsConfig', 'getPropsConfig', 'setPropsValue', 'getPropsValue', 'createId', 'setNewItemId']);\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 /**\n * 为指定类型组件设置组件属性表单配置\n * @param type 组件类型\n * @param config 组件属性表单配置\n */\n public setPropsConfig(type: string, config: FormConfig) {\n this.state.propsConfigMap[type] = 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] || DEFAULT_CONFIG);\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, 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 data = cloneDeep(defaultValue as any);\n\n await this.setNewItemId(data);\n\n return {\n ...getDefaultPropsValue(type, await this.createId(type)),\n ...mergeWith(cloneDeep(this.state.propsValueMap[type] || {}), data),\n };\n }\n\n public async createId(type: string | number): Promise<string> {\n return `${type}_${random(10000, false)}`;\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, parent?: MPage) {\n const oldId = config.id;\n\n config.id = await this.createId(config.type || 'component');\n\n // 只有弹窗在页面下的一级子元素才有效\n if (isPop(config) && parent?.type === NodeType.PAGE) {\n updatePopId(oldId, config.id, parent);\n }\n\n if (config.items && Array.isArray(config.items)) {\n for (const item of config.items) {\n await this.setNewItemId(item, config as MPage);\n }\n }\n }\n}\n\n/**\n * 复制页面时,需要把组件下关联的弹窗id换测复制出来的弹窗的id\n * @param {number} oldId 复制的源弹窗id\n * @param {number} popId 新的弹窗id\n * @param {Object} pageConfig 页面配置\n */\nconst updatePopId = (oldId: Id, popId: Id, pageConfig: MPage) => {\n pageConfig.items?.forEach((config) => {\n if (config.pop === oldId) {\n config.pop = popId;\n return;\n }\n\n if (config.popId === oldId) {\n config.popId = popId;\n return;\n }\n\n if (Array.isArray(config.items)) {\n updatePopId(oldId, popId, config as MPage);\n }\n });\n};\n\nexport type PropsService = Props;\n\nexport default new Props();\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 { MoveableOptions } from '@tmagic/stage';\n\nimport type { ComponentListService } from '@editor/services/componentList';\nimport type { EditorService } from '@editor/services/editor';\nimport type { EventsService } from '@editor/services/events';\nimport type { HistoryService } from '@editor/services/history';\nimport type { PropsService } from '@editor/services/props';\nimport type { UiService } from '@editor/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 eventsService: EventsService;\n propsService: PropsService;\n componentListService: ComponentListService;\n uiService: UiService;\n}\n\nexport interface StageOptions {\n runtimeUrl: string;\n autoScrollIntoView: boolean;\n render: () => HTMLDivElement;\n moveableOptions: MoveableOptions | ((core?: StageCore) => MoveableOptions);\n canSelect: (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 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 interface SetColumnWidth {\n left?: number;\n center?: number | 'auto';\n right?: number;\n}\n\nexport interface GetColumnWidth {\n left: number;\n center: number;\n 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\nexport interface EditorNodeInfo {\n node?: MNode;\n parent?: MContainer;\n page?: MPage;\n}\n\nexport interface AddMNode {\n type: string;\n name?: string;\n [key: string]: any;\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 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 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\n/** 工具栏 */\nexport interface MenuBarData {\n /** 顶部工具栏左边项 */\n left?: MenuItem[];\n /** 顶部工具栏中间项 */\n center?: MenuItem[];\n /** 顶部工具栏右边项 */\n 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","/*\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 '@editor/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 toRelative = (node: MNode) => {\n node.style = {\n ...(node.style || {}),\n position: 'relative',\n top: 0,\n left: 0,\n };\n return node;\n};\n\nconst setTop2Middle = (node: MNode, parentNode: MNode, stage: StageCore) => {\n const style = node.style || {};\n let height = style.height || 0;\n\n if (!stage || typeof style.top !== 'undefined' || !parentNode.style) return style;\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 style.top = (wrapperHeight - height) / 2 + scrollTop;\n } else {\n style.top = (parentHeight - height) / 2;\n }\n\n return style;\n};\n\nexport const initPosition = (node: MNode, layout: Layout, parentNode: MNode, stage: StageCore) => {\n if (layout === Layout.ABSOLUTE) {\n node.style = {\n position: 'absolute',\n ...setTop2Middle(node, parentNode, stage),\n };\n return node;\n }\n\n if (layout === Layout.RELATIVE) {\n return toRelative(node);\n }\n\n return node;\n};\n\nexport const setLayout = (node: MNode, layout: Layout) => {\n node.items?.forEach((child: MNode) => {\n if (isPop(child)) return;\n\n child.style = child.style || {};\n\n // 是 fixed 不做处理\n if (child.style.position === 'fixed') return;\n\n if (layout !== Layout.RELATIVE) {\n child.style.position = 'absolute';\n } else {\n toRelative(child);\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 node.style = {\n ...(node.style || {}),\n ...offset,\n };\n return node;\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\n const parent = path.pop();\n if (!parent) {\n return toRelative(node);\n }\n\n const layout = await getLayout(parent);\n if (layout !== Layout.RELATIVE) {\n node.style = {\n ...(node.style || {}),\n ...offset,\n position: 'absolute',\n };\n return node;\n }\n\n return toRelative(node);\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","/*\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';\nimport { cloneDeep, mergeWith } from 'lodash-es';\nimport serialize from 'serialize-javascript';\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 '@editor/services/history';\nimport propsService from '@editor/services/props';\nimport type { AddMNode, EditorNodeInfo, StoreState } from '@editor/type';\nimport { LayerOffset, Layout } from '@editor/type';\nimport {\n change2Fixed,\n COPY_STORAGE_KEY,\n Fixed2Other,\n generatePageNameByApp,\n getNodeIndex,\n initPosition,\n isFixed,\n setLayout,\n} from '@editor/utils/editor';\nimport { log } from '@editor/utils/logger';\n\nimport BaseService from './BaseService';\n\nclass Editor extends BaseService {\n private isHistoryStateChange = false;\n\n private state = reactive<StoreState>({\n root: null,\n page: null,\n parent: null,\n node: null,\n stage: null,\n highlightNode: null,\n modifiedNodeIds: new Map(),\n pageLength: 0,\n });\n\n constructor() {\n super(\n [\n 'getLayout',\n 'select',\n 'add',\n 'remove',\n 'update',\n 'sort',\n 'copy',\n 'paste',\n 'alignCenter',\n 'moveLayer',\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'\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 log('store set ', name, ' ', value);\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'\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('node', 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 addConfig 将要添加的组件节点配置\n * @param parent 要添加到的容器组件节点配置,如果不设置,默认为当前选中的组件的父节点\n * @returns 添加后的节点\n */\n public async add(addNode: AddMNode, parent?: MContainer | null): Promise<MNode> {\n const { type, ...config } = addNode;\n const curNode = this.get<MContainer>('node');\n\n let parentNode: MNode | undefined;\n const isPage = type === NodeType.PAGE;\n\n if (isPage) {\n parentNode = this.get<MApp>('root');\n // 由于支持中间件扩展,在parent参数为undefined时,parent会变成next函数\n } else if (parent && typeof parent !== 'function') {\n parentNode = parent;\n } else if (curNode.items) {\n parentNode = curNode;\n } else {\n parentNode = this.getParentById(curNode.id, false);\n }\n\n if (!parentNode) throw new Error('未找到父元素');\n\n const layout = await this.getLayout(toRaw(parentNode), addNode as MNode);\n const newNode = initPosition(\n { ...toRaw(await propsService.getPropsValue(type, config)) },\n layout,\n parentNode,\n this.get<StageCore>('stage'),\n );\n\n if ((parentNode?.type === NodeType.ROOT || curNode.type === NodeType.ROOT) && newNode.type !== NodeType.PAGE) {\n throw new Error('app下不能添加组件');\n }\n\n parentNode?.items?.push(newNode);\n\n const stage = this.get<StageCore | null>('stage');\n\n await stage?.add({ config: cloneDeep(newNode), root: cloneDeep(this.get('root')) });\n\n await this.select(newNode);\n\n this.addModifiedNodeId(newNode.id);\n if (!isPage) {\n this.pushHistoryState();\n }\n\n stage?.select(newNode.id);\n\n if (isPage) {\n this.state.pageLength += 1;\n }\n\n this.emit('add', newNode);\n\n return newNode;\n }\n\n /**\n * 删除组件\n * @param {Object} node\n * @return {Object} 删除的组件配置\n */\n public async remove(node: MNode): Promise<MNode | void> {\n if (!node?.id) return;\n\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, false);\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, root: this.get('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('node', null);\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 this.emit('remove', node);\n\n return node;\n }\n } else {\n await this.select(parent);\n stage?.select(parent.id);\n }\n\n this.addModifiedNodeId(parent.id);\n this.pushHistoryState();\n\n this.emit('remove', node);\n\n return node;\n }\n\n /**\n * 更新节点\n * @param config 新的节点配置,配置中需要有id信息\n * @returns 更新后的节点配置\n */\n public async update(config: MNode): Promise<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 if (`${newConfig.id}` === `${this.get('node').id}`) {\n this.set('node', newConfig);\n }\n\n this.get<StageCore | null>('stage')?.update({ config: cloneDeep(newConfig), root: this.get('root') });\n\n if (newConfig.type === NodeType.PAGE) {\n this.set('page', newConfig);\n }\n\n this.addModifiedNodeId(newConfig.id);\n this.pushHistoryState();\n\n this.emit('update', newConfig);\n\n return newConfig;\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({ config: cloneDeep(node), root: this.get('root') });\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): Promise<void> {\n globalThis.localStorage.setItem(COPY_STORAGE_KEY, serialize(config));\n }\n\n /**\n * 从localStorage中获取节点,然后添加到当前容器中\n * @param position 如果设置,指定组件位置\n * @returns 添加后的组件节点配置\n */\n public async paste(position: { left?: number; top?: number } = {}): Promise<MNode | void> {\n const configStr = globalThis.localStorage.getItem(COPY_STORAGE_KEY);\n // eslint-disable-next-line prefer-const\n let config: any = {};\n if (!configStr) {\n return;\n }\n\n try {\n // eslint-disable-next-line no-eval\n eval(`config = ${configStr}`);\n } catch (e) {\n console.error(e);\n return;\n }\n\n await propsService.setNewItemId(config, this.get('root'));\n if (config.style) {\n config.style = {\n ...config.style,\n ...position,\n };\n }\n\n if (isPage(config)) {\n config.name = generatePageNameByApp(this.get('root'));\n }\n\n return await this.add(config);\n }\n\n /**\n * 将指点节点设置居中\n * @param config 组件节点配置\n * @returns 当前组件节点配置\n */\n public async alignCenter(config: MNode): Promise<MNode | void> {\n const parent = this.get<MContainer>('parent');\n const node = this.get<MNode>('node');\n const layout = await this.getLayout(toRaw(parent), toRaw(node));\n if (layout === Layout.RELATIVE) {\n return;\n }\n\n if (!node.style) return;\n\n const stage = this.get<StageCore>('stage');\n const doc = stage?.renderer.contentWindow?.document;\n\n if (doc) {\n const parentEl = doc.getElementById(`${parent.id}`);\n const el = doc.getElementById(`${node.id}`);\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 await this.update(node);\n this.get<StageCore | null>('stage')?.update({ config: cloneDeep(toRaw(node)), root: this.get('root') });\n this.addModifiedNodeId(config.id);\n this.pushHistoryState();\n\n return config;\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('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 this.get<StageCore | null>('stage')?.update({ config: cloneDeep(toRaw(parent)), root: this.get('root') });\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 } = 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 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('page', null);\n this.set('parent', null);\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 let newConfig = cloneDeep(dist);\n\n if (!isPop(src) && newConfig.style?.position) {\n if (isFixed(newConfig) && !isFixed(src)) {\n newConfig = change2Fixed(newConfig, root);\n } else if (!isFixed(newConfig) && isFixed(src)) {\n newConfig = 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 '@editor/type';\n\nimport BaseService from './BaseService';\n\nconst eventMap: Record<string, EventOption[]> = reactive({});\nconst 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\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 '@editor/services/editor';\nimport eventsService from '@editor/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// 默认组件属性表单配置\nexport const DEFAULT_CONFIG: FormConfig = fillConfig([]);\n\n/**\n * 获取默认属性配置\n * @param type 组件类型\n * @returns Object\n */\nexport const getDefaultPropsValue = (type: string, id: string) =>\n ['page', 'container'].includes(type)\n ? {\n type,\n id,\n layout: 'absolute',\n style: {},\n name: type,\n items: [],\n }\n : {\n type,\n id,\n style: {},\n name: type,\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';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport type { Services } from '@editor/type';\nimport { generatePageNameByApp } from '@editor/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 '@editor/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 '@editor/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 <el-icon v-if=\"!icon\"><edit></edit></el-icon>\n <img v-else-if=\"typeof icon === 'string' && icon.startsWith('http')\" :src=\"icon\" />\n <i v-else-if=\"typeof icon === 'string'\" :class=\"icon\"></i>\n <el-icon v-else><component :is=\"toRaw(icon)\"></component></el-icon>\n</template>\n\n<script lang=\"ts\">\nimport { Component, defineComponent, PropType, toRaw } from 'vue';\nimport { Edit } from '@element-plus/icons';\n\nexport default defineComponent({\n name: 'm-icon',\n\n components: { Edit },\n\n props: {\n icon: {\n type: [String, Object] as PropType<string | Component>,\n },\n },\n\n setup() {\n return {\n toRaw,\n };\n },\n});\n</script>\n","<template>\n <div\n v-if=\"display\"\n class=\"menu-item\"\n :class=\"item.type\"\n @click=\"clickHandler(item, $event)\"\n @mousedown=\"mousedownHandler(item, $event)\"\n @mouseup=\"mouseupHandler(item, $event)\"\n >\n <el-divider v-if=\"item.type === 'divider'\" :direction=\"item.direction || 'vertical'\"></el-divider>\n <div v-else-if=\"item.type === 'text'\" class=\"menu-item-text\">{{ item.text }}</div>\n\n <template v-else-if=\"item.type === 'zoom'\">\n <tool-button\n :data=\"{ type: 'button', icon: ZoomOut, handler: zoomOutHandler, tooltip: '缩小' }\"\n :event-type=\"eventType\"\n ></tool-button>\n <span class=\"menu-item-text\" style=\"margin: 0 5px\">{{ parseInt(`${zoom * 100}`, 10) }}%</span>\n <tool-button\n :data=\"{ type: 'button', icon: ZoomIn, handler: zoomInHandler, tooltip: '放大' }\"\n :event-type=\"eventType\"\n ></tool-button>\n </template>\n\n <template v-else-if=\"item.type === 'button'\">\n <el-tooltip v-if=\"item.tooltip\" effect=\"dark\" placement=\"bottom-start\" :content=\"item.tooltip\">\n <el-button size=\"small\" text :disabled=\"disabled\"\n ><m-icon v-if=\"item.icon\" :icon=\"item.icon\"></m-icon><span>{{ item.text }}</span></el-button\n >\n </el-tooltip>\n <el-button v-else size=\"small\" text :disabled=\"disabled\"\n ><m-icon v-if=\"item.icon\" :icon=\"item.icon\"></m-icon><span>{{ item.text }}</span></el-button\n >\n </template>\n\n <el-dropdown v-else-if=\"item.type === 'dropdown'\" trigger=\"click\" :disabled=\"disabled\" @command=\"dropdownHandler\">\n <span class=\"el-dropdown-link menubar-menu-button\">\n {{ item.text }}<el-icon class=\"el-icon--right\"><arrow-down></arrow-down></el-icon>\n </span>\n <template #dropdown>\n <el-dropdown-menu v-if=\"item.items && item.items.length\">\n <el-dropdown-item v-for=\"(subItem, index) in item.items\" :key=\"index\" :command=\"{ item, subItem }\">{{\n subItem.text\n }}</el-dropdown-item>\n </el-dropdown-menu>\n </template>\n </el-dropdown>\n\n <component v-else-if=\"item.type === 'component'\" v-bind=\"item.props || {}\" :is=\"item.component\"></component>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, markRaw, PropType } from 'vue';\nimport { ArrowDown, Back, Delete, Grid, Right, ScaleToOriginal, ZoomIn, ZoomOut } from '@element-plus/icons';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport MIcon from '@editor/components/Icon.vue';\nimport type { MenuButton, MenuComponent, MenuItem, Services } from '@editor/type';\n\nexport default defineComponent({\n components: { MIcon, ArrowDown },\n\n props: {\n data: {\n type: [Object, String] as PropType<MenuItem | string>,\n require: true,\n default: () => ({\n type: 'text',\n display: false,\n }),\n },\n\n eventType: {\n type: String as PropType<'mousedown' | 'mouseup' | 'click'>,\n default: 'click',\n },\n },\n\n setup(props) {\n const services = inject<Services>('services');\n const uiService = services?.uiService;\n\n const zoom = computed((): number => uiService?.get<number>('zoom') ?? 1);\n const showGuides = computed((): boolean => uiService?.get<boolean>('showGuides') ?? true);\n const showRule = computed((): boolean => uiService?.get<boolean>('showRule') ?? true);\n\n const zoomInHandler = () => uiService?.zoom(0.1);\n const zoomOutHandler = () => uiService?.zoom(-0.1);\n\n const item = computed((): MenuButton | MenuComponent => {\n if (typeof props.data !== 'string') {\n return props.data;\n }\n switch (props.data) {\n case '/':\n return {\n type: 'divider',\n };\n case 'zoom':\n return {\n type: 'zoom',\n };\n case 'delete':\n return {\n type: 'button',\n icon: markRaw(Delete),\n tooltip: '刪除',\n disabled: () => services?.editorService.get('node')?.type === NodeType.PAGE,\n handler: () => services?.editorService.remove(services?.editorService.get('node')),\n };\n case 'undo':\n return {\n type: 'button',\n icon: markRaw(Back),\n tooltip: '后退',\n disabled: () => !services?.historyService.state.canUndo,\n handler: () => services?.editorService.undo(),\n };\n case 'redo':\n return {\n type: 'button',\n icon: markRaw(Right),\n tooltip: '前进',\n disabled: () => !services?.historyService.state.canRedo,\n handler: () => services?.editorService.redo(),\n };\n case 'zoom-in':\n return {\n type: 'button',\n icon: markRaw(ZoomIn),\n tooltip: '放大',\n handler: zoomInHandler,\n };\n case 'zoom-out':\n return {\n type: 'button',\n icon: markRaw(ZoomOut),\n tooltip: '縮小',\n handler: zoomOutHandler,\n };\n case 'rule':\n return {\n type: 'button',\n icon: markRaw(ScaleToOriginal),\n tooltip: showRule.value ? '隐藏标尺' : '显示标尺',\n handler: () => uiService?.set('showRule', !showRule.value),\n };\n case 'guides':\n return {\n type: 'button',\n icon: markRaw(Grid),\n tooltip: showGuides.value ? '隐藏参考线' : '显示参考线',\n handler: () => uiService?.set('showGuides', !showGuides.value),\n };\n default:\n return {\n type: 'text',\n text: props.data,\n };\n }\n });\n\n const disabled = computed(() => {\n if (typeof item.value === 'string') return false;\n if (item.value.type === 'component') return false;\n if (typeof item.value.disabled === 'function') {\n return item.value.disabled(services);\n }\n return item.value.disabled;\n });\n\n const 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\n return {\n ZoomIn: markRaw(ZoomIn),\n ZoomOut: markRaw(ZoomOut),\n\n item,\n zoom,\n disabled,\n display: computed(() => {\n if (!item.value) return false;\n if (typeof item.value === 'string') return true;\n if (typeof item.value.display === 'function') {\n return item.value.display(services);\n }\n return item.value.display ?? true;\n }),\n\n zoomInHandler,\n zoomOutHandler,\n\n dropdownHandler(command: any) {\n if (command.item.handler) {\n command.item.handler(services);\n }\n },\n\n clickHandler(item: MenuButton | MenuComponent, event: MouseEvent) {\n if (props.eventType !== 'click') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n },\n\n mousedownHandler(item: MenuButton | MenuComponent, event: MouseEvent) {\n if (props.eventType !== 'mousedown') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n },\n\n mouseupHandler(item: MenuButton | MenuComponent, event: MouseEvent) {\n if (props.eventType !== 'mouseup') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n },\n };\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 data[key]\" :key=\"index\"></tool-button>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, PropType } from 'vue';\n\nimport ToolButton from '@editor/components/ToolButton.vue';\nimport { GetColumnWidth, MenuBarData, Services } from '@editor/type';\n\nexport default defineComponent({\n name: 'nav-menu',\n\n components: { ToolButton },\n\n props: {\n data: {\n type: Object as PropType<MenuBarData>,\n default: () => ({}),\n },\n\n height: {\n type: Number,\n },\n },\n\n setup(props) {\n const services = inject<Services>('services');\n\n return {\n keys: computed(() => Object.keys(props.data) as Array<keyof MenuBarData>),\n\n columnWidth: computed(() => services?.uiService.get<GetColumnWidth>('columnWidth')),\n };\n },\n});\n</script>\n","<template>\n <m-form\n :class=\"`m-editor-props-panel ${propsPanelSize}`\"\n :popper-class=\"`m-editor-props-panel-popper ${propsPanelSize}`\"\n ref=\"configForm\"\n :size=\"propsPanelSize\"\n :init-values=\"values\"\n :config=\"curFormConfig\"\n @change=\"submit\"\n ></m-form>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, 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';\n\nimport type { Services } from '@editor/type';\n\nexport default defineComponent({\n name: 'm-editor-props-panel',\n\n emits: ['mounted'],\n\n setup(props, { emit }) {\n const internalInstance = getCurrentInstance();\n const values = ref<FormValue>({});\n const configForm = ref<InstanceType<typeof MForm>>();\n // ts类型应该是FormConfig, 但是打包时会出错,所以暂时用any\n const curFormConfig = ref<any>([]);\n const services = inject<Services>('services');\n const node = computed(() => services?.editorService.get<MNode | null>('node'));\n\n const 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\n watchEffect(init);\n services?.propsService.on('props-configs-change', init);\n\n onMounted(() => {\n emit('mounted', internalInstance);\n });\n\n return {\n values,\n configForm,\n curFormConfig,\n propsPanelSize: computed(() => services?.uiService.get('propsPanelSize') || 'small'),\n\n async submit() {\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 };\n },\n});\n</script>\n","<template>\n <el-scrollbar>\n <slot name=\"component-list-panel\"></slot>\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 >\n <m-icon :icon=\"item.icon\"></m-icon>\n\n <el-tooltip effect=\"dark\" placement=\"bottom\" :content=\"item.text\">\n <span>{{ item.text }}</span>\n </el-tooltip>\n </div>\n </el-collapse-item>\n </template>\n </el-collapse>\n </el-scrollbar>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, ref } from 'vue';\nimport serialize from 'serialize-javascript';\n\nimport MIcon from '@editor/components/Icon.vue';\nimport type { ComponentGroup, ComponentItem, Services } from '@editor/type';\n\nexport default defineComponent({\n name: 'ui-component-panel',\n\n components: { MIcon },\n\n setup() {\n const searchText = ref('');\n const services = inject<Services>('services');\n const 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 );\n const collapseValue = computed(() =>\n Array(list.value?.length)\n .fill(1)\n .map((x, i) => i),\n );\n\n return {\n searchText,\n collapseValue,\n list,\n\n appendComponent({ text, type, data = {} }: ComponentItem): void {\n services?.editorService.add({\n name: text,\n type,\n ...data,\n });\n },\n\n 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 };\n },\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\">\nimport { defineComponent, nextTick, onMounted, onUnmounted, PropType, ref } from 'vue';\n\nimport { MenuButton, MenuItem } from '@editor/type';\n\nimport ToolButton from './ToolButton.vue';\n\nexport default defineComponent({\n components: { ToolButton },\n\n props: {\n menuData: {\n type: Array as PropType<MenuItem[]>,\n default: () => [],\n },\n\n isSubMenu: {\n type: Boolean,\n default: false,\n },\n },\n\n emits: ['hide', 'show'],\n\n setup(props, { emit }) {\n const menu = ref<HTMLDivElement>();\n const subMenu = ref<any>();\n const visible = ref(false);\n const subMenuData = ref<MenuItem[]>([]);\n const menuStyle = ref({\n left: '0',\n top: '0',\n });\n\n const hide = () => {\n if (!visible.value) return;\n\n visible.value = false;\n subMenu.value?.hide();\n\n emit('hide');\n };\n\n const 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\n onMounted(() => {\n if (props.isSubMenu) return;\n\n globalThis.addEventListener('mousedown', hideHandler, true);\n });\n\n onUnmounted(() => {\n if (props.isSubMenu) return;\n\n globalThis.removeEventListener('mousedown', hideHandler, true);\n });\n\n return {\n menu,\n subMenu,\n visible,\n menuStyle,\n subMenuData,\n\n hide,\n\n 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\n showSubMenu(item: MenuItem) {\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 };\n },\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';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport ContentMenu from '@editor/components/ContentMenu.vue';\nimport type { ComponentGroup, MenuButton, MenuItem, Services } from '@editor/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<MenuItem[]>('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<MenuItem[]>(() => [\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\"></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 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 empty-text=\"页面空荡荡的\"\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 { MNode, MPage } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\nimport StageCore from '@tmagic/stage';\n\nimport type { EditorService } from '@editor/services/editor';\nimport type { Services } from '@editor/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 handleDragEnd() {\n if (!tree.value) return;\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 highlightNode = ref<MNode>();\n const node = ref<MNode>();\n const page = computed(() => editorService?.get('page'));\n\n watchEffect(() => {\n if (!tree.value) return;\n node.value = editorService?.get('node');\n node.value && 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 highlightNode.value = editorService?.get('highlightNode');\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,\n clickNode: node,\n expandedKeys: computed(() => (node.value ? [node.value.id] : [])),\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 #layer-panel v-if=\"data === 'layer'\">\n <slot name=\"layer-panel\"></slot>\n </template>\n\n <template #component-list-panel v-if=\"data === 'component-list'\">\n <slot name=\"component-list-panel\"></slot>\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';\n\nimport MIcon from '@editor/components/Icon.vue';\nimport { SideComponent, SideItem } from '@editor/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 v-if=\"item === 'layer'\">\n <slot name=\"layer-panel\"></slot>\n </template>\n\n <template #component-list-panel v-if=\"item === 'component-list'\">\n <slot name=\"component-list-panel\"></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 '@editor/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 id=\"m-editor-page-bar-add-icon\" class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\" @click=\"addPage\">\n <el-icon><plus></plus></el-icon>\n </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 <div\n v-for=\"item in root.items\"\n :key=\"item.key\"\n class=\"m-editor-page-bar-item\"\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 }}</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 <caret-bottom></caret-bottom>\n </el-icon>\n </template>\n </el-popover>\n </div>\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 lang=\"ts\">\nimport {\n computed,\n ComputedRef,\n defineComponent,\n inject,\n markRaw,\n onMounted,\n onUnmounted,\n ref,\n toRaw,\n watch,\n} from 'vue';\nimport { ArrowLeftBold, ArrowRightBold, CaretBottom, Delete, DocumentCopy, Plus } from '@element-plus/icons';\n\nimport type { MApp, MPage } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\n\nimport ToolButton from '@editor/components/ToolButton.vue';\nimport type { Services } from '@editor/type';\nimport { generatePageNameByApp } from '@editor/utils/editor';\n\nconst useScroll = (root: ComputedRef<MApp | undefined>) => {\n const pageBar = ref<HTMLDivElement>();\n const itemsContainer = ref<HTMLDivElement>();\n\n const pageBarWidth = ref(0);\n const canScroll = ref(false);\n\n const itemsContainerWidth = computed(() => pageBarWidth.value - 105);\n\n let translateLeft = 0;\n const 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\n const setCanScroll = () => {\n if (itemsContainer.value) {\n canScroll.value = itemsContainer.value.scrollWidth > pageBarWidth.value - 105;\n }\n };\n\n const 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\n onMounted(() => {\n pageBar.value && resizeObserver.observe(pageBar.value);\n });\n\n onUnmounted(() => {\n resizeObserver.disconnect();\n });\n\n watch(\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\n return {\n pageBar,\n itemsContainer,\n canScroll,\n\n itemsContainerWidth,\n\n scroll,\n };\n};\n\nexport default defineComponent({\n components: { ArrowLeftBold, ArrowRightBold, CaretBottom, Plus, ToolButton },\n\n setup() {\n const services = inject<Services>('services');\n const editorService = services?.editorService;\n\n const root = computed(() => editorService?.get<MApp>('root'));\n\n return {\n Delete: markRaw(Delete),\n DocumentCopy: markRaw(DocumentCopy),\n\n ...useScroll(root),\n\n root,\n page: computed(() => editorService?.get('page')),\n\n switchPage(page: MPage) {\n editorService?.select(page);\n },\n\n 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\n copy(node: MPage) {\n node && editorService?.copy(node);\n editorService?.paste({\n left: 0,\n top: 0,\n });\n },\n\n remove(node: MPage) {\n editorService?.remove(node);\n },\n };\n },\n});\n</script>\n","import { Keys } from '@editor/type';\n\ninterface ScrollViewerOptions {\n container: HTMLDivElement;\n target: HTMLDivElement;\n zoom: number;\n}\n\nexport class ScrollViewer {\n private enter = false;\n private targetEnter = false;\n private keydown = false;\n private container: HTMLDivElement;\n private target: HTMLDivElement;\n private zoom = 1;\n\n private scrollLeft = 0;\n private scrollTop = 0;\n\n private x = 0;\n private y = 0;\n\n private resizeObserver = new ResizeObserver((entries) => {\n for (const { contentRect } of entries) {\n const { width, height } = contentRect;\n const targetRect = this.target.getBoundingClientRect();\n const targetWidth = targetRect.width * this.zoom;\n const targetMarginTop = Number(this.target.style.marginTop) || 0;\n const targetHeight = (targetRect.height + targetMarginTop) * this.zoom;\n\n if (targetWidth < width) {\n (this.target as any)._left = 0;\n }\n if (targetHeight < height) {\n (this.target as any)._top = 0;\n }\n\n this.scroll();\n }\n });\n\n constructor(options: ScrollViewerOptions) {\n this.container = options.container;\n this.target = options.target;\n this.zoom = options.zoom;\n\n globalThis.addEventListener('keydown', this.keydownHandler);\n globalThis.addEventListener('keyup', this.keyupHandler);\n\n this.container.addEventListener('mouseenter', this.mouseEnterHandler);\n this.container.addEventListener('mouseleave', this.mouseLeaveHandler);\n this.target.addEventListener('mouseenter', this.targetMouseEnterHandler);\n this.target.addEventListener('mouseleave', this.targetMouseLeaveHandler);\n\n this.container.addEventListener('wheel', this.wheelHandler);\n\n this.resizeObserver.observe(this.container);\n }\n\n public destroy() {\n this.resizeObserver.disconnect();\n\n this.container.removeEventListener('mouseenter', this.mouseEnterHandler);\n this.container.removeEventListener('mouseleave', this.mouseLeaveHandler);\n this.target.removeEventListener('mouseenter', this.targetMouseEnterHandler);\n this.target.removeEventListener('mouseleave', this.targetMouseLeaveHandler);\n globalThis.removeEventListener('keydown', this.keydownHandler);\n globalThis.removeEventListener('keyup', this.keyupHandler);\n }\n\n public setZoom(zoom: number) {\n this.zoom = zoom;\n }\n\n private scroll() {\n const scrollLeft = (this.target as any)._left;\n const scrollTop = (this.target as any)._top;\n\n this.target.style.transform = `translate(${scrollLeft}px, ${scrollTop}px)`;\n }\n\n private removeHandler() {\n this.target.style.cursor = '';\n this.target.removeEventListener('mousedown', this.mousedownHandler);\n document.removeEventListener('mousemove', this.mousemoveHandler);\n document.removeEventListener('mouseup', this.mouseupHandler);\n }\n\n private wheelHandler = (event: WheelEvent) => {\n if (this.targetEnter) return;\n\n const { deltaX, deltaY, currentTarget } = event;\n\n if (currentTarget !== this.container) return;\n\n this.setScrollOffset(deltaX, deltaY);\n this.scroll();\n this.scrollLeft = (this.target as any)._left;\n this.scrollTop = (this.target as any)._top;\n };\n\n private mouseEnterHandler = () => {\n this.enter = true;\n };\n\n private mouseLeaveHandler = () => {\n this.enter = false;\n };\n\n private targetMouseEnterHandler = () => {\n this.targetEnter = true;\n };\n\n private targetMouseLeaveHandler = () => {\n this.targetEnter = false;\n };\n\n private mousedownHandler = (event: MouseEvent) => {\n if (!this.keydown) return;\n\n event.stopImmediatePropagation();\n event.stopPropagation();\n\n this.target.style.cursor = 'grabbing';\n\n this.x = event.clientX;\n this.y = event.clientY;\n\n document.addEventListener('mousemove', this.mousemoveHandler);\n document.addEventListener('mouseup', this.mouseupHandler);\n };\n\n private mouseupHandler = () => {\n this.x = 0;\n this.y = 0;\n\n this.scrollLeft = (this.target as any)._left;\n this.scrollTop = (this.target as any)._top;\n this.removeHandler();\n };\n\n private mousemoveHandler = (event: MouseEvent) => {\n event.stopImmediatePropagation();\n event.stopPropagation();\n\n const deltaX = event.clientX - this.x;\n const deltaY = event.clientY - this.y;\n\n this.setScrollOffset(deltaX, deltaY);\n this.scroll();\n };\n\n private keydownHandler = (event: KeyboardEvent) => {\n if (event.code === Keys.ESCAPE && this.enter) {\n event.preventDefault();\n event.stopImmediatePropagation();\n event.stopPropagation();\n }\n\n if (event.code !== Keys.ESCAPE || !this.enter || this.keydown) {\n return;\n }\n\n this.keydown = true;\n\n this.target.style.cursor = 'grab';\n this.container.addEventListener('mousedown', this.mousedownHandler);\n };\n\n private keyupHandler = (event: KeyboardEvent) => {\n if (event.code !== Keys.ESCAPE || !this.keydown) {\n return;\n }\n\n event.preventDefault();\n event.stopImmediatePropagation();\n event.stopPropagation();\n\n this.keydown = false;\n\n event.preventDefault();\n\n this.removeHandler();\n };\n\n private setScrollOffset(deltaX: number, deltaY: number) {\n const { width, height } = this.container.getBoundingClientRect();\n const targetRect = this.target.getBoundingClientRect();\n\n const targetWidth = targetRect.width * this.zoom;\n const targetHeight = targetRect.height * this.zoom;\n\n let y = 0;\n\n if (targetHeight > height) {\n if (deltaY > 0) {\n y = this.scrollTop + Math.min(targetHeight - height - this.scrollTop, deltaY);\n } else {\n y = this.scrollTop + Math.max(-(targetHeight - height + this.scrollTop), deltaY);\n }\n }\n\n let x = 0;\n\n if (targetWidth > width) {\n if (deltaX > 0) {\n x = this.scrollLeft + Math.min(targetWidth - width - this.scrollLeft, deltaX);\n } else {\n x = this.scrollLeft + Math.max(-(targetWidth - width + this.scrollLeft), deltaX);\n }\n }\n\n (this.target as any)._left = x;\n (this.target as any)._top = y;\n }\n}\n","<template>\n <div class=\"m-editor-scroll-viewer-container\" ref=\"container\">\n <div ref=\"el\" :style=\"style\">\n <slot></slot>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, onMounted, onUnmounted, ref, watch } from 'vue';\n\nimport { ScrollViewer } from '@editor/utils/scroll-viewer';\n\nexport default defineComponent({\n name: 'm-editor-scroll-viewer',\n\n props: {\n width: Number,\n height: Number,\n zoom: {\n type: Number,\n default: 1,\n },\n },\n\n setup(props) {\n const container = ref<HTMLDivElement>();\n const el = ref<HTMLDivElement>();\n let scrollViewer: ScrollViewer;\n\n onMounted(() => {\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\n onUnmounted(() => {\n scrollViewer.destroy();\n });\n\n watch(\n () => props.zoom,\n () => {\n scrollViewer.setZoom(props.zoom);\n },\n );\n\n return {\n container,\n el,\n\n style: computed(\n () => `\n width: ${props.width}px;\n height: ${(props.height || 0) - 40}px;\n position: absolute;\n margin-top: 30px;\n `,\n ),\n };\n },\n});\n</script>\n","<template>\n <content-menu :menu-data=\"menuData\" ref=\"menu\"></content-menu>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, markRaw, onMounted, reactive, ref, watch } from 'vue';\nimport { Bottom, Delete, DocumentCopy, Top } from '@element-plus/icons';\n\nimport { NodeType } from '@tmagic/schema';\nimport type StageCore from '@tmagic/stage';\n\nimport ContentMenu from '@editor/components/ContentMenu.vue';\nimport { LayerOffset, Layout, MenuItem, Services } from '@editor/type';\nimport { COPY_STORAGE_KEY } from '@editor/utils/editor';\n\nexport default defineComponent({\n components: { ContentMenu },\n\n setup() {\n const services = inject<Services>('services');\n const editorService = services?.editorService;\n const menu = ref<InstanceType<typeof ContentMenu>>();\n const canPaste = ref(false);\n const canCenter = ref(false);\n\n const node = computed(() => editorService?.get('node'));\n const parent = computed(() => editorService?.get('parent'));\n const isPage = computed(() => node.value?.type === NodeType.PAGE);\n\n const stageContentMenu = inject<MenuItem[]>('stageContentMenu', []);\n\n onMounted(() => {\n const data = globalThis.localStorage.getItem(COPY_STORAGE_KEY);\n canPaste.value = data !== 'undefined' && !!data;\n });\n\n watch(\n parent,\n async () => {\n if (!parent.value || !editorService) return (canCenter.value = false);\n const layout = await editorService.getLayout(parent.value);\n canCenter.value =\n [Layout.ABSOLUTE, Layout.FIXED].includes(layout) &&\n ![NodeType.ROOT, NodeType.PAGE, 'pop'].includes(`${node.value?.type}`);\n },\n { immediate: true },\n );\n\n return {\n menu,\n menuData: reactive<MenuItem[]>([\n {\n type: 'button',\n text: '水平居中',\n display: () => canCenter.value,\n handler: () => {\n node.value && editorService?.alignCenter(node.value);\n },\n },\n {\n type: 'button',\n text: '复制',\n icon: markRaw(DocumentCopy),\n handler: () => {\n node.value && editorService?.copy(node.value);\n canPaste.value = true;\n },\n },\n {\n type: 'button',\n text: '粘贴',\n display: () => canPaste.value,\n handler: () => {\n const stage = editorService?.get<StageCore>('stage');\n\n const rect = menu.value?.$el.getBoundingClientRect();\n const parentRect = stage?.container?.getBoundingClientRect();\n let left = (rect?.left || 0) - (parentRect?.left || 0);\n let top = (rect?.top || 0) - (parentRect?.top || 0);\n\n if (node.value?.items && stage) {\n const parentEl = stage.renderer.contentWindow?.document.getElementById(`${node.value.id}`);\n const parentElRect = parentEl?.getBoundingClientRect();\n left = left - (parentElRect?.left || 0);\n top = top - (parentElRect?.top || 0);\n }\n\n editorService?.paste({ left, top });\n },\n },\n {\n type: 'divider',\n direction: 'horizontal',\n display: () => !isPage.value,\n },\n {\n type: 'button',\n text: '上移一层',\n icon: markRaw(Top),\n display: () => !isPage.value,\n handler: () => {\n editorService?.moveLayer(1);\n },\n },\n {\n type: 'button',\n text: '下移一层',\n icon: markRaw(Bottom),\n display: () => !isPage.value,\n handler: () => {\n editorService?.moveLayer(-1);\n },\n },\n {\n type: 'button',\n text: '置顶',\n display: () => !isPage.value,\n handler: () => {\n editorService?.moveLayer(LayerOffset.TOP);\n },\n },\n {\n type: 'button',\n text: '置底',\n display: () => !isPage.value,\n handler: () => {\n editorService?.moveLayer(LayerOffset.BOTTOM);\n },\n },\n {\n type: 'divider',\n direction: 'horizontal',\n display: () => !isPage.value,\n },\n {\n type: 'button',\n text: '删除',\n icon: Delete,\n display: () => !isPage.value,\n handler: () => {\n node.value && editorService?.remove(node.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\n show(e: MouseEvent) {\n menu.value?.show(e);\n },\n };\n },\n});\n</script>\n","<template>\n <scroll-viewer\n class=\"m-editor-stage\"\n ref=\"stageWrap\"\n :width=\"stageRect?.width\"\n :height=\"stageRect?.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\"></viewer-menu>\n </teleport>\n </scroll-viewer>\n</template>\n\n<script lang=\"ts\">\nimport {\n computed,\n defineComponent,\n inject,\n markRaw,\n onMounted,\n onUnmounted,\n ref,\n toRaw,\n watch,\n watchEffect,\n} from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport type { MApp, MNode, MPage } from '@tmagic/schema';\nimport StageCore, { GuidesType, Runtime, SortEventData, UpdateEventData } from '@tmagic/stage';\n\nimport ScrollViewer from '@editor/components/ScrollViewer.vue';\nimport {\n H_GUIDE_LINE_STORAGE_KEY,\n Layout,\n Services,\n StageOptions,\n StageRect,\n V_GUIDE_LINE_STORAGE_KEY,\n} from '@editor/type';\nimport { getGuideLineFromCache } from '@editor/utils';\n\nimport ViewerMenu from './ViewerMenu.vue';\n\nexport default defineComponent({\n name: 'magic-stage',\n\n components: {\n ViewerMenu,\n ScrollViewer,\n },\n\n setup() {\n const services = inject<Services>('services');\n const stageOptions = inject<StageOptions>('stageOptions');\n\n const stageWrap = ref<InstanceType<typeof ScrollViewer>>();\n const stageContainer = ref<HTMLDivElement>();\n const menu = ref<InstanceType<typeof ViewerMenu>>();\n\n const stageRect = computed(() => services?.uiService.get<StageRect>('stageRect'));\n const uiSelectMode = computed(() => services?.uiService.get<boolean>('uiSelectMode'));\n const root = computed(() => services?.editorService.get<MApp>('root'));\n const page = computed(() => services?.editorService.get<MPage>('page'));\n const zoom = computed(() => services?.uiService.get<number>('zoom') || 1);\n const node = computed(() => services?.editorService.get<MNode>('node'));\n\n let stage: StageCore | null = null;\n let runtime: Runtime | null = null;\n\n const getGuideLineKey = (key: string) => `${key}_${root.value?.id}_${page.value?.id}`;\n\n watchEffect(() => {\n if (stage) return;\n\n if (!stageContainer.value) return;\n if (!(stageOptions?.runtimeUrl || stageOptions?.render) || !root.value) return;\n\n stage = new StageCore({\n render: stageOptions.render,\n runtimeUrl: stageOptions.runtimeUrl,\n zoom: zoom.value,\n autoScrollIntoView: stageOptions.autoScrollIntoView,\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 services?.editorService.set('stage', markRaw(stage));\n\n stage?.mount(stageContainer.value);\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 services?.editorService.select(el.id);\n });\n\n stage?.on('highlight', (el: HTMLElement) => {\n services?.editorService.highlight(el.id);\n });\n\n stage?.on('update', (ev: UpdateEventData) => {\n services?.editorService.update({ id: ev.el.id, style: ev.style });\n });\n\n stage?.on('sort', (ev: SortEventData) => {\n services?.editorService.sort(ev.src, ev.dist);\n });\n\n stage?.on('changeGuides', (e) => {\n services?.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 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\n watch(zoom, (zoom) => {\n if (!stage || !zoom) return;\n stage.setZoom(zoom);\n });\n\n watch(root, (root) => {\n if (runtime && root) {\n runtime.updateRootConfig?.(cloneDeep(toRaw(root)));\n }\n });\n\n const 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\n onMounted(() => {\n stageWrap.value?.container && resizeObserver.observe(stageWrap.value.container);\n });\n\n onUnmounted(() => {\n stage?.destroy();\n resizeObserver.disconnect();\n services?.editorService.set('stage', null);\n });\n\n return {\n stageWrap,\n stageContainer,\n menu,\n stageRect,\n zoom,\n\n contextmenuHandler(e: MouseEvent) {\n e.preventDefault();\n menu.value?.show(e);\n },\n\n dragoverHandler(e: DragEvent) {\n e.preventDefault();\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = 'move';\n }\n },\n\n async dropHandler(e: DragEvent) {\n e.preventDefault();\n if (e.dataTransfer && page.value && 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(page.value);\n\n const containerRect = stageContainer.value.getBoundingClientRect();\n const { scrollTop, scrollLeft } = stage.mask;\n if (layout === Layout.ABSOLUTE) {\n config.style = {\n ...(config.style || {}),\n position: 'absolute',\n top: e.clientY - containerRect.top + scrollTop,\n left: e.clientX - containerRect.left + scrollLeft,\n };\n }\n\n services?.editorService.add(config, page.value);\n }\n },\n };\n },\n});\n</script>\n","<template>\n <div class=\"m-editor-workspace\" tabindex=\"1\" ref=\"workspace\">\n <magic-stage :key=\"page?.id\"></magic-stage>\n\n <slot name=\"workspace-content\"></slot>\n\n <page-bar>\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 </page-bar>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, 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 '@editor/type';\n\nimport PageBar from './PageBar.vue';\nimport MagicStage from './Stage.vue';\n\nexport default defineComponent({\n name: 'm-editor-workspace',\n\n components: {\n PageBar,\n MagicStage,\n },\n\n setup() {\n const services = inject<Services>('services');\n const workspace = ref<HTMLDivElement>();\n const node = computed(() => services?.editorService.get<MNode>('node'));\n let keycon: KeyController;\n\n const mouseenterHandler = () => {\n workspace.value?.focus();\n };\n\n const mouseleaveHandler = () => {\n workspace.value?.blur();\n };\n\n onMounted(() => {\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 (!node.value || isPage(node.value)) return;\n services?.editorService.remove(node.value);\n })\n .keyup('backspace', (e) => {\n e.inputEvent.preventDefault();\n if (!node.value || isPage(node.value)) return;\n services?.editorService.remove(node.value);\n })\n .keydown([ctrl, 'c'], (e) => {\n e.inputEvent.preventDefault();\n node.value && services?.editorService.copy(node.value);\n })\n .keydown([ctrl, 'v'], (e) => {\n e.inputEvent.preventDefault();\n node.value && services?.editorService.paste();\n })\n .keydown([ctrl, 'x'], (e) => {\n e.inputEvent.preventDefault();\n if (!node.value || isPage(node.value)) return;\n services?.editorService.copy(node.value);\n services?.editorService.remove(node.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 });\n\n onUnmounted(() => {\n workspace.value?.removeEventListener('mouseenter', mouseenterHandler);\n workspace.value?.removeEventListener('mouseleave', mouseleaveHandler);\n keycon.destroy();\n });\n\n return {\n workspace,\n\n page: computed(() => services?.editorService.get<MPage>('page')),\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 { reactive } from 'vue';\n\nimport type { ComponentGroup, ComponentGroupState } from '@editor/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[]) {\n this.state.list = componentGroupList;\n }\n\n public getList() {\n return this.state.list;\n }\n}\n\nexport type ComponentListService = ComponentList;\n\nexport default new ComponentList();\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 '@editor/services/editor';\nimport type { GetColumnWidth, SetColumnWidth, StageRect, UiState } from '@editor/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});\n\nclass Ui extends BaseService {\n constructor() {\n super([]);\n globalThis.addEventListener('resize', () => {\n this.setColumnWidth({\n center: 'auto',\n });\n });\n\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 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 if (name === 'stageContainerRect') {\n state.zoom = this.calcZoom();\n }\n }\n\n public get<T>(name: keyof typeof state): T {\n return (state as any)[name];\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 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 private calcZoom() {\n const { stageRect, stageContainerRect } = state;\n const { height, width } = stageContainerRect;\n if (!width || !height) return 1;\n if (width > stageRect.width && height > stageRect.height) {\n return 1;\n }\n return Math.min((width - 100) / stageRect.width || 1, (height - 100) / stageRect.height || 1);\n }\n}\n\nexport type UiService = Ui;\n\nexport default new Ui();\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>\n <slot name=\"layer-panel\"></slot>\n </template>\n\n <template #component-list-panel>\n <slot name=\"component-list-panel\"></slot>\n </template>\n </sidebar>\n </slot>\n </template>\n\n <template #workspace>\n <slot name=\"workspace\" :editorService=\"editorService\">\n <workspace>\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 ref=\"propsPanel\" @mounted=\"(instance) => $emit('props-panel-mounted', instance)\"></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 type { MoveableOptions } from '@tmagic/stage';\n\nimport Framework from '@editor/layouts/Framework.vue';\nimport NavMenu from '@editor/layouts/NavMenu.vue';\nimport PropsPanel from '@editor/layouts/PropsPanel.vue';\nimport Sidebar from '@editor/layouts/sidebar/Sidebar.vue';\nimport Workspace from '@editor/layouts/workspace/Workspace.vue';\nimport componentListService from '@editor/services/componentList';\nimport editorService from '@editor/services/editor';\nimport eventsService from '@editor/services/events';\nimport historyService from '@editor/services/history';\nimport propsService from '@editor/services/props';\nimport uiService from '@editor/services/ui';\nimport type { ComponentGroup, MenuBarData, MenuItem, Services, SideBarData, StageRect } from '@editor/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<MenuItem[]>,\n default: () => [],\n },\n\n stageContentMenu: {\n type: Array as PropType<MenuItem[]>,\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 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', () => {\n const node = editorService.get<MNode | null>('node') || props.defaultSelected;\n node && editorService.select(node);\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 onUnmounted(() => editorService.destroy());\n\n const services: Services = {\n componentListService,\n eventsService,\n historyService,\n propsService,\n editorService,\n uiService,\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 }),\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 './utils/polyfills';\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 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';\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(uiSelect.name, uiSelect);\n app.component(CodeLink.name, CodeLink);\n app.component(Code.name, Code);\n app.component(CodeEditor.name, CodeEditor);\n },\n};\n"],"names":["_sfc_main","_createBlock","_normalizeStyle","_openBlock","_createElementBlock","_createVNode","_hoisted_1","_withCtx","_withModifiers","_createCommentVNode","_createTextVNode","_toDisplayString","Editor","_hoisted_2","_hoisted_3","_createElementVNode","_renderSlot","_Fragment","_normalizeClass","_resolveDynamicComponent","_renderList","_normalizeProps","_mergeProps","_Teleport","_toHandlers","_createSlots","ScrollViewer"],"mappings":"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"}
|