@tmagic/editor 1.2.13 → 1.2.15
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/style.css +161 -69
- package/dist/tmagic-editor.js +784 -419
- package/dist/tmagic-editor.js.map +1 -1
- package/dist/tmagic-editor.umd.cjs +802 -444
- package/dist/tmagic-editor.umd.cjs.map +1 -1
- package/package.json +14 -13
- package/src/components/CodeDraftEditor.vue +20 -17
- package/src/components/ContentMenu.vue +1 -1
- package/src/components/FunctionEditor.vue +10 -10
- package/src/components/Layout.vue +1 -1
- package/src/components/ScrollViewer.vue +2 -2
- package/src/components/SearchInput.vue +6 -3
- package/src/fields/CodeSelect.vue +18 -101
- package/src/fields/CodeSelectCol.vue +21 -3
- package/src/fields/EventSelect.vue +5 -3
- package/src/fields/UISelect.vue +1 -1
- package/src/icons/AppManageIcon.vue +11 -0
- package/src/icons/CodeIcon.vue +26 -0
- package/src/layouts/AddPageBox.vue +3 -3
- package/src/layouts/Framework.vue +4 -4
- package/src/layouts/NavMenu.vue +2 -2
- package/src/layouts/PropsPanel.vue +1 -1
- package/src/layouts/sidebar/ComponentListPanel.vue +3 -3
- package/src/layouts/sidebar/LayerMenu.vue +2 -2
- package/src/layouts/sidebar/LayerPanel.vue +4 -4
- package/src/layouts/sidebar/Sidebar.vue +13 -12
- package/src/layouts/sidebar/code-block/CodeBlockEditor.vue +15 -6
- package/src/layouts/sidebar/code-block/CodeBlockList.vue +28 -15
- package/src/layouts/workspace/Breadcrumb.vue +1 -1
- package/src/layouts/workspace/PageBar.vue +2 -2
- package/src/layouts/workspace/PageBarScrollContainer.vue +3 -3
- package/src/layouts/workspace/Stage.vue +3 -3
- package/src/layouts/workspace/ViewerMenu.vue +4 -4
- package/src/layouts/workspace/Workspace.vue +1 -1
- package/src/services/BaseService.ts +1 -1
- package/src/services/codeBlock.ts +3 -3
- package/src/services/componentList.ts +1 -1
- package/src/services/editor.ts +6 -6
- package/src/services/events.ts +1 -1
- package/src/services/history.ts +2 -2
- package/src/services/props.ts +4 -17
- package/src/services/ui.ts +2 -2
- package/src/theme/code-block.scss +11 -49
- package/src/theme/dep-list.scss +59 -0
- package/src/theme/event.scss +12 -0
- package/src/theme/sidebar.scss +26 -6
- package/src/theme/theme.scss +1 -0
- package/src/utils/config.ts +1 -1
- package/src/utils/dep.ts +2 -2
- package/src/utils/editor.ts +1 -1
- package/src/utils/operator.ts +4 -4
- package/src/utils/stage.ts +3 -3
- package/tsconfig.build.json +4 -1
- package/types/components/CodeDraftEditor.vue.d.ts +7 -4
- package/types/components/ContentMenu.vue.d.ts +3 -3
- package/types/components/FunctionEditor.vue.d.ts +140 -8
- package/types/components/Icon.vue.d.ts +2 -2
- package/types/components/Layout.vue.d.ts +28 -113
- package/types/components/ScrollBar.vue.d.ts +2 -2
- package/types/components/ScrollViewer.vue.d.ts +32 -135
- package/types/components/ToolButton.vue.d.ts +3 -3
- package/types/fields/Code.vue.d.ts +2 -2
- package/types/fields/CodeLink.vue.d.ts +2 -2
- package/types/fields/CodeSelect.vue.d.ts +8 -27
- package/types/fields/CodeSelectCol.vue.d.ts +3 -3
- package/types/fields/EventSelect.vue.d.ts +3 -3
- package/types/fields/UISelect.vue.d.ts +2 -2
- package/types/icons/AppManageIcon.vue.d.ts +2 -0
- package/types/icons/CodeIcon.vue.d.ts +2 -0
- package/types/layouts/CodeEditor.vue.d.ts +4 -4
- package/types/layouts/Framework.vue.d.ts +23 -74
- package/types/layouts/NavMenu.vue.d.ts +3 -3
- package/types/layouts/PropsPanel.vue.d.ts +11 -60
- package/types/layouts/Resizer.vue.d.ts +9 -54
- package/types/layouts/sidebar/ComponentListPanel.vue.d.ts +11 -50
- package/types/layouts/sidebar/LayerMenu.vue.d.ts +2 -2
- package/types/layouts/sidebar/LayerPanel.vue.d.ts +17 -60
- package/types/layouts/sidebar/Sidebar.vue.d.ts +39 -104
- package/types/layouts/sidebar/code-block/CodeBlockEditor.vue.d.ts +15 -58
- package/types/layouts/sidebar/code-block/CodeBlockList.vue.d.ts +21 -66
- package/types/layouts/workspace/PageBar.vue.d.ts +13 -52
- package/types/layouts/workspace/PageBarScrollContainer.vue.d.ts +8 -48
- package/types/layouts/workspace/Stage.vue.d.ts +2 -2
- package/types/layouts/workspace/ViewerMenu.vue.d.ts +3 -3
- package/types/layouts/workspace/Workspace.vue.d.ts +20 -63
- package/types/services/codeBlock.d.ts +1 -1
- package/types/services/componentList.d.ts +1 -1
- package/types/services/dep.d.ts +2 -2
- package/types/services/editor.d.ts +1 -1
- package/types/services/events.d.ts +1 -1
- package/types/services/history.d.ts +2 -2
- package/types/services/props.d.ts +90 -7
- package/types/services/storage.d.ts +1 -1
- package/types/services/ui.d.ts +2 -2
- package/types/type.d.ts +8 -8
- package/types/utils/operator.d.ts +1 -1
- package/types/utils/props.d.ts +78 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmagic-editor.js","sources":["../src/fields/Code.vue","../src/fields/CodeLink.vue","../src/components/Icon.vue","../src/fields/CodeSelect.vue","../src/fields/CodeSelectCol.vue","../src/fields/EventSelect.vue","../src/fields/UISelect.vue","../src/layouts/CodeEditor.vue","../src/utils/config.ts","../src/layouts/Resizer.vue","../src/components/Layout.vue","../src/utils/props.ts","../src/utils/logger.ts","../src/type.ts","../src/utils/editor.ts","../src/utils/undo-redo.ts","../src/utils/compose.ts","../src/services/BaseService.ts","../src/services/history.ts","../src/services/storage.ts","../src/services/props.ts","../src/utils/operator.ts","../src/services/editor.ts","../src/services/ui.ts","../src/utils/stage.ts","../src/layouts/AddPageBox.vue","../src/layouts/Framework.vue","../src/components/ToolButton.vue","../src/layouts/NavMenu.vue","../src/layouts/PropsPanel.vue","../src/components/SearchInput.vue","../src/components/CodeDraftEditor.vue","../src/components/FunctionEditor.vue","../src/layouts/sidebar/code-block/CodeBlockEditor.vue","../src/layouts/sidebar/code-block/CodeBlockList.vue","../src/layouts/sidebar/ComponentListPanel.vue","../src/components/ContentMenu.vue","../src/layouts/sidebar/LayerMenu.vue","../src/layouts/sidebar/LayerPanel.vue","../src/layouts/sidebar/Sidebar.vue","../src/layouts/workspace/Breadcrumb.vue","../src/layouts/workspace/PageBarScrollContainer.vue","../src/layouts/workspace/PageBar.vue","../src/utils/scroll-viewer.ts","../src/components/ScrollBar.vue","../src/components/ScrollViewer.vue","../src/layouts/workspace/ViewerMenu.vue","../src/layouts/workspace/Stage.vue","../src/layouts/workspace/Workspace.vue","../src/services/codeBlock.ts","../src/services/componentList.ts","../src/services/dep.ts","../src/services/events.ts","../src/editorProps.ts","../src/utils/dep.ts","../src/initService.ts","../src/Editor.vue","../src/index.ts"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorCode',\n})\n</script>\n<template>\n <magic-code-editor\n :style=\"`height: ${height}`\"\n :init-values=\"model[name]\"\n :language=\"language\"\n :options=\"config.options\"\n @save=\"save\"\n ></magic-code-editor>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorCode\">\nimport { computed } from 'vue';\n\nconst emit = defineEmits(['change']);\n\nconst props = defineProps<{\n model: any;\n name: string;\n config: {\n language?: string;\n options?: Object;\n height?: string;\n };\n prop: string;\n}>();\n\nconst language = computed(() => props.config.language || 'javascript');\nconst height = computed(() => props.config.height || `${document.body.clientHeight - 168}px`);\n\nconst save = (v: string) => {\n props.model[props.name] = v;\n emit('change', v);\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorCodeLink',\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\" setup name=\"MEditorCodeLink\">\nimport { computed, reactive, watch } from 'vue';\nimport serialize from 'serialize-javascript';\n\nconst props = defineProps<{\n config: {\n type: 'code-link';\n name: string;\n text?: string;\n formTitle?: string;\n codeOptions?: Object;\n };\n model: any;\n name: string;\n prop: string;\n}>();\n\nconst emit = defineEmits(['change']);\n\nconst formConfig = computed(() => {\n const { codeOptions, ...config } = props.config;\n return {\n ...config,\n text: '',\n type: 'link',\n form: [\n {\n name: props.name,\n type: 'vs-code',\n options: {\n tabSize: 2,\n ...(codeOptions || {}),\n },\n },\n ],\n };\n});\n\nconst modelValue = reactive<{ form: Record<string, string> }>({\n form: {\n [props.name]: '',\n },\n});\n\nwatch(\n () => props.model[props.name],\n (value) => {\n modelValue.form = {\n [props.name]: serialize(value, {\n space: 2,\n unsafe: true,\n }).replace(/\"(\\w+)\":\\s/g, '$1: '),\n };\n },\n {\n immediate: true,\n },\n);\n\nconst 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</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorIcon',\n})\n</script>\n<template>\n <TMagicIcon v-if=\"!icon\" class=\"magic-editor-icon\"><Edit></Edit></TMagicIcon>\n <TMagicIcon v-else-if=\"typeof icon === 'string' && icon.startsWith('http')\" class=\"magic-editor-icon\"\n ><img :src=\"icon\"\n /></TMagicIcon>\n <i v-else-if=\"typeof icon === 'string'\" class=\"magic-editor-icon\" :class=\"icon\"></i>\n <TMagicIcon v-else class=\"magic-editor-icon\"><component :is=\"toRaw(icon)\"></component></TMagicIcon>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorIcon\">\nimport { toRaw } from 'vue';\nimport { Edit } from '@element-plus/icons-vue';\n\nimport { TMagicIcon } from '@tmagic/design';\n\ndefineProps<{\n icon?: any;\n}>();\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorCodeSelect',\n})\n</script>\n<template>\n <div class=\"m-fields-code-select\" :class=\"config.className\">\n <m-form-table\n :config=\"tableConfig\"\n :model=\"model[name]\"\n name=\"hookData\"\n :enableToggleMode=\"false\"\n :prop=\"prop\"\n :size=\"size\"\n @change=\"changeHandler\"\n >\n <template #operateCol=\"{ scope }\">\n <Icon\n v-if=\"scope.row.codeId && config.editable\"\n :icon=\"editable ? Edit : View\"\n class=\"edit-icon\"\n @click=\"editCode(scope.row.codeId)\"\n ></Icon>\n </template>\n </m-form-table>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorCodeSelect\">\nimport { computed, defineEmits, defineProps, inject, watch } from 'vue';\nimport { Edit, View } from '@element-plus/icons-vue';\nimport { isEmpty, map } from 'lodash-es';\n\nimport { createValues, FormItem, FormState, TableConfig } from '@tmagic/form';\nimport { HookType, Id } from '@tmagic/schema';\n\nimport Icon from '../components/Icon.vue';\nimport { CodeParamStatement, HookData, Services } from '../type';\nconst services = inject<Services>('services');\nconst mForm = inject<FormState>('mForm');\nconst emit = defineEmits(['change']);\n\nconst props = withDefaults(\n defineProps<{\n config: {\n tableConfig?: TableConfig;\n className?: string;\n editable?: boolean;\n };\n model: any;\n prop: string;\n name: string;\n size: 'small' | 'default' | 'large';\n }>(),\n {\n config: () => ({\n editable: true,\n }),\n },\n);\n\nconst codeDsl = computed(() => services?.codeBlockService.getCodeDsl());\n\nconst tableConfig = computed<FormItem>(() => {\n const defaultConfig = {\n dropSort: false,\n enableFullscreen: false,\n border: true,\n operateColWidth: 60,\n items: [\n {\n type: 'select',\n label: '代码块',\n name: 'codeId',\n width: '200px',\n options: () => {\n if (codeDsl.value) {\n return map(codeDsl.value, (value, key) => ({\n text: `${value.name}(${key})`,\n label: `${value.name}(${key})`,\n value: key,\n }));\n }\n return [];\n },\n onChange: (formState: any, codeId: Id, { model }: any) => {\n // 参数的items是根据函数生成的,当codeId变化后修正model的值,避免写入其他codeId的params\n model.params = {};\n },\n },\n {\n name: 'params',\n label: '参数',\n defaultValue: {},\n itemsFunction: (row: HookData) => {\n const paramsConfig = getParamsConfig(row.codeId);\n // 如果参数没有填值,则使用createValues补全空值\n if (!row.params || isEmpty(row.params)) {\n createValues(mForm, paramsConfig, {}, row.params);\n }\n return paramsConfig;\n },\n },\n ],\n };\n return {\n ...defaultConfig,\n ...props.config.tableConfig,\n };\n});\n\nconst editable = computed(() => services?.codeBlockService.getEditStatus());\n\nwatch(\n () => props.model[props.name],\n (value) => {\n // 兼容旧的数据结构\n if (isEmpty(value)) {\n // 空值或者空数组\n props.model[props.name] = {\n hookType: HookType.CODE,\n hookData: [],\n };\n }\n },\n {\n immediate: true,\n },\n);\n\nconst changeHandler = async () => {\n emit('change', props.model[props.name]);\n};\n\nconst getParamsConfig = (codeId: Id): CodeParamStatement[] => {\n if (!codeDsl.value) return [];\n const paramStatements = codeDsl.value[codeId]?.params;\n if (isEmpty(paramStatements)) return [];\n return paramStatements.map((paramState: CodeParamStatement) => ({\n labelWidth: '100px',\n text: paramState.name,\n inline: true,\n ...paramState,\n }));\n};\n\nconst editCode = (codeId: Id) => {\n services?.codeBlockService.setCodeEditorContent(true, codeId);\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorCodeSelectCol',\n})\n</script>\n<template>\n <div class=\"m-fields-code-select-col\">\n <!-- 代码块下拉框 -->\n <m-form-container :config=\"selectConfig\" :model=\"model\" @change=\"onParamsChangeHandler\"></m-form-container>\n <!-- 参数填写框 -->\n <m-form-container :config=\"codeParamsConfig\" :model=\"model\" @change=\"onParamsChangeHandler\"></m-form-container>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorCodeSelectCol\">\nimport { computed, defineEmits, defineProps, inject, ref, watch } from 'vue';\nimport { isEmpty, map } from 'lodash-es';\n\nimport { createValues, FieldsetConfig, FormState } from '@tmagic/form';\nimport { Id } from '@tmagic/schema';\n\nimport { CodeParamStatement, Services } from '../type';\nconst services = inject<Services>('services');\nconst mForm = inject<FormState>('mForm');\nconst emit = defineEmits(['change']);\n\nconst props = withDefaults(\n defineProps<{\n config: any;\n model: any;\n prop: string;\n name: string;\n size: 'small' | 'default' | 'large';\n }>(),\n {},\n);\nconst codeDsl = computed(() => services?.codeBlockService.getCodeDsl());\nconst codeParamsConfig = ref<FieldsetConfig>({\n type: 'fieldset',\n items: [],\n legend: '参数',\n labelWidth: '70px',\n name: 'params',\n display: false,\n});\nconst selectConfig = {\n type: 'select',\n text: '代码块',\n name: 'codeId',\n labelWidth: '70px',\n options: () => {\n if (codeDsl.value) {\n return map(codeDsl.value, (value, key) => ({\n text: `${value.name}(${key})`,\n label: `${value.name}(${key})`,\n value: key,\n }));\n }\n return [];\n },\n onChange: (formState: any, codeId: Id, { model }: any) => {\n // 通过下拉框选择的codeId变化后修正model的值,避免写入其他codeId的params\n model.params = {};\n },\n};\n\n/**\n * 根据代码块id获取代码块参数配置\n * @param codeId 代码块ID\n */\nconst getParamItemsConfig = (codeId: Id): CodeParamStatement[] => {\n if (!codeDsl.value) return [];\n const paramStatements = codeDsl.value[codeId]?.params;\n if (isEmpty(paramStatements)) return [];\n return paramStatements.map((paramState: CodeParamStatement) => ({\n labelWidth: '100px',\n text: paramState.name,\n ...paramState,\n }));\n};\n\n/**\n * 根据代码块id获取参数fieldset表单配置\n * @param codeId 代码块ID\n */\nconst getCodeParamsConfig = (codeId: Id) => {\n const paramsConfig = getParamItemsConfig(codeId);\n // 如果参数没有填值,则使用createValues补全空值\n if (!props.model.params || isEmpty(props.model.params)) {\n props.model.params = {};\n createValues(mForm, paramsConfig, {}, props.model.params);\n }\n codeParamsConfig.value = {\n type: 'fieldset',\n items: paramsConfig,\n legend: '参数',\n labelWidth: '70px',\n name: 'params',\n display: !isEmpty(paramsConfig),\n };\n};\n\n/**\n * 参数值修改更新\n */\nconst onParamsChangeHandler = () => {\n emit('change', props.model);\n};\n\n// 监听代码块顺序变化以及下拉选择的变化,并更新参数配置\n// TODO onchange在watch之前触发\nwatch(\n () => props.model.codeId,\n (codeId: Id) => {\n if (!codeId) return;\n getCodeParamsConfig(codeId);\n },\n {\n immediate: true,\n },\n);\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorEventSelect',\n})\n</script>\n<template>\n <div class=\"m-fields-event-select\">\n <m-form-container\n v-if=\"isOldVersion\"\n ref=\"eventForm\"\n :size=\"props.size\"\n :model=\"model\"\n :config=\"tableConfig\"\n @change=\"onChangeHandler\"\n ></m-form-container>\n\n <div v-else class=\"fullWidth\">\n <TMagicButton class=\"create-button\" type=\"primary\" size=\"small\" @click=\"addEvent()\">添加事件</TMagicButton>\n <m-form-panel\n v-for=\"(cardItem, index) in model[name]\"\n :key=\"index\"\n :config=\"actionsConfig\"\n :model=\"cardItem\"\n @change=\"onChangeHandler\"\n >\n <template #header>\n <m-form-container\n class=\"fullWidth\"\n :config=\"eventNameConfig\"\n :model=\"cardItem\"\n @change=\"onChangeHandler\"\n ></m-form-container>\n <TMagicButton style=\"color: #f56c6c\" text :icon=\"Delete\" @click=\"removeEvent(index)\"></TMagicButton>\n </template>\n </m-form-panel>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorEventSelect\">\nimport { computed, defineProps, inject } from 'vue';\nimport { Delete } from '@element-plus/icons-vue';\nimport { has } from 'lodash-es';\n\nimport { TMagicButton } from '@tmagic/design';\nimport { FormState } from '@tmagic/form';\nimport { ActionType } from '@tmagic/schema';\n\nimport { EventSelectConfig, Services } from '../type';\nconst services = inject<Services>('services');\n\nconst props = defineProps<{\n config: EventSelectConfig;\n model: any;\n prop: string;\n name: string;\n size: 'small' | 'default' | 'large';\n}>();\nconst emit = defineEmits(['change']);\n\n// 事件名称下拉框表单配置\nconst eventNameConfig = computed(() => {\n const defaultEventNameConfig = {\n name: 'name',\n text: '事件',\n type: 'select',\n labelWidth: '40px',\n options: (mForm: FormState, { formValue }: any) =>\n services?.eventsService.getEvent(formValue.type).map((option: any) => ({\n text: option.label,\n value: option.value,\n })),\n };\n return { ...defaultEventNameConfig, ...props.config.eventNameConfig };\n});\n\n// 联动类型\nconst actionTypeConfig = computed(() => {\n const defaultActionTypeConfig = {\n name: 'actionType',\n text: '联动类型',\n labelWidth: '70px',\n type: 'select',\n defaultValue: ActionType.COMP,\n options: () => [\n {\n text: '组件',\n label: '组件',\n value: ActionType.COMP,\n },\n {\n text: '代码',\n label: '代码',\n value: ActionType.CODE,\n },\n ],\n };\n return { ...defaultActionTypeConfig, ...props.config.actionTypeConfig };\n});\n\n// 联动组件配置\nconst targetCompConfig = computed(() => {\n const defaultTargetCompConfig = {\n name: 'to',\n text: '联动组件',\n labelWidth: '70px',\n type: 'ui-select',\n display: (mForm: FormState, { model }: { model: Record<any, any> }) => model.actionType === ActionType.COMP,\n };\n return { ...defaultTargetCompConfig, ...props.config.targetCompConfig };\n});\n\n// 联动组件动作配置\nconst compActionConfig = computed(() => {\n const defaultCompActionConfig = {\n name: 'method',\n text: '动作',\n labelWidth: '70px',\n type: 'select',\n display: (mForm: FormState, { model }: { model: Record<any, any> }) => model.actionType === ActionType.COMP,\n options: (mForm: FormState, { model }: any) => {\n const node = services?.editorService.getNodeById(model.to);\n if (!node?.type) return [];\n\n return services?.eventsService.getMethod(node.type).map((option: any) => ({\n text: option.label,\n value: option.value,\n }));\n },\n };\n return { ...defaultCompActionConfig, ...props.config.compActionConfig };\n});\n\n// 代码联动配置\nconst codeActionConfig = computed(() => {\n const defaultCodeActionConfig = {\n type: 'code-select-col',\n display: (mForm: FormState, { model }: { model: Record<any, any> }) => model.actionType === ActionType.CODE,\n };\n return { ...defaultCodeActionConfig, ...props.config.codeActionConfig };\n});\n\n// 兼容旧的数据格式\nconst tableConfig = computed(() => ({\n type: 'table',\n name: 'events',\n items: [\n {\n name: 'name',\n label: '事件名',\n type: eventNameConfig.value.type,\n options: (mForm: FormState, { formValue }: any) =>\n services?.eventsService.getEvent(formValue.type).map((option: any) => ({\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: compActionConfig.value.type,\n options: (mForm: FormState, { model }: any) => {\n const node = services?.editorService.getNodeById(model.to);\n if (!node?.type) return [];\n\n return services?.eventsService.getMethod(node.type).map((option: any) => ({\n text: option.label,\n value: option.value,\n }));\n },\n },\n ],\n}));\n\n// 组件动作组表单配置\nconst actionsConfig = computed(() => ({\n items: [\n {\n type: 'group-list',\n name: 'actions',\n enableToggleMode: false,\n items: [actionTypeConfig.value, targetCompConfig.value, compActionConfig.value, codeActionConfig.value],\n },\n ],\n}));\n\n// 是否为旧的数据格式\nconst isOldVersion = computed(() => {\n if (props.model[props.name].length === 0) return false;\n return !has(props.model[props.name][0], 'actions');\n});\n\n// 添加事件\nconst addEvent = () => {\n const defaultEvent = {\n name: '',\n actions: [],\n };\n if (!props.model[props.name]) {\n props.model[props.name] = [];\n }\n props.model[props.name].push(defaultEvent);\n onChangeHandler();\n};\n\n// 删除事件\nconst removeEvent = (index: number) => {\n if (!props.name) return;\n props.model[props.name].splice(index, 1);\n onChangeHandler();\n};\n\nconst onChangeHandler = () => {\n emit('change', props.model);\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorUISelect',\n})\n</script>\n<template>\n <div class=\"m-fields-ui-select\" v-if=\"uiSelectMode\" @click=\"cancelHandler\">\n <TMagicButton type=\"danger\" :icon=\"Delete\" text style=\"padding: 0\">取消</TMagicButton>\n </div>\n <div class=\"m-fields-ui-select\" v-else @click=\"startSelect\" style=\"display: flex\">\n <TMagicTooltip v-if=\"val\" content=\"清除\">\n <TMagicButton style=\"padding: 0\" type=\"danger\" :icon=\"Close\" text @click.stop=\"deleteHandler\"></TMagicButton>\n </TMagicTooltip>\n <TMagicTooltip :content=\"val ? toName + '_' + val : '点击此处选择'\">\n <TMagicButton text style=\"padding: 0; margin: 0\">{{ val ? toName + '_' + val : '点击此处选择' }}</TMagicButton>\n </TMagicTooltip>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorUISelect\">\nimport { computed, inject, ref } from 'vue';\nimport { Close, Delete } from '@element-plus/icons-vue';\n\nimport { TMagicButton, TMagicTooltip } from '@tmagic/design';\nimport { FormState } from '@tmagic/form';\n\nimport { Services } from '../type';\n\nconst props = defineProps<{\n config: any;\n model: any;\n prop: string;\n name: string;\n}>();\n\nconst emit = defineEmits(['change']);\n\nconst services = inject<Services>('services');\nconst mForm = inject<FormState>('mForm');\nconst val = computed(() => props.model[props.name]);\nconst uiSelectMode = ref(false);\n\nconst cancelHandler = () => {\n if (!services?.uiService) return;\n services.uiService.set('uiSelectMode', false);\n uiSelectMode.value = false;\n globalThis.document.removeEventListener('ui-select', clickHandler as EventListener);\n};\n\nconst clickHandler = ({ detail }: Event & { detail: any }) => {\n if (detail.id) {\n props.model[props.name] = detail.id;\n emit('change', detail.id);\n mForm?.$emit('field-change', props.prop, detail.id);\n }\n\n if (cancelHandler) {\n cancelHandler();\n }\n};\n\nconst toName = computed(() => {\n const config = services?.editorService.getNodeById(val.value);\n return config?.name || '';\n});\n\nconst startSelect = () => {\n if (!services?.uiService) return;\n services.uiService.set('uiSelectMode', true);\n uiSelectMode.value = true;\n globalThis.document.addEventListener('ui-select', clickHandler as EventListener);\n};\n\nconst deleteHandler = () => {\n if (props.model) {\n props.model[props.name] = '';\n emit('change', '');\n mForm?.$emit('field-change', props.prop, '');\n }\n};\n</script>\n\n<style lang=\"scss\">\n.m-fields-ui-select {\n cursor: pointer;\n i {\n margin-right: 3px;\n }\n span {\n color: #2882e0;\n }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorCodeEditor',\n})\n</script>\n<template>\n <div ref=\"codeEditor\" class=\"magic-code-editor\"></div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorCodeEditor\">\nimport { onMounted, onUnmounted, ref, watch } from 'vue';\nimport { throttle } from 'lodash-es';\nimport * as monaco from 'monaco-editor';\nimport serialize from 'serialize-javascript';\n\nconst props = withDefaults(\n defineProps<{\n initValues?: string | Object;\n modifiedValues?: string | Object;\n type?: 'diff';\n language?: string;\n options?: {\n [key: string]: any;\n };\n autoSave?: boolean;\n }>(),\n {\n autoSave: true,\n language: 'javascript',\n options: () => ({\n tabSize: 2,\n }),\n },\n);\n\nconst emit = defineEmits(['initd', 'save']);\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\nlet vsEditor: monaco.editor.IStandaloneCodeEditor | null = null;\nlet vsDiffEditor: monaco.editor.IStandaloneDiffEditor | null = null;\n\nconst values = ref('');\nconst loading = ref(false);\nconst codeEditor = ref<HTMLDivElement>();\n\nconst resizeObserver = new globalThis.ResizeObserver(\n throttle((): void => {\n vsEditor?.layout();\n vsDiffEditor?.layout();\n }, 300),\n);\n\nconst 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\nconst getEditorValue = () =>\n props.type === 'diff' ? vsDiffEditor?.getModifiedEditor().getValue() : vsEditor?.getValue();\n\nconst 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' && props.autoSave) {\n vsEditor?.onDidBlurEditorWidget(() => {\n emit('save', getEditorValue());\n });\n }\n\n resizeObserver.observe(codeEditor.value);\n};\n\nwatch(\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\nonMounted(async () => {\n loading.value = true;\n\n init();\n});\n\nonUnmounted(() => {\n resizeObserver.disconnect();\n});\n\ndefineExpose({\n getEditor() {\n return vsEditor || vsDiffEditor;\n },\n\n setEditorValue,\n\n focus() {\n vsEditor?.focus();\n vsDiffEditor?.focus();\n },\n});\n</script>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { InstallOptions } from '../type';\n\nlet $TMAGIC_EDITOR: InstallOptions = {} as any;\n\nconst setConfig = (option: InstallOptions): void => {\n $TMAGIC_EDITOR = option;\n};\n\nconst getConfig = (key: keyof InstallOptions): unknown => $TMAGIC_EDITOR[key];\n\nexport { getConfig, setConfig };\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorResizer',\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\" setup name=\"MEditorResizer\">\nimport { onMounted, onUnmounted, ref } from 'vue';\nimport Gesto from 'gesto';\n\nconst emit = defineEmits(['change']);\n\nconst target = ref<HTMLSpanElement>();\n\nlet getso: Gesto;\n\nonMounted(() => {\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) return;\n\n emit('change', e.deltaX);\n });\n});\n\nonUnmounted(() => {\n getso?.unset();\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorLayout',\n})\n</script>\n<template>\n <div ref=\"el\" class=\"m-editor-layout\">\n <template v-if=\"hasLeft\">\n <div class=\"m-editor-layout-left\" :class=\"leftClass\" :style=\"`width: ${left}px`\">\n <slot name=\"left\"></slot>\n </div>\n <Resizer @change=\"changeLeft\"></Resizer>\n </template>\n\n <div class=\"m-editor-layout-center\" :class=\"centerClass\" :style=\"`width: ${center}px`\">\n <slot name=\"center\"></slot>\n </div>\n\n <template v-if=\"hasRight\">\n <Resizer @change=\"changeRight\"></Resizer>\n <div class=\"m-editor-layout-right\" :class=\"rightClass\" :style=\"`width: ${right}px`\">\n <slot name=\"right\"></slot>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorLayout\">\nimport { computed, onMounted, onUnmounted, ref } from 'vue';\n\nimport Resizer from '../layouts/Resizer.vue';\n\nconst emit = defineEmits(['update:left', 'change', 'update:right']);\n\nconst props = withDefaults(\n defineProps<{\n left?: number;\n right?: number;\n minLeft?: number;\n minRight?: number;\n minCenter?: number;\n leftClass?: string;\n rightClass?: string;\n centerClass?: string;\n }>(),\n {\n minLeft: 46,\n minRight: 1,\n minCenter: 5,\n },\n);\n\nconst el = ref<HTMLElement>();\n\nconst hasLeft = computed(() => typeof props.left !== 'undefined');\nconst hasRight = computed(() => typeof props.right !== 'undefined');\n\nconst getCenterWidth = (clientWidth: number, left: number, right: number) => {\n let center = clientWidth - left - right;\n if (center < props.minCenter) {\n center = props.minCenter;\n if (left < right) {\n right = clientWidth - left - props.minCenter;\n } else {\n left = clientWidth - right - props.minCenter;\n }\n }\n return {\n center,\n left,\n right,\n };\n};\n\nlet clientWidth = 0;\nconst resizerObserver = new ResizeObserver((entries) => {\n for (const { contentRect } of entries) {\n clientWidth = contentRect.width;\n\n let left = props.left || 0;\n let right = props.right || 0;\n\n if (left > clientWidth) {\n left = clientWidth / 3;\n }\n\n if (right > clientWidth) {\n right = clientWidth / 3;\n }\n\n const columnWidth = getCenterWidth(clientWidth, left, right);\n\n center.value = columnWidth.center;\n\n emit('change', {\n left: columnWidth.left,\n center: center.value,\n right: columnWidth.right,\n });\n }\n});\n\nonMounted(() => {\n if (el.value) {\n resizerObserver.observe(el.value);\n }\n});\n\nonUnmounted(() => {\n resizerObserver.disconnect();\n});\n\nconst center = ref(0);\n\nconst changeLeft = (deltaX: number) => {\n if (typeof props.left === 'undefined') return;\n let left = Math.max(props.left + deltaX, props.minLeft) || 0;\n emit('update:left', left);\n\n if (clientWidth - left - (props.right || 0) <= 0) {\n left = props.left;\n }\n\n const columnWidth = getCenterWidth(clientWidth, left, props.right || 0);\n\n center.value = columnWidth.center;\n\n emit('change', {\n left: columnWidth.left,\n center: center.value,\n right: columnWidth.right,\n });\n};\n\nconst changeRight = (deltaX: number) => {\n if (typeof props.right === 'undefined') return;\n let right = Math.max(props.right - deltaX, props.minRight) || 0;\n emit('update:right', right);\n\n if (clientWidth - (props.left || 0) - right <= 0) {\n right = props.right;\n }\n\n const columnWidth = getCenterWidth(clientWidth, props.left || 0, right);\n\n center.value = columnWidth.center;\n\n emit('change', {\n left: columnWidth.left,\n center: center.value,\n right: columnWidth.right,\n });\n};\n</script>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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\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 name: 'events',\n type: 'event-select',\n },\n ],\n },\n {\n title: '高级',\n lazy: true,\n items: [\n {\n name: 'created',\n text: 'created',\n labelWidth: '100px',\n type: 'code-select',\n },\n {\n name: 'mounted',\n text: 'mounted',\n labelWidth: '100px',\n type: 'code-select',\n },\n ],\n },\n ],\n },\n];\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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) 2023 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, FormItem } from '@tmagic/form';\nimport type { CodeBlockContent, CodeBlockDSL, Id, MApp, MContainer, MNode, MPage } from '@tmagic/schema';\nimport type StageCore from '@tmagic/stage';\nimport type {\n ContainerHighlightType,\n CustomizeMoveableOptionsCallbackConfig,\n MoveableOptions,\n UpdateDragEl,\n} from '@tmagic/stage';\n\nimport type { CodeBlockService } from './services/codeBlock';\nimport type { ComponentListService } from './services/componentList';\nimport type { DepService } from './services/dep';\nimport type { EditorService } from './services/editor';\nimport type { EventsService } from './services/events';\nimport type { HistoryService } from './services/history';\nimport type { PropsService } from './services/props';\nimport type { StorageService } from './services/storage';\nimport type { UiService } from './services/ui';\nimport type { UndoRedo } from './utils/undo-redo';\n\nexport type BeforeAdd = (config: MNode, parent: MContainer) => Promise<MNode> | MNode;\nexport type GetConfig = (config: FormConfig) => Promise<FormConfig> | FormConfig;\n\nexport interface InstallOptions {\n [key: string]: any;\n}\n\nexport interface Services {\n editorService: EditorService;\n historyService: HistoryService;\n storageService: StorageService;\n eventsService: EventsService;\n propsService: PropsService;\n componentListService: ComponentListService;\n uiService: UiService;\n codeBlockService: CodeBlockService;\n depService: DepService;\n}\n\nexport interface StageOptions {\n runtimeUrl: string;\n autoScrollIntoView: boolean;\n containerHighlightClassName: string;\n containerHighlightDuration: number;\n containerHighlightType: ContainerHighlightType;\n disabledDragStart?: boolean;\n render: (stage: StageCore) => HTMLDivElement | Promise<HTMLDivElement>;\n moveableOptions: MoveableOptions | ((config?: CustomizeMoveableOptionsCallbackConfig) => MoveableOptions);\n canSelect: (el: HTMLElement) => boolean | Promise<boolean>;\n isContainer: (el: HTMLElement) => boolean | Promise<boolean>;\n updateDragEl: UpdateDragEl;\n}\n\nexport interface StoreState {\n root: MApp | null;\n page: MPage | null;\n parent: MContainer | null;\n node: MNode | null;\n highlightNode: MNode | null;\n nodes: MNode[];\n stage: StageCore | null;\n modifiedNodeIds: Map<Id, Id>;\n pageLength: number;\n}\n\nexport type StoreStateKey = keyof StoreState;\n\nexport interface PropsState {\n propsConfigMap: Record<string, FormConfig>;\n propsValueMap: Record<string, MNode>;\n}\n\nexport interface ComponentGroupState {\n list: ComponentGroup[];\n}\n\nexport enum ColumnLayout {\n LEFT = 'left',\n CENTER = 'center',\n RIGHT = 'right',\n}\n\nexport interface SetColumnWidth {\n [ColumnLayout.LEFT]?: number;\n [ColumnLayout.CENTER]?: number | 'auto';\n [ColumnLayout.RIGHT]?: number;\n}\n\nexport interface GetColumnWidth {\n [ColumnLayout.LEFT]: number;\n [ColumnLayout.CENTER]: number;\n [ColumnLayout.RIGHT]: number;\n}\n\nexport interface StageRect {\n width: number;\n height: number;\n}\n\nexport interface UiState {\n /** 当前点击画布是否触发选中,true: 不触发,false: 触发,默认为false */\n uiSelectMode: boolean;\n /** 是否显示整个配置源码, true: 显示, false: 不显示,默认为false */\n showSrc: boolean;\n /** 画布显示放大倍数,默认为 1 */\n zoom: number;\n /** 画布容器的宽高 */\n stageContainerRect: StageRect;\n /** 画布顶层div的宽高,可用于改变画布的大小 */\n stageRect: StageRect;\n /** 编辑器列布局每一列的宽度,分为左中右三列 */\n columnWidth: GetColumnWidth;\n /** 是否显示画布参考线,true: 显示,false: 不显示,默认为true */\n showGuides: boolean;\n /** 是否显示标尺,true: 显示,false: 不显示,默认为true */\n showRule: boolean;\n /** 用于控制该属性配置表单内组件的尺寸 */\n propsPanelSize: 'large' | 'default' | 'small';\n /** 是否显示新增页面按钮 */\n showAddPageButton: boolean;\n}\n\nexport interface EditorNodeInfo {\n node: MNode | null;\n parent: MContainer | null;\n page: MPage | null;\n}\n\nexport interface AddMNode {\n type: string;\n name?: string;\n inputEvent?: DragEvent;\n [key: string]: any;\n}\n\nexport interface PastePosition {\n left?: number;\n top?: number;\n /**\n * 粘贴位置X方向偏移量\n */\n offsetX?: number;\n /**\n * 粘贴位置Y方向偏移量\n */\n offsetY?: number;\n}\n\n/**\n * 菜单按钮\n */\nexport interface MenuButton {\n /**\n * 按钮类型\n * button: 只有文字不带边框的按钮\n * text: 纯文本\n * divider: 分割线\n * dropdown: 下拉菜单\n */\n type: 'button' | 'text' | 'divider' | 'dropdown';\n /** 当type为divider时有效,分割线方向, 默认vertical */\n direction?: 'horizontal' | 'vertical';\n /** 展示的文案 */\n text?: string;\n /** 鼠标悬浮是显示的气泡中的文案 */\n tooltip?: string;\n /** Vue组件或url */\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 className?: string;\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 className?: string;\n display?: boolean | ((data?: Services) => Promise<boolean> | boolean);\n [key: string]: any;\n}\n\n/**\n * '/': 分隔符\n * 'delete': 删除按钮\n * 'undo': 撤销按钮\n * 'redo': 恢复按钮\n * 'zoom': 'zoom-in', 'zoom-out', 'scale-to-original', 'scale-to-fit' 的集合\n * 'zoom-in': 放大按钮\n * 'zoom-out': 缩小按钮\n * 'guides': 显示隐藏参考线\n * 'rule': 显示隐藏标尺\n * 'scale-to-original': 缩放到实际大小\n * 'scale-to-fit': 缩放以适应\n */\nexport type MenuItem =\n | '/'\n | 'delete'\n | 'undo'\n | 'redo'\n | 'zoom'\n | 'zoom-in'\n | 'zoom-out'\n | 'guides'\n | 'rule'\n | 'scale-to-original'\n | 'scale-to-fit'\n | MenuButton\n | MenuComponent\n | string;\n\n/** 工具栏 */\nexport interface MenuBarData {\n /** 顶部工具栏左边项 */\n [ColumnLayout.LEFT]?: MenuItem[];\n /** 顶部工具栏中间项 */\n [ColumnLayout.CENTER]?: MenuItem[];\n /** 顶部工具栏右边项 */\n [ColumnLayout.RIGHT]?: MenuItem[];\n}\n\nexport interface SideComponent extends MenuComponent {\n /** 显示文案 */\n text: string;\n /** vue组件或url */\n icon: Component<{}, {}, any>;\n}\n\n/**\n * component-list: 组件列表\n * layer: 已选组件树\n * code-block: 代码块\n */\nexport type SideItem = 'component-list' | 'layer' | 'code-block' | 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 /** Vue组件或url */\n icon?: string | Component<{}, {}, any>;\n /** 新增组件时需要透传到组价节点上的数据 */\n data?: {\n [key: string]: any;\n };\n}\n\nexport interface ComponentGroup {\n /** 显示文案 */\n title: string;\n /** 组内列表 */\n items: ComponentItem[];\n}\n\nexport interface UpdateData {\n id: Id;\n [key: string]: any;\n}\n\nexport enum LayerOffset {\n TOP = 'top',\n BOTTOM = 'bottom',\n}\n\n/** 容器布局 */\nexport enum Layout {\n FLEX = 'flex',\n FIXED = 'fixed',\n RELATIVE = 'relative',\n ABSOLUTE = 'absolute',\n}\n\nexport enum Keys {\n ESCAPE = 'Space',\n}\n\nexport const H_GUIDE_LINE_STORAGE_KEY = '$MagicStageHorizontalGuidelinesData';\nexport const V_GUIDE_LINE_STORAGE_KEY = '$MagicStageVerticalGuidelinesData';\n\nexport interface ScrollViewerEvent {\n scrollLeft: number;\n scrollTop: number;\n scrollHeight: number;\n scrollWidth: number;\n}\n\nexport type CodeState = {\n /** 是否展示代码块编辑区 */\n isShowCodeEditor: boolean;\n /** 代码块DSL数据源 */\n codeDsl: CodeBlockDSL | null;\n /** 当前选中的代码块id */\n id: Id;\n /** 代码块是否可编辑 */\n editable: boolean;\n /** list模式下左侧展示的代码列表 */\n combineIds: string[];\n /** 为业务逻辑预留的不可删除的代码块列表,由业务逻辑维护(如代码块上线后不可删除) */\n undeletableList: Id[];\n};\n\nexport type HookData = {\n /** 代码块id */\n codeId: Id;\n /** 参数 */\n params?: object;\n};\n\nexport type CodeRelation = {\n /** 组件id:[代码id1,代码id2] */\n [compId: Id]: Id[];\n};\n\nexport interface CodeDslItem {\n /** 代码块id */\n id: Id;\n /** 代码块名称 */\n name: string;\n /** 代码块函数内容 */\n codeBlockContent?: CodeBlockContent;\n /** 是否展示代码绑定关系 */\n showRelation?: boolean;\n /** 代码块对应绑定的组件信息 */\n combineInfo?: CombineInfo[];\n}\n\nexport interface CombineInfo {\n /** 组件id */\n compId: Id;\n /** 组件名称 */\n compName: string;\n}\n\nexport interface ListState {\n /** 代码块列表 */\n codeList: CodeDslItem[];\n}\n\nexport enum CodeDeleteErrorType {\n /** 代码块存在于不可删除列表中 */\n UNDELETEABLE = 'undeleteable',\n /** 代码块存在绑定关系 */\n BIND = 'bind',\n}\n\n// 代码块草稿localStorage key\nexport const CODE_DRAFT_STORAGE_KEY = 'magicCodeDraft';\n\nexport interface CodeParamStatement {\n /** 参数名称 */\n name: string;\n /** 参数类型 */\n type?: string;\n [key: string]: any;\n}\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\nexport interface EventSelectConfig {\n name: string;\n type: 'event-select';\n /** 事件名称表单配置 */\n eventNameConfig?: FormItem;\n /** 动作类型配置 */\n actionTypeConfig?: FormItem;\n /** 联动组件配置 */\n targetCompConfig?: FormItem;\n /** 联动组件动作配置 */\n compActionConfig?: FormItem;\n /** 联动代码配置 */\n codeActionConfig?: FormItem;\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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 serialize from 'serialize-javascript';\n\nimport type { MApp, MContainer, MNode, MPage } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\nimport type StageCore from '@tmagic/stage';\nimport { getNodePath, isNumber, isPage, isPop } from '@tmagic/utils';\n\nimport { Layout } from '../type';\nexport const COPY_STORAGE_KEY = '$MagicEditorCopyData';\n\n/**\n * 获取所有页面配置\n * @param app DSL跟节点\n * @returns 所有页面配置\n */\nexport const getPageList = (app: MApp): MPage[] => {\n if (app.items && Array.isArray(app.items)) {\n return app.items.filter((item: MPage) => item.type === NodeType.PAGE);\n }\n return [];\n};\n\n/**\n * 获取所有页面名称\n * @param pages 所有页面配置\n * @returns 所有页面名称\n */\nexport const getPageNameList = (pages: MPage[]): string[] => pages.map((page: MPage) => page.name || 'index');\n\n/**\n * 新增页面时,生成页面名称\n * @param {Object} pageNameList 所有页面名称\n * @returns {string}\n */\nexport const generatePageName = (pageNameList: string[]): string => {\n let pageLength = pageNameList.length;\n\n if (!pageLength) return 'index';\n\n let pageName = `page_${pageLength}`;\n while (pageNameList.includes(pageName)) {\n pageLength += 1;\n pageName = `page_${pageLength}`;\n }\n\n return pageName;\n};\n\n/**\n * 新增页面时,生成页面名称\n * @param {Object} app 所有页面配置\n * @returns {string}\n */\nexport const generatePageNameByApp = (app: MApp): string => generatePageName(getPageNameList(getPageList(app)));\n\n/**\n * @param {Object} node\n * @returns {boolean}\n */\nexport const isFixed = (node: MNode): boolean => node.style?.position === 'fixed';\n\nexport const getNodeIndex = (node: MNode, parent: MContainer | MApp): number => {\n const items = parent?.items || [];\n return items.findIndex((item: MNode) => `${item.id}` === `${node.id}`);\n};\n\nexport const getRelativeStyle = (style: Record<string, any> = {}): Record<string, any> => ({\n ...style,\n position: 'relative',\n top: 0,\n left: 0,\n});\n\nconst getMiddleTop = (node: MNode, parentNode: MNode, stage: StageCore | null) => {\n let height = node.style?.height || 0;\n\n if (!stage || typeof node.style?.top !== 'undefined' || !parentNode.style) return node.style?.top;\n\n if (!isNumber(height)) {\n height = 0;\n }\n\n const { height: parentHeight } = parentNode.style;\n\n if (isPage(parentNode)) {\n const { scrollTop = 0, wrapperHeight } = stage.mask;\n return (wrapperHeight - height) / 2 + scrollTop;\n }\n\n return (parentHeight - height) / 2;\n};\n\nexport const getInitPositionStyle = (style: Record<string, any> = {}, layout: Layout) => {\n if (layout === Layout.ABSOLUTE) {\n const newStyle: Record<string, any> = {\n ...style,\n position: 'absolute',\n };\n\n if (typeof newStyle.left === 'undefined' && typeof newStyle.right === 'undefined') {\n newStyle.left = 0;\n }\n\n return newStyle;\n }\n\n if (layout === Layout.RELATIVE) {\n return getRelativeStyle(style);\n }\n\n return style;\n};\n\nexport const setLayout = (node: MNode, layout: Layout) => {\n node.items?.forEach((child: MNode) => {\n if (isPop(child)) return;\n\n const style = child.style || {};\n\n // 是 fixed 不做处理\n if (style.position === 'fixed') return;\n\n if (layout !== Layout.RELATIVE) {\n style.position = 'absolute';\n } else {\n child.style = getRelativeStyle(style);\n child.style.right = 'auto';\n child.style.bottom = 'auto';\n }\n });\n return node;\n};\n\nexport const change2Fixed = (node: MNode, root: MApp) => {\n const path = getNodePath(node.id, root.items);\n const offset = {\n left: 0,\n top: 0,\n };\n\n path.forEach((value) => {\n offset.left = offset.left + globalThis.parseFloat(value.style?.left || 0);\n offset.top = offset.top + globalThis.parseFloat(value.style?.top || 0);\n });\n\n return {\n ...(node.style || {}),\n ...offset,\n };\n};\n\nexport const Fixed2Other = async (\n node: MNode,\n root: MApp,\n getLayout: (parent: MNode, node?: MNode) => Promise<Layout>,\n) => {\n const path = getNodePath(node.id, root.items);\n const cur = path.pop();\n const offset = {\n left: cur?.style?.left || 0,\n top: cur?.style?.top || 0,\n right: '',\n bottom: '',\n };\n\n path.forEach((value) => {\n offset.left = offset.left - globalThis.parseFloat(value.style?.left || 0);\n offset.top = offset.top - globalThis.parseFloat(value.style?.top || 0);\n });\n const style = node.style || {};\n\n const parent = path.pop();\n if (!parent) {\n return getRelativeStyle(style);\n }\n\n const layout = await getLayout(parent);\n if (layout !== Layout.RELATIVE) {\n return {\n ...style,\n ...offset,\n position: 'absolute',\n };\n }\n\n return getRelativeStyle(style);\n};\n\nexport const getGuideLineFromCache = (key: string): number[] => {\n if (!key) return [];\n\n const guideLineCacheData = globalThis.localStorage.getItem(key);\n if (guideLineCacheData) {\n try {\n return JSON.parse(guideLineCacheData) || [];\n } catch (e) {\n console.error(e);\n }\n }\n\n return [];\n};\n\nexport const fixNodeLeft = (config: MNode, parent: MContainer, doc?: Document) => {\n if (!doc || !config.style || !isNumber(config.style.left)) return config.style?.left;\n\n const el = doc.getElementById(`${config.id}`);\n const parentEl = doc.getElementById(`${parent.id}`);\n\n const left = Number(config.style?.left) || 0;\n if (el && parentEl && el.offsetWidth + left > parentEl.offsetWidth) {\n return parentEl.offsetWidth - el.offsetWidth;\n }\n\n return config.style.left;\n};\n\nexport const fixNodePosition = (config: MNode, parent: MContainer, stage: StageCore | null) => {\n if (config.style?.position !== 'absolute') {\n return config.style;\n }\n\n return {\n ...(config.style || {}),\n top: getMiddleTop(config, parent, stage),\n left: fixNodeLeft(config, parent, stage?.renderer.contentWindow?.document),\n };\n};\n\n// 序列化配置\nexport const serializeConfig = (config: any) =>\n serialize(config, {\n space: 2,\n unsafe: true,\n }).replace(/\"(\\w+)\":\\s/g, '$1: ');\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport { compose } from '../utils/compose';\n\nconst methodName = (prefix: string, name: string) => `${prefix}${name[0].toUpperCase()}${name.substring(1)}`;\n\nconst isError = (error: any): boolean => Object.prototype.toString.call(error) === '[object Error]';\n\nconst doAction = async (\n args: any[],\n scope: any,\n sourceMethod: any,\n beforeMethodName: string,\n afterMethodName: string,\n fn: (args: any[], next?: Function | undefined) => Promise<void>,\n) => {\n try {\n let beforeArgs = args;\n\n for (const beforeMethod of scope.pluginOptionsList[beforeMethodName]) {\n beforeArgs = (await beforeMethod(...beforeArgs)) || [];\n\n if (isError(beforeArgs)) throw beforeArgs;\n\n if (!Array.isArray(beforeArgs)) {\n beforeArgs = [beforeArgs];\n }\n }\n\n let returnValue: any = await fn(beforeArgs, sourceMethod.bind(scope));\n\n for (const afterMethod of scope.pluginOptionsList[afterMethodName]) {\n returnValue = await afterMethod(returnValue, ...beforeArgs);\n\n if (isError(returnValue)) throw returnValue;\n }\n\n return returnValue;\n } catch (error) {\n throw error;\n }\n};\n\n/**\n * 提供两种方式对Class进行扩展\n * 方法1:\n * 给Class中的每个方法都添加before after两个钩子\n * 给Class添加一个usePlugin方法,use方法可以传入一个包含before或者after方法的对象\n *\n * 例如:\n * Class EditorService extends BaseService {\n * constructor() {\n * super(['add']);\n * }\n * add(value) { return result; }\n * };\n *\n * const editorService = new EditorService();\n *\n * editorService.usePlugin({\n * beforeAdd(value) { return [value] },\n * afterAdd(result, value) { return 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 public removeAllPlugins() {\n Object.keys(this.pluginOptionsList).forEach((key) => {\n this.pluginOptionsList[key] = [];\n });\n Object.keys(this.middleware).forEach((key) => {\n this.middleware[key] = [];\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) 2023 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 { MPage } from '@tmagic/schema';\n\nimport { HistoryState, StepValue } from '../type';\nimport { UndoRedo } from '../utils/undo-redo';\n\nimport BaseService from './BaseService';\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 this.emit('page-change', this.state.pageSteps[this.state.pageId]);\n }\n\n public resetState(): 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.resetState();\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n\n private getUndoRedo() {\n if (!this.state.pageId) return null;\n return this.state.pageSteps[this.state.pageId];\n }\n\n private setCanUndoRedo(): void {\n const undoRedo = this.getUndoRedo();\n this.state.canRedo = undoRedo?.canRedo() || false;\n this.state.canUndo = undoRedo?.canUndo() || false;\n }\n}\n\nexport type HistoryService = History;\n\nexport default new History();\n","import serialize from 'serialize-javascript';\n\nimport BaseService from './BaseService';\n\ninterface Options {\n namespace?: string;\n protocol?: Protocol;\n}\n\nexport enum Protocol {\n OBJECT = 'object',\n JSON = 'json',\n STRING = 'string',\n NUMBER = 'number',\n BOOLEAN = 'boolean',\n}\n\n/**\n * 数据存储服务\n */\nexport class WebStorage extends BaseService {\n private storage: Storage = globalThis.localStorage;\n private namespace = 'tmagic';\n\n constructor() {\n super(['getStorage', 'getNamespace', 'clear', 'getItem', 'removeItem', 'setItem']);\n }\n\n /**\n * 获取数据存储对象,可以通过\n * const storageService = new StorageService();\n * storageService.usePlugin({\n * // 替换存储对象为 sessionStorage\n * async afterGetStorage(): Promise<Storage> {\n * return window.sessionStorage;\n * },\n * });\n */\n public async getStorage(): Promise<Storage> {\n return this.storage;\n }\n\n public async getNamespace(): Promise<string> {\n return this.namespace;\n }\n\n /**\n * 清理,支持storageService.usePlugin\n */\n public async clear(): Promise<void> {\n const storage = await this.getStorage();\n storage.clear();\n }\n /**\n * 获取存储项,支持storageService.usePlugin\n */\n public async getItem(key: string, options: Options = {}): Promise<any> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n const { protocol = options.protocol, item } = this.getValueAndProtocol(\n storage.getItem(`${options.namespace || namespace}:${key}`),\n );\n\n if (item === null) return null;\n\n switch (protocol) {\n case Protocol.OBJECT:\n // eslint-disable-next-line no-eval\n return eval(`(${item})`);\n case Protocol.JSON:\n return JSON.parse(item);\n case Protocol.NUMBER:\n return Number(item);\n case Protocol.BOOLEAN:\n return Boolean(item);\n default:\n return item;\n }\n }\n /**\n * 获取指定索引位置的key\n */\n public async key(index: number): Promise<string | null> {\n const storage = await this.getStorage();\n return storage.key(index);\n }\n\n /**\n * 移除存储项,支持storageService.usePlugin\n */\n public async removeItem(key: string, options: Options = {}): Promise<void> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n storage.removeItem(`${options.namespace || namespace}:${key}`);\n }\n\n /**\n * 设置存储项,支持storageService.usePlugin\n */\n public async setItem(key: string, value: any, options: Options = {}): Promise<void> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n let item = value;\n const protocol = options.protocol ? `${options.protocol}:` : '';\n if (typeof value === Protocol.STRING || typeof value === Protocol.NUMBER) {\n item = `${protocol}${value}`;\n } else {\n item = `${protocol}${serialize(value)}`;\n }\n storage.setItem(`${options.namespace || namespace}:${key}`, item);\n }\n\n public destroy() {\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n\n private getValueAndProtocol(value: string | null) {\n let protocol = '';\n\n if (value === null) {\n return {\n item: value,\n protocol,\n };\n }\n\n const item = value.replace(new RegExp(`^(${Object.values(Protocol).join('|')})(:)(.+)`), (_$0, $1, _$2, $3) => {\n protocol = $1;\n return $3;\n });\n\n return {\n protocol,\n item,\n };\n }\n}\n\nexport type StorageService = WebStorage;\nexport default new WebStorage();\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { reactive } from 'vue';\nimport { cloneDeep, mergeWith } from 'lodash-es';\n\nimport type { FormConfig } from '@tmagic/form';\nimport type { MComponent, MNode } from '@tmagic/schema';\nimport { toLine } from '@tmagic/utils';\n\nimport type { PropsState } from '../type';\nimport { fillConfig } from '../utils/props';\n\nimport BaseService from './BaseService';\n\nclass Props extends BaseService {\n private state = reactive<PropsState>({\n propsConfigMap: {},\n propsValueMap: {},\n });\n\n constructor() {\n super([\n 'setPropsConfig',\n 'getPropsConfig',\n 'setPropsValue',\n 'getPropsValue',\n 'createId',\n 'setNewItemId',\n 'fillConfig',\n 'getDefaultPropsValue',\n ]);\n }\n\n public setPropsConfigs(configs: Record<string, FormConfig>) {\n Object.keys(configs).forEach((type: string) => {\n this.setPropsConfig(toLine(type), configs[type]);\n });\n this.emit('props-configs-change');\n }\n\n public async fillConfig(config: FormConfig) {\n return fillConfig(config);\n }\n\n /**\n * 为指定类型组件设置组件属性表单配置\n * @param type 组件类型\n * @param config 组件属性表单配置\n */\n public async setPropsConfig(type: string, config: FormConfig) {\n this.state.propsConfigMap[type] = await this.fillConfig(Array.isArray(config) ? config : [config]);\n }\n\n /**\n * 获取指点类型的组件属性表单配置\n * @param type 组件类型\n * @returns 组件属性表单配置\n */\n public async getPropsConfig(type: string): Promise<FormConfig> {\n if (type === 'area') {\n return await this.getPropsConfig('button');\n }\n\n return cloneDeep(this.state.propsConfigMap[type] || (await this.fillConfig([])));\n }\n\n public setPropsValues(values: Record<string, MNode>) {\n Object.keys(values).forEach((type: string) => {\n this.setPropsValue(toLine(type), values[type]);\n });\n }\n\n /**\n * 为指点类型组件设置组件初始值\n * @param type 组件类型\n * @param value 组件初始值\n */\n public async setPropsValue(type: string, value: MNode) {\n this.state.propsValueMap[type] = value;\n }\n\n /**\n * 获取指定类型的组件初始值\n * @param type 组件类型\n * @returns 组件初始值\n */\n public async getPropsValue(type: string, { inputEvent, ...defaultValue }: Record<string, any> = {}) {\n if (type === 'area') {\n const value = (await this.getPropsValue('button')) as MComponent;\n value.className = 'action-area';\n value.text = '';\n if (value.style) {\n value.style.backgroundColor = 'rgba(255, 255, 255, 0)';\n }\n return value;\n }\n\n const [id, defaultPropsValue, data] = await Promise.all([\n this.createId(type),\n this.getDefaultPropsValue(type),\n this.setNewItemId(\n cloneDeep({\n type,\n ...defaultValue,\n } as any),\n ),\n ]);\n\n return {\n id,\n ...defaultPropsValue,\n ...mergeWith({}, cloneDeep(this.state.propsValueMap[type] || {}), data),\n };\n }\n\n public async createId(type: string | number): Promise<string> {\n return `${type}_${this.guid()}`;\n }\n\n /**\n * 将组件与组件的子元素配置中的id都设置成一个新的ID\n * @param {Object} config 组件配置\n */\n /* eslint no-param-reassign: [\"error\", { \"props\": false }] */\n public async setNewItemId(config: MNode) {\n config.id = await this.createId(config.type || 'component');\n\n if (config.items && Array.isArray(config.items)) {\n for (const item of config.items) {\n await this.setNewItemId(item);\n }\n }\n\n return config;\n }\n\n /**\n * 获取默认属性配置\n * @param type 组件类型\n * @returns Object\n */\n public async getDefaultPropsValue(type: string) {\n return ['page', 'container'].includes(type)\n ? {\n type,\n layout: 'absolute',\n style: {},\n name: type,\n items: [],\n }\n : {\n type,\n style: {},\n name: type,\n };\n }\n\n public resetState() {\n this.state.propsConfigMap = {};\n this.state.propsValueMap = {};\n }\n\n public destroy() {\n this.resetState();\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n\n /**\n * 生成指定位数的GUID,无【-】格式\n * @param digit 位数,默认值8\n * @returns\n */\n private guid(digit = 8): string {\n return 'x'.repeat(digit).replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\nexport type PropsService = Props;\n\nexport default new Props();\n","import { toRaw } from 'vue';\nimport { isEmpty } from 'lodash-es';\n\nimport { Id, MContainer, MNode } from '@tmagic/schema';\nimport { isPage } from '@tmagic/utils';\n\nimport editorService from '../services/editor';\nimport propsService from '../services/props';\nimport { AddMNode, PastePosition } from '../type';\nimport { generatePageNameByApp, getInitPositionStyle } from '../utils/editor';\n\n/**\n * 粘贴前置操作:返回分配了新id以及校准了坐标的配置\n * @param position 粘贴的坐标\n * @param config 待粘贴的元素配置(复制时保存的那份配置)\n * @returns\n */\nexport const beforePaste = async (position: PastePosition, config: MNode[]): Promise<MNode[]> => {\n if (!config[0]?.style) return config;\n const curNode = editorService.get('node');\n // 将数组中第一个元素的坐标作为参照点\n const { left: referenceLeft, top: referenceTop } = config[0].style;\n // 坐标校准后的粘贴数据\n const pasteConfigs: MNode[] = await Promise.all(\n config.map(async (configItem: MNode): Promise<MNode> => {\n // 解构 position 对象,从 position 删除 offsetX、offsetY字段\n const { offsetX = 0, offsetY = 0, ...positionClone } = position;\n let pastePosition = positionClone;\n\n if (!isEmpty(pastePosition) && curNode?.items) {\n // 如果没有传入粘贴坐标则可能为键盘操作,不再转换\n // 如果粘贴时选中了容器,则将元素粘贴到容器内,坐标需要转换为相对于容器的坐标\n pastePosition = getPositionInContainer(pastePosition, curNode.id);\n }\n\n // 将所有待粘贴元素坐标相对于多选第一个元素坐标重新计算,以保证多选粘贴后元素间距不变\n if (pastePosition.left && configItem.style?.left) {\n pastePosition.left = configItem.style.left - referenceLeft + pastePosition.left;\n }\n if (pastePosition.top && configItem.style?.top) {\n pastePosition.top = configItem.style?.top - referenceTop + pastePosition.top;\n }\n\n const pasteConfig = await propsService.setNewItemId(configItem);\n\n if (pasteConfig.style) {\n const { left, top } = pasteConfig.style;\n // 判断能转换为数字时,做粘贴偏移量计算\n if (typeof left === 'number' || (!!left && !isNaN(Number(left)))) {\n pasteConfig.style.left = Number(left) + offsetX;\n }\n if (typeof top === 'number' || (!!top && !isNaN(Number(top)))) {\n pasteConfig.style.top = Number(top) + offsetY;\n }\n\n pasteConfig.style = {\n ...pasteConfig.style,\n ...pastePosition,\n };\n }\n const root = editorService.get('root');\n if (isPage(pasteConfig) && root) {\n pasteConfig.name = generatePageNameByApp(root);\n }\n return pasteConfig as MNode;\n }),\n );\n return pasteConfigs;\n};\n\n/**\n * 将元素粘贴到容器内时,将相对于画布坐标转换为相对于容器的坐标\n * @param position PastePosition 粘贴时相对于画布的坐标\n * @param id 元素id\n * @returns PastePosition 转换后的坐标\n */\nexport const getPositionInContainer = (position: PastePosition = {}, id: Id) => {\n let { left = 0, top = 0 } = position;\n const parentEl = editorService.get('stage')?.renderer?.contentWindow?.document.getElementById(`${id}`);\n const parentElRect = parentEl?.getBoundingClientRect();\n left = left - (parentElRect?.left || 0);\n top = top - (parentElRect?.top || 0);\n return {\n left,\n top,\n };\n};\n\nexport const getAddParent = (node: MNode) => {\n const curNode = editorService.get('node');\n\n let parentNode;\n if (isPage(node)) {\n parentNode = editorService.get('root');\n } else if (curNode?.items) {\n parentNode = curNode as MContainer;\n } else if (curNode?.id) {\n parentNode = editorService.getParentById(curNode.id, false);\n }\n return parentNode;\n};\n\nexport const getDefaultConfig = async (addNode: AddMNode, parentNode: MContainer) => {\n const { type, inputEvent, ...config } = addNode;\n const layout = await editorService.getLayout(toRaw(parentNode), addNode as MNode);\n const newNode = { ...toRaw(await propsService.getPropsValue(type, config)) };\n newNode.style = getInitPositionStyle(newNode.style, layout);\n return newNode;\n};\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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, isObject, mergeWith, uniq } from 'lodash-es';\n\nimport type { Id, MApp, MComponent, MContainer, MNode, MPage } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\nimport StageCore from '@tmagic/stage';\nimport { getNodePath, isNumber, isPage, isPop } from '@tmagic/utils';\n\nimport historyService from '../services/history';\nimport storageService, { Protocol } from '../services/storage';\nimport type { AddMNode, EditorNodeInfo, PastePosition, StepValue, StoreState, StoreStateKey } from '../type';\nimport { LayerOffset, Layout } from '../type';\nimport {\n change2Fixed,\n COPY_STORAGE_KEY,\n Fixed2Other,\n fixNodePosition,\n getInitPositionStyle,\n getNodeIndex,\n isFixed,\n setLayout,\n} from '../utils/editor';\nimport { beforePaste, getAddParent } from '../utils/operator';\n\nimport BaseService from './BaseService';\nimport propsService from './props';\n\nclass Editor extends BaseService {\n public state: StoreState = reactive({\n root: null,\n page: null,\n parent: null,\n node: null,\n nodes: [],\n stage: null,\n highlightNode: null,\n modifiedNodeIds: new Map(),\n pageLength: 0,\n });\n private isHistoryStateChange = false;\n\n constructor() {\n super(\n [\n 'getLayout',\n 'select',\n 'doAdd',\n 'add',\n 'doRemove',\n 'remove',\n 'doUpdate',\n 'update',\n 'sort',\n 'copy',\n 'paste',\n 'doPaste',\n 'doAlignCenter',\n 'alignCenter',\n 'moveLayer',\n 'moveToContainer',\n 'move',\n 'undo',\n 'redo',\n 'highlight',\n ],\n // 需要注意循环依赖问题,如果函数间有相互调用的话,不能设置为串行调用\n ['select', 'update', 'moveLayer'],\n );\n }\n\n /**\n * 设置当前指点节点配置\n * @param name 'root' | 'page' | 'parent' | 'node' | 'highlightNode' | 'nodes' | 'stage' | 'modifiedNodeIds' | 'pageLength'\n * @param value MNode\n */\n public set<K extends StoreStateKey, T extends StoreState[K]>(name: K, value: T) {\n const preValue = this.state[name];\n this.state[name] = value;\n\n // set nodes时将node设置为nodes第一个元素\n if (name === 'nodes' && Array.isArray(value)) {\n this.set('node', value[0]);\n }\n\n if (name === 'root') {\n if (Array.isArray(value)) {\n throw new Error('root 不能为数组');\n }\n\n if (value && isObject(value) && !(value instanceof StageCore) && !(value instanceof Map)) {\n this.state.pageLength = value.items?.length || 0;\n } else {\n this.state.pageLength = 0;\n }\n\n this.emit('root-change', value, preValue);\n }\n }\n\n /**\n * 获取当前指点节点配置\n * @param name 'root' | 'page' | 'parent' | 'node' | 'highlightNode' | 'nodes' | 'stage' | 'modifiedNodeIds' | 'pageLength'\n * @returns MNode\n */\n public get<K extends StoreStateKey>(name: K): StoreState[K] {\n return this.state[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('root');\n if (raw) {\n root = toRaw(root);\n }\n\n const info: EditorNodeInfo = {\n node: null,\n parent: null,\n page: null,\n };\n\n if (!root) return info;\n\n if (id === root.id) {\n info.node = root;\n return info;\n }\n\n const path = getNodePath(id, root.items);\n\n if (!path.length) return info;\n\n path.unshift(root);\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 | null {\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 | null {\n const { parent } = this.getNodeInfo(id, raw);\n return parent;\n }\n\n /**\n * 只有容器拥有布局\n */\n public async getLayout(parent: MNode, node?: MNode): Promise<Layout> {\n if (node && typeof node !== 'function' && isFixed(node)) return Layout.FIXED;\n\n if (parent.layout) {\n return parent.layout;\n }\n\n // 如果该节点没有设置position,则认为是流式布局,例如获取root的布局时\n if (!parent.style?.position) {\n return Layout.RELATIVE;\n }\n\n return Layout.ABSOLUTE;\n }\n\n /**\n * 选中指定节点(将指定节点设置成当前选中状态)\n * @param config 指定节点配置或者ID\n * @returns 当前选中的节点配置\n */\n public async select(config: MNode | Id): Promise<MNode> | never {\n const { node, page, parent } = this.selectedConfigExceptionHandler(config);\n this.set('nodes', node ? [node] : []);\n this.set('page', page);\n this.set('parent', parent);\n\n if (page) {\n historyService.changePage(toRaw(page));\n } else {\n historyService.resetState();\n }\n\n if (node?.id) {\n this.get('stage')\n ?.renderer.runtime?.getApp?.()\n ?.page?.emit(\n 'editor:select',\n {\n node,\n page,\n parent,\n },\n getNodePath(node.id, this.get('root')?.items),\n );\n }\n\n this.emit('select', node);\n\n return node!;\n }\n\n public async selectNextNode(): Promise<MNode | null> | 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('stage')?.select(nextNode.id);\n\n return nextNode;\n }\n\n public async selectNextPage(): Promise<MNode> | never {\n const root = toRaw(this.get('root'));\n const page = toRaw(this.get('page'));\n\n if (!page) throw new Error('page不能为空');\n if (!root) throw new Error('root不能为空');\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('stage')?.select(nextPage.id);\n\n return nextPage;\n }\n\n /**\n * 高亮指定节点\n * @param config 指定节点配置或者ID\n * @returns 当前高亮的节点配置\n */\n public highlight(config: MNode | Id): void {\n const { node } = this.selectedConfigExceptionHandler(config);\n const currentHighlightNode = this.get('highlightNode');\n if (currentHighlightNode === node) return;\n this.set('highlightNode', node);\n }\n\n /**\n * 多选\n * @param ids 指定节点ID\n * @returns 加入多选的节点配置\n */\n public multiSelect(ids: Id[]): void {\n const nodes: MNode[] = [];\n const idsUnique = uniq(ids);\n idsUnique.forEach((id) => {\n const { node } = this.getNodeInfo(id);\n if (!node) return;\n nodes.push(node);\n });\n this.set('nodes', nodes);\n }\n\n public async doAdd(node: MNode, parent: MContainer): Promise<MNode> {\n const root = this.get('root');\n\n if (!root) throw new Error('root为空');\n\n const curNode = this.get('node');\n const stage = this.get('stage');\n\n if (!curNode) throw new Error('当前选中节点为空');\n\n if ((parent.type === NodeType.ROOT || curNode?.type === NodeType.ROOT) && node.type !== NodeType.PAGE) {\n throw new Error('app下不能添加组件');\n }\n\n if (parent.id !== curNode.id && node.type !== NodeType.PAGE) {\n const index = parent.items.indexOf(curNode);\n parent.items?.splice(index + 1, 0, node);\n } else {\n // 新增节点添加到配置中\n parent.items?.push(node);\n }\n\n const layout = await this.getLayout(toRaw(parent), node as MNode);\n node.style = getInitPositionStyle(node.style, layout);\n\n await stage?.add({\n config: cloneDeep(node),\n parent: cloneDeep(parent),\n parentId: parent.id,\n root: cloneDeep(root),\n });\n\n const newStyle = fixNodePosition(node, parent, stage);\n\n if (newStyle && (newStyle.top !== node.style.top || newStyle.left !== node.style.left)) {\n node.style = newStyle;\n await stage?.update({ config: cloneDeep(node), parentId: parent.id, root: cloneDeep(root) });\n }\n\n this.addModifiedNodeId(node.id);\n\n return node;\n }\n\n /**\n * 向指点容器添加组件节点\n * @param addConfig 将要添加的组件节点配置\n * @param parent 要添加到的容器组件节点配置,如果不设置,默认为当前选中的组件的父节点\n * @returns 添加后的节点\n */\n public async add(addNode: AddMNode | MNode[], parent?: MContainer | null): Promise<MNode | MNode[]> {\n const stage = this.get('stage');\n\n // 新增多个组件只存在于粘贴多个组件,粘贴的是一个完整的config,所以不再需要getPropsValue\n const addNodes = [];\n if (!Array.isArray(addNode)) {\n const { type, inputEvent, ...config } = addNode;\n\n if (!type) throw new Error('组件类型不能为空');\n\n addNodes.push({ ...toRaw(await propsService.getPropsValue(type, config)) });\n } else {\n addNodes.push(...addNode);\n }\n\n const newNodes = await Promise.all(\n addNodes.map((node) => {\n const root = this.get('root');\n if (isPage(node) && root) {\n return this.doAdd(node, root);\n }\n const parentNode = parent && typeof parent !== 'function' ? parent : getAddParent(node);\n if (!parentNode) throw new Error('未找到父元素');\n return this.doAdd(node, parentNode);\n }),\n );\n\n if (newNodes.length > 1) {\n const newNodeIds = newNodes.map((node) => node.id);\n // 触发选中样式\n stage?.multiSelect(newNodeIds);\n await this.multiSelect(newNodeIds);\n } else {\n await this.select(newNodes[0]);\n\n if (isPage(newNodes[0])) {\n this.state.pageLength += 1;\n } else {\n // 新增页面,这个时候页面还有渲染出来,此时select会出错,在runtime-ready的时候回去select\n stage?.select(newNodes[0].id);\n }\n }\n\n if (!isPage(newNodes[0])) {\n this.pushHistoryState();\n }\n\n this.emit('add', newNodes);\n\n return Array.isArray(addNode) ? newNodes : newNodes[0];\n }\n\n public async doRemove(node: MNode): Promise<void> {\n const root = this.get('root');\n if (!root) throw new Error('root不能为空');\n\n const { parent, node: curNode } = this.getNodeInfo(node.id);\n\n if (!parent || !curNode) throw new Error('找不要删除的节点');\n\n const index = getNodeIndex(curNode, parent);\n\n if (typeof index !== 'number' || index === -1) throw new Error('找不要删除的节点');\n\n parent.items?.splice(index, 1);\n const stage = this.get('stage');\n stage?.remove({ id: node.id, parentId: parent.id, root: cloneDeep(root) });\n\n if (node.type === NodeType.PAGE) {\n this.state.pageLength -= 1;\n\n if (root.items[0]) {\n await this.select(root.items[0]);\n stage?.select(root.items[0].id);\n } else {\n this.set('nodes', [root]);\n this.set('parent', null);\n this.set('page', null);\n this.set('stage', null);\n this.set('highlightNode', null);\n this.resetModifiedNodeId();\n historyService.reset();\n\n return;\n }\n } else {\n await this.select(parent);\n stage?.select(parent.id);\n }\n\n this.addModifiedNodeId(parent.id);\n }\n\n /**\n * 删除组件\n * @param {Object} node\n */\n public async remove(nodeOrNodeList: MNode | MNode[]): Promise<void> {\n const nodes = Array.isArray(nodeOrNodeList) ? nodeOrNodeList : [nodeOrNodeList];\n\n await Promise.all(nodes.map((node) => this.doRemove(node)));\n\n if (!isPage(nodes[0])) {\n // 更新历史记录\n this.pushHistoryState();\n }\n\n this.emit('remove', nodes);\n }\n\n public async doUpdate(config: MNode) {\n const root = this.get('root');\n if (!root) throw new Error('root为空');\n\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, root);\n\n newConfig = mergeWith(cloneDeep(node), newConfig, (objValue, srcValue) => {\n if (isObject(srcValue) && Array.isArray(objValue)) {\n // 原来的配置是数组,新的配置是对象,则直接使用新的值\n return srcValue;\n }\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 as MApp);\n return newConfig;\n }\n\n const { parent } = info;\n if (!parent) throw new Error('获取不到父级节点');\n\n const parentNodeItems = parent.items;\n const index = getNodeIndex(newConfig, parent);\n\n if (!parentNodeItems || typeof index === 'undefined' || index === -1) throw new Error('更新的节点未找到');\n\n const newLayout = await this.getLayout(newConfig);\n const layout = await this.getLayout(node);\n if (newLayout !== layout) {\n newConfig = setLayout(newConfig, newLayout);\n }\n\n parentNodeItems[index] = newConfig;\n\n // 将update后的配置更新到nodes中\n const nodes = this.get('nodes');\n const targetIndex = nodes.findIndex((nodeItem: MNode) => `${nodeItem.id}` === `${newConfig.id}`);\n nodes.splice(targetIndex, 1, newConfig);\n this.set('nodes', [...nodes]);\n\n this.get('stage')?.update({\n config: cloneDeep(newConfig),\n parentId: parent.id,\n root: cloneDeep(root),\n });\n\n if (newConfig.type === NodeType.PAGE) {\n this.set('page', newConfig as MPage);\n }\n\n this.addModifiedNodeId(newConfig.id);\n\n return newConfig;\n }\n\n /**\n * 更新节点\n * @param config 新的节点配置,配置中需要有id信息\n * @returns 更新后的节点配置\n */\n public async update(config: MNode | MNode[]): Promise<MNode | MNode[]> {\n const nodes = Array.isArray(config) ? config : [config];\n\n const newNodes = await Promise.all(nodes.map((node) => this.doUpdate(node)));\n\n this.pushHistoryState();\n\n this.emit('update', newNodes);\n return Array.isArray(config) ? newNodes : newNodes[0];\n }\n\n /**\n * 将id为id1的组件移动到id为id2的组件位置上,例如:[1,2,3,4] -> sort(1,3) -> [2,1,3,4]\n * @param id1 组件ID\n * @param id2 组件ID\n * @returns void\n */\n public async sort(id1: Id, id2: Id): Promise<void> {\n const root = this.get('root');\n if (!root) throw new Error('root为空');\n\n const node = this.get('node');\n if (!node) throw new Error('当前节点为空');\n\n const parent = cloneDeep(toRaw(this.get('parent')));\n if (!parent) throw new Error('父节点为空');\n\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('stage')?.update({\n config: cloneDeep(node),\n parentId: parent.id,\n root: cloneDeep(root),\n });\n\n this.addModifiedNodeId(parent.id);\n this.pushHistoryState();\n }\n\n /**\n * 将组将节点配置转化成string,然后存储到localStorage中\n * @param config 组件节点配置\n * @returns 组件节点配置\n */\n public async copy(config: MNode | MNode[]): Promise<void> {\n await storageService.setItem(COPY_STORAGE_KEY, Array.isArray(config) ? config : [config], {\n protocol: Protocol.OBJECT,\n });\n }\n\n /**\n * 从localStorage中获取节点,然后添加到当前容器中\n * @param position 粘贴的坐标\n * @returns 添加后的组件节点配置\n */\n public async paste(position: PastePosition = {}): Promise<MNode | MNode[] | void> {\n const config: MNode[] = await storageService.getItem(COPY_STORAGE_KEY);\n\n if (!Array.isArray(config)) return;\n\n const node = this.get('node');\n\n let parent: MContainer | null = null;\n // 粘贴的组件为当前选中组件的副本时,则添加到当前选中组件的父组件中\n if (config.length === 1 && config[0].id === node?.id) {\n parent = this.get('parent');\n if (parent?.type === NodeType.ROOT) {\n parent = this.get('page');\n }\n }\n\n const pasteConfigs = await this.doPaste(config, position);\n\n return this.add(pasteConfigs, parent);\n }\n\n public async doPaste(config: MNode[], position: PastePosition = {}): Promise<MNode[]> {\n const pasteConfigs = await beforePaste(position, cloneDeep(config));\n return pasteConfigs;\n }\n\n public async doAlignCenter(config: MNode): Promise<MNode> {\n const parent = this.getParentById(config.id);\n\n if (!parent) throw new Error('找不到父节点');\n\n const node = cloneDeep(toRaw(config));\n const layout = await this.getLayout(parent, node);\n if (layout === Layout.RELATIVE) {\n return config;\n }\n\n if (!node.style) return config;\n\n const stage = this.get('stage');\n const doc = stage?.renderer.contentWindow?.document;\n\n if (doc) {\n const el = doc.getElementById(`${node.id}`);\n const parentEl = el?.offsetParent;\n if (parentEl && el) {\n node.style.left = (parentEl.clientWidth - el.clientWidth) / 2;\n }\n } else if (parent.style && isNumber(parent.style?.width) && isNumber(node.style?.width)) {\n node.style.left = (parent.style.width - node.style.width) / 2;\n }\n\n return node;\n }\n\n /**\n * 将指点节点设置居中\n * @param config 组件节点配置\n * @returns 当前组件节点配置\n */\n public async alignCenter(config: MNode | MNode[]): Promise<MNode | MNode[]> {\n const nodes = Array.isArray(config) ? config : [config];\n const stage = this.get('stage');\n\n const newNodes = await Promise.all(nodes.map((node) => this.doAlignCenter(node)));\n\n const newNode = await this.update(newNodes);\n\n if (newNodes.length > 1) {\n await stage?.multiSelect(newNodes.map((node) => node.id));\n } else {\n await stage?.select(newNodes[0].id);\n }\n\n return newNode;\n }\n\n /**\n * 移动当前选中节点位置\n * @param offset 偏移量\n */\n public async moveLayer(offset: number | LayerOffset): Promise<void> {\n const root = this.get('root');\n if (!root) throw new Error('root为空');\n\n const parent = this.get('parent');\n if (!parent) throw new Error('父节点为空');\n\n const node = this.get('node');\n if (!node) throw new Error('当前节点为空');\n\n const brothers: MNode[] = parent.items || [];\n const index = brothers.findIndex((item) => `${item.id}` === `${node?.id}`);\n\n // 流式布局与绝对定位布局操作的相反的\n const layout = await this.getLayout(parent, node);\n const isRelative = layout === Layout.RELATIVE;\n\n brothers.splice(index, 1);\n\n if (offset === LayerOffset.TOP) {\n brothers.splice(isRelative ? 0 : brothers.length - 1, 0, node);\n } else if (offset === LayerOffset.BOTTOM) {\n brothers.splice(isRelative ? brothers.length - 1 : 0, 0, node);\n } else {\n brothers.splice(index + (isRelative ? -offset : offset), 0, node);\n }\n\n const grandparent = this.getParentById(parent.id);\n this.get('stage')?.update({\n config: cloneDeep(toRaw(parent)),\n parentId: grandparent?.id,\n root: cloneDeep(root),\n });\n\n this.addModifiedNodeId(parent.id);\n this.pushHistoryState();\n }\n\n /**\n * 移动到指定容器中\n * @param config 需要移动的节点\n * @param targetId 容器ID\n */\n public async moveToContainer(config: MNode, targetId: Id): Promise<MNode | undefined> {\n const root = cloneDeep(this.get('root'));\n const { node, parent } = this.getNodeInfo(config.id, false);\n const target = this.getNodeById(targetId, false) as MContainer;\n\n const stage = this.get('stage');\n if (root && node && parent && stage) {\n const index = getNodeIndex(node, parent);\n parent.items?.splice(index, 1);\n\n await stage.remove({ id: node.id, parentId: parent.id, root });\n\n const layout = await this.getLayout(target);\n\n const newConfig = mergeWith(cloneDeep(node), config, (objValue, srcValue) => {\n if (Array.isArray(srcValue)) {\n return srcValue;\n }\n });\n newConfig.style = getInitPositionStyle(newConfig.style, layout);\n\n target.items.push(newConfig);\n\n await stage.select(targetId);\n\n const targetParent = this.getParentById(target.id);\n await stage.update({ config: cloneDeep(target), parentId: targetParent?.id, root });\n\n await this.select(newConfig);\n stage.select(newConfig.id);\n\n this.addModifiedNodeId(target.id);\n this.addModifiedNodeId(parent.id);\n this.pushHistoryState();\n\n return newConfig;\n }\n }\n\n /**\n * 撤销当前操作\n * @returns 上一次数据\n */\n public async undo(): Promise<StepValue | null> {\n const value = historyService.undo();\n await this.changeHistoryState(value);\n return value;\n }\n\n /**\n * 恢复到下一步\n * @returns 下一步数据\n */\n public async redo(): Promise<StepValue | null> {\n const value = historyService.redo();\n await this.changeHistoryState(value);\n return value;\n }\n\n public async move(left: number, top: number) {\n const node = toRaw(this.get('node'));\n if (!node || isPage(node)) return;\n\n const { style, id, type } = node;\n if (!style || style.position !== 'absolute') return;\n\n if (top && !isNumber(style.top)) return;\n if (left && !isNumber(style.left)) return;\n\n this.update({\n id,\n type,\n style: {\n ...style,\n left: Number(style.left) + left,\n top: Number(style.top) + top,\n },\n });\n }\n\n public resetState() {\n this.set('root', null);\n this.set('node', null);\n this.set('nodes', []);\n this.set('page', null);\n this.set('parent', null);\n this.set('stage', null);\n this.set('highlightNode', null);\n this.set('modifiedNodeIds', new Map());\n this.set('pageLength', 0);\n }\n\n public destroy() {\n this.removeAllListeners();\n this.resetState();\n this.removeAllPlugins();\n }\n\n public resetModifiedNodeId() {\n this.get('modifiedNodeIds').clear();\n }\n\n private addModifiedNodeId(id: Id) {\n if (!this.isHistoryStateChange) {\n this.get('modifiedNodeIds').set(id, id);\n }\n }\n\n private pushHistoryState() {\n const curNode = cloneDeep(toRaw(this.get('node')));\n const page = this.get('page');\n if (!this.isHistoryStateChange && curNode && page) {\n historyService.push({\n data: cloneDeep(toRaw(page)),\n modifiedNodeIds: this.get('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('stage')?.select(value.nodeId);\n }, 0);\n this.emit('history-change', value.data);\n }\n\n private async toggleFixedPosition(dist: MNode, src: MNode, root: MApp) {\n const newConfig = cloneDeep(dist);\n\n if (!isPop(src) && newConfig.style?.position) {\n if (isFixed(newConfig) && !isFixed(src)) {\n newConfig.style = change2Fixed(newConfig, root);\n } else if (!isFixed(newConfig) && isFixed(src)) {\n newConfig.style = await Fixed2Other(newConfig, root, this.getLayout);\n }\n }\n\n return newConfig;\n }\n\n private selectedConfigExceptionHandler(config: MNode | Id): EditorNodeInfo {\n let id: Id;\n if (typeof config === 'string' || typeof config === 'number') {\n id = config;\n } else {\n id = config.id;\n }\n if (!id) {\n throw new Error('没有ID,无法选中');\n }\n\n const { node, parent, page } = this.getNodeInfo(id);\n if (!node) throw new Error('获取不到组件信息');\n\n if (node.id === this.state.root?.id) {\n throw new Error('不能选根节点');\n }\n return {\n node,\n parent,\n page,\n };\n }\n}\n\nexport type EditorService = Editor;\n\nexport default new Editor();\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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 editorService from '../services/editor';\nimport type { StageRect, UiState } from '../type';\n\nimport BaseService from './BaseService';\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: {\n left: 0,\n right: 0,\n center: 0,\n },\n showGuides: true,\n showRule: true,\n propsPanelSize: 'small',\n showAddPageButton: true,\n});\n\nclass Ui extends BaseService {\n constructor() {\n super(['zoom', 'calcZoom']);\n }\n\n public set<K extends keyof UiState, T extends UiState[K]>(name: K, value: T) {\n const mask = editorService.get('stage')?.mask;\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[name] = value;\n }\n\n public get<K extends keyof UiState>(name: K) {\n return state[name];\n }\n\n public async zoom(zoom: number) {\n this.set('zoom', (this.get('zoom') * 100 + zoom * 100) / 100);\n if (this.get('zoom') < 0.1) this.set('zoom', 0.1);\n }\n\n public async calcZoom() {\n const { stageRect, stageContainerRect } = state;\n const { height, width } = stageContainerRect;\n if (!width || !height) return 1;\n\n // 30为标尺的大小\n const stageWidth = stageRect.width + 30;\n const stageHeight = stageRect.height + 30;\n\n if (width > stageWidth && height > stageHeight) {\n return 1;\n }\n // 60/80是为了不要让画布太过去贴住四周(这样好看些)\n return Math.min((width - 60) / stageWidth || 1, (height - 80) / stageHeight || 1);\n }\n\n public resetState() {\n this.set('showSrc', false);\n this.set('uiSelectMode', false);\n this.set('zoom', 1);\n this.set('stageContainerRect', {\n width: 0,\n height: 0,\n });\n }\n\n public destroy() {\n this.resetState();\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n\n private async setStageRect(value: StageRect) {\n state.stageRect = {\n ...state.stageRect,\n ...value,\n };\n state.zoom = await this.calcZoom();\n }\n}\n\nexport type UiService = Ui;\n\nexport default new Ui();\n","import { computed } from 'vue';\n\nimport StageCore, { GuidesType, RemoveEventData, SortEventData, UpdateEventData } from '@tmagic/stage';\n\nimport editorService from '../services/editor';\nimport uiService from '../services/ui';\nimport { H_GUIDE_LINE_STORAGE_KEY, StageOptions, V_GUIDE_LINE_STORAGE_KEY } from '../type';\n\nimport { getGuideLineFromCache } from './editor';\n\nconst root = computed(() => editorService.get('root'));\nconst page = computed(() => editorService.get('page'));\nconst zoom = computed(() => uiService.get('zoom') || 1);\nconst uiSelectMode = computed(() => uiService.get('uiSelectMode'));\n\nconst getGuideLineKey = (key: string) => `${key}_${root.value?.id}_${page.value?.id}`;\n\nexport const useStage = (stageOptions: StageOptions) => {\n const stage = new StageCore({\n render: stageOptions.render,\n runtimeUrl: stageOptions.runtimeUrl,\n zoom: zoom.value,\n autoScrollIntoView: stageOptions.autoScrollIntoView,\n isContainer: stageOptions.isContainer,\n containerHighlightClassName: stageOptions.containerHighlightClassName,\n containerHighlightDuration: stageOptions.containerHighlightDuration,\n containerHighlightType: stageOptions.containerHighlightType,\n disabledDragStart: stageOptions.disabledDragStart,\n canSelect: (el, event, stop) => {\n const elCanSelect = stageOptions.canSelect(el);\n // 在组件联动过程中不能再往下选择,返回并触发 ui-select\n if (uiSelectMode.value && elCanSelect && event.type === 'mousedown') {\n document.dispatchEvent(new CustomEvent('ui-select', { detail: el }));\n return stop();\n }\n\n return elCanSelect;\n },\n moveableOptions: stageOptions.moveableOptions,\n updateDragEl: stageOptions.updateDragEl,\n });\n\n stage.mask.setGuides([\n getGuideLineFromCache(getGuideLineKey(H_GUIDE_LINE_STORAGE_KEY)),\n getGuideLineFromCache(getGuideLineKey(V_GUIDE_LINE_STORAGE_KEY)),\n ]);\n\n stage.on('select', (el: HTMLElement) => {\n if (`${editorService.get('node')?.id}` === el.id && editorService.get('nodes').length === 1) return;\n editorService.select(el.id);\n });\n\n stage.on('highlight', (el: HTMLElement) => {\n editorService.highlight(el.id);\n });\n\n stage.on('multi-select', (els: HTMLElement[]) => {\n editorService.multiSelect(els.map((el) => el.id));\n });\n\n stage.on('update', (ev: UpdateEventData) => {\n if (ev.parentEl) {\n for (const data of ev.data) {\n editorService.moveToContainer({ id: data.el.id, style: data.style }, ev.parentEl.id);\n }\n return;\n }\n\n editorService.update(ev.data.map((data) => ({ id: data.el.id, style: data.style })));\n });\n\n stage.on('sort', (ev: SortEventData) => {\n editorService.sort(ev.src, ev.dist);\n });\n\n stage.on('remove', (ev: RemoveEventData) => {\n editorService.remove(\n ev.data.map(({ el }) => ({\n id: el.id,\n })),\n );\n });\n\n stage.on('select-parent', () => {\n const parent = editorService.get('parent');\n if (!parent) throw new Error('父节点为空');\n editorService.select(parent);\n editorService.get('stage')?.select(parent.id);\n });\n\n stage.on('change-guides', (e) => {\n uiService.set('showGuides', true);\n\n if (!root.value || !page.value) return;\n\n const storageKey = getGuideLineKey(\n e.type === GuidesType.HORIZONTAL ? H_GUIDE_LINE_STORAGE_KEY : V_GUIDE_LINE_STORAGE_KEY,\n );\n if (e.guides.length) {\n globalThis.localStorage.setItem(storageKey, JSON.stringify(e.guides));\n } else {\n globalThis.localStorage.removeItem(storageKey);\n }\n });\n\n return stage;\n};\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorAddPageBox',\n})\n</script>\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 <MIcon :icon=\"Plus\"></MIcon>\n </div>\n <p>新增页面</p>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorAddPageBox\">\nimport { inject, toRaw } from 'vue';\nimport { Plus } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport MIcon from '../components/Icon.vue';\nimport type { Services } from '../type';\nimport { generatePageNameByApp } from '../utils';\n\nconst services = inject<Services>('services');\n\nconst clickHandler = () => {\n const { editorService } = services || {};\n\n if (!editorService) return;\n\n const root = toRaw(editorService.get('root'));\n if (!root) throw new Error('root 不能为空');\n\n editorService.add({\n type: NodeType.PAGE,\n name: generatePageNameByApp(root),\n });\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorFramework',\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 <Layout\n v-else\n class=\"m-editor-content\"\n left-class=\"m-editor-framework-left\"\n center-class=\"m-editor-framework-center\"\n right-class=\"m-editor-framework-right\"\n v-model:left=\"columnWidth.left\"\n v-model:right=\"columnWidth.right\"\n :min-left=\"45\"\n :min-right=\"1\"\n @change=\"columnWidthChange\"\n >\n <template #left>\n <slot name=\"sidebar\"></slot>\n </template>\n\n <template #center>\n <slot v-if=\"pageLength > 0\" name=\"workspace\"></slot>\n <slot v-else name=\"empty\">\n <AddPageBox></AddPageBox>\n </slot>\n </template>\n\n <template v-if=\"pageLength > 0 && nodes.length === 1\" #right>\n <TMagicScrollbar>\n <slot name=\"props-panel\"></slot>\n </TMagicScrollbar>\n </template>\n </Layout>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorFramework\">\nimport { computed, inject, ref, watch } from 'vue';\n\nimport { TMagicScrollbar } from '@tmagic/design';\n\nimport Layout from '../components/Layout.vue';\nimport { GetColumnWidth, Services } from '../type';\n\nimport AddPageBox from './AddPageBox.vue';\n\nconst DEFAULT_LEFT_COLUMN_WIDTH = 310;\nconst DEFAULT_RIGHT_COLUMN_WIDTH = 480;\n\nwithDefaults(\n defineProps<{\n codeOptions?: Record<string, any>;\n }>(),\n {\n codeOptions: () => ({}),\n },\n);\n\nconst { editorService, uiService } = inject<Services>('services') || {};\n\nconst root = computed(() => editorService?.get('root'));\nconst nodes = computed(() => editorService?.get('nodes') || []);\n\nconst pageLength = computed(() => editorService?.get('pageLength') || 0);\nconst showSrc = computed(() => uiService?.get('showSrc'));\n\nconst LEFT_COLUMN_WIDTH_STORAGE_KEY = '$MagicEditorLeftColumnWidthData';\nconst RIGHT_COLUMN_WIDTH_STORAGE_KEY = '$MagicEditorRightColumnWidthData';\n\nconst leftColumnWidthCacheData = Number(globalThis.localStorage.getItem(LEFT_COLUMN_WIDTH_STORAGE_KEY));\nconst RightColumnWidthCacheData = Number(globalThis.localStorage.getItem(RIGHT_COLUMN_WIDTH_STORAGE_KEY));\n\nconst columnWidth = ref<Partial<GetColumnWidth>>({\n left: leftColumnWidthCacheData,\n center: 0,\n right: RightColumnWidthCacheData,\n});\n\nwatch(\n pageLength,\n (length) => {\n const left = columnWidth.value.left || DEFAULT_LEFT_COLUMN_WIDTH;\n\n columnWidth.value.left = left;\n\n if (length <= 0) {\n columnWidth.value.right = undefined;\n columnWidth.value.center = globalThis.document.body.clientWidth - left;\n } else {\n const right = columnWidth.value.right || RightColumnWidthCacheData || DEFAULT_RIGHT_COLUMN_WIDTH;\n columnWidth.value.right = right;\n columnWidth.value.center = globalThis.document.body.clientWidth - left - right;\n }\n\n uiService?.set('columnWidth', columnWidth.value as GetColumnWidth);\n },\n {\n immediate: true,\n },\n);\n\nwatch(\n () => columnWidth.value.right,\n (right) => {\n if (typeof right === 'undefined') return;\n globalThis.localStorage.setItem(RIGHT_COLUMN_WIDTH_STORAGE_KEY, `${right}`);\n },\n);\n\nwatch(\n () => columnWidth.value.left,\n (left) => {\n globalThis.localStorage.setItem(LEFT_COLUMN_WIDTH_STORAGE_KEY, `${left}`);\n },\n);\n\nconst columnWidthChange = (columnW: GetColumnWidth) => {\n columnWidth.value.left = columnW.left;\n columnWidth.value.center = columnW.center;\n columnWidth.value.right = columnW.right;\n uiService?.set('columnWidth', columnW);\n};\n\nconst 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</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorToolButton',\n})\n</script>\n<template>\n <div\n v-if=\"display\"\n class=\"menu-item\"\n :class=\"`${data.type} ${data.className || ''}`\"\n @click=\"clickHandler(data, $event)\"\n @mousedown=\"mousedownHandler(data, $event)\"\n @mouseup=\"mouseupHandler(data, $event)\"\n >\n <TMagicDivider v-if=\"data.type === 'divider'\" :direction=\"data.direction || 'vertical'\"></TMagicDivider>\n <div v-else-if=\"data.type === 'text'\" class=\"menu-item-text\">{{ data.text }}</div>\n\n <template v-else-if=\"data.type === 'button'\">\n <TMagicTooltip v-if=\"data.tooltip\" effect=\"dark\" placement=\"bottom-start\" :content=\"data.tooltip\">\n <TMagicButton size=\"small\" text :disabled=\"disabled\"\n ><MIcon v-if=\"data.icon\" :icon=\"data.icon\"></MIcon><span>{{ data.text }}</span></TMagicButton\n >\n </TMagicTooltip>\n <TMagicButton v-else size=\"small\" text :disabled=\"disabled\"\n ><MIcon v-if=\"data.icon\" :icon=\"data.icon\"></MIcon><span>{{ data.text }}</span></TMagicButton\n >\n </template>\n\n <TMagicDropdown\n v-else-if=\"data.type === 'dropdown'\"\n trigger=\"click\"\n :disabled=\"disabled\"\n @command=\"dropdownHandler\"\n >\n <span class=\"el-dropdown-link menubar-menu-button\">\n {{ data.text }}<TMagicIcon class=\"el-icon--right\"><ArrowDown></ArrowDown></TMagicIcon>\n </span>\n <template #dropdown>\n <TMagicDropdownMenu v-if=\"data.items && data.items.length\">\n <TMagicDropdownItem v-for=\"(subItem, index) in data.items\" :key=\"index\" :command=\"{ data, subItem }\">{{\n subItem.text\n }}</TMagicDropdownItem>\n </TMagicDropdownMenu>\n </template>\n </TMagicDropdown>\n\n <component v-else-if=\"data.type === 'component'\" v-bind=\"data.props || {}\" :is=\"data.component\"></component>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorToolButton\">\nimport { computed, inject } from 'vue';\nimport { ArrowDown } from '@element-plus/icons-vue';\n\nimport {\n TMagicButton,\n TMagicDivider,\n TMagicDropdown,\n TMagicDropdownItem,\n TMagicDropdownMenu,\n TMagicIcon,\n TMagicTooltip,\n} from '@tmagic/design';\n\nimport MIcon from '../components/Icon.vue';\nimport type { MenuButton, MenuComponent, Services } from '../type';\n\nconst props = withDefaults(\n defineProps<{\n data?: MenuButton | MenuComponent;\n eventType?: 'mousedown' | 'mouseup' | 'click';\n }>(),\n {\n data: () => ({\n type: 'text',\n display: false,\n }),\n eventType: 'click',\n },\n);\nconst services = inject<Services>('services');\n\nconst disabled = computed(() => {\n if (typeof props.data === 'string') return false;\n if (props.data.type === 'component') return false;\n if (typeof props.data.disabled === 'function') {\n return props.data.disabled(services);\n }\n return props.data.disabled;\n});\n\nconst display = computed(() => {\n if (!props.data) return false;\n if (typeof props.data === 'string') return true;\n if (typeof props.data.display === 'function') {\n return props.data.display(services);\n }\n return props.data.display ?? true;\n});\n\nconst buttonHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (disabled.value) return;\n if (typeof (item as MenuButton).handler === 'function' && services) {\n (item as MenuButton).handler?.(services, event);\n }\n};\n\nconst dropdownHandler = (command: any) => {\n if (command.item.handler) {\n command.item.handler(services);\n }\n};\n\nconst clickHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'click') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n\nconst mousedownHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'mousedown') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n\nconst mouseupHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'mouseup') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorNavMenu',\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 <ToolButton :data=\"item\" v-for=\"(item, index) in buttons[key]\" :key=\"index\"></ToolButton>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorNavMenu\">\nimport { computed, inject, markRaw } from 'vue';\nimport { Back, Delete, FullScreen, Grid, Memo, Right, ScaleToOriginal, ZoomIn, ZoomOut } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport ToolButton from '../components/ToolButton.vue';\nimport { ColumnLayout, MenuBarData, MenuButton, MenuComponent, MenuItem, Services } from '../type';\n\nconst props = withDefaults(\n defineProps<{\n data?: MenuBarData;\n height?: number;\n }>(),\n {\n data: () => ({}),\n height: 35,\n },\n);\n\nconst services = inject<Services>('services');\nconst uiService = services?.uiService;\n\nconst columnWidth = computed(() => services?.uiService.get('columnWidth'));\nconst keys = Object.values(ColumnLayout);\n\nconst showGuides = computed((): boolean => uiService?.get('showGuides') ?? true);\nconst showRule = computed((): boolean => uiService?.get('showRule') ?? true);\nconst zoom = computed((): number => uiService?.get('zoom') ?? 1);\n\nconst isMac = /mac os x/.test(navigator.userAgent.toLowerCase());\nconst ctrl = isMac ? 'Command' : 'Ctrl';\n\nconst getConfig = (item: MenuItem): (MenuButton | MenuComponent)[] => {\n if (typeof item !== 'string') {\n return [item];\n }\n const config: (MenuButton | MenuComponent)[] = [];\n switch (item) {\n case '/':\n config.push({\n type: 'divider',\n className: 'divider',\n });\n break;\n case 'zoom':\n config.push(\n ...getConfig('zoom-out'),\n ...getConfig(`${parseInt(`${zoom.value * 100}`, 10)}%`),\n ...getConfig('zoom-in'),\n ...getConfig('scale-to-original'),\n ...getConfig('scale-to-fit'),\n );\n break;\n case 'delete':\n config.push({\n type: 'button',\n className: 'delete',\n icon: markRaw(Delete),\n tooltip: `刪除(Delete)`,\n disabled: () => services?.editorService.get('node')?.type === NodeType.PAGE,\n handler: () => {\n const node = services?.editorService.get('node');\n node && services?.editorService.remove(node);\n },\n });\n break;\n case 'undo':\n config.push({\n type: 'button',\n className: 'undo',\n icon: markRaw(Back),\n tooltip: `后退(${ctrl}+z)`,\n disabled: () => !services?.historyService.state.canUndo,\n handler: () => services?.editorService.undo(),\n });\n break;\n case 'redo':\n config.push({\n type: 'button',\n className: 'redo',\n icon: markRaw(Right),\n tooltip: `前进(${ctrl}+Shift+z)`,\n disabled: () => !services?.historyService.state.canRedo,\n handler: () => services?.editorService.redo(),\n });\n break;\n case 'zoom-in':\n config.push({\n type: 'button',\n className: 'zoom-in',\n icon: markRaw(ZoomIn),\n tooltip: `放大(${ctrl}+=)`,\n handler: () => uiService?.zoom(0.1),\n });\n break;\n case 'zoom-out':\n config.push({\n type: 'button',\n className: 'zoom-out',\n icon: markRaw(ZoomOut),\n tooltip: `縮小(${ctrl}+-)`,\n handler: () => uiService?.zoom(-0.1),\n });\n break;\n case 'scale-to-original':\n config.push({\n type: 'button',\n className: 'scale-to-original',\n icon: markRaw(ScaleToOriginal),\n tooltip: `缩放到实际大小(${ctrl}+1)`,\n handler: () => uiService?.set('zoom', 1),\n });\n break;\n case 'scale-to-fit':\n config.push({\n type: 'button',\n className: 'scale-to-fit',\n icon: markRaw(FullScreen),\n tooltip: `缩放以适应(${ctrl}+0)`,\n handler: async () => uiService?.set('zoom', await uiService.calcZoom()),\n });\n break;\n case 'rule':\n config.push({\n type: 'button',\n className: 'rule',\n icon: markRaw(Memo),\n tooltip: showRule.value ? '隐藏标尺' : '显示标尺',\n handler: () => uiService?.set('showRule', !showRule.value),\n });\n break;\n case 'guides':\n config.push({\n type: 'button',\n className: 'guides',\n icon: markRaw(Grid),\n tooltip: showGuides.value ? '隐藏参考线' : '显示参考线',\n handler: () => uiService?.set('showGuides', !showGuides.value),\n });\n break;\n default:\n config.push({\n type: 'text',\n text: item,\n });\n }\n return config;\n};\n\nconst buttons = computed(() => {\n const data: {\n [ColumnLayout.LEFT]: (MenuButton | MenuComponent)[];\n [ColumnLayout.CENTER]: (MenuButton | MenuComponent)[];\n [ColumnLayout.RIGHT]: (MenuButton | MenuComponent)[];\n } = {\n [ColumnLayout.LEFT]: [],\n [ColumnLayout.CENTER]: [],\n [ColumnLayout.RIGHT]: [],\n };\n keys.forEach((key) => {\n const items = props.data[key] || [];\n items.forEach((item) => {\n data[key].push(...getConfig(item));\n });\n });\n return data;\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorPropsPanel',\n})\n</script>\n<template>\n <div class=\"m-editor-props-panel\">\n <slot name=\"props-panel-header\"></slot>\n <MForm\n ref=\"configForm\"\n :class=\"`m-editor-props-panel ${propsPanelSize}`\"\n :popper-class=\"`m-editor-props-panel-popper ${propsPanelSize}`\"\n :size=\"propsPanelSize\"\n :init-values=\"values\"\n :config=\"curFormConfig\"\n @change=\"submit\"\n ></MForm>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorPropsPanel\">\nimport { computed, getCurrentInstance, inject, onMounted, onUnmounted, ref, watchEffect } from 'vue';\n\nimport { tMagicMessage } from '@tmagic/design';\nimport type { FormValue } from '@tmagic/form';\nimport { MForm } from '@tmagic/form';\n\nimport type { Services } from '../type';\n\nconst emit = defineEmits(['mounted']);\n\nconst internalInstance = getCurrentInstance();\nconst values = ref<FormValue>({});\nconst configForm = ref<InstanceType<typeof MForm>>();\n// ts类型应该是FormConfig, 但是打包时会出错,所以暂时用any\nconst curFormConfig = ref<any>([]);\nconst services = inject<Services>('services');\nconst node = computed(() => services?.editorService.get('node'));\nconst propsPanelSize = computed(() => services?.uiService.get('propsPanelSize') || 'small');\nconst stage = computed(() => services?.editorService.get('stage'));\n\nconst init = async () => {\n if (!node.value) {\n curFormConfig.value = [];\n return;\n }\n\n const type = node.value.type || (node.value.items ? 'container' : 'text');\n curFormConfig.value = (await services?.propsService.getPropsConfig(type)) || [];\n values.value = node.value;\n};\n\nwatchEffect(init);\nservices?.propsService.on('props-configs-change', init);\n\nonMounted(() => {\n emit('mounted', internalInstance);\n});\n\nonUnmounted(() => {\n services?.propsService.off('props-configs-change', init);\n});\n\nwatchEffect(() => {\n if (configForm.value && stage.value) {\n configForm.value.formState.stage = stage.value;\n }\n});\n\nconst submit = async () => {\n try {\n const values = await configForm.value?.submitForm();\n services?.editorService.update(values);\n } catch (e: any) {\n console.error(e);\n tMagicMessage.closeAll();\n tMagicMessage.error(e.message);\n }\n};\n\ndefineExpose({ submit });\n</script>\n","<template>\n <TMagicInput\n v-model=\"filterText\"\n class=\"search-input\"\n size=\"small\"\n placeholder=\"输入关键字进行过滤\"\n clearable\n :prefix-icon=\"Search\"\n @input=\"filterTextChangeHandler\"\n ></TMagicInput>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Search } from '@element-plus/icons-vue';\n\nimport { TMagicInput } from '@tmagic/design';\n\nconst emit = defineEmits(['search']);\n\nconst filterText = ref('');\n\nconst filterTextChangeHandler = () => {\n emit('search', filterText.value);\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorCodeDraftEditor',\n})\n</script>\n<template>\n <div class=\"m-editor-wrapper\" :class=\"isFullScreen ? 'fullScreen' : 'normal'\">\n <magic-code-editor\n ref=\"codeEditor\"\n class=\"m-editor-container\"\n :init-values=\"`${codeContent}`\"\n @save=\"saveCodeDraft\"\n :language=\"language\"\n :options=\"codeOptions\"\n ></magic-code-editor>\n <div class=\"m-editor-content-bottom\" v-if=\"editable\">\n <TMagicButton type=\"primary\" class=\"button\" @click=\"toggleFullScreen\">\n {{ isFullScreen ? '退出全屏' : '全屏' }}</TMagicButton\n >\n <TMagicButton type=\"primary\" class=\"button\" @click=\"saveAndClose\">确认</TMagicButton>\n <TMagicButton type=\"primary\" class=\"button\" @click=\"close\">关闭</TMagicButton>\n </div>\n <div class=\"m-editor-content-bottom\" v-else>\n <TMagicButton type=\"primary\" class=\"button\" @click=\"toggleFullScreen\">\n {{ isFullScreen ? '退出全屏' : '全屏' }}</TMagicButton\n >\n <TMagicButton type=\"primary\" class=\"button\" @click=\"close\">关闭</TMagicButton>\n </div>\n </div>\n</template>\n<script lang=\"ts\" setup name=\"MEditorCodeDraftEditor\">\nimport { computed, inject, ref, watchEffect } from 'vue';\nimport type { Action } from 'element-plus';\nimport type * as monaco from 'monaco-editor';\n\nimport { TMagicButton, tMagicMessage, tMagicMessageBox } from '@tmagic/design';\nimport { Id } from '@tmagic/schema';\nimport { datetimeFormatter } from '@tmagic/utils';\n\nimport MagicCodeEditor from '../layouts/CodeEditor.vue';\nimport type { Services } from '../type';\n\nconst props = withDefaults(\n defineProps<{\n /** 代码id */\n id: Id;\n /** 代码内容 */\n content: string;\n /** 是否可编辑 */\n editable?: boolean;\n /** 是否自动保存草稿 */\n autoSaveDraft?: boolean;\n /** 编辑器参数 */\n codeOptions?: Object;\n /** 编辑器语言 */\n language?: string;\n }>(),\n {\n editable: true,\n autoSaveDraft: true,\n },\n);\nconst emit = defineEmits(['close', 'saveAndClose']);\n\nconst services = inject<Services>('services');\n\nconst codeContent = ref<string>('');\nconst editorContent = ref<string>('');\nconst codeEditor = ref<InstanceType<typeof MagicCodeEditor>>();\n// 原始代码内容\nconst originCodeContent = ref<string>('');\nconst isFullScreen = ref<boolean>(false);\n\nconst codeOptions = computed(() => ({\n ...props.codeOptions,\n readOnly: !props.editable,\n}));\n\nwatchEffect(() => {\n codeContent.value = props.content;\n if (!originCodeContent.value) {\n // 暂存原始的代码内容\n originCodeContent.value = codeContent.value;\n }\n // 有草稿时展示上次保存的草稿内容\n const codeDraft = services?.codeBlockService.getCodeDraft(props.id);\n if (codeDraft) {\n codeContent.value = codeDraft;\n }\n});\n\n// 保存草稿\nconst saveCodeDraft = async (codeValue: string) => {\n if (!props.autoSaveDraft) return;\n if (originCodeContent.value === codeValue) {\n // 没修改或改回原样 有草稿的话删除草稿\n services?.codeBlockService.removeCodeDraft(props.id);\n return;\n }\n services?.codeBlockService.setCodeDraft(props.id, codeValue);\n tMagicMessage.success(`代码草稿保存成功 ${datetimeFormatter(new Date())}`);\n};\n\n// 保存并关闭\nconst saveAndClose = (): void => {\n if (!codeEditor.value || !props.editable) return;\n // 代码内容\n editorContent.value = (codeEditor.value.getEditor() as monaco.editor.IStandaloneCodeEditor)?.getValue();\n emit('saveAndClose', editorContent.value);\n};\n\n// 关闭弹窗\nconst close = async (): Promise<void> => {\n const codeDraft = services?.codeBlockService.getCodeDraft(props.id);\n if (codeDraft) {\n tMagicMessageBox\n .confirm('您有代码修改未保存,是否保存后再关闭?', '提示', {\n confirmButtonText: '保存并关闭',\n cancelButtonText: '直接关闭',\n type: 'warning',\n distinguishCancelAndClose: true,\n })\n .then(async () => {\n // 保存之后再关闭\n saveAndClose();\n })\n .catch((action: Action) => {\n if (action === 'cancel') {\n // 删除草稿 直接关闭\n services?.codeBlockService.removeCodeDraft(props.id);\n emit('close');\n }\n });\n } else {\n emit('close');\n }\n};\n\n// 切换全屏\nconst toggleFullScreen = (): void => {\n isFullScreen.value = !isFullScreen.value;\n if (codeEditor.value) {\n codeEditor.value.focus();\n }\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorFunctionEditor',\n})\n</script>\n<template>\n <TMagicCard shadow=\"never\">\n <template #header>\n <div class=\"code-name-wrapper\">\n <div class=\"code-name-label\">代码块名称</div>\n <TMagicInput class=\"code-name-input\" v-model=\"codeName\" :disabled=\"!editable\" />\n </div>\n <div class=\"code-name-wrapper\">\n <div class=\"code-name-label\">参数</div>\n <m-form-table\n style=\"width: 800px\"\n :config=\"tableConfig\"\n :model=\"tableModel\"\n :enableToggleMode=\"false\"\n name=\"params\"\n prop=\"params\"\n size=\"small\"\n >\n </m-form-table>\n </div>\n </template>\n <CodeDraftEditor\n :id=\"id\"\n :content=\"codeContent\"\n :editable=\"editable\"\n :autoSaveDraft=\"autoSaveDraft\"\n :codeOptions=\"codeOptions\"\n language=\"javascript\"\n @saveAndClose=\"saveAndClose\"\n @close=\"close\"\n ></CodeDraftEditor>\n </TMagicCard>\n</template>\n<script lang=\"ts\" setup name=\"MEditorFunctionEditor\">\nimport { inject, provide, ref, watchEffect } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport { TMagicCard, TMagicInput, tMagicMessage } from '@tmagic/design';\nimport { ColumnConfig, TableConfig } from '@tmagic/form';\nimport { CodeParam, Id } from '@tmagic/schema';\n\nimport type { Services } from '../type';\n\nimport CodeDraftEditor from './CodeDraftEditor.vue';\nconst defaultParamColConfig: ColumnConfig = {\n type: 'row',\n label: '参数类型',\n items: [\n {\n text: '参数类型',\n labelWidth: '70px',\n type: 'select',\n name: 'type',\n options: [\n {\n text: '数字',\n label: '数字',\n value: 'number',\n },\n {\n text: '字符串',\n label: '字符串',\n value: 'text',\n },\n ],\n },\n ],\n};\n\nconst props = withDefaults(\n defineProps<{\n /** 代码块id */\n id: Id;\n /** 代码块名称 */\n name: string;\n /** 代码内容 */\n content: string;\n /** 是否可编辑 */\n editable?: boolean;\n /** 是否自动保存草稿 */\n autoSaveDraft?: boolean;\n /** 编辑器扩展参数 */\n codeOptions?: object;\n /** 代码参数扩展配置 */\n paramsColConfig?: ColumnConfig;\n }>(),\n {\n editable: true,\n autoSaveDraft: true,\n },\n);\n\nconst paramsColConfig = props.paramsColConfig || defaultParamColConfig;\n\nconst tableConfig: TableConfig = {\n type: 'table',\n border: true,\n enableFullscreen: false,\n name: 'params',\n maxHeight: '300px',\n dropSort: false,\n items: [\n {\n type: 'text',\n label: '参数名',\n name: 'name',\n width: 200,\n },\n {\n type: 'text',\n label: '参数注释',\n name: 'tip',\n width: 200,\n },\n paramsColConfig,\n ],\n};\n\nconst emit = defineEmits(['change', 'field-input']);\n\nconst services = inject<Services>('services');\n\nconst codeName = ref<string>('');\nconst codeContent = ref<string>('');\nconst evalRes = ref(true);\n\nprovide('mForm', {\n $emit: emit,\n setField: () => {},\n});\n\nconst tableModel = ref<{ params: CodeParam[] }>();\nwatchEffect(() => {\n codeName.value = props.name;\n codeContent.value = props.content;\n});\n\nconst initTableModel = (): void => {\n const codeDsl = cloneDeep(services?.codeBlockService.getCodeDsl());\n if (!codeDsl) return;\n tableModel.value = {\n params: codeDsl[props.id]?.params || [],\n };\n};\n\ninitTableModel();\n\n// 保存前钩子\nconst beforeSave = (codeValue: string): boolean => {\n try {\n // eval检测js代码是否存在语法错误\n // eslint-disable-next-line no-eval\n eval(codeValue);\n return true;\n } catch (e: any) {\n tMagicMessage.error(e.stack);\n return false;\n }\n};\n\n// 保存代码\nconst saveCode = async (codeValue: string): Promise<void> => {\n if (!props.editable) return;\n evalRes.value = beforeSave(codeValue);\n if (evalRes.value) {\n // 存入dsl\n await services?.codeBlockService.setCodeDslById(props.id, {\n name: codeName.value,\n content: codeValue,\n params: tableModel.value?.params || [],\n });\n tMagicMessage.success('代码保存成功');\n // 删除草稿\n services?.codeBlockService.removeCodeDraft(props.id);\n }\n};\n\n// 保存并关闭\nconst saveAndClose = async (codeValue: string): Promise<void> => {\n await saveCode(codeValue);\n if (evalRes.value) {\n close();\n }\n};\n\n// 关闭弹窗\nconst close = (): void => {\n services?.codeBlockService.setCodeEditorShowStatus(false);\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorCodeBlockEditor',\n})\n</script>\n<template>\n <TMagicDrawer\n class=\"code-editor-dialog\"\n :model-value=\"true\"\n :title=\"currentTitle\"\n :close-on-press-escape=\"false\"\n :append-to-body=\"true\"\n :show-close=\"false\"\n :close-on-click-modal=\"false\"\n :size=\"size\"\n >\n <Layout v-model:left=\"left\" :min-left=\"45\" class=\"code-editor-layout\">\n <!-- 右侧区域 -->\n <template #center>\n <div v-if=\"!isEmpty(codeConfig)\" class=\"m-editor-code-block-editor-panel\">\n <slot name=\"code-block-edit-panel-header\" :id=\"id\"></slot>\n <FunctionEditor\n v-if=\"codeConfig\"\n :id=\"id\"\n :name=\"codeConfig.name\"\n :content=\"codeConfig.content\"\n :paramsColConfig=\"paramsColConfig\"\n :editable=\"!!editable\"\n :autoSaveDraft=\"true\"\n :codeOptions=\"codeOptions\"\n ></FunctionEditor>\n </div>\n </template>\n </Layout>\n </TMagicDrawer>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorCodeBlockEditor\">\nimport { computed, inject, reactive, ref, watchEffect } from 'vue';\nimport { cloneDeep, forIn, isEmpty } from 'lodash-es';\n\nimport { TMagicDrawer } from '@tmagic/design';\nimport { ColumnConfig } from '@tmagic/form';\nimport { CodeBlockContent } from '@tmagic/schema';\n\nimport FunctionEditor from '../../../components/FunctionEditor.vue';\nimport Layout from '../../../components/Layout.vue';\nimport type { ListState, Services } from '../../../type';\nimport { serializeConfig } from '../../../utils/editor';\n\nconst services = inject<Services>('services');\nconst codeOptions = inject('codeOptions', {});\n\ndefineProps<{\n paramsColConfig?: ColumnConfig;\n}>();\n\nconst size = computed(() => globalThis.document.body.clientWidth - (services?.uiService.get('columnWidth').left || 0));\n\nconst left = ref(200);\nconst currentTitle = ref('');\n// 编辑器当前需展示的代码块内容\nconst codeConfig = ref<CodeBlockContent | null>(null);\n// select选择的内容(ListState)\nconst state = reactive<ListState>({\n codeList: [],\n});\n\nconst id = computed(() => services?.codeBlockService.getId() || '');\nconst editable = computed(() => services?.codeBlockService.getEditStatus());\n// 当前选中组件绑定的代码块id数组\nconst selectedIds = computed(() => services?.codeBlockService.getCombineIds() || []);\n\nwatchEffect(async () => {\n codeConfig.value = cloneDeep(await services?.codeBlockService.getCodeContentById(id.value)) || null;\n if (!codeConfig.value) return;\n codeConfig.value.content = serializeConfig(codeConfig.value.content);\n});\n\nwatchEffect(async () => {\n const codeDsl = (await services?.codeBlockService.getCodeDslByIds(selectedIds.value)) || null;\n if (!codeDsl) return;\n state.codeList = [];\n forIn(codeDsl, (value: CodeBlockContent, key: string) => {\n state.codeList.push({\n id: key,\n name: value.name,\n });\n });\n currentTitle.value = state.codeList[0]?.name || '';\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorCodeBlockList',\n})\n</script>\n<template>\n <TMagicScrollbar class=\"m-editor-code-block-list\">\n <slot name=\"code-block-panel-header\">\n <div class=\"code-header-wrapper\">\n <SearchInput @search=\"filterTextChangeHandler\"></SearchInput>\n <TMagicButton class=\"create-code-button\" type=\"primary\" size=\"small\" @click=\"createCodeBlock\" v-if=\"editable\"\n >新增</TMagicButton\n >\n </div>\n </slot>\n\n <!-- 代码块列表 -->\n <TMagicTree\n ref=\"tree\"\n class=\"magic-editor-layer-tree\"\n node-key=\"id\"\n empty-text=\"暂无代码块\"\n default-expand-all\n :expand-on-click-node=\"false\"\n :data=\"codeList\"\n :highlight-current=\"true\"\n :filter-node-method=\"filterNode\"\n @node-click=\"clickHandler\"\n >\n <template #default=\"{ data }\">\n <div :id=\"data.id\" class=\"list-container\">\n <div class=\"list-item\">\n <span class=\"code-name\">{{ data.name }}({{ data.id }})</span>\n <!-- 右侧工具栏 -->\n <div class=\"right-tool\" v-if=\"data.type === 'code'\">\n <TMagicTooltip effect=\"dark\" :content=\"editable ? '编辑' : '查看'\" placement=\"bottom\">\n <Icon :icon=\"editable ? Edit : View\" class=\"edit-icon\" @click.stop=\"editCode(`${data.id}`)\"></Icon>\n </TMagicTooltip>\n <TMagicTooltip effect=\"dark\" content=\"删除\" placement=\"bottom\" v-if=\"editable\">\n <Icon :icon=\"Close\" class=\"edit-icon\" @click.stop=\"deleteCode(`${data.id}`)\"></Icon>\n </TMagicTooltip>\n <slot name=\"code-block-panel-tool\" :id=\"data.id\" :data=\"data.codeBlockContent\"></slot>\n </div>\n </div>\n </div>\n </template>\n </TMagicTree>\n\n <!-- 代码块编辑区 -->\n <CodeBlockEditor v-if=\"isShowCodeBlockEditor\" :paramsColConfig=\"paramsColConfig\">\n <template #code-block-edit-panel-header=\"{ id }\">\n <slot name=\"code-block-edit-panel-header\" :id=\"id\"></slot>\n </template>\n </CodeBlockEditor>\n </TMagicScrollbar>\n</template>\n\n<script setup lang=\"ts\" name=\"MEditorCodeBlockList\">\nimport { computed, inject, ref } from 'vue';\nimport { Close, Edit, View } from '@element-plus/icons-vue';\n\nimport { TMagicButton, tMagicMessage, TMagicScrollbar, TMagicTooltip, TMagicTree } from '@tmagic/design';\nimport { ColumnConfig } from '@tmagic/form';\nimport { CodeBlockContent, Id } from '@tmagic/schema';\n\nimport Icon from '../../../components/Icon.vue';\nimport SearchInput from '../../../components/SearchInput.vue';\nimport { CodeDeleteErrorType, CodeDslItem, Services } from '../../../type';\n\nimport CodeBlockEditor from './CodeBlockEditor.vue';\n\nconst props = defineProps<{\n customError?: (id: Id, errorType: CodeDeleteErrorType) => any;\n paramsColConfig?: ColumnConfig;\n}>();\n\nconst { codeBlockService, depService, editorService } = inject<Services>('services') || {};\n\n// 代码块列表\nconst codeList = computed(() =>\n Object.values(depService?.targets['code-block'] || {}).map((target) => ({\n id: target.id,\n name: target.name,\n type: 'code',\n codeBlockContent: codeBlockService?.getCodeContentById(target.id),\n children: Object.entries(target.deps).map(([id, dep]) => ({\n name: dep.name,\n type: 'node',\n id,\n children: dep.keys.map((key) => ({ name: key, id: key, type: 'key' })),\n })),\n })),\n);\n\nconst editable = computed(() => codeBlockService?.getEditStatus());\n\n// 是否展示代码编辑区\nconst isShowCodeBlockEditor = computed(() => codeBlockService?.getCodeEditorShowStatus() || false);\n\n// 新增代码块\nconst createCodeBlock = async () => {\n if (!codeBlockService) {\n tMagicMessage.error('新增代码块失败');\n return;\n }\n\n const codeConfig: CodeBlockContent = {\n name: '代码块',\n content: `({app, params}) => {\\n // place your code here\\n}`,\n params: [],\n };\n\n const id = await codeBlockService.getUniqueId();\n\n await codeBlockService.setCodeDslById(id, codeConfig);\n codeBlockService.setCodeEditorContent(true, id);\n};\n\n// 编辑代码块\nconst editCode = async (key: Id) => {\n codeBlockService?.setCodeEditorContent(true, key);\n};\n\n// 删除代码块\nconst deleteCode = (key: Id) => {\n const currentCode = codeList.value.find((codeItem) => codeItem.id === key);\n const existBinds = Boolean(currentCode?.children.length);\n const undeleteableList = codeBlockService?.getUndeletableList() || [];\n if (!existBinds && !undeleteableList.includes(key)) {\n // 无绑定关系,且不在不可删除列表中\n codeBlockService?.deleteCodeDslByIds([key]);\n } else {\n if (typeof props.customError === 'function') {\n props.customError(key, existBinds ? CodeDeleteErrorType.BIND : CodeDeleteErrorType.UNDELETEABLE);\n } else {\n tMagicMessage.error('代码块删除失败');\n }\n }\n};\n\nconst tree = ref<InstanceType<typeof TMagicTree>>();\n\nconst filterNode = (value: string, data: CodeDslItem): boolean => {\n if (!value) {\n return true;\n }\n return `${data.name}${data.id}`.toLocaleLowerCase().indexOf(value.toLocaleLowerCase()) !== -1;\n};\n\nconst filterTextChangeHandler = (val: string) => {\n tree.value?.filter(val);\n};\n\n// 选中组件\nconst selectComp = (compId: Id) => {\n const stage = editorService?.get('stage');\n editorService?.select(compId);\n stage?.select(compId);\n};\n\nconst clickHandler = (data: any, node: any) => {\n if (data.type === 'node') {\n selectComp(data.id);\n } else if (data.type === 'key') {\n selectComp(node.parent.data.id);\n }\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorComponentListPanel',\n})\n</script>\n<template>\n <TMagicScrollbar>\n <slot name=\"component-list-panel-header\"></slot>\n\n <TMagicCollapse class=\"ui-component-panel\" :model-value=\"collapseValue\">\n <SearchInput @search=\"filterTextChangeHandler\"></SearchInput>\n <template v-for=\"(group, index) in list\">\n <TMagicCollapseItem v-if=\"group.items && group.items.length\" :key=\"index\" :name=\"`${index}`\">\n <template #title><MIcon :icon=\"Grid\"></MIcon>{{ group.title }}</template>\n <div\n v-for=\"item in group.items\"\n class=\"component-item\"\n draggable=\"true\"\n :key=\"item.type\"\n @click=\"appendComponent(item)\"\n @dragstart=\"dragstartHandler(item, $event)\"\n @dragend=\"dragendHandler\"\n @drag=\"dragHandler\"\n >\n <slot name=\"component-list-item\" :component=\"item\">\n <MIcon :icon=\"item.icon\"></MIcon>\n\n <TMagicTooltip effect=\"dark\" placement=\"bottom\" :content=\"item.text\">\n <span>{{ item.text }}</span>\n </TMagicTooltip>\n </slot>\n </div>\n </TMagicCollapseItem>\n </template>\n </TMagicCollapse>\n </TMagicScrollbar>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorComponentListPanel\">\nimport { computed, inject, ref } from 'vue';\nimport { Grid } from '@element-plus/icons-vue';\nimport serialize from 'serialize-javascript';\n\nimport { TMagicCollapse, TMagicCollapseItem, TMagicScrollbar, TMagicTooltip } from '@tmagic/design';\nimport { removeClassNameByClassName } from '@tmagic/utils';\n\nimport MIcon from '../../components/Icon.vue';\nimport SearchInput from '../../components/SearchInput.vue';\nimport type { ComponentGroup, ComponentItem, Services, StageOptions } from '../../type';\n\nconst searchText = ref('');\n\nconst filterTextChangeHandler = (v: string) => {\n searchText.value = v;\n};\n\nconst services = inject<Services>('services');\nconst stageOptions = inject<StageOptions>('stageOptions');\n\nconst stage = computed(() => services?.editorService.get('stage'));\nconst list = computed(() =>\n services?.componentListService.getList().map((group: ComponentGroup) => ({\n ...group,\n items: group.items.filter((item: ComponentItem) => item.text.includes(searchText.value)),\n })),\n);\nconst collapseValue = computed(() =>\n Array(list.value?.length)\n .fill(1)\n .map((x, i) => `${i}`),\n);\n\nlet timeout: NodeJS.Timeout | undefined;\nlet clientX: number;\nlet clientY: number;\n\nconst appendComponent = ({ text, type, data = {} }: ComponentItem): void => {\n services?.editorService.add({\n name: text,\n type,\n ...data,\n });\n};\n\nconst dragstartHandler = ({ text, type, data = {} }: ComponentItem, e: DragEvent) => {\n if (e.dataTransfer) {\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData(\n 'data',\n serialize({\n name: text,\n type,\n ...data,\n }).replace(/\"(\\w+)\":\\s/g, '$1: '),\n );\n }\n};\n\nconst dragendHandler = () => {\n if (timeout) {\n globalThis.clearTimeout(timeout);\n timeout = undefined;\n }\n const doc = stage.value?.renderer.contentWindow?.document;\n if (doc && stageOptions) {\n removeClassNameByClassName(doc, stageOptions.containerHighlightClassName);\n }\n clientX = 0;\n clientY = 0;\n};\n\nconst dragHandler = (e: DragEvent) => {\n if (e.clientX !== clientX || e.clientY !== clientY) {\n clientX = e.clientX;\n clientY = e.clientY;\n if (timeout) {\n globalThis.clearTimeout(timeout);\n timeout = undefined;\n }\n return;\n }\n\n if (timeout || !stage.value) return;\n\n timeout = stage.value.getAddContainerHighlightClassNameTimeout(e);\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorContentMenu',\n})\n</script>\n<template>\n <div v-if=\"menuData.length\" v-show=\"visible\" class=\"magic-editor-content-menu\" ref=\"menu\" :style=\"menuStyle\">\n <div>\n <ToolButton\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 ></ToolButton>\n </div>\n <teleport to=\"body\">\n <content-menu\n class=\"sub-menu\"\n ref=\"subMenu\"\n :menu-data=\"subMenuData\"\n :is-sub-menu=\"true\"\n @hide=\"hide\"\n ></content-menu>\n </teleport>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorContentMenu\">\nimport { nextTick, onMounted, onUnmounted, ref } from 'vue';\n\nimport { MenuButton, MenuComponent } from '../type';\n\nimport ToolButton from './ToolButton.vue';\n\nconst props = withDefaults(\n defineProps<{\n menuData?: (MenuButton | MenuComponent)[];\n isSubMenu?: boolean;\n }>(),\n {\n menuData: () => [],\n isSubMenu: false,\n },\n);\n\nconst emit = defineEmits(['hide', 'show']);\n\nconst menu = ref<HTMLDivElement>();\nconst subMenu = ref<any>();\nconst visible = ref(false);\nconst subMenuData = ref<(MenuButton | MenuComponent)[]>([]);\nconst menuStyle = ref({\n left: '0',\n top: '0',\n});\n\nconst hide = () => {\n if (!visible.value) return;\n\n visible.value = false;\n subMenu.value?.hide();\n\n emit('hide');\n};\n\nconst hideHandler = (e: MouseEvent) => {\n const target = e.target as HTMLElement | undefined;\n if (!visible.value || !target) {\n return;\n }\n if (menu.value?.contains(target) || subMenu.value?.$el?.contains(target)) {\n return;\n }\n hide();\n};\n\nconst show = (e: MouseEvent) => {\n // 加settimeout是以为,如果菜单中的按钮监听的是mouseup,那么菜单显示出来时鼠标如果正好在菜单上就会马上触发按钮的mouseup\n setTimeout(() => {\n visible.value = true;\n\n nextTick(() => {\n const menuHeight = menu.value?.clientHeight || 0;\n\n let top = e.clientY;\n if (menuHeight + e.clientY > document.body.clientHeight) {\n top = document.body.clientHeight - menuHeight;\n }\n\n menuStyle.value = {\n top: `${top}px`,\n left: `${e.clientX}px`,\n };\n\n emit('show');\n });\n }, 300);\n};\n\nconst showSubMenu = (item: MenuButton | MenuComponent) => {\n const menuItem = item as MenuButton;\n if (typeof item !== 'object' || !menuItem.items?.length) {\n return;\n }\n\n subMenuData.value = menuItem.items;\n if (menu.value) {\n subMenu.value.show({\n clientX: menu.value.offsetLeft + menu.value.clientWidth,\n clientY: menu.value.offsetTop,\n });\n }\n};\n\nonMounted(() => {\n if (props.isSubMenu) return;\n\n globalThis.addEventListener('mousedown', hideHandler, true);\n});\n\nonUnmounted(() => {\n if (props.isSubMenu) return;\n\n globalThis.removeEventListener('mousedown', hideHandler, true);\n});\n\ndefineExpose({\n hide,\n show,\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorLayerMenu',\n})\n</script>\n<template>\n <ContentMenu :menu-data=\"menuData\" ref=\"menu\" style=\"overflow: initial\"></ContentMenu>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorLayerMenu\">\nimport { computed, inject, markRaw, ref } from 'vue';\nimport { CopyDocument, Delete, Files, Plus } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport ContentMenu from '../../components/ContentMenu.vue';\nimport type { ComponentGroup, MenuButton, MenuComponent, Services } from '../../type';\n\nconst props = defineProps<{\n layerContentMenu: (MenuButton | MenuComponent)[];\n}>();\n\nconst services = inject<Services>('services');\nconst menu = ref<InstanceType<typeof ContentMenu>>();\nconst node = computed(() => services?.editorService.get('node'));\nconst isRoot = computed(() => node.value?.type === NodeType.ROOT);\nconst isPage = computed(() => node.value?.type === NodeType.PAGE);\nconst componentList = computed(() => services?.componentListService.getList() || []);\n\nconst 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\nconst 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\nconst menuData = computed<(MenuButton | MenuComponent)[]>(() => [\n {\n type: 'button',\n text: '新增',\n icon: markRaw(Plus),\n display: () => node.value?.items,\n items: getSubMenuData.value,\n },\n {\n type: 'button',\n text: '复制',\n icon: markRaw(CopyDocument),\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 ...props.layerContentMenu,\n]);\n\nconst show = (e: MouseEvent) => {\n menu.value?.show(e);\n};\n\ndefineExpose({\n show,\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorLayerPanel',\n})\n</script>\n<template>\n <TMagicScrollbar class=\"magic-editor-layer-panel\">\n <slot name=\"layer-panel-header\"></slot>\n\n <SearchInput @search=\"filterTextChangeHandler\"></SearchInput>\n\n <TMagicTree\n v-if=\"values.length\"\n class=\"magic-editor-layer-tree\"\n ref=\"tree\"\n node-key=\"id\"\n empty-text=\"页面空荡荡的\"\n draggable\n :default-expanded-keys=\"expandedKeys\"\n :default-checked-keys=\"checkedKeys\"\n :current-node-key=\"currentNodeKey\"\n :data=\"values\"\n :expand-on-click-node=\"false\"\n :highlight-current=\"!isMultiSelect\"\n :check-on-click-node=\"true\"\n :props=\"treeProps\"\n :filter-node-method=\"filterNode\"\n :allow-drop=\"allowDrop\"\n :show-checkbox=\"isMultiSelect\"\n @node-click=\"clickHandler\"\n @node-contextmenu=\"contextmenu\"\n @node-drag-end=\"handleDragEnd\"\n @node-collapse=\"handleCollapse\"\n @node-expand=\"handleExpand\"\n @check=\"checkHandler\"\n @mousedown=\"toggleClickFlag\"\n @mouseup=\"toggleClickFlag\"\n >\n <template #default=\"{ node, data }\">\n <div class=\"cus-tree-node\" :id=\"data.id\" @mouseenter=\"highlightHandler(data)\">\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 </TMagicTree>\n\n <Teleport to=\"body\">\n <LayerMenu ref=\"menu\" :layer-content-menu=\"layerContentMenu\"></LayerMenu>\n </Teleport>\n </TMagicScrollbar>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorLayerPanel\">\nimport { computed, inject, onMounted, onUnmounted, ref, watch } from 'vue';\nimport KeyController from 'keycon';\nimport { difference, throttle, union } from 'lodash-es';\n\nimport { TMagicScrollbar, TMagicTree } from '@tmagic/design';\nimport type { Id, MNode, MPage } from '@tmagic/schema';\nimport { MContainer, NodeType } from '@tmagic/schema';\nimport { getNodePath, isPage } from '@tmagic/utils';\n\nimport SearchInput from '../../components/SearchInput.vue';\nimport type { MenuButton, MenuComponent, Services } from '../../type';\nimport { Layout } from '../../type';\n\nimport LayerMenu from './LayerMenu.vue';\n\ndefineProps<{\n layerContentMenu: (MenuButton | MenuComponent)[];\n}>();\n\nconst throttleTime = 150;\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\n\nconst tree = ref<InstanceType<typeof TMagicTree>>();\nconst menu = ref<InstanceType<typeof LayerMenu>>();\n\n// 多选选中的组件id数组\nconst checkedKeys = ref<Id[]>([]);\n// 是否多选\nconst isCtrlKeyDown = ref(false);\n// 默认展开节点\nconst expandedKeys = ref<Id[]>([]);\nconst currentNodeKey = ref<Id>();\n// 鼠标是否按下标志,用于高亮状态互斥\nconst clicked = ref(false);\n\nconst treeProps = {\n children: 'items',\n disabled: (data: MNode) => Boolean(data.items?.length),\n class: (data: MNode) => {\n if (clicked.value || isPage(data)) return '';\n if (data.id === highlightNode?.value?.id && !checkedKeys.value.includes(data.id)) {\n return 'cus-tree-node-hover';\n }\n },\n};\n\nconst isMultiSelect = computed(() => isCtrlKeyDown.value || checkedKeys.value.length > 1);\n\nconst nodes = computed(() => editorService?.get('nodes') || []);\nconst page = computed(() => editorService?.get('page'));\nconst values = computed(() => (page.value ? [page.value] : []));\n// 高亮的节点\nconst highlightNode = computed(() => editorService?.get('highlightNode'));\n\n// 触发画布单选\nconst select = async (data: MNode) => {\n if (!data.id) {\n throw new Error('没有id');\n }\n\n await editorService?.select(data);\n editorService?.get('stage')?.select(data.id);\n};\n\n// 触发画布多选\nconst multiSelect = async (data: Id[]) => {\n await editorService?.multiSelect(data);\n editorService?.get('stage')?.multiSelect(data);\n};\n\n// 触发画布高亮\nconst highlight = (data: MNode) => {\n if (!data?.id) {\n throw new Error('没有id');\n }\n editorService?.highlight(data);\n editorService?.get('stage')?.highlight(data.id);\n};\n\n// tree方法:拖拽时判定目标节点能否成为拖动目标位置\nconst 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// tree事件:拖拽结束时(可能未成功)触发的事件\nconst handleDragEnd = async (e: any) => {\n if (!tree.value) return;\n const { data: node } = e;\n const parent = editorService?.getParentById(node.id, false) as MContainer;\n const layout = await editorService?.getLayout(parent);\n node.style.position = layout;\n if (layout === Layout.RELATIVE) {\n node.style.top = 0;\n node.style.left = 0;\n }\n const data = tree.value.getData();\n const [page] = data as [MPage];\n editorService?.update(page);\n};\n\n// tree事件:节点被关闭时触发的事件\nconst handleCollapse = (data: MNode) => {\n expandedKeys.value = expandedKeys.value.filter((id) => id !== data.id);\n};\n\n// tree事件:节点被展开时触发的事件\nconst handleExpand = (data: MNode) => {\n if (!page.value) {\n expandedKeys.value = [];\n return;\n }\n\n expandedKeys.value = union(\n expandedKeys.value,\n getNodePath(data.id, [page.value]).map((node) => node.id),\n );\n};\n\n// tree方法:对树节点进行筛选时执行的方法\nconst 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// 过滤关键字\nconst filterTextChangeHandler = (val: string) => {\n tree.value?.filter(val);\n};\n\nwatch(nodes, (nodes) => {\n const ids = nodes?.map((node) => node.id) || [];\n\n const idsLength = ids.length;\n const checkedKeysLength = checkedKeys.value.length;\n\n if (\n difference(\n idsLength > checkedKeysLength ? ids : checkedKeys.value,\n idsLength > checkedKeysLength ? checkedKeys.value : ids,\n ).length\n ) {\n tree.value?.setCheckedKeys([], false);\n\n checkedKeys.value = ids.filter((id) => id !== page.value?.id);\n expandedKeys.value = union(expandedKeys.value, ids);\n }\n\n [currentNodeKey.value] = ids;\n\n setTimeout(() => {\n tree.value?.setCurrentKey(currentNodeKey.value);\n });\n});\n\nwatch(isMultiSelect, (isMultiSelect) => {\n if (!isMultiSelect) {\n currentNodeKey.value = editorService?.get('node')?.id;\n tree.value?.setCurrentKey(currentNodeKey.value);\n }\n});\n\nconst editorServiceRemoveHandler = () => {\n setTimeout(() => {\n tree.value?.getNode(editorService?.get('node')?.id)?.updateChildren();\n }, 0);\n};\n\nconst windowBlurHandler = () => {\n isCtrlKeyDown.value = false;\n};\n\nlet keycon: KeyController;\n\nonMounted(() => {\n editorService?.on('remove', editorServiceRemoveHandler);\n\n keycon = new KeyController();\n const isMac = /mac os x/.test(navigator.userAgent.toLowerCase());\n const ctrl = isMac ? 'meta' : 'ctrl';\n\n keycon\n .keydown((e) => {\n if (e.key !== ctrl) {\n isCtrlKeyDown.value = false;\n }\n })\n .keydown(ctrl, () => {\n isCtrlKeyDown.value = true;\n })\n .keyup(ctrl, () => {\n isCtrlKeyDown.value = false;\n });\n\n globalThis.addEventListener('blur', windowBlurHandler);\n});\n\nonUnmounted(() => {\n keycon.destroy();\n\n editorService?.off('remove', editorServiceRemoveHandler);\n globalThis.removeEventListener('blur', windowBlurHandler);\n});\n\n// 鼠标在组件树移动触发高亮\nconst highlightHandler = throttle((data: MNode) => {\n highlight(data);\n}, throttleTime);\n\nconst toggleClickFlag = () => {\n clicked.value = !clicked.value;\n};\n\n// 选择节点多选框\nconst checkHandler = (data: MNode, { checkedNodes }: any): void => {\n if (!isCtrlKeyDown.value && nodes.value.length < 2) {\n return;\n }\n if (checkedNodes.length > 0) {\n multiSelect(checkedNodes.map((node: MNode) => node.id));\n } else {\n multiSelect(nodes.value.map((node: MNode) => node.id));\n }\n};\n\n// 点击节点\nconst clickHandler = (data: MNode): void => {\n if (isCtrlKeyDown.value) {\n return;\n }\n if (services?.uiService.get('uiSelectMode')) {\n document.dispatchEvent(new CustomEvent('ui-select', { detail: data }));\n return;\n }\n select(data);\n};\n\n// 右键菜单\nconst contextmenu = async (event: MouseEvent, data: MNode): Promise<void> => {\n event.preventDefault();\n await select(data);\n menu.value?.show(event);\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorSidebar',\n})\n</script>\n<template>\n <TMagicTabs\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 <component\n :is=\"uiComponent.component\"\n v-for=\"(config, index) in sideBarItems\"\n :key=\"config.$key || index\"\n :name=\"config.text\"\n >\n <template #label>\n <div :key=\"config.text\">\n <MIcon v-if=\"config.icon\" :icon=\"config.icon\"></MIcon>\n <div v-if=\"config.text\" class=\"magic-editor-tab-panel-title\">{{ config.text }}</div>\n </div>\n </template>\n\n <component v-if=\"config\" :is=\"config.component\" v-bind=\"config.props || {}\" v-on=\"config?.listeners || {}\">\n <template\n #component-list-panel-header\n v-if=\"config.$key === 'component-list' || config.slots?.componentListPanelHeader\"\n >\n <slot v-if=\"config.$key === 'component-list'\" name=\"component-list-panel-header\"></slot>\n <component v-else-if=\"config.slots?.componentListPanelHeader\" :is=\"config.slots.componentListPanelHeader\" />\n </template>\n\n <template\n #component-list-item=\"{ component }\"\n v-if=\"config.$key === 'component-list' || config.slots?.componentListItem\"\n >\n <slot v-if=\"config.$key === 'component-list'\" name=\"component-list-item\" :component=\"component\"></slot>\n <component\n v-else-if=\"config.slots?.componentListItem\"\n :is=\"config.slots.componentListItem\"\n :component=\"component\"\n />\n </template>\n\n <template #layer-panel-header v-if=\"config.$key === 'layer' || config.slots?.layerPanelHeader\">\n <slot v-if=\"config.$key === 'layer'\" name=\"layer-panel-header\"></slot>\n <component v-else-if=\"config.slots?.layerPanelHeader\" :is=\"config.slots.layerPanelHeader\" />\n </template>\n\n <template #code-block-panel-header v-if=\"config.$key === 'code-block' || config.slots?.codeBlockPanelHeader\">\n <slot v-if=\"config.$key === 'code-block'\" name=\"code-block-panel-header\"></slot>\n <component v-else-if=\"config.slots?.codeBlockPanelHeader\" :is=\"config.slots.codeBlockPanelHeader\" />\n </template>\n\n <template\n #code-block-panel-tool=\"{ id, data }\"\n v-if=\"config.$key === 'code-block' || config.slots?.codeBlockPanelTool\"\n >\n <slot v-if=\"config.$key === 'code-block'\" name=\"code-block-panel-tool\" :id=\"id\" :data=\"data\"></slot>\n <component v-else-if=\"config.slots?.codeBlockPanelTool\" :is=\"config.slots.codeBlockPanelTool\" />\n </template>\n\n <template\n #code-block-edit-panel-header=\"{ id }\"\n v-if=\"config.$key === 'code-block' || config.slots?.codeBlockEditPanelHeader\"\n >\n <slot v-if=\"config.$key === 'code-block'\" name=\"code-block-edit-panel-header\" :id=\"id\"></slot>\n <component v-else-if=\"config.slots?.codeBlockEditPanelHeader\" :is=\"config.slots.codeBlockEditPanelHeader\" />\n </template>\n\n <template\n #layer-node-content=\"{ data: nodeData, node }\"\n v-if=\"config.$key === 'layer' || config.slots?.layerNodeContent\"\n >\n <slot v-if=\"config.$key === 'layer'\" name=\"layer-node-content\" :data=\"nodeData\" :node=\"node\"></slot>\n <component\n v-else-if=\"config.slots?.layerNodeContent\"\n :is=\"config.slots.layerNodeContent\"\n :data=\"nodeData\"\n :node=\"node\"\n />\n </template>\n </component>\n </component>\n </TMagicTabs>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorSidebar\">\nimport { computed, ref, watch } from 'vue';\nimport { Coin, EditPen, Files } from '@element-plus/icons-vue';\n\nimport { getConfig, TMagicTabs } from '@tmagic/design';\n\nimport MIcon from '../../components/Icon.vue';\nimport type { MenuButton, MenuComponent, SideComponent, SideItem } from '../../type';\nimport { SideBarData } from '../../type';\n\nimport CodeBlockList from './code-block/CodeBlockList.vue';\nimport ComponentListPanel from './ComponentListPanel.vue';\nimport LayerPanel from './LayerPanel.vue';\n\nconst props = withDefaults(\n defineProps<{\n data?: SideBarData;\n layerContentMenu: (MenuButton | MenuComponent)[];\n }>(),\n {\n data: () => ({ type: 'tabs', status: '组件', items: ['component-list', 'layer', 'code-block'] }),\n },\n);\n\nconst uiComponent = getConfig('components').tabPane;\n\nconst activeTabName = ref(props.data?.status);\n\nconst getItemConfig = (data: SideItem): SideComponent => {\n const map: Record<string, SideComponent> = {\n 'component-list': {\n $key: 'component-list',\n type: 'component',\n icon: Coin,\n text: '组件',\n component: ComponentListPanel,\n slots: {},\n },\n layer: {\n $key: 'layer',\n type: 'component',\n icon: Files,\n text: '已选组件',\n props: {\n layerContentMenu: props.layerContentMenu,\n },\n component: LayerPanel,\n slots: {},\n },\n 'code-block': {\n $key: 'code-block',\n type: 'component',\n icon: EditPen,\n text: '代码编辑',\n component: CodeBlockList,\n slots: {},\n },\n };\n\n return typeof data === 'string' ? map[data] : data;\n};\n\nconst sideBarItems = computed(() => props.data.items.map((item) => getItemConfig(item)));\n\nwatch(\n () => props.data.status,\n (status) => {\n activeTabName.value = status || '0';\n },\n);\n\ndefineExpose({\n activeTabName,\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorBreadcrumb',\n})\n</script>\n<template>\n <div v-if=\"nodes.length === 1\" class=\"m-editor-breadcrumb\">\n <template v-for=\"(item, index) in path\" :key=\"item.id\">\n <TMagicButton text :disabled=\"item.id === node?.id\" @click=\"select(item)\">{{ item.name }}</TMagicButton\n ><span v-if=\"index < path.length - 1\">/</span>\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\" name=\"MEditorBreadcrumb\">\nimport { computed, inject } from 'vue';\n\nimport { TMagicButton } from '@tmagic/design';\nimport type { MNode } from '@tmagic/schema';\nimport { getNodePath } from '@tmagic/utils';\n\nimport type { Services } from '../../type';\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\n\nconst node = computed(() => editorService?.get('node'));\nconst nodes = computed(() => editorService?.get('nodes') || []);\nconst root = computed(() => editorService?.get('root'));\nconst path = computed(() => getNodePath(node.value?.id || '', root.value?.items || []));\n\nconst select = async (node: MNode) => {\n await editorService?.select(node);\n editorService?.get('stage')?.select(node.id);\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorPageBarScrollContainer',\n})\n</script>\n<template>\n <div class=\"m-editor-page-bar\" ref=\"pageBar\">\n <div\n v-if=\"showAddPageButton\"\n id=\"m-editor-page-bar-add-icon\"\n class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\"\n @click=\"addPage\"\n >\n <Icon :icon=\"Plus\"></Icon>\n </div>\n <div v-else style=\"width: 21px\"></div>\n <div v-if=\"canScroll\" class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\" @click=\"scroll('left')\">\n <Icon :icon=\"ArrowLeftBold\"></Icon>\n </div>\n <div\n v-if=\"pageLength\"\n class=\"m-editor-page-bar-items\"\n ref=\"itemsContainer\"\n :style=\"`width: ${itemsContainerWidth}px`\"\n >\n <slot></slot>\n </div>\n <div v-if=\"canScroll\" class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\" @click=\"scroll('right')\">\n <Icon :icon=\"ArrowRightBold\"></Icon>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\" name=\"MEditorPageBarScrollContainer\">\nimport { computed, inject, nextTick, onMounted, onUnmounted, ref, toRaw, watch } from 'vue';\nimport { ArrowLeftBold, ArrowRightBold, Plus } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport Icon from '../../components/Icon.vue';\nimport type { Services } from '../../type';\nimport { generatePageNameByApp } from '../../utils/editor';\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\nconst uiService = services?.uiService;\n\nconst itemsContainer = ref<HTMLDivElement>();\nconst canScroll = ref(false);\n\nconst showAddPageButton = computed(() => uiService?.get('showAddPageButton'));\n\nconst itemsContainerWidth = ref(0);\n\nconst setCanScroll = () => {\n // 减去新增、左移、右移三个按钮的宽度\n // 37 = icon width 16 + padding 10 * 2 + border-right 1\n itemsContainerWidth.value = (pageBar.value?.clientWidth || 0) - 37 * 2 - (showAddPageButton.value ? 37 : 21);\n\n nextTick(() => {\n if (itemsContainer.value) {\n canScroll.value = itemsContainer.value.scrollWidth - itemsContainerWidth.value > 1;\n }\n });\n};\n\nconst resizeObserver = new ResizeObserver(() => {\n setCanScroll();\n});\n\nconst pageBar = ref<HTMLDivElement>();\nonMounted(() => {\n pageBar.value && resizeObserver.observe(pageBar.value);\n});\n\nonUnmounted(() => {\n resizeObserver.disconnect();\n});\n\nlet translateLeft = 0;\n\nconst scroll = (type: 'left' | 'right' | 'start' | 'end') => {\n if (!itemsContainer.value) return;\n\n const maxScrollLeft = itemsContainer.value.scrollWidth - itemsContainerWidth.value;\n\n if (type === 'left') {\n translateLeft += 100;\n\n if (translateLeft > 0) {\n translateLeft = 0;\n }\n } else if (type === 'right') {\n translateLeft -= 100;\n\n if (-translateLeft > maxScrollLeft) {\n translateLeft = -maxScrollLeft;\n }\n } else if (type === 'start') {\n translateLeft = 0;\n } else if (type === 'end') {\n translateLeft = -maxScrollLeft;\n }\n\n itemsContainer.value.style.transform = `translate(${translateLeft}px, 0px)`;\n};\n\nconst pageLength = computed(() => editorService?.get('pageLength'));\n\nwatch(pageLength, (length = 0, preLength = 0) => {\n setTimeout(() => {\n setCanScroll();\n if (length < preLength) {\n scroll('start');\n } else {\n scroll('end');\n }\n });\n});\n\nconst addPage = () => {\n if (!editorService) return;\n const root = toRaw(editorService.get('root'));\n if (!root) throw new Error('root 不能为空');\n const pageConfig = {\n type: NodeType.PAGE,\n name: generatePageNameByApp(root),\n };\n editorService.add(pageConfig);\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorPageBar',\n})\n</script>\n<template>\n <PageBarScrollContainer>\n <div\n v-for=\"item in (root && root.items) || []\"\n class=\"m-editor-page-bar-item\"\n :key=\"item.key\"\n :class=\"{ active: page?.id === item.id }\"\n @click=\"switchPage(item)\"\n >\n <div class=\"m-editor-page-bar-title\">\n <slot name=\"page-bar-title\" :page=\"item\">\n <TMagicTooltip effect=\"dark\" placement=\"top-start\" :content=\"item.name\">\n <span>{{ item.name || item.id }}</span>\n </TMagicTooltip>\n </slot>\n </div>\n\n <TMagicPopover popper-class=\"page-bar-popover\" placement=\"top\" :width=\"160\" trigger=\"hover\">\n <div>\n <slot name=\"page-bar-popover\" :page=\"item\">\n <ToolButton\n :data=\"{\n type: 'button',\n text: '复制',\n icon: DocumentCopy,\n handler: () => copy(item),\n }\"\n ></ToolButton>\n <ToolButton\n :data=\"{\n type: 'button',\n text: '删除',\n icon: Delete,\n handler: () => remove(item),\n }\"\n ></ToolButton>\n </slot>\n </div>\n <template #reference>\n <TMagicIcon class=\"m-editor-page-bar-menu-icon\">\n <CaretBottom></CaretBottom>\n </TMagicIcon>\n </template>\n </TMagicPopover>\n </div>\n </PageBarScrollContainer>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorPageBar\">\nimport { computed, inject } from 'vue';\nimport { CaretBottom, Delete, DocumentCopy } from '@element-plus/icons-vue';\n\nimport { TMagicIcon, TMagicPopover, TMagicTooltip } from '@tmagic/design';\nimport type { MPage } from '@tmagic/schema';\n\nimport ToolButton from '../../components/ToolButton.vue';\nimport type { Services } from '../../type';\n\nimport PageBarScrollContainer from './PageBarScrollContainer.vue';\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\n\nconst root = computed(() => editorService?.get('root'));\n\nconst page = computed(() => editorService?.get('page'));\n\nconst switchPage = (page: MPage) => {\n editorService?.select(page);\n};\n\nconst copy = (node: MPage) => {\n node && editorService?.copy(node);\n editorService?.paste({\n left: 0,\n top: 0,\n });\n};\n\nconst remove = (node: MPage) => {\n editorService?.remove(node);\n};\n</script>\n","import { EventEmitter } from 'events';\n\ninterface ScrollViewerOptions {\n container: HTMLDivElement;\n target: HTMLDivElement;\n zoom: number;\n correctionScrollSize?: {\n width: number;\n height: number;\n };\n}\n\nexport class ScrollViewer extends EventEmitter {\n private container: HTMLDivElement;\n private target: HTMLDivElement;\n private zoom = 1;\n\n private scrollLeft = 0;\n private scrollTop = 0;\n\n private scrollHeight = 0;\n private scrollWidth = 0;\n\n private width = 0;\n private height = 0;\n\n private translateXCorrectionValue = 0;\n private translateYCorrectionValue = 0;\n\n private correctionScrollSize = {\n width: 0,\n height: 0,\n };\n\n private resizeObserver = new ResizeObserver(() => {\n this.setSize();\n this.setScrollSize();\n });\n\n constructor(options: ScrollViewerOptions) {\n super();\n\n this.container = options.container;\n this.target = options.target;\n this.zoom = options.zoom;\n\n if (this.correctionScrollSize) {\n this.correctionScrollSize = {\n ...this.correctionScrollSize,\n ...options.correctionScrollSize,\n };\n }\n\n this.container.addEventListener('wheel', this.wheelHandler, false);\n\n this.setSize();\n this.setScrollSize();\n this.resizeObserver.observe(this.container);\n this.resizeObserver.observe(this.target);\n }\n\n public destroy() {\n this.resizeObserver.disconnect();\n this.container.removeEventListener('wheel', this.wheelHandler, false);\n this.removeAllListeners();\n }\n\n public setZoom(zoom: number) {\n this.zoom = zoom;\n this.setScrollSize();\n }\n\n public scrollTo({ left, top }: { left?: number; top?: number }) {\n if (typeof left !== 'undefined') {\n this.scrollLeft = left;\n }\n\n if (typeof top !== 'undefined') {\n this.scrollTop = top;\n }\n\n const translateX = -this.scrollLeft + this.translateXCorrectionValue;\n const translateY = -this.scrollTop + this.translateYCorrectionValue;\n this.target.style.transform = `translate(${translateX}px, ${translateY}px)`;\n }\n\n private wheelHandler = (event: WheelEvent) => {\n const { deltaX, deltaY, currentTarget } = event;\n\n if (currentTarget !== this.container) return;\n\n let top: number | undefined;\n if (this.scrollHeight > this.height) {\n top = this.scrollTop + this.getPos(deltaY, this.scrollTop, this.scrollHeight, this.height);\n }\n\n let left: number | undefined;\n if (this.scrollWidth > this.width) {\n left = this.scrollLeft + this.getPos(deltaX, this.scrollLeft, this.scrollWidth, this.width);\n }\n\n this.scrollTo({ left, top });\n this.emit('scroll', {\n scrollLeft: this.scrollLeft,\n scrollTop: this.scrollTop,\n scrollHeight: this.scrollHeight,\n scrollWidth: this.scrollWidth,\n });\n };\n\n private getPos(delta: number, scrollPos: number, scrollSize: number, size: number) {\n let pos = 0;\n if (delta < 0) {\n if (scrollPos > 0) {\n pos = Math.max(delta, -scrollPos);\n }\n } else {\n const leftPos = scrollSize - size - scrollPos;\n if (leftPos > 0) {\n pos = Math.min(delta, leftPos);\n }\n }\n return pos;\n }\n\n private setScrollSize = () => {\n const targetRect = this.target.getBoundingClientRect();\n this.scrollWidth = targetRect.width * this.zoom + this.correctionScrollSize.width;\n const targetMarginTop = Number(this.target.style.marginTop) || 0;\n this.scrollHeight = (targetRect.height + targetMarginTop) * this.zoom + this.correctionScrollSize.height;\n\n let left: number | undefined;\n let top: number | undefined;\n if (this.scrollWidth < this.width) {\n left = 0;\n this.translateXCorrectionValue = 0;\n } else {\n this.translateXCorrectionValue = (this.scrollWidth - this.width) / 2;\n }\n if (this.scrollHeight < this.height) {\n top = 0;\n this.translateYCorrectionValue = 0;\n } else {\n this.translateYCorrectionValue = (this.scrollHeight - this.height) / 2;\n }\n\n this.scrollTo({\n left,\n top,\n });\n\n this.emit('scroll', {\n scrollLeft: this.scrollLeft,\n scrollTop: this.scrollTop,\n scrollHeight: this.scrollHeight,\n scrollWidth: this.scrollWidth,\n });\n };\n\n private setSize = () => {\n const { width, height } = this.container.getBoundingClientRect();\n this.width = width;\n this.height = height;\n };\n}\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorScrollBar',\n})\n</script>\n<template>\n <div ref=\"bar\" class=\"m-editor-scroll-bar\" :class=\"isHorizontal ? 'horizontal' : 'vertical'\">\n <div ref=\"thumb\" class=\"m-editor-scroll-bar-thumb\" :style=\"thumbStyle\"></div>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorScrollBar\">\nimport { computed, onMounted, onUnmounted, ref } from 'vue';\nimport Gesto from 'gesto';\n\nconst props = defineProps<{\n size: number;\n scrollSize: number;\n isHorizontal?: boolean;\n pos: number;\n}>();\n\nconst emit = defineEmits(['scroll']);\n\nconst bar = ref<HTMLDivElement>();\nconst thumb = ref<HTMLDivElement>();\n\nconst thumbSize = computed(() => props.size * (props.size / props.scrollSize));\nconst thumbPos = computed(() => (props.pos / props.scrollSize) * props.size);\n\nconst thumbStyle = computed(() => ({\n [props.isHorizontal ? 'width' : 'height']: `${thumbSize.value}px`,\n transform: `translate${props.isHorizontal ? 'X' : 'Y'}(${thumbPos.value}px)`,\n}));\n\nlet gesto: Gesto;\n\nonMounted(() => {\n if (!thumb.value) return;\n const thumbEl = thumb.value;\n gesto = new Gesto(thumbEl, {\n container: window,\n });\n\n gesto\n .on('dragStart', (e) => {\n e.inputEvent.stopPropagation();\n e.inputEvent.preventDefault();\n })\n .on('drag', (e) => {\n scrollBy(getDelta(e));\n });\n\n bar.value?.addEventListener('wheel', wheelHandler, false);\n});\n\nonUnmounted(() => {\n if (gesto) gesto.off();\n bar.value?.removeEventListener('wheel', wheelHandler, false);\n});\n\nconst wheelHandler = (e: WheelEvent) => {\n const delta = props.isHorizontal ? e.deltaX : e.deltaY;\n if (delta) {\n e.preventDefault();\n }\n scrollBy(delta);\n};\n\nconst getDelta = (e: any) => {\n const ratio = (props.isHorizontal ? e.deltaX : e.deltaY) / props.size;\n return props.scrollSize * ratio;\n};\n\nconst scrollBy = (delta: number) => {\n if (delta < 0) {\n if (props.pos <= 0) {\n emit('scroll', 0);\n } else {\n emit('scroll', -Math.min(-delta, props.pos));\n }\n } else {\n const leftPos = props.size - (thumbSize.value + thumbPos.value);\n if (leftPos <= 0) {\n emit('scroll', 0);\n } else {\n emit('scroll', Math.min(delta, leftPos));\n }\n }\n};\n</script>\n\n<style lang=\"scss\">\n.m-editor-scroll-bar {\n position: absolute;\n background-color: transparent;\n opacity: 0.3;\n transition: background-color 0.2s linear, opacity 0.2s linear;\n\n .m-editor-scroll-bar-thumb {\n background-color: #aaa;\n border-radius: 6px;\n position: absolute;\n }\n\n &.horizontal {\n width: 100%;\n height: 15px;\n bottom: 0;\n\n .m-editor-scroll-bar-thumb {\n height: 6px;\n transition: background-color 0.2s linear, height 0.2s ease-in-out;\n bottom: 2px;\n }\n }\n\n &.vertical {\n height: 100%;\n width: 15px;\n right: 5px;\n\n .m-editor-scroll-bar-thumb {\n width: 6px;\n transition: background-color 0.2s linear, width 0.2s ease-in-out;\n right: 2px;\n }\n }\n\n &:hover,\n &:focus {\n background-color: #eee;\n opacity: 0.9;\n\n .m-editor-scroll-bar-thumb {\n background-color: #999;\n }\n\n &.horizontal {\n .m-editor-scroll-bar-thumb {\n height: 11px;\n }\n }\n\n &.vertical {\n .m-editor-scroll-bar-thumb {\n width: 11px;\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorScrollViewer',\n})\n</script>\n<template>\n <div class=\"m-editor-scroll-viewer-container\" ref=\"container\">\n <div ref=\"el\" :style=\"style\">\n <slot></slot>\n </div>\n\n <ScrollBar\n v-if=\"scrollHeight > wrapHeight\"\n :scroll-size=\"scrollHeight\"\n :size=\"wrapHeight\"\n :pos=\"vOffset\"\n @scroll=\"vScrollHandler\"\n ></ScrollBar>\n <ScrollBar\n v-if=\"scrollWidth > wrapWidth\"\n :is-horizontal=\"true\"\n :scroll-size=\"scrollWidth\"\n :pos=\"hOffset\"\n :size=\"wrapWidth\"\n @scroll=\"hScrollHandler\"\n ></ScrollBar>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorScrollViewer\">\nimport { computed, onMounted, onUnmounted, ref, watch } from 'vue';\n\nimport { ScrollViewerEvent } from '../type';\nimport { ScrollViewer } from '../utils/scroll-viewer';\n\nimport ScrollBar from './ScrollBar.vue';\n\nconst props = withDefaults(\n defineProps<{\n width?: number;\n height?: number;\n wrapWidth?: number;\n wrapHeight?: number;\n zoom?: number;\n correctionScrollSize?: {\n width: number;\n height: number;\n };\n }>(),\n {\n width: 0,\n height: 0,\n wrapWidth: 0,\n wrapHeight: 0,\n zoom: 1,\n correctionScrollSize: () => ({\n width: 0,\n height: 0,\n }),\n },\n);\n\nconst container = ref<HTMLDivElement>();\nconst el = ref<HTMLDivElement>();\nconst style = computed(\n () => `\n width: ${props.width}px;\n height: ${props.height}px;\n position: absolute;\n margin-top: 30px;\n `,\n);\n\nconst scrollWidth = ref(0);\nconst scrollHeight = ref(0);\n\nlet scrollViewer: ScrollViewer;\n\nonMounted(() => {\n if (!container.value || !el.value) return;\n scrollViewer = new ScrollViewer({\n container: container.value,\n target: el.value,\n zoom: props.zoom,\n correctionScrollSize: props.correctionScrollSize,\n });\n\n scrollViewer.on('scroll', (data: ScrollViewerEvent) => {\n hOffset.value = data.scrollLeft;\n vOffset.value = data.scrollTop;\n scrollWidth.value = data.scrollWidth;\n scrollHeight.value = data.scrollHeight;\n });\n});\n\nonUnmounted(() => {\n scrollViewer.destroy();\n});\n\nwatch(\n () => props.zoom,\n () => {\n scrollViewer.setZoom(props.zoom);\n },\n);\n\nconst vOffset = ref(0);\nconst vScrollHandler = (delta: number) => {\n vOffset.value += delta;\n scrollViewer.scrollTo({\n top: vOffset.value,\n });\n};\nconst hOffset = ref(0);\nconst hScrollHandler = (delta: number) => {\n hOffset.value += delta;\n scrollViewer.scrollTo({\n left: hOffset.value,\n });\n};\n\ndefineExpose({\n container,\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorViewerMenu',\n})\n</script>\n<template>\n <content-menu :menu-data=\"menuData\" ref=\"menu\"></content-menu>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorViewerMenu\">\nimport { computed, inject, markRaw, ref, watch } from 'vue';\nimport { Bottom, CopyDocument, Delete, DocumentCopy, Top } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\nimport { isPage } from '@tmagic/utils';\n\nimport ContentMenu from '../../components/ContentMenu.vue';\nimport storageService from '../../services/storage';\nimport { LayerOffset, Layout, MenuButton, MenuComponent, Services } from '../../type';\nimport { COPY_STORAGE_KEY } from '../../utils/editor';\n\nconst props = withDefaults(\n defineProps<{ isMultiSelect?: boolean; stageContentMenu: (MenuButton | MenuComponent)[] }>(),\n { isMultiSelect: false },\n);\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\nconst menu = ref<InstanceType<typeof ContentMenu>>();\nconst canPaste = ref(false);\nconst canCenter = ref(false);\n\nconst node = computed(() => editorService?.get('node'));\nconst nodes = computed(() => editorService?.get('nodes'));\nconst parent = computed(() => editorService?.get('parent'));\nconst stage = computed(() => editorService?.get('stage'));\n\nconst menuData = computed<(MenuButton | MenuComponent)[]>(() => [\n {\n type: 'button',\n text: '水平居中',\n display: () => canCenter.value,\n handler: () => {\n if (!nodes.value) return;\n editorService?.alignCenter(nodes.value);\n },\n },\n {\n type: 'button',\n text: '复制',\n icon: markRaw(CopyDocument),\n handler: () => {\n nodes.value && editorService?.copy(nodes.value);\n canPaste.value = true;\n },\n },\n {\n type: 'button',\n text: '粘贴',\n icon: markRaw(DocumentCopy),\n display: () => canPaste.value,\n handler: () => {\n const rect = menu.value?.$el.getBoundingClientRect();\n const parentRect = stage.value?.container?.getBoundingClientRect();\n const initialLeft = (rect?.left || 0) - (parentRect?.left || 0);\n const initialTop = (rect?.top || 0) - (parentRect?.top || 0);\n\n if (!nodes.value || nodes.value.length === 0) return;\n editorService?.paste({ left: initialLeft, top: initialTop });\n },\n },\n {\n type: 'divider',\n direction: 'horizontal',\n display: () => {\n if (!node.value) return false;\n return !isPage(node.value);\n },\n },\n {\n type: 'button',\n text: '上移一层',\n icon: markRaw(Top),\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(1);\n },\n },\n {\n type: 'button',\n text: '下移一层',\n icon: markRaw(Bottom),\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(-1);\n },\n },\n {\n type: 'button',\n text: '置顶',\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(LayerOffset.TOP);\n },\n },\n {\n type: 'button',\n text: '置底',\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(LayerOffset.BOTTOM);\n },\n },\n {\n type: 'divider',\n direction: 'horizontal',\n display: () => !isPage(node.value) && !props.isMultiSelect,\n },\n {\n type: 'button',\n text: '删除',\n icon: Delete,\n display: () => !isPage(node.value),\n handler: () => {\n nodes.value && editorService?.remove(nodes.value);\n },\n },\n {\n type: 'divider',\n direction: 'horizontal',\n },\n {\n type: 'button',\n text: '清空参考线',\n handler: () => {\n editorService?.get('stage')?.clearGuides();\n },\n },\n ...props.stageContentMenu,\n]);\n\nwatch(\n parent,\n async () => {\n if (!parent.value || !editorService) return (canCenter.value = false);\n const layout = await editorService.getLayout(parent.value);\n const isLayoutConform = [Layout.ABSOLUTE, Layout.FIXED].includes(layout);\n const isTypeConform = nodes.value?.every(\n (selectedNode) => ![NodeType.ROOT, NodeType.PAGE, 'pop'].includes(`${selectedNode?.type}`),\n );\n canCenter.value = isLayoutConform && !!isTypeConform;\n },\n { immediate: true },\n);\n\nconst show = async (e: MouseEvent) => {\n menu.value?.show(e);\n const data = await storageService.getItem(COPY_STORAGE_KEY);\n canPaste.value = data !== 'undefined' && !!data;\n};\n\ndefineExpose({ show });\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorStage',\n})\n</script>\n<template>\n <ScrollViewer\n class=\"m-editor-stage\"\n ref=\"stageWrap\"\n :width=\"stageRect?.width\"\n :height=\"stageRect?.height\"\n :wrap-width=\"stageContainerRect?.width\"\n :wrap-height=\"stageContainerRect?.height\"\n :zoom=\"zoom\"\n :correction-scroll-size=\"{\n width: 60,\n height: 50,\n }\"\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 <ViewerMenu ref=\"menu\" :is-multi-select=\"isMultiSelect\" :stage-content-menu=\"stageContentMenu\"></ViewerMenu>\n </Teleport>\n </ScrollViewer>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorStage\">\nimport { computed, inject, markRaw, nextTick, onMounted, onUnmounted, ref, toRaw, watch, watchEffect } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport type { MContainer } from '@tmagic/schema';\nimport StageCore, { calcValueByFontsize, getOffset, Runtime } from '@tmagic/stage';\n\nimport ScrollViewer from '../../components/ScrollViewer.vue';\nimport { Layout, MenuButton, MenuComponent, Services, StageOptions } from '../../type';\nimport { useStage } from '../../utils/stage';\n\nimport ViewerMenu from './ViewerMenu.vue';\n\ndefineProps<{\n stageContentMenu: (MenuButton | MenuComponent)[];\n}>();\n\nlet stage: StageCore | null = null;\nlet runtime: Runtime | null = null;\n\nconst services = inject<Services>('services');\nconst stageOptions = inject<StageOptions>('stageOptions');\n\nconst stageWrap = ref<InstanceType<typeof ScrollViewer>>();\nconst stageContainer = ref<HTMLDivElement>();\nconst menu = ref<InstanceType<typeof ViewerMenu>>();\n\nconst nodes = computed(() => services?.editorService.get('nodes') || []);\nconst isMultiSelect = computed(() => nodes.value.length > 1);\nconst stageRect = computed(() => services?.uiService.get('stageRect'));\nconst stageContainerRect = computed(() => services?.uiService.get('stageContainerRect'));\nconst root = computed(() => services?.editorService.get('root'));\nconst page = computed(() => services?.editorService.get('page'));\nconst zoom = computed(() => services?.uiService.get('zoom') || 1);\nconst node = computed(() => services?.editorService.get('node'));\n\nwatchEffect(() => {\n if (stage || !page.value) return;\n\n if (!stageContainer.value) return;\n if (!(stageOptions?.runtimeUrl || stageOptions?.render) || !root.value) return;\n\n stage = useStage(stageOptions);\n\n services?.editorService.set('stage', markRaw(stage));\n\n stage?.mount(stageContainer.value);\n\n if (!node.value?.id) return;\n stage?.on('runtime-ready', (rt) => {\n runtime = rt;\n // toRaw返回的值是一个引用而非快照,需要cloneDeep\n root.value && runtime?.updateRootConfig?.(cloneDeep(toRaw(root.value)));\n page.value?.id && runtime?.updatePageId?.(page.value.id);\n setTimeout(() => {\n node.value && stage?.select(toRaw(node.value.id));\n });\n });\n});\n\nwatch(zoom, (zoom) => {\n if (!stage || !zoom) return;\n stage.setZoom(zoom);\n});\n\nwatch(root, (root) => {\n if (runtime && root) {\n runtime.updateRootConfig?.(cloneDeep(toRaw(root)));\n }\n});\n\nwatch(page, (page) => {\n if (runtime && page) {\n runtime.updatePageId?.(page.id);\n nextTick(() => {\n stage?.select(page.id);\n });\n }\n});\n\nconst resizeObserver = new ResizeObserver((entries) => {\n for (const { contentRect } of entries) {\n services?.uiService.set('stageContainerRect', {\n width: contentRect.width,\n height: contentRect.height,\n });\n }\n});\n\nonMounted(() => {\n stageWrap.value?.container && resizeObserver.observe(stageWrap.value.container);\n});\n\nonUnmounted(() => {\n stage?.destroy();\n resizeObserver.disconnect();\n services?.editorService.set('stage', null);\n});\n\nconst contextmenuHandler = (e: MouseEvent) => {\n e.preventDefault();\n menu.value?.show(e);\n};\n\nconst dragoverHandler = (e: DragEvent) => {\n e.preventDefault();\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = 'move';\n }\n};\n\nconst dropHandler = async (e: DragEvent) => {\n e.preventDefault();\n\n const doc = stage?.renderer.contentWindow?.document;\n const parentEl: HTMLElement | null | undefined = doc?.querySelector(`.${stageOptions?.containerHighlightClassName}`);\n\n let parent: MContainer | undefined | null = page.value;\n if (parentEl) {\n parent = services?.editorService.getNodeById(parentEl.id, false) as MContainer;\n }\n\n if (e.dataTransfer && parent && stageContainer.value && stage) {\n // eslint-disable-next-line no-eval\n const config = eval(`(${e.dataTransfer.getData('data')})`);\n const layout = await services?.editorService.getLayout(parent);\n\n const containerRect = stageContainer.value.getBoundingClientRect();\n const { scrollTop, scrollLeft } = stage.mask;\n const { style = {} } = config;\n\n let top = 0;\n let left = 0;\n let position = 'relative';\n\n if (layout === Layout.ABSOLUTE) {\n position = 'absolute';\n top = e.clientY - containerRect.top + scrollTop;\n left = e.clientX - containerRect.left + scrollLeft;\n\n if (parentEl && doc) {\n const { left: parentLeft, top: parentTop } = getOffset(parentEl);\n left = left - calcValueByFontsize(doc, parentLeft);\n top = top - calcValueByFontsize(doc, parentTop);\n }\n }\n\n config.style = {\n ...style,\n position,\n top: top / zoom.value,\n left: left / zoom.value,\n };\n\n config.inputEvent = e;\n\n services?.editorService.add(config, parent);\n }\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorWorkspace',\n})\n</script>\n<template>\n <div class=\"m-editor-workspace\" tabindex=\"-1\" ref=\"workspace\">\n <Breadcrumb></Breadcrumb>\n\n <slot name=\"stage\">\n <MagicStage v-if=\"page\" :stage-content-menu=\"stageContentMenu\"></MagicStage>\n </slot>\n\n <slot name=\"workspace-content\"></slot>\n\n <PageBar>\n <template #page-bar-title=\"{ page }\"><slot name=\"page-bar-title\" :page=\"page\"></slot></template>\n <template #page-bar-popover=\"{ page }\"><slot name=\"page-bar-popover\" :page=\"page\"></slot></template>\n </PageBar>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorWorkspace\">\nimport { computed, inject, onMounted, onUnmounted, ref } from 'vue';\nimport KeyController from 'keycon';\n\nimport { isPage } from '@tmagic/utils';\n\nimport type { MenuButton, MenuComponent, Services } from '../../type';\n\nimport Breadcrumb from './Breadcrumb.vue';\nimport PageBar from './PageBar.vue';\nimport MagicStage from './Stage.vue';\n\ndefineProps<{\n stageContentMenu: (MenuButton | MenuComponent)[];\n}>();\n\nconst services = inject<Services>('services');\nconst workspace = ref<HTMLDivElement>();\nconst nodes = computed(() => services?.editorService.get('nodes'));\nconst page = computed(() => services?.editorService.get('page'));\n\nconst mouseenterHandler = () => {\n workspace.value?.focus();\n};\n\nconst mouseleaveHandler = () => {\n workspace.value?.blur();\n};\n\nlet keycon: KeyController;\n\nonMounted(() => {\n workspace.value?.addEventListener('mouseenter', mouseenterHandler);\n workspace.value?.addEventListener('mouseleave', mouseleaveHandler);\n\n keycon = new KeyController(workspace.value);\n\n const isMac = /mac os x/.test(navigator.userAgent.toLowerCase());\n\n const ctrl = isMac ? 'meta' : 'ctrl';\n\n keycon\n .keyup('delete', (e) => {\n e.inputEvent.preventDefault();\n if (!nodes.value || isPage(nodes.value[0])) return;\n services?.editorService.remove(nodes.value);\n })\n .keyup('backspace', (e) => {\n e.inputEvent.preventDefault();\n if (!nodes.value || isPage(nodes.value[0])) return;\n services?.editorService.remove(nodes.value);\n })\n .keydown([ctrl, 'c'], (e) => {\n e.inputEvent.preventDefault();\n nodes.value && services?.editorService.copy(nodes.value);\n })\n .keydown([ctrl, 'v'], (e) => {\n e.inputEvent.preventDefault();\n nodes.value && services?.editorService.paste({ offsetX: 10, offsetY: 10 });\n })\n .keydown([ctrl, 'x'], (e) => {\n e.inputEvent.preventDefault();\n if (!nodes.value || isPage(nodes.value[0])) return;\n services?.editorService.copy(nodes.value);\n services?.editorService.remove(nodes.value);\n })\n .keydown([ctrl, 'z'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.undo();\n })\n .keydown([ctrl, 'shift', 'z'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.redo();\n })\n .keydown('up', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(0, -1);\n })\n .keydown('down', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(0, 1);\n })\n .keydown('left', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(-1, 0);\n })\n .keydown('right', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(1, 0);\n })\n .keydown([ctrl, 'up'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(0, -10);\n })\n .keydown([ctrl, 'down'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(0, 10);\n })\n .keydown([ctrl, 'left'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(-10, 0);\n })\n .keydown([ctrl, 'right'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(10, 0);\n })\n .keydown('tab', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.selectNextNode();\n })\n .keydown([ctrl, 'tab'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.selectNextPage();\n })\n .keydown([ctrl, '='], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.zoom(0.1);\n })\n .keydown([ctrl, 'numpadplus'], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.zoom(0.1);\n })\n .keydown([ctrl, '-'], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.zoom(-0.1);\n })\n .keydown([ctrl, 'numpad-'], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.zoom(-0.1);\n })\n .keydown([ctrl, '0'], async (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.set('zoom', await services.uiService.calcZoom());\n })\n .keydown([ctrl, '1'], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.set('zoom', 1);\n });\n});\n\nonUnmounted(() => {\n workspace.value?.removeEventListener('mouseenter', mouseenterHandler);\n workspace.value?.removeEventListener('mouseleave', mouseleaveHandler);\n keycon.destroy();\n});\n</script>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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 { keys, pick } from 'lodash-es';\n\nimport { CodeBlockContent, CodeBlockDSL, Id } from '@tmagic/schema';\n\nimport type { CodeState } from '../type';\nimport { CODE_DRAFT_STORAGE_KEY } from '../type';\nimport { info } from '../utils/logger';\n\nimport BaseService from './BaseService';\n\nclass CodeBlock extends BaseService {\n private state = reactive<CodeState>({\n isShowCodeEditor: false,\n codeDsl: null,\n id: '',\n editable: true,\n combineIds: [],\n undeletableList: [],\n });\n\n constructor() {\n super([\n 'setCodeDslById',\n 'setCodeEditorShowStatus',\n 'setEditStatus',\n 'setCombineIds',\n 'setUndeleteableList',\n 'deleteCodeDslByIds',\n ]);\n }\n\n /**\n * 设置活动的代码块dsl数据源\n * @param {CodeBlockDSL} codeDsl 代码DSL\n * @returns {void}\n */\n public async setCodeDsl(codeDsl: CodeBlockDSL): Promise<void> {\n this.state.codeDsl = codeDsl;\n info('[code-block]:code-dsl-change', this.state.codeDsl);\n this.emit('code-dsl-change', this.state.codeDsl);\n }\n\n /**\n * 获取活动的代码块dsl数据源(默认从dsl中的codeBlocks字段读取)\n * 方法要支持钩子添加扩展,会被重写为异步方法,因此这里显示写为异步以提醒调用者需以异步形式调用\n * @param {boolean} forceRefresh 是否强制从活动dsl拉取刷新\n * @returns {CodeBlockDSL | null}\n */\n public getCodeDsl(): CodeBlockDSL | null {\n return this.state.codeDsl;\n }\n\n /**\n * 根据代码块id获取代码块内容\n * @param {Id} id 代码块id\n * @returns {CodeBlockContent | null}\n */\n public getCodeContentById(id: Id): CodeBlockContent | null {\n if (!id) return null;\n const totalCodeDsl = this.getCodeDsl();\n if (!totalCodeDsl) return null;\n return totalCodeDsl[id] ?? null;\n }\n\n /**\n * 设置代码块ID和代码内容到源dsl\n * @param {Id} id 代码块id\n * @param {CodeBlockContent} codeConfig 代码块内容配置信息\n * @returns {void}\n */\n public async setCodeDslById(id: Id, codeConfig: CodeBlockContent): Promise<void> {\n const codeDsl = this.getCodeDsl();\n\n if (!codeDsl) {\n throw new Error('dsl中没有codeBlocks');\n }\n\n const codeConfigProcessed = codeConfig;\n if (codeConfig.content) {\n // 在保存的时候转换代码内容\n // eslint-disable-next-line no-eval\n codeConfigProcessed.content = eval(codeConfig.content);\n }\n\n const existContent = codeDsl[id] || {};\n\n codeDsl[id] = {\n ...existContent,\n ...codeConfigProcessed,\n };\n\n this.emit('addOrUpdate', id, codeDsl[id]);\n }\n\n /**\n * 根据代码块id数组获取代码dsl\n * @param {string[]} ids 代码块id数组\n * @returns {CodeBlockDSL}\n */\n public getCodeDslByIds(ids: string[]): CodeBlockDSL {\n const codeDsl = this.getCodeDsl();\n return pick(codeDsl, ids) as CodeBlockDSL;\n }\n\n /**\n * 设置代码编辑面板展示状态\n * @param {boolean} status 是否展示代码编辑面板\n * @returns {void}\n */\n public async setCodeEditorShowStatus(status: boolean): Promise<void> {\n this.state.isShowCodeEditor = status;\n }\n\n /**\n * 获取代码编辑面板展示状态\n * @returns {boolean} 是否展示代码编辑面板\n */\n public getCodeEditorShowStatus(): boolean {\n return this.state.isShowCodeEditor;\n }\n\n /**\n * 设置代码编辑面板展示状态及展示内容\n * @param {boolean} status 是否展示代码编辑面板\n * @param {Id} id 代码块id\n * @returns {void}\n */\n public setCodeEditorContent(status: boolean, id: Id): void {\n if (!id) return;\n this.setId(id);\n this.state.isShowCodeEditor = status;\n }\n\n /**\n * 获取当前选中的代码块内容\n * @returns {CodeBlockContent | null}\n */\n public getCurrentDsl(): CodeBlockContent | null {\n return this.getCodeContentById(this.state.id);\n }\n\n /**\n * 获取编辑状态\n * @returns {boolean} 是否可编辑\n */\n public getEditStatus(): boolean {\n return this.state.editable;\n }\n\n /**\n * 设置编辑状态\n * @param {boolean} status 是否可编辑\n * @returns {void}\n */\n public async setEditStatus(status: boolean): Promise<void> {\n this.state.editable = status;\n }\n\n /**\n * 设置当前选中的代码块ID\n * @param {Id} id 代码块id\n * @returns {void}\n */\n public setId(id: Id): void {\n if (!id) return;\n this.state.id = id;\n }\n\n /**\n * 获取当前选中的代码块ID\n * @returns {Id} id 代码块id\n */\n public getId(): Id {\n return this.state.id;\n }\n\n /**\n * 设置当前选中组件已关联绑定的代码块id数组\n * @param {string[]} ids 代码块id数组\n * @returns {void}\n */\n public async setCombineIds(ids: string[]): Promise<void> {\n this.state.combineIds = ids;\n }\n\n /**\n * 获取当前选中组件已关联绑定的代码块id数组\n * @returns {string[]}\n */\n public getCombineIds(): string[] {\n return this.state.combineIds;\n }\n\n /**\n * 获取不可删除列表\n * @returns {Id[]}\n */\n public getUndeletableList(): Id[] {\n return this.state.undeletableList;\n }\n\n /**\n * 设置不可删除列表:为业务逻辑预留的不可删除的代码块列表,由业务逻辑维护(如代码块上线后不可删除)\n * @param {Id[]} codeIds 代码块id数组\n * @returns {void}\n */\n public async setUndeleteableList(codeIds: Id[]): Promise<void> {\n this.state.undeletableList = codeIds;\n }\n\n /**\n * 设置代码草稿\n */\n public setCodeDraft(codeId: Id, content: string): void {\n globalThis.localStorage.setItem(`${CODE_DRAFT_STORAGE_KEY}_${codeId}`, content);\n }\n\n /**\n * 获取代码草稿\n */\n public getCodeDraft(codeId: Id): string | null {\n return globalThis.localStorage.getItem(`${CODE_DRAFT_STORAGE_KEY}_${codeId}`);\n }\n\n /**\n * 删除代码草稿\n */\n public removeCodeDraft(codeId: Id): void {\n globalThis.localStorage.removeItem(`${CODE_DRAFT_STORAGE_KEY}_${codeId}`);\n }\n\n /**\n * 在dsl数据源中删除指定id的代码块\n * @param {Id[]} codeIds 需要删除的代码块id数组\n */\n public async deleteCodeDslByIds(codeIds: Id[]): Promise<void> {\n const currentDsl = await this.getCodeDsl();\n\n if (!currentDsl) return;\n\n codeIds.forEach((id) => {\n delete currentDsl[id];\n\n this.emit('remove', id);\n });\n }\n\n /**\n * 生成代码块唯一id\n * @returns {Id} 代码块唯一id\n */\n public async getUniqueId(): Promise<Id> {\n const newId = `code_${Math.random().toString(10).substring(2).substring(0, 4)}`;\n // 判断是否重复\n const dsl = await this.getCodeDsl();\n const existedIds = keys(dsl);\n if (!existedIds.includes(newId)) return newId;\n return await this.getUniqueId();\n }\n\n public resetState() {\n this.state.isShowCodeEditor = false;\n this.state.codeDsl = null;\n this.state.id = '';\n this.state.editable = true;\n this.state.combineIds = [];\n this.state.undeletableList = [];\n }\n\n public destroy(): void {\n this.resetState();\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n}\n\nexport type CodeBlockService = CodeBlock;\n\nexport default new CodeBlock();\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { reactive } from 'vue';\n\nimport type { ComponentGroup, ComponentGroupState } from '../type';\n\nimport BaseService from './BaseService';\n\nclass ComponentList extends BaseService {\n private state = reactive<ComponentGroupState>({\n list: [],\n });\n\n constructor() {\n super([]);\n }\n\n /**\n * @param componentGroupList 组件列表配置\n */\n public setList(componentGroupList: ComponentGroup[]): void {\n this.state.list = componentGroupList;\n }\n\n public getList(): ComponentGroup[] {\n return this.state.list;\n }\n\n public resetState() {\n this.state.list = [];\n }\n\n public destroy() {\n this.resetState();\n this.removeAllListeners();\n this.removeAllPlugins();\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) 2023 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 { EventEmitter } from 'events';\n\nimport { reactive } from 'vue';\n\nimport { MNode } from '@tmagic/schema';\n\ntype IsTarget = (key: string | number, value: any) => boolean;\n\ninterface TargetOptions {\n isTarget: IsTarget;\n id: string | number;\n type?: string;\n name: string;\n}\n\ninterface Dep {\n [key: string | number]: {\n name: string;\n keys: (string | number)[];\n };\n}\n\ninterface TargetList {\n [key: string]: {\n [key: string | number]: Target;\n };\n}\n\n/**\n * 需要收集依赖的目标\n * 例如:一个代码块可以为一个目标\n */\nexport class Target extends EventEmitter {\n /**\n * 如何识别目标\n */\n public isTarget: IsTarget;\n /**\n * 目标id,不可重复\n * 例如目标是代码块,则为代码块id\n */\n public id: string | number;\n /**\n * 目标名称,用于显示在依赖列表中\n */\n public name: string;\n /**\n * 不同的目标可以进行分类,例如代码块,数据源可以为两个不同的type\n */\n public type = 'default';\n /**\n * 依赖详情\n * 实例:{ 'node_id': { name: 'node_name', keys: [ created, mounted ] } }\n */\n public deps = reactive<Dep>({});\n\n constructor(options: TargetOptions) {\n super();\n this.isTarget = options.isTarget;\n this.id = options.id;\n this.name = options.name;\n if (options.type) {\n this.type = options.type;\n }\n }\n\n /**\n * 更新依赖\n * @param node 节点配置\n * @param key 哪个key配置了这个目标的id\n */\n public updateDep(node: MNode, key: string | number) {\n const dep = this.deps[node.id] || {\n name: node.name,\n keys: [],\n };\n\n if (node.name) {\n dep.name = node.name;\n }\n\n this.deps[node.id] = dep;\n\n if (dep.keys.indexOf(key) === -1) {\n dep.keys.push(key);\n }\n\n this.emit('change');\n }\n\n /**\n * 删除依赖\n * @param node 哪个节点的依赖需要移除,如果为空,则移除所有依赖\n * @param key 节点下哪个key需要移除,如果为空,则移除改节点下的所有依赖key\n * @returns void\n */\n public removeDep(node?: MNode, key?: string | number) {\n if (!node) {\n Object.keys(this.deps).forEach((depKey) => {\n delete this.deps[depKey];\n });\n this.emit('change');\n return;\n }\n\n const dep = this.deps[node.id];\n\n if (!dep) return;\n\n if (key) {\n const index = dep.keys.indexOf(key);\n dep.keys.splice(index, 1);\n\n if (dep.keys.length === 0) {\n delete this.deps[node.id];\n }\n } else {\n delete this.deps[node.id];\n }\n\n this.emit('change');\n }\n\n /**\n * 判断指定节点下的指定key是否存在在依赖列表中\n * @param node 哪个节点\n * @param key 哪个key\n * @returns boolean\n */\n public hasDep(node: MNode, key: string | number) {\n const dep = this.deps[node.id];\n\n return Boolean(dep?.keys.find((d) => d === key));\n }\n\n public destroy() {\n this.removeAllListeners();\n }\n}\n\nexport class Watcher extends EventEmitter {\n public targets = reactive<TargetList>({});\n\n /**\n * 获取指定类型中的所有target\n * @param type 分类\n * @returns Target[]\n */\n public getTargets(type = 'default') {\n return this.targets[type] || {};\n }\n\n /**\n * 添加新的目标\n * @param target Target\n */\n public addTarget(target: Target) {\n const targets = this.getTargets(target.type) || {};\n this.targets[target.type] = targets;\n targets[target.id] = target;\n\n this.emit('add-target', target);\n }\n\n /**\n * 获取指定id的target\n * @param id target id\n * @returns Target\n */\n public getTarget(id: string | number) {\n const allTargets = Object.values(this.targets);\n for (const targets of allTargets) {\n if (targets[id]) {\n return targets[id];\n }\n }\n }\n\n /**\n * 判断是否存在指定id的target\n * @param id target id\n * @returns boolean\n */\n public hasTarget(id: string | number) {\n const allTargets = Object.values(this.targets);\n for (const targets of allTargets) {\n if (targets[id]) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * 删除指定id的target\n * @param id target id\n */\n public removeTarget(id: string | number) {\n const allTargets = Object.values(this.targets);\n for (const targets of allTargets) {\n if (targets[id]) {\n targets[id].destroy();\n delete targets[id];\n }\n }\n\n this.emit('remove-target');\n }\n\n /**\n * 删除指定分类的所有target\n * @param type 分类\n * @returns void\n */\n public removeTargets(type = 'default') {\n const targets = this.targets[type];\n\n if (!targets) return;\n\n for (const target of Object.values(targets)) {\n target.destroy();\n }\n\n delete this.targets[type];\n\n this.emit('remove-target');\n }\n\n /**\n * 删除所有target\n */\n public clearTargets() {\n Object.keys(this.targets).forEach((key) => {\n delete this.targets[key];\n });\n }\n\n /**\n * 收集依赖\n * @param nodes 需要收集的节点\n * @param deep 是否需要收集子节点\n */\n public collect(nodes: MNode[], deep = false) {\n Object.values(this.targets).forEach((targets) => {\n Object.values(targets).forEach((target) => {\n nodes.forEach((node) => {\n target.removeDep(node);\n this.collectItem(node, target, deep);\n });\n });\n });\n }\n\n /**\n * 清除依赖\n * @param nodes 需要清除依赖的节点\n */\n public clear(nodes?: MNode[]) {\n Object.values(this.targets).forEach((targets) => {\n Object.values(targets).forEach((target) => {\n if (nodes) {\n nodes.forEach((node) => {\n target.removeDep(node);\n\n if (Array.isArray(node.items)) {\n this.clear(node.items);\n }\n });\n } else {\n target.removeDep();\n }\n });\n });\n }\n\n private collectItem(node: MNode, target: Target, deep = false) {\n const collectTarget = (config: Record<string | number, any>, prop = '') => {\n const doCollect = (key: string, value: any) => {\n const keyIsItems = key === 'items';\n const fullKey = prop ? `${prop}.${key}` : key;\n\n if (target.isTarget(key, value)) {\n target.updateDep(node, fullKey);\n } else if (!keyIsItems && Array.isArray(value)) {\n value.forEach((item, index) => {\n collectTarget(item, `${fullKey}.${index}`);\n });\n } else if (Object.prototype.toString.call(value) === '[object Object]') {\n collectTarget(value, fullKey);\n }\n\n if (keyIsItems && deep && Array.isArray(value)) {\n value.forEach((child) => {\n this.collectItem(child, target, deep);\n });\n }\n };\n\n Object.entries(config).forEach(([key, value]) => {\n doCollect(key, value);\n });\n };\n\n collectTarget(node);\n }\n}\n\nexport type DepService = Watcher;\n\nexport default new Watcher();\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { reactive } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport { DEFAULT_EVENTS, DEFAULT_METHODS, EventOption } from '@tmagic/core';\nimport { toLine } from '@tmagic/utils';\n\nimport type { ComponentGroup } from '../type';\n\nimport BaseService from './BaseService';\n\nlet eventMap: Record<string, EventOption[]> = reactive({});\nlet methodMap: Record<string, EventOption[]> = reactive({});\n\nclass Events extends BaseService {\n constructor() {\n super([]);\n }\n\n public init(componentGroupList: ComponentGroup[]) {\n componentGroupList.forEach((group) => {\n group.items.forEach((element) => {\n const type = toLine(element.type);\n if (!this.getEvent(type)) {\n this.setEvent(type, DEFAULT_EVENTS);\n }\n if (!this.getMethod(type)) {\n this.setMethod(type, DEFAULT_METHODS);\n }\n });\n });\n }\n\n public setEvents(events: Record<string, EventOption[]>) {\n Object.keys(events).forEach((type: string) => {\n this.setEvent(toLine(type), events[type] || []);\n });\n }\n\n public setEvent(type: string, events: EventOption[]) {\n eventMap[type] = [...DEFAULT_EVENTS, ...events];\n }\n\n public getEvent(type: string): EventOption[] {\n return cloneDeep(eventMap[type] || DEFAULT_EVENTS);\n }\n\n public setMethods(methods: Record<string, EventOption[]>) {\n Object.keys(methods).forEach((type: string) => {\n this.setMethod(toLine(type), methods[type] || []);\n });\n }\n\n public setMethod(type: string, method: EventOption[]) {\n methodMap[type] = [...DEFAULT_METHODS, ...method];\n }\n\n public getMethod(type: string) {\n return cloneDeep(methodMap[type] || DEFAULT_METHODS);\n }\n\n public resetState() {\n eventMap = reactive({});\n methodMap = reactive({});\n }\n\n public destroy() {\n this.resetState();\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n}\n\nexport type EventsService = Events;\n\nexport default new Events();\n","import type { PropType } from 'vue';\n\nimport type { EventOption } from '@tmagic/core';\nimport type { FormConfig } from '@tmagic/form';\nimport type { MApp, MNode } from '@tmagic/schema';\nimport StageCore, {\n CONTAINER_HIGHLIGHT_CLASS_NAME,\n ContainerHighlightType,\n CustomizeMoveableOptionsCallbackConfig,\n MoveableOptions,\n UpdateDragEl,\n} from '@tmagic/stage';\n\nimport type { ComponentGroup, MenuBarData, MenuButton, MenuComponent, SideBarData, StageRect } from './type';\n\nexport default {\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 /** 顶部工具栏配置 */\n menu: {\n type: Object as PropType<MenuBarData>,\n default: () => ({ left: [], right: [] }),\n },\n\n /** 组件树右键菜单 */\n layerContentMenu: {\n type: Array as PropType<(MenuButton | MenuComponent)[]>,\n default: () => [],\n },\n\n /** 画布右键菜单 */\n stageContentMenu: {\n type: Array as PropType<(MenuButton | MenuComponent)[]>,\n default: () => [],\n },\n\n /** 中间工作区域中画布渲染的内容 */\n render: {\n type: Function as PropType<(stage: StageCore) => HTMLDivElement | Promise<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 as PropType<Record<string, { events: EventOption[]; methods: EventOption[] }>>,\n default: () => ({}),\n },\n\n /** 画布中组件选中框的移动范围 */\n moveableOptions: {\n type: [Object, Function] as PropType<\n MoveableOptions | ((config?: CustomizeMoveableOptionsCallbackConfig) => MoveableOptions)\n >,\n },\n\n /** 编辑器初始化时默认选中的组件ID */\n defaultSelected: {\n type: [Number, String],\n },\n\n canSelect: {\n type: Function as PropType<(el: HTMLElement) => boolean | Promise<boolean>>,\n default: (el: HTMLElement) => Boolean(el.id),\n },\n\n isContainer: {\n type: Function as PropType<(el: HTMLElement) => boolean | Promise<boolean>>,\n default: (el: HTMLElement) => el.classList.contains('magic-ui-container'),\n },\n\n containerHighlightClassName: {\n type: String,\n default: CONTAINER_HIGHLIGHT_CLASS_NAME,\n },\n\n containerHighlightDuration: {\n type: Number,\n default: 800,\n },\n\n containerHighlightType: {\n type: String as PropType<ContainerHighlightType>,\n default: ContainerHighlightType.DEFAULT,\n },\n\n stageRect: {\n type: [String, Object] as PropType<StageRect>,\n },\n\n codeOptions: {\n type: Object,\n default: () => ({}),\n },\n\n updateDragEl: {\n type: Function as PropType<UpdateDragEl>,\n },\n\n disabledDragStart: {\n type: Boolean,\n },\n};\n","import { isEmpty } from 'lodash-es';\n\nimport { CodeBlockContent, HookType, Id } from '@tmagic/schema';\n\nimport { Target } from '../services/dep';\nimport { HookData } from '../type';\n\nexport const createCodeBlockTarget = (id: Id, codeBlock: CodeBlockContent) =>\n new Target({\n type: 'code-block',\n id,\n name: codeBlock.name,\n isTarget: (key: string | number, value: any) => {\n if (value?.hookType === HookType.CODE && !isEmpty(value.hookData)) {\n const index = value.hookData.findIndex((item: HookData) => item.codeId === id);\n return Boolean(index > -1);\n }\n\n return false;\n },\n });\n","import type { ExtractPropTypes } from 'vue';\nimport { onUnmounted, toRaw, watch } from 'vue';\n\nimport type { EventOption } from '@tmagic/core';\nimport type { CodeBlockContent, Id, MApp, MNode, MPage } from '@tmagic/schema';\n\nimport { createCodeBlockTarget } from './utils/dep';\nimport editorProps from './editorProps';\nimport type { Services } from './type';\n\nexport declare type LooseRequired<T> = {\n [P in string & keyof T]: T[P];\n};\n\nexport const initServiceState = (\n props: Readonly<LooseRequired<Readonly<ExtractPropTypes<typeof editorProps>>>>,\n {\n editorService,\n historyService,\n componentListService,\n propsService,\n eventsService,\n uiService,\n codeBlockService,\n }: Services,\n) => {\n // 初始值变化,重新设置节点信息\n watch(\n () => props.modelValue,\n (modelValue) => {\n editorService.set('root', modelValue);\n },\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(() => {\n editorService.resetState();\n historyService.resetState();\n propsService.resetState();\n uiService.resetState();\n componentListService.resetState();\n codeBlockService.resetState();\n });\n};\n\nexport const initServiceEvents = (\n props: Readonly<LooseRequired<Readonly<ExtractPropTypes<typeof editorProps>>>>,\n emit: (event: 'props-panel-mounted' | 'update:modelValue', ...args: any[]) => void,\n { editorService, codeBlockService, depService }: Services,\n) => {\n const rootChangeHandler = async (value: MApp, preValue?: MApp | null) => {\n const nodeId = editorService.get('node')?.id || props.defaultSelected;\n let node;\n if (nodeId) {\n node = editorService.getNodeById(nodeId);\n }\n\n if (node && node !== value) {\n await editorService.select(node.id);\n } else if (value?.items?.length) {\n await editorService.select(value.items[0]);\n } else if (value?.id) {\n editorService.set('nodes', [value]);\n editorService.set('parent', null);\n editorService.set('page', null);\n }\n\n if (toRaw(value) !== toRaw(preValue)) {\n emit('update:modelValue', value);\n }\n\n value.codeBlocks = value.codeBlocks || {};\n\n codeBlockService.setCodeDsl(value.codeBlocks);\n\n depService.removeTargets('code-block');\n\n Object.entries(value.codeBlocks).forEach(([id, code]) => {\n depService.addTarget(createCodeBlockTarget(id, code));\n });\n\n if (value && Array.isArray(value.items)) {\n depService.collect(value.items, true);\n } else {\n depService.clear();\n }\n };\n\n const nodeAddHandler = (nodes: MNode[]) => {\n depService.collect(nodes);\n };\n\n const nodeUpdateHandler = (nodes: MNode[]) => {\n depService.collect(nodes);\n };\n\n const nodeRemoveHandler = (nodes: MNode[]) => {\n depService.clear(nodes);\n };\n\n const historyChangeHandler = (page: MPage) => {\n depService.collect([page], true);\n };\n\n editorService.on('history-change', historyChangeHandler);\n editorService.on('root-change', rootChangeHandler);\n editorService.on('add', nodeAddHandler);\n editorService.on('remove', nodeRemoveHandler);\n editorService.on('update', nodeUpdateHandler);\n\n const codeBlockAddOrUpdateHandler = (id: Id, codeBlock: CodeBlockContent) => {\n if (depService.hasTarget(id)) {\n depService.getTarget(id)!.name = codeBlock.name;\n return;\n }\n\n depService.addTarget(createCodeBlockTarget(id, codeBlock));\n };\n\n const codeBlockRemoveHandler = (id: Id) => {\n depService.removeTarget(id);\n };\n\n codeBlockService.on('addOrUpdate', codeBlockAddOrUpdateHandler);\n codeBlockService.on('remove', codeBlockRemoveHandler);\n\n onUnmounted(() => {\n editorService.off('history-change', historyChangeHandler);\n editorService.off('root-change', rootChangeHandler);\n editorService.off('add', nodeAddHandler);\n editorService.off('remove', nodeRemoveHandler);\n editorService.off('update', nodeUpdateHandler);\n\n codeBlockService.off('addOrUpdate', codeBlockAddOrUpdateHandler);\n codeBlockService.off('remove', codeBlockRemoveHandler);\n });\n};\n","<template>\n <Framework :code-options=\"codeOptions\">\n <template #nav>\n <slot name=\"nav\" :editorService=\"editorService\"><TMagicNavMenu :data=\"menu\"></TMagicNavMenu></slot>\n </template>\n\n <template #sidebar>\n <slot name=\"sidebar\" :editorService=\"editorService\">\n <Sidebar :data=\"sidebar\" :layer-content-menu=\"layerContentMenu\">\n <template #layer-panel-header>\n <slot name=\"layer-panel-header\"></slot>\n </template>\n\n <template #layer-node-content=\"{ node, data }\">\n <slot name=\"layer-node-content\" :data=\"data\" :node=\"node\"></slot>\n </template>\n\n <template #component-list-panel-header>\n <slot name=\"component-list-panel-header\"></slot>\n </template>\n\n <template #component-list-item=\"{ component }\">\n <slot name=\"component-list-item\" :component=\"component\"></slot>\n </template>\n\n <template #code-block-panel-header>\n <slot name=\"code-block-panel-header\"></slot>\n </template>\n\n <template #code-block-panel-tool=\"{ id, data }\">\n <slot name=\"code-block-panel-tool\" :id=\"id\" :data=\"data\"></slot>\n </template>\n\n <template #code-block-edit-panel-header=\"{ id }\">\n <slot name=\"code-block-edit-panel-header\" :id=\"id\"></slot>\n </template>\n </Sidebar>\n </slot>\n </template>\n\n <template #workspace>\n <slot name=\"workspace\" :editorService=\"editorService\">\n <Workspace :stage-content-menu=\"stageContentMenu\">\n <template #stage><slot name=\"stage\"></slot></template>\n <template #workspace-content><slot name=\"workspace-content\" :editorService=\"editorService\"></slot></template>\n <template #page-bar-title=\"{ page }\"><slot name=\"page-bar-title\" :page=\"page\"></slot></template>\n <template #page-bar-popover=\"{ page }\"><slot name=\"page-bar-popover\" :page=\"page\"></slot></template>\n </Workspace>\n </slot>\n </template>\n\n <template #props-panel>\n <slot name=\"props-panel\">\n <PropsPanel @mounted=\"(instance: any) => $emit('props-panel-mounted', instance)\">\n <template #props-panel-header>\n <slot name=\"props-panel-header\"></slot>\n </template>\n </PropsPanel>\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, provide, reactive } from 'vue';\n\nimport Framework from './layouts/Framework.vue';\nimport NavMenu from './layouts/NavMenu.vue';\nimport PropsPanel from './layouts/PropsPanel.vue';\nimport Sidebar from './layouts/sidebar/Sidebar.vue';\nimport Workspace from './layouts/workspace/Workspace.vue';\nimport codeBlockService from './services/codeBlock';\nimport componentListService from './services/componentList';\nimport depService from './services/dep';\nimport editorService from './services/editor';\nimport eventsService from './services/events';\nimport historyService from './services/history';\nimport propsService from './services/props';\nimport storageService from './services/storage';\nimport uiService from './services/ui';\nimport editorProps from './editorProps';\nimport { initServiceEvents, initServiceState } from './initService';\nimport type { Services } from './type';\n\nexport default defineComponent({\n name: 'm-editor',\n\n components: {\n TMagicNavMenu: NavMenu,\n Sidebar,\n Workspace,\n PropsPanel,\n Framework,\n },\n\n props: editorProps,\n\n emits: ['props-panel-mounted', 'update:modelValue'],\n\n setup(props, { emit }) {\n const services: Services = {\n componentListService,\n eventsService,\n historyService,\n propsService,\n editorService,\n uiService,\n storageService,\n codeBlockService,\n depService,\n };\n\n initServiceEvents(props, emit, services);\n initServiceState(props, services);\n\n provide('services', services);\n\n provide('codeOptions', props.codeOptions);\n provide(\n 'stageOptions',\n reactive({\n runtimeUrl: props.runtimeUrl,\n autoScrollIntoView: props.autoScrollIntoView,\n render: props.render,\n moveableOptions: props.moveableOptions,\n canSelect: props.canSelect,\n updateDragEl: props.updateDragEl,\n isContainer: props.isContainer,\n containerHighlightClassName: props.containerHighlightClassName,\n containerHighlightDuration: props.containerHighlightDuration,\n containerHighlightType: props.containerHighlightType,\n disabledDragStart: props.disabledDragStart,\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) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { App } from 'vue';\n\nimport Code from './fields/Code.vue';\nimport CodeLink from './fields/CodeLink.vue';\nimport CodeSelect from './fields/CodeSelect.vue';\nimport CodeSelectCol from './fields/CodeSelectCol.vue';\nimport EventSelect from './fields/EventSelect.vue';\nimport uiSelect from './fields/UISelect.vue';\nimport CodeEditor from './layouts/CodeEditor.vue';\nimport { setConfig } from './utils/config';\nimport Editor from './Editor.vue';\nimport type { InstallOptions } from './type';\n\nimport './theme/index.scss';\n\nexport type { MoveableOptions } from '@tmagic/stage';\nexport * from './type';\nexport * from './utils';\nexport { default as TMagicEditor } from './Editor.vue';\nexport { default as TMagicCodeEditor } from './layouts/CodeEditor.vue';\nexport { default as editorService } from './services/editor';\nexport { default as propsService } from './services/props';\nexport { default as historyService } from './services/history';\nexport { default as storageService } from './services/storage';\nexport { default as eventsService } from './services/events';\nexport { default as uiService } from './services/ui';\nexport { default as codeBlockService } from './services/codeBlock';\nexport { default as depService } from './services/dep';\nexport { default as ComponentListPanel } from './layouts/sidebar/ComponentListPanel.vue';\nexport { default as LayerPanel } from './layouts/sidebar/LayerPanel.vue';\nexport { default as CodeSelect } from './fields/CodeSelect.vue';\nexport { default as CodeSelectCol } from './fields/CodeSelectCol.vue';\nexport { default as EventSelect } from './fields/EventSelect.vue';\nexport { default as CodeBlockList } from './layouts/sidebar/code-block/CodeBlockList.vue';\nexport { default as PropsPanel } from './layouts/PropsPanel.vue';\nexport { default as ToolButton } from './components/ToolButton.vue';\nexport { default as ContentMenu } from './components/ContentMenu.vue';\nexport { default as Icon } from './components/Icon.vue';\nexport { default as LayoutContainer } from './components/Layout.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 app.component(Editor.name, Editor);\n app.component('m-fields-ui-select', uiSelect);\n app.component('m-fields-code-link', CodeLink);\n app.component('m-fields-vs-code', Code);\n app.component('magic-code-editor', CodeEditor);\n app.component('m-fields-code-select', CodeSelect);\n app.component('m-fields-code-select-col', CodeSelectCol);\n app.component('m-fields-event-select', EventSelect);\n },\n};\n"],"names":["__default__","clientWidth","center","ColumnLayout","LayerOffset","Layout","Keys","CodeDeleteErrorType","methodName","Protocol","storage","key","options","namespace","item","protocol","Editor","node","values","codeValue","page","nodes","isMultiSelect","getConfig","ComponentListPanel","LayerPanel","CodeBlockList","zoom","root","e","codeDsl","id","NavMenu","Sidebar","Workspace","PropsPanel","Framework","_resolveComponent","_openBlock","_createBlock","_withCtx","_renderSlot","_createVNode","uiSelect","CodeLink","Code","CodeEditor","CodeSelect","CodeSelectCol","EventSelect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tmagic-editor.js","sources":["../src/fields/Code.vue","../src/fields/CodeLink.vue","../src/fields/CodeSelect.vue","../src/components/Icon.vue","../src/fields/CodeSelectCol.vue","../src/fields/EventSelect.vue","../src/fields/UISelect.vue","../src/layouts/CodeEditor.vue","../src/utils/config.ts","../src/layouts/Resizer.vue","../src/components/Layout.vue","../src/utils/props.ts","../src/utils/logger.ts","../src/type.ts","../src/utils/editor.ts","../src/utils/undo-redo.ts","../src/utils/compose.ts","../src/services/BaseService.ts","../src/services/history.ts","../src/services/storage.ts","../src/services/props.ts","../src/utils/operator.ts","../src/services/editor.ts","../src/services/ui.ts","../src/utils/stage.ts","../src/layouts/AddPageBox.vue","../src/layouts/Framework.vue","../src/components/ToolButton.vue","../src/layouts/NavMenu.vue","../src/layouts/PropsPanel.vue","../src/components/SearchInput.vue","../src/icons/AppManageIcon.vue","../src/icons/CodeIcon.vue","../src/components/CodeDraftEditor.vue","../src/components/FunctionEditor.vue","../src/layouts/sidebar/code-block/CodeBlockEditor.vue","../src/layouts/sidebar/code-block/CodeBlockList.vue","../src/layouts/sidebar/ComponentListPanel.vue","../src/components/ContentMenu.vue","../src/layouts/sidebar/LayerMenu.vue","../src/layouts/sidebar/LayerPanel.vue","../src/layouts/sidebar/Sidebar.vue","../src/layouts/workspace/Breadcrumb.vue","../src/layouts/workspace/PageBarScrollContainer.vue","../src/layouts/workspace/PageBar.vue","../src/utils/scroll-viewer.ts","../src/components/ScrollBar.vue","../src/components/ScrollViewer.vue","../src/layouts/workspace/ViewerMenu.vue","../src/layouts/workspace/Stage.vue","../src/layouts/workspace/Workspace.vue","../src/services/codeBlock.ts","../src/services/componentList.ts","../src/services/dep.ts","../src/services/events.ts","../src/editorProps.ts","../src/utils/dep.ts","../src/initService.ts","../src/Editor.vue","../src/index.ts"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorCode',\n})\n</script>\n<template>\n <magic-code-editor\n :style=\"`height: ${height}`\"\n :init-values=\"model[name]\"\n :language=\"language\"\n :options=\"config.options\"\n @save=\"save\"\n ></magic-code-editor>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorCode\">\nimport { computed } from 'vue';\n\nconst emit = defineEmits(['change']);\n\nconst props = defineProps<{\n model: any;\n name: string;\n config: {\n language?: string;\n options?: Object;\n height?: string;\n };\n prop: string;\n}>();\n\nconst language = computed(() => props.config.language || 'javascript');\nconst height = computed(() => props.config.height || `${document.body.clientHeight - 168}px`);\n\nconst save = (v: string) => {\n props.model[props.name] = v;\n emit('change', v);\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorCodeLink',\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\" setup name=\"MEditorCodeLink\">\nimport { computed, reactive, watch } from 'vue';\nimport serialize from 'serialize-javascript';\n\nconst props = defineProps<{\n config: {\n type: 'code-link';\n name: string;\n text?: string;\n formTitle?: string;\n codeOptions?: Object;\n };\n model: any;\n name: string;\n prop: string;\n}>();\n\nconst emit = defineEmits(['change']);\n\nconst formConfig = computed(() => {\n const { codeOptions, ...config } = props.config;\n return {\n ...config,\n text: '',\n type: 'link',\n form: [\n {\n name: props.name,\n type: 'vs-code',\n options: {\n tabSize: 2,\n ...(codeOptions || {}),\n },\n },\n ],\n };\n});\n\nconst modelValue = reactive<{ form: Record<string, string> }>({\n form: {\n [props.name]: '',\n },\n});\n\nwatch(\n () => props.model[props.name],\n (value) => {\n modelValue.form = {\n [props.name]: serialize(value, {\n space: 2,\n unsafe: true,\n }).replace(/\"(\\w+)\":\\s/g, '$1: '),\n };\n },\n {\n immediate: true,\n },\n);\n\nconst 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</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorCodeSelect',\n})\n</script>\n<template>\n <div class=\"m-fields-code-select\" :class=\"config.className\">\n <TMagicCard>\n <m-form-container :config=\"codeConfig\" :model=\"model[name]\" @change=\"changeHandler\"> </m-form-container>\n </TMagicCard>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorCodeSelect\">\nimport { computed, defineEmits, defineProps, watch } from 'vue';\nimport { isEmpty } from 'lodash-es';\n\nimport { TMagicCard } from '@tmagic/design';\nimport { HookType } from '@tmagic/schema';\n\nconst emit = defineEmits(['change']);\n\nconst props = withDefaults(\n defineProps<{\n config: {\n className?: string;\n };\n model: any;\n prop: string;\n name: string;\n size: 'small' | 'default' | 'large';\n }>(),\n {},\n);\n\nconst codeConfig = computed(() => ({\n type: 'group-list',\n name: 'hookData',\n enableToggleMode: false,\n items: [\n {\n type: 'code-select-col',\n },\n ],\n}));\n\nwatch(\n () => props.model[props.name],\n (value) => {\n // 兼容旧的数据结构\n if (isEmpty(value)) {\n // 空值或者空数组\n props.model[props.name] = {\n hookType: HookType.CODE,\n hookData: [],\n };\n }\n },\n {\n immediate: true,\n },\n);\n\nconst changeHandler = async () => {\n emit('change', props.model[props.name]);\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorIcon',\n})\n</script>\n<template>\n <TMagicIcon v-if=\"!icon\" class=\"magic-editor-icon\"><Edit></Edit></TMagicIcon>\n <TMagicIcon v-else-if=\"typeof icon === 'string' && icon.startsWith('http')\" class=\"magic-editor-icon\"\n ><img :src=\"icon\"\n /></TMagicIcon>\n <i v-else-if=\"typeof icon === 'string'\" class=\"magic-editor-icon\" :class=\"icon\"></i>\n <TMagicIcon v-else class=\"magic-editor-icon\"><component :is=\"toRaw(icon)\"></component></TMagicIcon>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorIcon\">\nimport { toRaw } from 'vue';\nimport { Edit } from '@element-plus/icons-vue';\n\nimport { TMagicIcon } from '@tmagic/design';\n\ndefineProps<{\n icon?: any;\n}>();\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorCodeSelectCol',\n})\n</script>\n<template>\n <div class=\"m-fields-code-select-col\">\n <div class=\"code-select-container\">\n <!-- 代码块下拉框 -->\n <m-form-container\n class=\"select\"\n :config=\"selectConfig\"\n :model=\"model\"\n @change=\"onParamsChangeHandler\"\n ></m-form-container>\n <!-- 查看/编辑按钮 -->\n <Icon class=\"icon\" :icon=\"editable ? Edit : View\" @click=\"editCode\"></Icon>\n </div>\n <!-- 参数填写框 -->\n <m-form-container :config=\"codeParamsConfig\" :model=\"model\" @change=\"onParamsChangeHandler\"></m-form-container>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorCodeSelectCol\">\nimport { computed, defineEmits, defineProps, inject, ref, watch } from 'vue';\nimport { Edit, View } from '@element-plus/icons-vue';\nimport { isEmpty, map } from 'lodash-es';\n\nimport { createValues, FieldsetConfig, FormState } from '@tmagic/form';\nimport { Id } from '@tmagic/schema';\n\nimport Icon from '@editor/components/Icon.vue';\nimport type { CodeParamStatement, Services } from '@editor/type';\n\nconst services = inject<Services>('services');\nconst mForm = inject<FormState>('mForm');\nconst emit = defineEmits(['change']);\n\nconst props = withDefaults(\n defineProps<{\n config: any;\n model: any;\n prop: string;\n name: string;\n size: 'small' | 'default' | 'large';\n }>(),\n {},\n);\nconst codeDsl = computed(() => services?.codeBlockService.getCodeDsl());\nconst editable = computed(() => services?.codeBlockService.getEditStatus());\nconst codeParamsConfig = ref<FieldsetConfig>({\n type: 'fieldset',\n items: [],\n legend: '参数',\n labelWidth: '70px',\n name: 'params',\n display: false,\n});\nconst selectConfig = {\n type: 'select',\n text: '代码块',\n name: 'codeId',\n labelWidth: '70px',\n options: () => {\n if (codeDsl.value) {\n return map(codeDsl.value, (value, key) => ({\n text: `${value.name}(${key})`,\n label: `${value.name}(${key})`,\n value: key,\n }));\n }\n return [];\n },\n onChange: (formState: any, codeId: Id, { model }: any) => {\n // 通过下拉框选择的codeId变化后修正model的值,避免写入其他codeId的params\n model.params = {};\n },\n};\n\n/**\n * 根据代码块id获取代码块参数配置\n * @param codeId 代码块ID\n */\nconst getParamItemsConfig = (codeId: Id): CodeParamStatement[] => {\n if (!codeDsl.value) return [];\n const paramStatements = codeDsl.value[codeId]?.params;\n if (isEmpty(paramStatements)) return [];\n return paramStatements.map((paramState: CodeParamStatement) => ({\n labelWidth: '100px',\n text: paramState.name,\n ...paramState,\n }));\n};\n\n/**\n * 根据代码块id获取参数fieldset表单配置\n * @param codeId 代码块ID\n */\nconst getCodeParamsConfig = (codeId: Id) => {\n const paramsConfig = getParamItemsConfig(codeId);\n // 如果参数没有填值,则使用createValues补全空值\n if (!props.model.params || isEmpty(props.model.params)) {\n props.model.params = {};\n createValues(mForm, paramsConfig, {}, props.model.params);\n }\n codeParamsConfig.value = {\n type: 'fieldset',\n items: paramsConfig,\n legend: '参数',\n labelWidth: '70px',\n name: 'params',\n display: !isEmpty(paramsConfig),\n };\n};\n\n/**\n * 参数值修改更新\n */\nconst onParamsChangeHandler = () => {\n emit('change', props.model);\n};\n\n// 监听代码块顺序变化以及下拉选择的变化,并更新参数配置\n// TODO onchange在watch之前触发\nwatch(\n () => props.model.codeId,\n (codeId: Id) => {\n if (!codeId) return;\n getCodeParamsConfig(codeId);\n },\n {\n immediate: true,\n },\n);\n\n// 打开代码编辑框\nconst editCode = () => {\n services?.codeBlockService.setCodeEditorContent(true, props.model.codeId);\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorEventSelect',\n})\n</script>\n<template>\n <div class=\"m-fields-event-select\">\n <m-form-table\n v-if=\"isOldVersion\"\n ref=\"eventForm\"\n :size=\"props.size\"\n :model=\"model\"\n name=\"events\"\n :config=\"tableConfig\"\n @change=\"onChangeHandler\"\n ></m-form-table>\n\n <div v-else class=\"fullWidth\">\n <TMagicButton class=\"create-button\" type=\"primary\" size=\"small\" @click=\"addEvent()\">添加事件</TMagicButton>\n <m-form-panel\n v-for=\"(cardItem, index) in model[name]\"\n :key=\"index\"\n :config=\"actionsConfig\"\n :model=\"cardItem\"\n @change=\"onChangeHandler\"\n >\n <template #header>\n <m-form-container\n class=\"fullWidth\"\n :config=\"eventNameConfig\"\n :model=\"cardItem\"\n @change=\"onChangeHandler\"\n ></m-form-container>\n <TMagicButton style=\"color: #f56c6c\" text :icon=\"Delete\" @click=\"removeEvent(index)\"></TMagicButton>\n </template>\n </m-form-panel>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorEventSelect\">\nimport { computed, defineProps, inject } from 'vue';\nimport { Delete } from '@element-plus/icons-vue';\nimport { has } from 'lodash-es';\n\nimport { TMagicButton } from '@tmagic/design';\nimport { FormState } from '@tmagic/form';\nimport { ActionType } from '@tmagic/schema';\n\nimport type { EventSelectConfig, Services } from '@editor/type';\n\nconst services = inject<Services>('services');\n\nconst props = defineProps<{\n config: EventSelectConfig;\n model: any;\n prop: string;\n name: string;\n size: 'small' | 'default' | 'large';\n}>();\nconst emit = defineEmits(['change']);\n\n// 事件名称下拉框表单配置\nconst eventNameConfig = computed(() => {\n const defaultEventNameConfig = {\n name: 'name',\n text: '事件',\n type: 'select',\n labelWidth: '40px',\n options: (mForm: FormState, { formValue }: any) =>\n services?.eventsService.getEvent(formValue.type).map((option: any) => ({\n text: option.label,\n value: option.value,\n })),\n };\n return { ...defaultEventNameConfig, ...props.config.eventNameConfig };\n});\n\n// 联动类型\nconst actionTypeConfig = computed(() => {\n const defaultActionTypeConfig = {\n name: 'actionType',\n text: '联动类型',\n labelWidth: '70px',\n type: 'select',\n defaultValue: ActionType.COMP,\n options: () => [\n {\n text: '组件',\n label: '组件',\n value: ActionType.COMP,\n },\n {\n text: '代码',\n label: '代码',\n value: ActionType.CODE,\n },\n ],\n };\n return { ...defaultActionTypeConfig, ...props.config.actionTypeConfig };\n});\n\n// 联动组件配置\nconst targetCompConfig = computed(() => {\n const defaultTargetCompConfig = {\n name: 'to',\n text: '联动组件',\n labelWidth: '70px',\n type: 'ui-select',\n display: (mForm: FormState, { model }: { model: Record<any, any> }) => model.actionType === ActionType.COMP,\n };\n return { ...defaultTargetCompConfig, ...props.config.targetCompConfig };\n});\n\n// 联动组件动作配置\nconst compActionConfig = computed(() => {\n const defaultCompActionConfig = {\n name: 'method',\n text: '动作',\n labelWidth: '70px',\n type: 'select',\n display: (mForm: FormState, { model }: { model: Record<any, any> }) => model.actionType === ActionType.COMP,\n options: (mForm: FormState, { model }: any) => {\n const node = services?.editorService.getNodeById(model.to);\n if (!node?.type) return [];\n\n return services?.eventsService.getMethod(node.type).map((option: any) => ({\n text: option.label,\n value: option.value,\n }));\n },\n };\n return { ...defaultCompActionConfig, ...props.config.compActionConfig };\n});\n\n// 代码联动配置\nconst codeActionConfig = computed(() => {\n const defaultCodeActionConfig = {\n type: 'code-select-col',\n display: (mForm: FormState, { model }: { model: Record<any, any> }) => model.actionType === ActionType.CODE,\n };\n return { ...defaultCodeActionConfig, ...props.config.codeActionConfig };\n});\n\n// 兼容旧的数据格式\nconst tableConfig = computed(() => ({\n type: 'table',\n name: 'events',\n items: [\n {\n name: 'name',\n label: '事件名',\n type: eventNameConfig.value.type,\n options: (mForm: FormState, { formValue }: any) =>\n services?.eventsService.getEvent(formValue.type).map((option: any) => ({\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: compActionConfig.value.type,\n options: (mForm: FormState, { model }: any) => {\n const node = services?.editorService.getNodeById(model.to);\n if (!node?.type) return [];\n\n return services?.eventsService.getMethod(node.type).map((option: any) => ({\n text: option.label,\n value: option.value,\n }));\n },\n },\n ],\n}));\n\n// 组件动作组表单配置\nconst actionsConfig = computed(() => ({\n items: [\n {\n type: 'group-list',\n name: 'actions',\n enableToggleMode: false,\n items: [actionTypeConfig.value, targetCompConfig.value, compActionConfig.value, codeActionConfig.value],\n },\n ],\n}));\n\n// 是否为旧的数据格式\nconst isOldVersion = computed(() => {\n if (props.model[props.name].length === 0) return false;\n return !has(props.model[props.name][0], 'actions');\n});\n\n// 添加事件\nconst addEvent = () => {\n const defaultEvent = {\n name: '',\n actions: [],\n };\n if (!props.model[props.name]) {\n props.model[props.name] = [];\n }\n props.model[props.name].push(defaultEvent);\n onChangeHandler();\n};\n\n// 删除事件\nconst removeEvent = (index: number) => {\n if (!props.name) return;\n props.model[props.name].splice(index, 1);\n onChangeHandler();\n};\n\nconst onChangeHandler = () => {\n emit('change', props.model);\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorUISelect',\n})\n</script>\n<template>\n <div class=\"m-fields-ui-select\" v-if=\"uiSelectMode\" @click=\"cancelHandler\">\n <TMagicButton type=\"danger\" :icon=\"Delete\" text style=\"padding: 0\">取消</TMagicButton>\n </div>\n <div class=\"m-fields-ui-select\" v-else @click=\"startSelect\" style=\"display: flex\">\n <TMagicTooltip v-if=\"val\" content=\"清除\">\n <TMagicButton style=\"padding: 0\" type=\"danger\" :icon=\"Close\" text @click.stop=\"deleteHandler\"></TMagicButton>\n </TMagicTooltip>\n <TMagicTooltip :content=\"val ? toName + '_' + val : '点击此处选择'\">\n <TMagicButton text style=\"padding: 0; margin: 0\">{{ val ? toName + '_' + val : '点击此处选择' }}</TMagicButton>\n </TMagicTooltip>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorUISelect\">\nimport { computed, inject, ref } from 'vue';\nimport { Close, Delete } from '@element-plus/icons-vue';\n\nimport { TMagicButton, TMagicTooltip } from '@tmagic/design';\nimport { FormState } from '@tmagic/form';\n\nimport type { Services } from '@editor/type';\n\nconst props = defineProps<{\n config: any;\n model: any;\n prop: string;\n name: string;\n}>();\n\nconst emit = defineEmits(['change']);\n\nconst services = inject<Services>('services');\nconst mForm = inject<FormState>('mForm');\nconst val = computed(() => props.model[props.name]);\nconst uiSelectMode = ref(false);\n\nconst cancelHandler = () => {\n if (!services?.uiService) return;\n services.uiService.set('uiSelectMode', false);\n uiSelectMode.value = false;\n globalThis.document.removeEventListener('ui-select', clickHandler as EventListener);\n};\n\nconst clickHandler = ({ detail }: Event & { detail: any }) => {\n if (detail.id) {\n props.model[props.name] = detail.id;\n emit('change', detail.id);\n mForm?.$emit('field-change', props.prop, detail.id);\n }\n\n if (cancelHandler) {\n cancelHandler();\n }\n};\n\nconst toName = computed(() => {\n const config = services?.editorService.getNodeById(val.value);\n return config?.name || '';\n});\n\nconst startSelect = () => {\n if (!services?.uiService) return;\n services.uiService.set('uiSelectMode', true);\n uiSelectMode.value = true;\n globalThis.document.addEventListener('ui-select', clickHandler as EventListener);\n};\n\nconst deleteHandler = () => {\n if (props.model) {\n props.model[props.name] = '';\n emit('change', '');\n mForm?.$emit('field-change', props.prop, '');\n }\n};\n</script>\n\n<style lang=\"scss\">\n.m-fields-ui-select {\n cursor: pointer;\n i {\n margin-right: 3px;\n }\n span {\n color: #2882e0;\n }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorCodeEditor',\n})\n</script>\n<template>\n <div ref=\"codeEditor\" class=\"magic-code-editor\"></div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorCodeEditor\">\nimport { onMounted, onUnmounted, ref, watch } from 'vue';\nimport { throttle } from 'lodash-es';\nimport * as monaco from 'monaco-editor';\nimport serialize from 'serialize-javascript';\n\nconst props = withDefaults(\n defineProps<{\n initValues?: string | Object;\n modifiedValues?: string | Object;\n type?: 'diff';\n language?: string;\n options?: {\n [key: string]: any;\n };\n autoSave?: boolean;\n }>(),\n {\n autoSave: true,\n language: 'javascript',\n options: () => ({\n tabSize: 2,\n }),\n },\n);\n\nconst emit = defineEmits(['initd', 'save']);\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\nlet vsEditor: monaco.editor.IStandaloneCodeEditor | null = null;\nlet vsDiffEditor: monaco.editor.IStandaloneDiffEditor | null = null;\n\nconst values = ref('');\nconst loading = ref(false);\nconst codeEditor = ref<HTMLDivElement>();\n\nconst resizeObserver = new globalThis.ResizeObserver(\n throttle((): void => {\n vsEditor?.layout();\n vsDiffEditor?.layout();\n }, 300),\n);\n\nconst 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\nconst getEditorValue = () =>\n props.type === 'diff' ? vsDiffEditor?.getModifiedEditor().getValue() : vsEditor?.getValue();\n\nconst 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' && props.autoSave) {\n vsEditor?.onDidBlurEditorWidget(() => {\n emit('save', getEditorValue());\n });\n }\n\n resizeObserver.observe(codeEditor.value);\n};\n\nwatch(\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\nonMounted(async () => {\n loading.value = true;\n\n init();\n});\n\nonUnmounted(() => {\n resizeObserver.disconnect();\n});\n\ndefineExpose({\n getEditor() {\n return vsEditor || vsDiffEditor;\n },\n\n setEditorValue,\n\n focus() {\n vsEditor?.focus();\n vsDiffEditor?.focus();\n },\n});\n</script>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorResizer',\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\" setup name=\"MEditorResizer\">\nimport { onMounted, onUnmounted, ref } from 'vue';\nimport Gesto from 'gesto';\n\nconst emit = defineEmits(['change']);\n\nconst target = ref<HTMLSpanElement>();\n\nlet getso: Gesto;\n\nonMounted(() => {\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) return;\n\n emit('change', e.deltaX);\n });\n});\n\nonUnmounted(() => {\n getso?.unset();\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorLayout',\n})\n</script>\n<template>\n <div ref=\"el\" class=\"m-editor-layout\">\n <template v-if=\"hasLeft\">\n <div class=\"m-editor-layout-left\" :class=\"leftClass\" :style=\"`width: ${left}px`\">\n <slot name=\"left\"></slot>\n </div>\n <Resizer @change=\"changeLeft\"></Resizer>\n </template>\n\n <div class=\"m-editor-layout-center\" :class=\"centerClass\" :style=\"`width: ${center}px`\">\n <slot name=\"center\"></slot>\n </div>\n\n <template v-if=\"hasRight\">\n <Resizer @change=\"changeRight\"></Resizer>\n <div class=\"m-editor-layout-right\" :class=\"rightClass\" :style=\"`width: ${right}px`\">\n <slot name=\"right\"></slot>\n </div>\n </template>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorLayout\">\nimport { computed, onMounted, onUnmounted, ref } from 'vue';\n\nimport Resizer from '@editor/layouts/Resizer.vue';\n\nconst emit = defineEmits(['update:left', 'change', 'update:right']);\n\nconst props = withDefaults(\n defineProps<{\n left?: number;\n right?: number;\n minLeft?: number;\n minRight?: number;\n minCenter?: number;\n leftClass?: string;\n rightClass?: string;\n centerClass?: string;\n }>(),\n {\n minLeft: 46,\n minRight: 1,\n minCenter: 5,\n },\n);\n\nconst el = ref<HTMLElement>();\n\nconst hasLeft = computed(() => typeof props.left !== 'undefined');\nconst hasRight = computed(() => typeof props.right !== 'undefined');\n\nconst getCenterWidth = (clientWidth: number, left: number, right: number) => {\n let center = clientWidth - left - right;\n if (center < props.minCenter) {\n center = props.minCenter;\n if (left < right) {\n right = clientWidth - left - props.minCenter;\n } else {\n left = clientWidth - right - props.minCenter;\n }\n }\n return {\n center,\n left,\n right,\n };\n};\n\nlet clientWidth = 0;\nconst resizerObserver = new ResizeObserver((entries) => {\n for (const { contentRect } of entries) {\n clientWidth = contentRect.width;\n\n let left = props.left || 0;\n let right = props.right || 0;\n\n if (left > clientWidth) {\n left = clientWidth / 3;\n }\n\n if (right > clientWidth) {\n right = clientWidth / 3;\n }\n\n const columnWidth = getCenterWidth(clientWidth, left, right);\n\n center.value = columnWidth.center;\n\n emit('change', {\n left: columnWidth.left,\n center: center.value,\n right: columnWidth.right,\n });\n }\n});\n\nonMounted(() => {\n if (el.value) {\n resizerObserver.observe(el.value);\n }\n});\n\nonUnmounted(() => {\n resizerObserver.disconnect();\n});\n\nconst center = ref(0);\n\nconst changeLeft = (deltaX: number) => {\n if (typeof props.left === 'undefined') return;\n let left = Math.max(props.left + deltaX, props.minLeft) || 0;\n emit('update:left', left);\n\n if (clientWidth - left - (props.right || 0) <= 0) {\n left = props.left;\n }\n\n const columnWidth = getCenterWidth(clientWidth, left, props.right || 0);\n\n center.value = columnWidth.center;\n\n emit('change', {\n left: columnWidth.left,\n center: center.value,\n right: columnWidth.right,\n });\n};\n\nconst changeRight = (deltaX: number) => {\n if (typeof props.right === 'undefined') return;\n let right = Math.max(props.right - deltaX, props.minRight) || 0;\n emit('update:right', right);\n\n if (clientWidth - (props.left || 0) - right <= 0) {\n right = props.right;\n }\n\n const columnWidth = getCenterWidth(clientWidth, props.left || 0, right);\n\n center.value = columnWidth.center;\n\n emit('change', {\n left: columnWidth.left,\n center: center.value,\n right: columnWidth.right,\n });\n};\n</script>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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\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 name: 'events',\n type: 'event-select',\n },\n ],\n },\n {\n title: '高级',\n lazy: true,\n items: [\n {\n name: 'created',\n text: 'created',\n labelWidth: '100px',\n type: 'code-select',\n },\n {\n name: 'mounted',\n text: 'mounted',\n labelWidth: '100px',\n type: 'code-select',\n },\n ],\n },\n ],\n },\n];\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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) 2023 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, FormItem } from '@tmagic/form';\nimport type { CodeBlockContent, CodeBlockDSL, Id, MApp, MContainer, MNode, MPage } from '@tmagic/schema';\nimport type StageCore from '@tmagic/stage';\nimport type {\n ContainerHighlightType,\n CustomizeMoveableOptionsCallbackConfig,\n MoveableOptions,\n UpdateDragEl,\n} from '@tmagic/stage';\n\nimport type { CodeBlockService } from './services/codeBlock';\nimport type { ComponentListService } from './services/componentList';\nimport type { DepService } from './services/dep';\nimport type { EditorService } from './services/editor';\nimport type { EventsService } from './services/events';\nimport type { HistoryService } from './services/history';\nimport type { PropsService } from './services/props';\nimport type { StorageService } from './services/storage';\nimport type { UiService } from './services/ui';\nimport type { UndoRedo } from './utils/undo-redo';\n\nexport type BeforeAdd = (config: MNode, parent: MContainer) => Promise<MNode> | MNode;\nexport type GetConfig = (config: FormConfig) => Promise<FormConfig> | FormConfig;\n\nexport interface InstallOptions {\n [key: string]: any;\n}\n\nexport interface Services {\n editorService: EditorService;\n historyService: HistoryService;\n storageService: StorageService;\n eventsService: EventsService;\n propsService: PropsService;\n componentListService: ComponentListService;\n uiService: UiService;\n codeBlockService: CodeBlockService;\n depService: DepService;\n}\n\nexport interface StageOptions {\n runtimeUrl: string;\n autoScrollIntoView: boolean;\n containerHighlightClassName: string;\n containerHighlightDuration: number;\n containerHighlightType: ContainerHighlightType;\n disabledDragStart?: boolean;\n render: (stage: StageCore) => HTMLDivElement | Promise<HTMLDivElement>;\n moveableOptions: MoveableOptions | ((config?: CustomizeMoveableOptionsCallbackConfig) => MoveableOptions);\n canSelect: (el: HTMLElement) => boolean | Promise<boolean>;\n isContainer: (el: HTMLElement) => boolean | Promise<boolean>;\n updateDragEl: UpdateDragEl;\n}\n\nexport interface StoreState {\n root: MApp | null;\n page: MPage | null;\n parent: MContainer | null;\n node: MNode | null;\n highlightNode: MNode | null;\n nodes: MNode[];\n stage: StageCore | null;\n modifiedNodeIds: Map<Id, Id>;\n pageLength: number;\n}\n\nexport type StoreStateKey = keyof StoreState;\n\nexport interface PropsState {\n propsConfigMap: Record<string, FormConfig>;\n propsValueMap: Record<string, MNode>;\n}\n\nexport interface ComponentGroupState {\n list: ComponentGroup[];\n}\n\nexport enum ColumnLayout {\n LEFT = 'left',\n CENTER = 'center',\n RIGHT = 'right',\n}\n\nexport interface SetColumnWidth {\n [ColumnLayout.LEFT]?: number;\n [ColumnLayout.CENTER]?: number | 'auto';\n [ColumnLayout.RIGHT]?: number;\n}\n\nexport interface GetColumnWidth {\n [ColumnLayout.LEFT]: number;\n [ColumnLayout.CENTER]: number;\n [ColumnLayout.RIGHT]: number;\n}\n\nexport interface StageRect {\n width: number;\n height: number;\n}\n\nexport interface UiState {\n /** 当前点击画布是否触发选中,true: 不触发,false: 触发,默认为false */\n uiSelectMode: boolean;\n /** 是否显示整个配置源码, true: 显示, false: 不显示,默认为false */\n showSrc: boolean;\n /** 画布显示放大倍数,默认为 1 */\n zoom: number;\n /** 画布容器的宽高 */\n stageContainerRect: StageRect;\n /** 画布顶层div的宽高,可用于改变画布的大小 */\n stageRect: StageRect;\n /** 编辑器列布局每一列的宽度,分为左中右三列 */\n columnWidth: GetColumnWidth;\n /** 是否显示画布参考线,true: 显示,false: 不显示,默认为true */\n showGuides: boolean;\n /** 是否显示标尺,true: 显示,false: 不显示,默认为true */\n showRule: boolean;\n /** 用于控制该属性配置表单内组件的尺寸 */\n propsPanelSize: 'large' | 'default' | 'small';\n /** 是否显示新增页面按钮 */\n showAddPageButton: boolean;\n}\n\nexport interface EditorNodeInfo {\n node: MNode | null;\n parent: MContainer | null;\n page: MPage | null;\n}\n\nexport interface AddMNode {\n type: string;\n name?: string;\n inputEvent?: DragEvent;\n [key: string]: any;\n}\n\nexport interface PastePosition {\n left?: number;\n top?: number;\n /**\n * 粘贴位置X方向偏移量\n */\n offsetX?: number;\n /**\n * 粘贴位置Y方向偏移量\n */\n offsetY?: number;\n}\n\n/**\n * 菜单按钮\n */\nexport interface MenuButton {\n /**\n * 按钮类型\n * button: 只有文字不带边框的按钮\n * text: 纯文本\n * divider: 分割线\n * dropdown: 下拉菜单\n */\n type: 'button' | 'text' | 'divider' | 'dropdown';\n /** 当type为divider时有效,分割线方向, 默认vertical */\n direction?: 'horizontal' | 'vertical';\n /** 展示的文案 */\n text?: string;\n /** 鼠标悬浮是显示的气泡中的文案 */\n tooltip?: string;\n /** Vue组件或url */\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 className?: string;\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 className?: string;\n display?: boolean | ((data?: Services) => Promise<boolean> | boolean);\n [key: string]: any;\n}\n\n/**\n * '/': 分隔符\n * 'delete': 删除按钮\n * 'undo': 撤销按钮\n * 'redo': 恢复按钮\n * 'zoom': 'zoom-in', 'zoom-out', 'scale-to-original', 'scale-to-fit' 的集合\n * 'zoom-in': 放大按钮\n * 'zoom-out': 缩小按钮\n * 'guides': 显示隐藏参考线\n * 'rule': 显示隐藏标尺\n * 'scale-to-original': 缩放到实际大小\n * 'scale-to-fit': 缩放以适应\n */\nexport type MenuItem =\n | '/'\n | 'delete'\n | 'undo'\n | 'redo'\n | 'zoom'\n | 'zoom-in'\n | 'zoom-out'\n | 'guides'\n | 'rule'\n | 'scale-to-original'\n | 'scale-to-fit'\n | MenuButton\n | MenuComponent\n | string;\n\n/** 工具栏 */\nexport interface MenuBarData {\n /** 顶部工具栏左边项 */\n [ColumnLayout.LEFT]?: MenuItem[];\n /** 顶部工具栏中间项 */\n [ColumnLayout.CENTER]?: MenuItem[];\n /** 顶部工具栏右边项 */\n [ColumnLayout.RIGHT]?: MenuItem[];\n}\n\nexport interface SideComponent extends MenuComponent {\n /** 显示文案 */\n text: string;\n /** vue组件或url */\n icon: Component<{}, {}, any>;\n}\n\n/**\n * component-list: 组件列表\n * layer: 已选组件树\n * code-block: 代码块\n */\nexport type SideItem = 'component-list' | 'layer' | 'code-block' | 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 /** Vue组件或url */\n icon?: string | Component<{}, {}, any>;\n /** 新增组件时需要透传到组价节点上的数据 */\n data?: {\n [key: string]: any;\n };\n}\n\nexport interface ComponentGroup {\n /** 显示文案 */\n title: string;\n /** 组内列表 */\n items: ComponentItem[];\n}\n\nexport interface UpdateData {\n id: Id;\n [key: string]: any;\n}\n\nexport enum LayerOffset {\n TOP = 'top',\n BOTTOM = 'bottom',\n}\n\n/** 容器布局 */\nexport enum Layout {\n FLEX = 'flex',\n FIXED = 'fixed',\n RELATIVE = 'relative',\n ABSOLUTE = 'absolute',\n}\n\nexport enum Keys {\n ESCAPE = 'Space',\n}\n\nexport const H_GUIDE_LINE_STORAGE_KEY = '$MagicStageHorizontalGuidelinesData';\nexport const V_GUIDE_LINE_STORAGE_KEY = '$MagicStageVerticalGuidelinesData';\n\nexport interface ScrollViewerEvent {\n scrollLeft: number;\n scrollTop: number;\n scrollHeight: number;\n scrollWidth: number;\n}\n\nexport type CodeState = {\n /** 是否展示代码块编辑区 */\n isShowCodeEditor: boolean;\n /** 代码块DSL数据源 */\n codeDsl: CodeBlockDSL | null;\n /** 当前选中的代码块id */\n id: Id;\n /** 代码块是否可编辑 */\n editable: boolean;\n /** list模式下左侧展示的代码列表 */\n combineIds: string[];\n /** 为业务逻辑预留的不可删除的代码块列表,由业务逻辑维护(如代码块上线后不可删除) */\n undeletableList: Id[];\n};\n\nexport type HookData = {\n /** 代码块id */\n codeId: Id;\n /** 参数 */\n params?: object;\n};\n\nexport type CodeRelation = {\n /** 组件id:[代码id1,代码id2] */\n [compId: Id]: Id[];\n};\n\nexport interface CodeDslItem {\n /** 代码块id */\n id: Id;\n /** 代码块名称 */\n name: string;\n /** 代码块函数内容 */\n codeBlockContent?: CodeBlockContent;\n /** 是否展示代码绑定关系 */\n showRelation?: boolean;\n /** 代码块对应绑定的组件信息 */\n combineInfo?: CombineInfo[];\n}\n\nexport interface CombineInfo {\n /** 组件id */\n compId: Id;\n /** 组件名称 */\n compName: string;\n}\n\nexport interface ListState {\n /** 代码块列表 */\n codeList: CodeDslItem[];\n}\n\nexport enum CodeDeleteErrorType {\n /** 代码块存在于不可删除列表中 */\n UNDELETEABLE = 'undeleteable',\n /** 代码块存在绑定关系 */\n BIND = 'bind',\n}\n\n// 代码块草稿localStorage key\nexport const CODE_DRAFT_STORAGE_KEY = 'magicCodeDraft';\n\nexport interface CodeParamStatement {\n /** 参数名称 */\n name: string;\n /** 参数类型 */\n type?: string;\n [key: string]: any;\n}\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\nexport interface EventSelectConfig {\n name: string;\n type: 'event-select';\n /** 事件名称表单配置 */\n eventNameConfig?: FormItem;\n /** 动作类型配置 */\n actionTypeConfig?: FormItem;\n /** 联动组件配置 */\n targetCompConfig?: FormItem;\n /** 联动组件动作配置 */\n compActionConfig?: FormItem;\n /** 联动代码配置 */\n codeActionConfig?: FormItem;\n}\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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 serialize from 'serialize-javascript';\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';\nexport const COPY_STORAGE_KEY = '$MagicEditorCopyData';\n\n/**\n * 获取所有页面配置\n * @param app DSL跟节点\n * @returns 所有页面配置\n */\nexport const getPageList = (app: MApp): MPage[] => {\n if (app.items && Array.isArray(app.items)) {\n return app.items.filter((item: MPage) => item.type === NodeType.PAGE);\n }\n return [];\n};\n\n/**\n * 获取所有页面名称\n * @param pages 所有页面配置\n * @returns 所有页面名称\n */\nexport const getPageNameList = (pages: MPage[]): string[] => pages.map((page: MPage) => page.name || 'index');\n\n/**\n * 新增页面时,生成页面名称\n * @param {Object} pageNameList 所有页面名称\n * @returns {string}\n */\nexport const generatePageName = (pageNameList: string[]): string => {\n let pageLength = pageNameList.length;\n\n if (!pageLength) return 'index';\n\n let pageName = `page_${pageLength}`;\n while (pageNameList.includes(pageName)) {\n pageLength += 1;\n pageName = `page_${pageLength}`;\n }\n\n return pageName;\n};\n\n/**\n * 新增页面时,生成页面名称\n * @param {Object} app 所有页面配置\n * @returns {string}\n */\nexport const generatePageNameByApp = (app: MApp): string => generatePageName(getPageNameList(getPageList(app)));\n\n/**\n * @param {Object} node\n * @returns {boolean}\n */\nexport const isFixed = (node: MNode): boolean => node.style?.position === 'fixed';\n\nexport const getNodeIndex = (node: MNode, parent: MContainer | MApp): number => {\n const items = parent?.items || [];\n return items.findIndex((item: MNode) => `${item.id}` === `${node.id}`);\n};\n\nexport const getRelativeStyle = (style: Record<string, any> = {}): Record<string, any> => ({\n ...style,\n position: 'relative',\n top: 0,\n left: 0,\n});\n\nconst getMiddleTop = (node: MNode, parentNode: MNode, stage: StageCore | null) => {\n let height = node.style?.height || 0;\n\n if (!stage || typeof node.style?.top !== 'undefined' || !parentNode.style) return node.style?.top;\n\n if (!isNumber(height)) {\n height = 0;\n }\n\n const { height: parentHeight } = parentNode.style;\n\n if (isPage(parentNode)) {\n const { scrollTop = 0, wrapperHeight } = stage.mask;\n return (wrapperHeight - height) / 2 + scrollTop;\n }\n\n return (parentHeight - height) / 2;\n};\n\nexport const getInitPositionStyle = (style: Record<string, any> = {}, layout: Layout) => {\n if (layout === Layout.ABSOLUTE) {\n const newStyle: Record<string, any> = {\n ...style,\n position: 'absolute',\n };\n\n if (typeof newStyle.left === 'undefined' && typeof newStyle.right === 'undefined') {\n newStyle.left = 0;\n }\n\n return newStyle;\n }\n\n if (layout === Layout.RELATIVE) {\n return getRelativeStyle(style);\n }\n\n return style;\n};\n\nexport const setLayout = (node: MNode, layout: Layout) => {\n node.items?.forEach((child: MNode) => {\n if (isPop(child)) return;\n\n const style = child.style || {};\n\n // 是 fixed 不做处理\n if (style.position === 'fixed') return;\n\n if (layout !== Layout.RELATIVE) {\n style.position = 'absolute';\n } else {\n child.style = getRelativeStyle(style);\n child.style.right = 'auto';\n child.style.bottom = 'auto';\n }\n });\n return node;\n};\n\nexport const change2Fixed = (node: MNode, root: MApp) => {\n const path = getNodePath(node.id, root.items);\n const offset = {\n left: 0,\n top: 0,\n };\n\n path.forEach((value) => {\n offset.left = offset.left + globalThis.parseFloat(value.style?.left || 0);\n offset.top = offset.top + globalThis.parseFloat(value.style?.top || 0);\n });\n\n return {\n ...(node.style || {}),\n ...offset,\n };\n};\n\nexport const Fixed2Other = async (\n node: MNode,\n root: MApp,\n getLayout: (parent: MNode, node?: MNode) => Promise<Layout>,\n) => {\n const path = getNodePath(node.id, root.items);\n const cur = path.pop();\n const offset = {\n left: cur?.style?.left || 0,\n top: cur?.style?.top || 0,\n right: '',\n bottom: '',\n };\n\n path.forEach((value) => {\n offset.left = offset.left - globalThis.parseFloat(value.style?.left || 0);\n offset.top = offset.top - globalThis.parseFloat(value.style?.top || 0);\n });\n const style = node.style || {};\n\n const parent = path.pop();\n if (!parent) {\n return getRelativeStyle(style);\n }\n\n const layout = await getLayout(parent);\n if (layout !== Layout.RELATIVE) {\n return {\n ...style,\n ...offset,\n position: 'absolute',\n };\n }\n\n return getRelativeStyle(style);\n};\n\nexport const getGuideLineFromCache = (key: string): number[] => {\n if (!key) return [];\n\n const guideLineCacheData = globalThis.localStorage.getItem(key);\n if (guideLineCacheData) {\n try {\n return JSON.parse(guideLineCacheData) || [];\n } catch (e) {\n console.error(e);\n }\n }\n\n return [];\n};\n\nexport const fixNodeLeft = (config: MNode, parent: MContainer, doc?: Document) => {\n if (!doc || !config.style || !isNumber(config.style.left)) return config.style?.left;\n\n const el = doc.getElementById(`${config.id}`);\n const parentEl = doc.getElementById(`${parent.id}`);\n\n const left = Number(config.style?.left) || 0;\n if (el && parentEl && el.offsetWidth + left > parentEl.offsetWidth) {\n return parentEl.offsetWidth - el.offsetWidth;\n }\n\n return config.style.left;\n};\n\nexport const fixNodePosition = (config: MNode, parent: MContainer, stage: StageCore | null) => {\n if (config.style?.position !== 'absolute') {\n return config.style;\n }\n\n return {\n ...(config.style || {}),\n top: getMiddleTop(config, parent, stage),\n left: fixNodeLeft(config, parent, stage?.renderer.contentWindow?.document),\n };\n};\n\n// 序列化配置\nexport const serializeConfig = (config: any) =>\n serialize(config, {\n space: 2,\n unsafe: true,\n }).replace(/\"(\\w+)\":\\s/g, '$1: ');\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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) 2023 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 beforeArgs = (await beforeMethod(...beforeArgs)) || [];\n\n if (isError(beforeArgs)) throw beforeArgs;\n\n if (!Array.isArray(beforeArgs)) {\n beforeArgs = [beforeArgs];\n }\n }\n\n let returnValue: any = await fn(beforeArgs, sourceMethod.bind(scope));\n\n for (const afterMethod of scope.pluginOptionsList[afterMethodName]) {\n returnValue = await afterMethod(returnValue, ...beforeArgs);\n\n if (isError(returnValue)) throw returnValue;\n }\n\n return returnValue;\n } catch (error) {\n throw error;\n }\n};\n\n/**\n * 提供两种方式对Class进行扩展\n * 方法1:\n * 给Class中的每个方法都添加before after两个钩子\n * 给Class添加一个usePlugin方法,use方法可以传入一个包含before或者after方法的对象\n *\n * 例如:\n * Class EditorService extends BaseService {\n * constructor() {\n * super(['add']);\n * }\n * add(value) { return result; }\n * };\n *\n * const editorService = new EditorService();\n *\n * editorService.usePlugin({\n * beforeAdd(value) { return [value] },\n * afterAdd(result, value) { return 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 public removeAllPlugins() {\n Object.keys(this.pluginOptionsList).forEach((key) => {\n this.pluginOptionsList[key] = [];\n });\n Object.keys(this.middleware).forEach((key) => {\n this.middleware[key] = [];\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) 2023 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 { MPage } from '@tmagic/schema';\n\nimport type { HistoryState, StepValue } from '@editor/type';\nimport { UndoRedo } from '@editor/utils/undo-redo';\n\nimport BaseService from './BaseService';\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 this.emit('page-change', this.state.pageSteps[this.state.pageId]);\n }\n\n public resetState(): 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.resetState();\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n\n private getUndoRedo() {\n if (!this.state.pageId) return null;\n return this.state.pageSteps[this.state.pageId];\n }\n\n private setCanUndoRedo(): void {\n const undoRedo = this.getUndoRedo();\n this.state.canRedo = undoRedo?.canRedo() || false;\n this.state.canUndo = undoRedo?.canUndo() || false;\n }\n}\n\nexport type HistoryService = History;\n\nexport default new History();\n","import serialize from 'serialize-javascript';\n\nimport BaseService from './BaseService';\n\ninterface Options {\n namespace?: string;\n protocol?: Protocol;\n}\n\nexport enum Protocol {\n OBJECT = 'object',\n JSON = 'json',\n STRING = 'string',\n NUMBER = 'number',\n BOOLEAN = 'boolean',\n}\n\n/**\n * 数据存储服务\n */\nexport class WebStorage extends BaseService {\n private storage: Storage = globalThis.localStorage;\n private namespace = 'tmagic';\n\n constructor() {\n super(['getStorage', 'getNamespace', 'clear', 'getItem', 'removeItem', 'setItem']);\n }\n\n /**\n * 获取数据存储对象,可以通过\n * const storageService = new StorageService();\n * storageService.usePlugin({\n * // 替换存储对象为 sessionStorage\n * async afterGetStorage(): Promise<Storage> {\n * return window.sessionStorage;\n * },\n * });\n */\n public async getStorage(): Promise<Storage> {\n return this.storage;\n }\n\n public async getNamespace(): Promise<string> {\n return this.namespace;\n }\n\n /**\n * 清理,支持storageService.usePlugin\n */\n public async clear(): Promise<void> {\n const storage = await this.getStorage();\n storage.clear();\n }\n /**\n * 获取存储项,支持storageService.usePlugin\n */\n public async getItem(key: string, options: Options = {}): Promise<any> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n const { protocol = options.protocol, item } = this.getValueAndProtocol(\n storage.getItem(`${options.namespace || namespace}:${key}`),\n );\n\n if (item === null) return null;\n\n switch (protocol) {\n case Protocol.OBJECT:\n // eslint-disable-next-line no-eval\n return eval(`(${item})`);\n case Protocol.JSON:\n return JSON.parse(item);\n case Protocol.NUMBER:\n return Number(item);\n case Protocol.BOOLEAN:\n return Boolean(item);\n default:\n return item;\n }\n }\n /**\n * 获取指定索引位置的key\n */\n public async key(index: number): Promise<string | null> {\n const storage = await this.getStorage();\n return storage.key(index);\n }\n\n /**\n * 移除存储项,支持storageService.usePlugin\n */\n public async removeItem(key: string, options: Options = {}): Promise<void> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n storage.removeItem(`${options.namespace || namespace}:${key}`);\n }\n\n /**\n * 设置存储项,支持storageService.usePlugin\n */\n public async setItem(key: string, value: any, options: Options = {}): Promise<void> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n let item = value;\n const protocol = options.protocol ? `${options.protocol}:` : '';\n if (typeof value === Protocol.STRING || typeof value === Protocol.NUMBER) {\n item = `${protocol}${value}`;\n } else {\n item = `${protocol}${serialize(value)}`;\n }\n storage.setItem(`${options.namespace || namespace}:${key}`, item);\n }\n\n public destroy() {\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n\n private getValueAndProtocol(value: string | null) {\n let protocol = '';\n\n if (value === null) {\n return {\n item: value,\n protocol,\n };\n }\n\n const item = value.replace(new RegExp(`^(${Object.values(Protocol).join('|')})(:)(.+)`), (_$0, $1, _$2, $3) => {\n protocol = $1;\n return $3;\n });\n\n return {\n protocol,\n item,\n };\n }\n}\n\nexport type StorageService = WebStorage;\nexport default new WebStorage();\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { reactive } from 'vue';\nimport { cloneDeep, mergeWith } from 'lodash-es';\n\nimport type { FormConfig } from '@tmagic/form';\nimport type { MComponent, MNode } from '@tmagic/schema';\nimport { guid, toLine } from '@tmagic/utils';\n\nimport type { PropsState } from '@editor/type';\nimport { fillConfig } 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([\n 'setPropsConfig',\n 'getPropsConfig',\n 'setPropsValue',\n 'getPropsValue',\n 'createId',\n 'setNewItemId',\n 'fillConfig',\n 'getDefaultPropsValue',\n ]);\n }\n\n public setPropsConfigs(configs: Record<string, FormConfig>) {\n Object.keys(configs).forEach((type: string) => {\n this.setPropsConfig(toLine(type), configs[type]);\n });\n this.emit('props-configs-change');\n }\n\n public async fillConfig(config: FormConfig) {\n return fillConfig(config);\n }\n\n /**\n * 为指定类型组件设置组件属性表单配置\n * @param type 组件类型\n * @param config 组件属性表单配置\n */\n public async setPropsConfig(type: string, config: FormConfig) {\n this.state.propsConfigMap[type] = await this.fillConfig(Array.isArray(config) ? config : [config]);\n }\n\n /**\n * 获取指点类型的组件属性表单配置\n * @param type 组件类型\n * @returns 组件属性表单配置\n */\n public async getPropsConfig(type: string): Promise<FormConfig> {\n if (type === 'area') {\n return await this.getPropsConfig('button');\n }\n\n return cloneDeep(this.state.propsConfigMap[type] || (await this.fillConfig([])));\n }\n\n public setPropsValues(values: Record<string, MNode>) {\n Object.keys(values).forEach((type: string) => {\n this.setPropsValue(toLine(type), values[type]);\n });\n }\n\n /**\n * 为指点类型组件设置组件初始值\n * @param type 组件类型\n * @param value 组件初始值\n */\n public async setPropsValue(type: string, value: MNode) {\n this.state.propsValueMap[type] = value;\n }\n\n /**\n * 获取指定类型的组件初始值\n * @param type 组件类型\n * @returns 组件初始值\n */\n public async getPropsValue(type: string, { inputEvent, ...defaultValue }: Record<string, any> = {}) {\n if (type === 'area') {\n const value = (await this.getPropsValue('button')) as MComponent;\n value.className = 'action-area';\n value.text = '';\n if (value.style) {\n value.style.backgroundColor = 'rgba(255, 255, 255, 0)';\n }\n return value;\n }\n\n const [id, defaultPropsValue, data] = await Promise.all([\n this.createId(type),\n this.getDefaultPropsValue(type),\n this.setNewItemId(\n cloneDeep({\n type,\n ...defaultValue,\n } as any),\n ),\n ]);\n\n return {\n id,\n ...defaultPropsValue,\n ...mergeWith({}, cloneDeep(this.state.propsValueMap[type] || {}), data),\n };\n }\n\n public async createId(type: string | number): Promise<string> {\n return `${type}_${guid()}`;\n }\n\n /**\n * 将组件与组件的子元素配置中的id都设置成一个新的ID\n * @param {Object} config 组件配置\n */\n /* eslint no-param-reassign: [\"error\", { \"props\": false }] */\n public async setNewItemId(config: MNode) {\n config.id = await this.createId(config.type || 'component');\n\n if (config.items && Array.isArray(config.items)) {\n for (const item of config.items) {\n await this.setNewItemId(item);\n }\n }\n\n return config;\n }\n\n /**\n * 获取默认属性配置\n * @param type 组件类型\n * @returns Object\n */\n public async getDefaultPropsValue(type: string) {\n return ['page', 'container'].includes(type)\n ? {\n type,\n layout: 'absolute',\n style: {},\n name: type,\n items: [],\n }\n : {\n type,\n style: {},\n name: type,\n };\n }\n\n public resetState() {\n this.state.propsConfigMap = {};\n this.state.propsValueMap = {};\n }\n\n public destroy() {\n this.resetState();\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n}\n\nexport type PropsService = Props;\n\nexport default new Props();\n","import { toRaw } from 'vue';\nimport { isEmpty } from 'lodash-es';\n\nimport { Id, MContainer, MNode } from '@tmagic/schema';\nimport { isPage } from '@tmagic/utils';\n\nimport editorService from '@editor/services/editor';\nimport propsService from '@editor/services/props';\nimport type { AddMNode, PastePosition } from '@editor/type';\nimport { generatePageNameByApp, getInitPositionStyle } from '@editor/utils/editor';\n\n/**\n * 粘贴前置操作:返回分配了新id以及校准了坐标的配置\n * @param position 粘贴的坐标\n * @param config 待粘贴的元素配置(复制时保存的那份配置)\n * @returns\n */\nexport const beforePaste = async (position: PastePosition, config: MNode[]): Promise<MNode[]> => {\n if (!config[0]?.style) return config;\n const curNode = editorService.get('node');\n // 将数组中第一个元素的坐标作为参照点\n const { left: referenceLeft, top: referenceTop } = config[0].style;\n // 坐标校准后的粘贴数据\n const pasteConfigs: MNode[] = await Promise.all(\n config.map(async (configItem: MNode): Promise<MNode> => {\n // 解构 position 对象,从 position 删除 offsetX、offsetY字段\n const { offsetX = 0, offsetY = 0, ...positionClone } = position;\n let pastePosition = positionClone;\n\n if (!isEmpty(pastePosition) && curNode?.items) {\n // 如果没有传入粘贴坐标则可能为键盘操作,不再转换\n // 如果粘贴时选中了容器,则将元素粘贴到容器内,坐标需要转换为相对于容器的坐标\n pastePosition = getPositionInContainer(pastePosition, curNode.id);\n }\n\n // 将所有待粘贴元素坐标相对于多选第一个元素坐标重新计算,以保证多选粘贴后元素间距不变\n if (pastePosition.left && configItem.style?.left) {\n pastePosition.left = configItem.style.left - referenceLeft + pastePosition.left;\n }\n if (pastePosition.top && configItem.style?.top) {\n pastePosition.top = configItem.style?.top - referenceTop + pastePosition.top;\n }\n\n const pasteConfig = await propsService.setNewItemId(configItem);\n\n if (pasteConfig.style) {\n const { left, top } = pasteConfig.style;\n // 判断能转换为数字时,做粘贴偏移量计算\n if (typeof left === 'number' || (!!left && !isNaN(Number(left)))) {\n pasteConfig.style.left = Number(left) + offsetX;\n }\n if (typeof top === 'number' || (!!top && !isNaN(Number(top)))) {\n pasteConfig.style.top = Number(top) + offsetY;\n }\n\n pasteConfig.style = {\n ...pasteConfig.style,\n ...pastePosition,\n };\n }\n const root = editorService.get('root');\n if (isPage(pasteConfig) && root) {\n pasteConfig.name = generatePageNameByApp(root);\n }\n return pasteConfig as MNode;\n }),\n );\n return pasteConfigs;\n};\n\n/**\n * 将元素粘贴到容器内时,将相对于画布坐标转换为相对于容器的坐标\n * @param position PastePosition 粘贴时相对于画布的坐标\n * @param id 元素id\n * @returns PastePosition 转换后的坐标\n */\nexport const getPositionInContainer = (position: PastePosition = {}, id: Id) => {\n let { left = 0, top = 0 } = position;\n const parentEl = editorService.get('stage')?.renderer?.contentWindow?.document.getElementById(`${id}`);\n const parentElRect = parentEl?.getBoundingClientRect();\n left = left - (parentElRect?.left || 0);\n top = top - (parentElRect?.top || 0);\n return {\n left,\n top,\n };\n};\n\nexport const getAddParent = (node: MNode) => {\n const curNode = editorService.get('node');\n\n let parentNode;\n if (isPage(node)) {\n parentNode = editorService.get('root');\n } else if (curNode?.items) {\n parentNode = curNode as MContainer;\n } else if (curNode?.id) {\n parentNode = editorService.getParentById(curNode.id, false);\n }\n return parentNode;\n};\n\nexport const getDefaultConfig = async (addNode: AddMNode, parentNode: MContainer) => {\n const { type, inputEvent, ...config } = addNode;\n const layout = await editorService.getLayout(toRaw(parentNode), addNode as MNode);\n const newNode = { ...toRaw(await propsService.getPropsValue(type, config)) };\n newNode.style = getInitPositionStyle(newNode.style, layout);\n return newNode;\n};\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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, isObject, mergeWith, uniq } from 'lodash-es';\n\nimport type { Id, MApp, MComponent, MContainer, MNode, MPage } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\nimport StageCore from '@tmagic/stage';\nimport { getNodePath, isNumber, isPage, isPop } from '@tmagic/utils';\n\nimport historyService from '@editor/services/history';\nimport storageService, { Protocol } from '@editor/services/storage';\nimport type { AddMNode, EditorNodeInfo, PastePosition, StepValue, StoreState, StoreStateKey } from '@editor/type';\nimport { LayerOffset, Layout } from '@editor/type';\nimport {\n change2Fixed,\n COPY_STORAGE_KEY,\n Fixed2Other,\n fixNodePosition,\n getInitPositionStyle,\n getNodeIndex,\n isFixed,\n setLayout,\n} from '@editor/utils/editor';\nimport { beforePaste, getAddParent } from '@editor/utils/operator';\n\nimport BaseService from './BaseService';\nimport propsService from './props';\n\nclass Editor extends BaseService {\n public state: StoreState = reactive({\n root: null,\n page: null,\n parent: null,\n node: null,\n nodes: [],\n stage: null,\n highlightNode: null,\n modifiedNodeIds: new Map(),\n pageLength: 0,\n });\n private isHistoryStateChange = false;\n\n constructor() {\n super(\n [\n 'getLayout',\n 'select',\n 'doAdd',\n 'add',\n 'doRemove',\n 'remove',\n 'doUpdate',\n 'update',\n 'sort',\n 'copy',\n 'paste',\n 'doPaste',\n 'doAlignCenter',\n 'alignCenter',\n 'moveLayer',\n 'moveToContainer',\n 'move',\n 'undo',\n 'redo',\n 'highlight',\n ],\n // 需要注意循环依赖问题,如果函数间有相互调用的话,不能设置为串行调用\n ['select', 'update', 'moveLayer'],\n );\n }\n\n /**\n * 设置当前指点节点配置\n * @param name 'root' | 'page' | 'parent' | 'node' | 'highlightNode' | 'nodes' | 'stage' | 'modifiedNodeIds' | 'pageLength'\n * @param value MNode\n */\n public set<K extends StoreStateKey, T extends StoreState[K]>(name: K, value: T) {\n const preValue = this.state[name];\n this.state[name] = value;\n\n // set nodes时将node设置为nodes第一个元素\n if (name === 'nodes' && Array.isArray(value)) {\n this.set('node', value[0]);\n }\n\n if (name === 'root') {\n if (Array.isArray(value)) {\n throw new Error('root 不能为数组');\n }\n\n if (value && isObject(value) && !(value instanceof StageCore) && !(value instanceof Map)) {\n this.state.pageLength = value.items?.length || 0;\n } else {\n this.state.pageLength = 0;\n }\n\n this.emit('root-change', value, preValue);\n }\n }\n\n /**\n * 获取当前指点节点配置\n * @param name 'root' | 'page' | 'parent' | 'node' | 'highlightNode' | 'nodes' | 'stage' | 'modifiedNodeIds' | 'pageLength'\n * @returns MNode\n */\n public get<K extends StoreStateKey>(name: K): StoreState[K] {\n return this.state[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('root');\n if (raw) {\n root = toRaw(root);\n }\n\n const info: EditorNodeInfo = {\n node: null,\n parent: null,\n page: null,\n };\n\n if (!root) return info;\n\n if (id === root.id) {\n info.node = root;\n return info;\n }\n\n const path = getNodePath(id, root.items);\n\n if (!path.length) return info;\n\n path.unshift(root);\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 | null {\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 | null {\n const { parent } = this.getNodeInfo(id, raw);\n return parent;\n }\n\n /**\n * 只有容器拥有布局\n */\n public async getLayout(parent: MNode, node?: MNode): Promise<Layout> {\n if (node && typeof node !== 'function' && isFixed(node)) return Layout.FIXED;\n\n if (parent.layout) {\n return parent.layout;\n }\n\n // 如果该节点没有设置position,则认为是流式布局,例如获取root的布局时\n if (!parent.style?.position) {\n return Layout.RELATIVE;\n }\n\n return Layout.ABSOLUTE;\n }\n\n /**\n * 选中指定节点(将指定节点设置成当前选中状态)\n * @param config 指定节点配置或者ID\n * @returns 当前选中的节点配置\n */\n public async select(config: MNode | Id): Promise<MNode> | never {\n const { node, page, parent } = this.selectedConfigExceptionHandler(config);\n this.set('nodes', node ? [node] : []);\n this.set('page', page);\n this.set('parent', parent);\n\n if (page) {\n historyService.changePage(toRaw(page));\n } else {\n historyService.resetState();\n }\n\n if (node?.id) {\n this.get('stage')\n ?.renderer.runtime?.getApp?.()\n ?.page?.emit(\n 'editor:select',\n {\n node,\n page,\n parent,\n },\n getNodePath(node.id, this.get('root')?.items),\n );\n }\n\n this.emit('select', node);\n\n return node!;\n }\n\n public async selectNextNode(): Promise<MNode | null> | 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('stage')?.select(nextNode.id);\n\n return nextNode;\n }\n\n public async selectNextPage(): Promise<MNode> | never {\n const root = toRaw(this.get('root'));\n const page = toRaw(this.get('page'));\n\n if (!page) throw new Error('page不能为空');\n if (!root) throw new Error('root不能为空');\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('stage')?.select(nextPage.id);\n\n return nextPage;\n }\n\n /**\n * 高亮指定节点\n * @param config 指定节点配置或者ID\n * @returns 当前高亮的节点配置\n */\n public highlight(config: MNode | Id): void {\n const { node } = this.selectedConfigExceptionHandler(config);\n const currentHighlightNode = this.get('highlightNode');\n if (currentHighlightNode === node) return;\n this.set('highlightNode', node);\n }\n\n /**\n * 多选\n * @param ids 指定节点ID\n * @returns 加入多选的节点配置\n */\n public multiSelect(ids: Id[]): void {\n const nodes: MNode[] = [];\n const idsUnique = uniq(ids);\n idsUnique.forEach((id) => {\n const { node } = this.getNodeInfo(id);\n if (!node) return;\n nodes.push(node);\n });\n this.set('nodes', nodes);\n }\n\n public async doAdd(node: MNode, parent: MContainer): Promise<MNode> {\n const root = this.get('root');\n\n if (!root) throw new Error('root为空');\n\n const curNode = this.get('node');\n const stage = this.get('stage');\n\n if (!curNode) throw new Error('当前选中节点为空');\n\n if ((parent.type === NodeType.ROOT || curNode?.type === NodeType.ROOT) && node.type !== NodeType.PAGE) {\n throw new Error('app下不能添加组件');\n }\n\n if (parent.id !== curNode.id && node.type !== NodeType.PAGE) {\n const index = parent.items.indexOf(curNode);\n parent.items?.splice(index + 1, 0, node);\n } else {\n // 新增节点添加到配置中\n parent.items?.push(node);\n }\n\n const layout = await this.getLayout(toRaw(parent), node as MNode);\n node.style = getInitPositionStyle(node.style, layout);\n\n await stage?.add({\n config: cloneDeep(node),\n parent: cloneDeep(parent),\n parentId: parent.id,\n root: cloneDeep(root),\n });\n\n const newStyle = fixNodePosition(node, parent, stage);\n\n if (newStyle && (newStyle.top !== node.style.top || newStyle.left !== node.style.left)) {\n node.style = newStyle;\n await stage?.update({ config: cloneDeep(node), parentId: parent.id, root: cloneDeep(root) });\n }\n\n this.addModifiedNodeId(node.id);\n\n return node;\n }\n\n /**\n * 向指点容器添加组件节点\n * @param addConfig 将要添加的组件节点配置\n * @param parent 要添加到的容器组件节点配置,如果不设置,默认为当前选中的组件的父节点\n * @returns 添加后的节点\n */\n public async add(addNode: AddMNode | MNode[], parent?: MContainer | null): Promise<MNode | MNode[]> {\n const stage = this.get('stage');\n\n // 新增多个组件只存在于粘贴多个组件,粘贴的是一个完整的config,所以不再需要getPropsValue\n const addNodes = [];\n if (!Array.isArray(addNode)) {\n const { type, inputEvent, ...config } = addNode;\n\n if (!type) throw new Error('组件类型不能为空');\n\n addNodes.push({ ...toRaw(await propsService.getPropsValue(type, config)) });\n } else {\n addNodes.push(...addNode);\n }\n\n const newNodes = await Promise.all(\n addNodes.map((node) => {\n const root = this.get('root');\n if (isPage(node) && root) {\n return this.doAdd(node, root);\n }\n const parentNode = parent && typeof parent !== 'function' ? parent : getAddParent(node);\n if (!parentNode) throw new Error('未找到父元素');\n return this.doAdd(node, parentNode);\n }),\n );\n\n if (newNodes.length > 1) {\n const newNodeIds = newNodes.map((node) => node.id);\n // 触发选中样式\n stage?.multiSelect(newNodeIds);\n await this.multiSelect(newNodeIds);\n } else {\n await this.select(newNodes[0]);\n\n if (isPage(newNodes[0])) {\n this.state.pageLength += 1;\n } else {\n // 新增页面,这个时候页面还有渲染出来,此时select会出错,在runtime-ready的时候回去select\n stage?.select(newNodes[0].id);\n }\n }\n\n if (!isPage(newNodes[0])) {\n this.pushHistoryState();\n }\n\n this.emit('add', newNodes);\n\n return Array.isArray(addNode) ? newNodes : newNodes[0];\n }\n\n public async doRemove(node: MNode): Promise<void> {\n const root = this.get('root');\n if (!root) throw new Error('root不能为空');\n\n const { parent, node: curNode } = this.getNodeInfo(node.id);\n\n if (!parent || !curNode) throw new Error('找不要删除的节点');\n\n const index = getNodeIndex(curNode, parent);\n\n if (typeof index !== 'number' || index === -1) throw new Error('找不要删除的节点');\n\n parent.items?.splice(index, 1);\n const stage = this.get('stage');\n stage?.remove({ id: node.id, parentId: parent.id, root: cloneDeep(root) });\n\n if (node.type === NodeType.PAGE) {\n this.state.pageLength -= 1;\n\n if (root.items[0]) {\n await this.select(root.items[0]);\n stage?.select(root.items[0].id);\n } else {\n this.set('nodes', [root]);\n this.set('parent', null);\n this.set('page', null);\n this.set('stage', null);\n this.set('highlightNode', null);\n this.resetModifiedNodeId();\n historyService.reset();\n\n return;\n }\n } else {\n await this.select(parent);\n stage?.select(parent.id);\n }\n\n this.addModifiedNodeId(parent.id);\n }\n\n /**\n * 删除组件\n * @param {Object} node\n */\n public async remove(nodeOrNodeList: MNode | MNode[]): Promise<void> {\n const nodes = Array.isArray(nodeOrNodeList) ? nodeOrNodeList : [nodeOrNodeList];\n\n await Promise.all(nodes.map((node) => this.doRemove(node)));\n\n if (!isPage(nodes[0])) {\n // 更新历史记录\n this.pushHistoryState();\n }\n\n this.emit('remove', nodes);\n }\n\n public async doUpdate(config: MNode) {\n const root = this.get('root');\n if (!root) throw new Error('root为空');\n\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, root);\n\n newConfig = mergeWith(cloneDeep(node), newConfig, (objValue, srcValue) => {\n if (isObject(srcValue) && Array.isArray(objValue)) {\n // 原来的配置是数组,新的配置是对象,则直接使用新的值\n return srcValue;\n }\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 as MApp);\n return newConfig;\n }\n\n const { parent } = info;\n if (!parent) throw new Error('获取不到父级节点');\n\n const parentNodeItems = parent.items;\n const index = getNodeIndex(newConfig, parent);\n\n if (!parentNodeItems || typeof index === 'undefined' || index === -1) throw new Error('更新的节点未找到');\n\n const newLayout = await this.getLayout(newConfig);\n const layout = await this.getLayout(node);\n if (newLayout !== layout) {\n newConfig = setLayout(newConfig, newLayout);\n }\n\n parentNodeItems[index] = newConfig;\n\n // 将update后的配置更新到nodes中\n const nodes = this.get('nodes');\n const targetIndex = nodes.findIndex((nodeItem: MNode) => `${nodeItem.id}` === `${newConfig.id}`);\n nodes.splice(targetIndex, 1, newConfig);\n this.set('nodes', [...nodes]);\n\n this.get('stage')?.update({\n config: cloneDeep(newConfig),\n parentId: parent.id,\n root: cloneDeep(root),\n });\n\n if (newConfig.type === NodeType.PAGE) {\n this.set('page', newConfig as MPage);\n }\n\n this.addModifiedNodeId(newConfig.id);\n\n return newConfig;\n }\n\n /**\n * 更新节点\n * @param config 新的节点配置,配置中需要有id信息\n * @returns 更新后的节点配置\n */\n public async update(config: MNode | MNode[]): Promise<MNode | MNode[]> {\n const nodes = Array.isArray(config) ? config : [config];\n\n const newNodes = await Promise.all(nodes.map((node) => this.doUpdate(node)));\n\n this.pushHistoryState();\n\n this.emit('update', newNodes);\n return Array.isArray(config) ? newNodes : newNodes[0];\n }\n\n /**\n * 将id为id1的组件移动到id为id2的组件位置上,例如:[1,2,3,4] -> sort(1,3) -> [2,1,3,4]\n * @param id1 组件ID\n * @param id2 组件ID\n * @returns void\n */\n public async sort(id1: Id, id2: Id): Promise<void> {\n const root = this.get('root');\n if (!root) throw new Error('root为空');\n\n const node = this.get('node');\n if (!node) throw new Error('当前节点为空');\n\n const parent = cloneDeep(toRaw(this.get('parent')));\n if (!parent) throw new Error('父节点为空');\n\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('stage')?.update({\n config: cloneDeep(node),\n parentId: parent.id,\n root: cloneDeep(root),\n });\n\n this.addModifiedNodeId(parent.id);\n this.pushHistoryState();\n }\n\n /**\n * 将组将节点配置转化成string,然后存储到localStorage中\n * @param config 组件节点配置\n * @returns 组件节点配置\n */\n public async copy(config: MNode | MNode[]): Promise<void> {\n await storageService.setItem(COPY_STORAGE_KEY, Array.isArray(config) ? config : [config], {\n protocol: Protocol.OBJECT,\n });\n }\n\n /**\n * 从localStorage中获取节点,然后添加到当前容器中\n * @param position 粘贴的坐标\n * @returns 添加后的组件节点配置\n */\n public async paste(position: PastePosition = {}): Promise<MNode | MNode[] | void> {\n const config: MNode[] = await storageService.getItem(COPY_STORAGE_KEY);\n\n if (!Array.isArray(config)) return;\n\n const node = this.get('node');\n\n let parent: MContainer | null = null;\n // 粘贴的组件为当前选中组件的副本时,则添加到当前选中组件的父组件中\n if (config.length === 1 && config[0].id === node?.id) {\n parent = this.get('parent');\n if (parent?.type === NodeType.ROOT) {\n parent = this.get('page');\n }\n }\n\n const pasteConfigs = await this.doPaste(config, position);\n\n return this.add(pasteConfigs, parent);\n }\n\n public async doPaste(config: MNode[], position: PastePosition = {}): Promise<MNode[]> {\n const pasteConfigs = await beforePaste(position, cloneDeep(config));\n return pasteConfigs;\n }\n\n public async doAlignCenter(config: MNode): Promise<MNode> {\n const parent = this.getParentById(config.id);\n\n if (!parent) throw new Error('找不到父节点');\n\n const node = cloneDeep(toRaw(config));\n const layout = await this.getLayout(parent, node);\n if (layout === Layout.RELATIVE) {\n return config;\n }\n\n if (!node.style) return config;\n\n const stage = this.get('stage');\n const doc = stage?.renderer.contentWindow?.document;\n\n if (doc) {\n const el = doc.getElementById(`${node.id}`);\n const parentEl = el?.offsetParent;\n if (parentEl && el) {\n node.style.left = (parentEl.clientWidth - el.clientWidth) / 2;\n }\n } else if (parent.style && isNumber(parent.style?.width) && isNumber(node.style?.width)) {\n node.style.left = (parent.style.width - node.style.width) / 2;\n }\n\n return node;\n }\n\n /**\n * 将指点节点设置居中\n * @param config 组件节点配置\n * @returns 当前组件节点配置\n */\n public async alignCenter(config: MNode | MNode[]): Promise<MNode | MNode[]> {\n const nodes = Array.isArray(config) ? config : [config];\n const stage = this.get('stage');\n\n const newNodes = await Promise.all(nodes.map((node) => this.doAlignCenter(node)));\n\n const newNode = await this.update(newNodes);\n\n if (newNodes.length > 1) {\n await stage?.multiSelect(newNodes.map((node) => node.id));\n } else {\n await stage?.select(newNodes[0].id);\n }\n\n return newNode;\n }\n\n /**\n * 移动当前选中节点位置\n * @param offset 偏移量\n */\n public async moveLayer(offset: number | LayerOffset): Promise<void> {\n const root = this.get('root');\n if (!root) throw new Error('root为空');\n\n const parent = this.get('parent');\n if (!parent) throw new Error('父节点为空');\n\n const node = this.get('node');\n if (!node) throw new Error('当前节点为空');\n\n const brothers: MNode[] = parent.items || [];\n const index = brothers.findIndex((item) => `${item.id}` === `${node?.id}`);\n\n // 流式布局与绝对定位布局操作的相反的\n const layout = await this.getLayout(parent, node);\n const isRelative = layout === Layout.RELATIVE;\n\n brothers.splice(index, 1);\n\n if (offset === LayerOffset.TOP) {\n brothers.splice(isRelative ? 0 : brothers.length - 1, 0, node);\n } else if (offset === LayerOffset.BOTTOM) {\n brothers.splice(isRelative ? brothers.length - 1 : 0, 0, node);\n } else {\n brothers.splice(index + (isRelative ? -offset : offset), 0, node);\n }\n\n const grandparent = this.getParentById(parent.id);\n this.get('stage')?.update({\n config: cloneDeep(toRaw(parent)),\n parentId: grandparent?.id,\n root: cloneDeep(root),\n });\n\n this.addModifiedNodeId(parent.id);\n this.pushHistoryState();\n }\n\n /**\n * 移动到指定容器中\n * @param config 需要移动的节点\n * @param targetId 容器ID\n */\n public async moveToContainer(config: MNode, targetId: Id): Promise<MNode | undefined> {\n const root = cloneDeep(this.get('root'));\n const { node, parent } = this.getNodeInfo(config.id, false);\n const target = this.getNodeById(targetId, false) as MContainer;\n\n const stage = this.get('stage');\n if (root && node && parent && stage) {\n const index = getNodeIndex(node, parent);\n parent.items?.splice(index, 1);\n\n await stage.remove({ id: node.id, parentId: parent.id, root });\n\n const layout = await this.getLayout(target);\n\n const newConfig = mergeWith(cloneDeep(node), config, (objValue, srcValue) => {\n if (Array.isArray(srcValue)) {\n return srcValue;\n }\n });\n newConfig.style = getInitPositionStyle(newConfig.style, layout);\n\n target.items.push(newConfig);\n\n await stage.select(targetId);\n\n const targetParent = this.getParentById(target.id);\n await stage.update({ config: cloneDeep(target), parentId: targetParent?.id, root });\n\n await this.select(newConfig);\n stage.select(newConfig.id);\n\n this.addModifiedNodeId(target.id);\n this.addModifiedNodeId(parent.id);\n this.pushHistoryState();\n\n return newConfig;\n }\n }\n\n /**\n * 撤销当前操作\n * @returns 上一次数据\n */\n public async undo(): Promise<StepValue | null> {\n const value = historyService.undo();\n await this.changeHistoryState(value);\n return value;\n }\n\n /**\n * 恢复到下一步\n * @returns 下一步数据\n */\n public async redo(): Promise<StepValue | null> {\n const value = historyService.redo();\n await this.changeHistoryState(value);\n return value;\n }\n\n public async move(left: number, top: number) {\n const node = toRaw(this.get('node'));\n if (!node || isPage(node)) return;\n\n const { style, id, type } = node;\n if (!style || style.position !== 'absolute') return;\n\n if (top && !isNumber(style.top)) return;\n if (left && !isNumber(style.left)) return;\n\n this.update({\n id,\n type,\n style: {\n ...style,\n left: Number(style.left) + left,\n top: Number(style.top) + top,\n },\n });\n }\n\n public resetState() {\n this.set('root', null);\n this.set('node', null);\n this.set('nodes', []);\n this.set('page', null);\n this.set('parent', null);\n this.set('stage', null);\n this.set('highlightNode', null);\n this.set('modifiedNodeIds', new Map());\n this.set('pageLength', 0);\n }\n\n public destroy() {\n this.removeAllListeners();\n this.resetState();\n this.removeAllPlugins();\n }\n\n public resetModifiedNodeId() {\n this.get('modifiedNodeIds').clear();\n }\n\n private addModifiedNodeId(id: Id) {\n if (!this.isHistoryStateChange) {\n this.get('modifiedNodeIds').set(id, id);\n }\n }\n\n private pushHistoryState() {\n const curNode = cloneDeep(toRaw(this.get('node')));\n const page = this.get('page');\n if (!this.isHistoryStateChange && curNode && page) {\n historyService.push({\n data: cloneDeep(toRaw(page)),\n modifiedNodeIds: this.get('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('stage')?.select(value.nodeId);\n }, 0);\n this.emit('history-change', value.data);\n }\n\n private async toggleFixedPosition(dist: MNode, src: MNode, root: MApp) {\n const newConfig = cloneDeep(dist);\n\n if (!isPop(src) && newConfig.style?.position) {\n if (isFixed(newConfig) && !isFixed(src)) {\n newConfig.style = change2Fixed(newConfig, root);\n } else if (!isFixed(newConfig) && isFixed(src)) {\n newConfig.style = await Fixed2Other(newConfig, root, this.getLayout);\n }\n }\n\n return newConfig;\n }\n\n private selectedConfigExceptionHandler(config: MNode | Id): EditorNodeInfo {\n let id: Id;\n if (typeof config === 'string' || typeof config === 'number') {\n id = config;\n } else {\n id = config.id;\n }\n if (!id) {\n throw new Error('没有ID,无法选中');\n }\n\n const { node, parent, page } = this.getNodeInfo(id);\n if (!node) throw new Error('获取不到组件信息');\n\n if (node.id === this.state.root?.id) {\n throw new Error('不能选根节点');\n }\n return {\n node,\n parent,\n page,\n };\n }\n}\n\nexport type EditorService = Editor;\n\nexport default new Editor();\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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 editorService from '@editor/services/editor';\nimport type { StageRect, UiState } from '@editor/type';\n\nimport BaseService from './BaseService';\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: {\n left: 0,\n right: 0,\n center: 0,\n },\n showGuides: true,\n showRule: true,\n propsPanelSize: 'small',\n showAddPageButton: true,\n});\n\nclass Ui extends BaseService {\n constructor() {\n super(['zoom', 'calcZoom']);\n }\n\n public set<K extends keyof UiState, T extends UiState[K]>(name: K, value: T) {\n const mask = editorService.get('stage')?.mask;\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[name] = value;\n }\n\n public get<K extends keyof UiState>(name: K) {\n return state[name];\n }\n\n public async zoom(zoom: number) {\n this.set('zoom', (this.get('zoom') * 100 + zoom * 100) / 100);\n if (this.get('zoom') < 0.1) this.set('zoom', 0.1);\n }\n\n public async calcZoom() {\n const { stageRect, stageContainerRect } = state;\n const { height, width } = stageContainerRect;\n if (!width || !height) return 1;\n\n // 30为标尺的大小\n const stageWidth = stageRect.width + 30;\n const stageHeight = stageRect.height + 30;\n\n if (width > stageWidth && height > stageHeight) {\n return 1;\n }\n // 60/80是为了不要让画布太过去贴住四周(这样好看些)\n return Math.min((width - 60) / stageWidth || 1, (height - 80) / stageHeight || 1);\n }\n\n public resetState() {\n this.set('showSrc', false);\n this.set('uiSelectMode', false);\n this.set('zoom', 1);\n this.set('stageContainerRect', {\n width: 0,\n height: 0,\n });\n }\n\n public destroy() {\n this.resetState();\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n\n private async setStageRect(value: StageRect) {\n state.stageRect = {\n ...state.stageRect,\n ...value,\n };\n state.zoom = await this.calcZoom();\n }\n}\n\nexport type UiService = Ui;\n\nexport default new Ui();\n","import { computed } from 'vue';\n\nimport StageCore, { GuidesType, RemoveEventData, SortEventData, UpdateEventData } from '@tmagic/stage';\n\nimport editorService from '@editor/services/editor';\nimport uiService from '@editor/services/ui';\nimport { H_GUIDE_LINE_STORAGE_KEY, StageOptions, V_GUIDE_LINE_STORAGE_KEY } from '@editor/type';\n\nimport { getGuideLineFromCache } from './editor';\n\nconst root = computed(() => editorService.get('root'));\nconst page = computed(() => editorService.get('page'));\nconst zoom = computed(() => uiService.get('zoom') || 1);\nconst uiSelectMode = computed(() => uiService.get('uiSelectMode'));\n\nconst getGuideLineKey = (key: string) => `${key}_${root.value?.id}_${page.value?.id}`;\n\nexport const useStage = (stageOptions: StageOptions) => {\n const stage = new StageCore({\n render: stageOptions.render,\n runtimeUrl: stageOptions.runtimeUrl,\n zoom: zoom.value,\n autoScrollIntoView: stageOptions.autoScrollIntoView,\n isContainer: stageOptions.isContainer,\n containerHighlightClassName: stageOptions.containerHighlightClassName,\n containerHighlightDuration: stageOptions.containerHighlightDuration,\n containerHighlightType: stageOptions.containerHighlightType,\n disabledDragStart: stageOptions.disabledDragStart,\n canSelect: (el, event, stop) => {\n const elCanSelect = stageOptions.canSelect(el);\n // 在组件联动过程中不能再往下选择,返回并触发 ui-select\n if (uiSelectMode.value && elCanSelect && event.type === 'mousedown') {\n document.dispatchEvent(new CustomEvent('ui-select', { detail: el }));\n return stop();\n }\n\n return elCanSelect;\n },\n moveableOptions: stageOptions.moveableOptions,\n updateDragEl: stageOptions.updateDragEl,\n });\n\n stage.mask.setGuides([\n getGuideLineFromCache(getGuideLineKey(H_GUIDE_LINE_STORAGE_KEY)),\n getGuideLineFromCache(getGuideLineKey(V_GUIDE_LINE_STORAGE_KEY)),\n ]);\n\n stage.on('select', (el: HTMLElement) => {\n if (`${editorService.get('node')?.id}` === el.id && editorService.get('nodes').length === 1) return;\n editorService.select(el.id);\n });\n\n stage.on('highlight', (el: HTMLElement) => {\n editorService.highlight(el.id);\n });\n\n stage.on('multi-select', (els: HTMLElement[]) => {\n editorService.multiSelect(els.map((el) => el.id));\n });\n\n stage.on('update', (ev: UpdateEventData) => {\n if (ev.parentEl) {\n for (const data of ev.data) {\n editorService.moveToContainer({ id: data.el.id, style: data.style }, ev.parentEl.id);\n }\n return;\n }\n\n editorService.update(ev.data.map((data) => ({ id: data.el.id, style: data.style })));\n });\n\n stage.on('sort', (ev: SortEventData) => {\n editorService.sort(ev.src, ev.dist);\n });\n\n stage.on('remove', (ev: RemoveEventData) => {\n editorService.remove(\n ev.data.map(({ el }) => ({\n id: el.id,\n })),\n );\n });\n\n stage.on('select-parent', () => {\n const parent = editorService.get('parent');\n if (!parent) throw new Error('父节点为空');\n editorService.select(parent);\n editorService.get('stage')?.select(parent.id);\n });\n\n stage.on('change-guides', (e) => {\n uiService.set('showGuides', true);\n\n if (!root.value || !page.value) return;\n\n const storageKey = getGuideLineKey(\n e.type === GuidesType.HORIZONTAL ? H_GUIDE_LINE_STORAGE_KEY : V_GUIDE_LINE_STORAGE_KEY,\n );\n if (e.guides.length) {\n globalThis.localStorage.setItem(storageKey, JSON.stringify(e.guides));\n } else {\n globalThis.localStorage.removeItem(storageKey);\n }\n });\n\n return stage;\n};\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorAddPageBox',\n})\n</script>\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 <MIcon :icon=\"Plus\"></MIcon>\n </div>\n <p>新增页面</p>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorAddPageBox\">\nimport { inject, toRaw } from 'vue';\nimport { Plus } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport MIcon from '@editor/components/Icon.vue';\nimport type { Services } from '@editor/type';\nimport { generatePageNameByApp } from '@editor/utils';\n\nconst services = inject<Services>('services');\n\nconst clickHandler = () => {\n const { editorService } = services || {};\n\n if (!editorService) return;\n\n const root = toRaw(editorService.get('root'));\n if (!root) throw new Error('root 不能为空');\n\n editorService.add({\n type: NodeType.PAGE,\n name: generatePageNameByApp(root),\n });\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorFramework',\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 <Layout\n v-else\n class=\"m-editor-content\"\n left-class=\"m-editor-framework-left\"\n center-class=\"m-editor-framework-center\"\n right-class=\"m-editor-framework-right\"\n v-model:left=\"columnWidth.left\"\n v-model:right=\"columnWidth.right\"\n :min-left=\"65\"\n :min-right=\"20\"\n @change=\"columnWidthChange\"\n >\n <template #left>\n <slot name=\"sidebar\"></slot>\n </template>\n\n <template #center>\n <slot v-if=\"pageLength > 0\" name=\"workspace\"></slot>\n <slot v-else name=\"empty\">\n <AddPageBox></AddPageBox>\n </slot>\n </template>\n\n <template v-if=\"pageLength > 0 && nodes.length === 1\" #right>\n <TMagicScrollbar>\n <slot name=\"props-panel\"></slot>\n </TMagicScrollbar>\n </template>\n </Layout>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorFramework\">\nimport { computed, inject, ref, watch } from 'vue';\n\nimport { TMagicScrollbar } from '@tmagic/design';\n\nimport Layout from '@editor/components/Layout.vue';\nimport type { GetColumnWidth, Services } from '@editor/type';\n\nimport AddPageBox from './AddPageBox.vue';\n\nconst DEFAULT_LEFT_COLUMN_WIDTH = 310;\nconst DEFAULT_RIGHT_COLUMN_WIDTH = 480;\n\nwithDefaults(\n defineProps<{\n codeOptions?: Record<string, any>;\n }>(),\n {\n codeOptions: () => ({}),\n },\n);\n\nconst { editorService, uiService } = inject<Services>('services') || {};\n\nconst root = computed(() => editorService?.get('root'));\nconst nodes = computed(() => editorService?.get('nodes') || []);\n\nconst pageLength = computed(() => editorService?.get('pageLength') || 0);\nconst showSrc = computed(() => uiService?.get('showSrc'));\n\nconst LEFT_COLUMN_WIDTH_STORAGE_KEY = '$MagicEditorLeftColumnWidthData';\nconst RIGHT_COLUMN_WIDTH_STORAGE_KEY = '$MagicEditorRightColumnWidthData';\n\nconst leftColumnWidthCacheData = Number(globalThis.localStorage.getItem(LEFT_COLUMN_WIDTH_STORAGE_KEY));\nconst RightColumnWidthCacheData = Number(globalThis.localStorage.getItem(RIGHT_COLUMN_WIDTH_STORAGE_KEY));\n\nconst columnWidth = ref<Partial<GetColumnWidth>>({\n left: leftColumnWidthCacheData,\n center: 0,\n right: RightColumnWidthCacheData,\n});\n\nwatch(\n pageLength,\n (length) => {\n const left = columnWidth.value.left || DEFAULT_LEFT_COLUMN_WIDTH;\n\n columnWidth.value.left = left;\n\n if (length <= 0) {\n columnWidth.value.right = undefined;\n columnWidth.value.center = globalThis.document.body.clientWidth - left;\n } else {\n const right = columnWidth.value.right || RightColumnWidthCacheData || DEFAULT_RIGHT_COLUMN_WIDTH;\n columnWidth.value.right = right;\n columnWidth.value.center = globalThis.document.body.clientWidth - left - right;\n }\n\n uiService?.set('columnWidth', columnWidth.value as GetColumnWidth);\n },\n {\n immediate: true,\n },\n);\n\nwatch(\n () => columnWidth.value.right,\n (right) => {\n if (typeof right === 'undefined') return;\n globalThis.localStorage.setItem(RIGHT_COLUMN_WIDTH_STORAGE_KEY, `${right}`);\n },\n);\n\nwatch(\n () => columnWidth.value.left,\n (left) => {\n globalThis.localStorage.setItem(LEFT_COLUMN_WIDTH_STORAGE_KEY, `${left}`);\n },\n);\n\nconst columnWidthChange = (columnW: GetColumnWidth) => {\n columnWidth.value.left = columnW.left;\n columnWidth.value.center = columnW.center;\n columnWidth.value.right = columnW.right;\n uiService?.set('columnWidth', columnW);\n};\n\nconst 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</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorToolButton',\n})\n</script>\n<template>\n <div\n v-if=\"display\"\n class=\"menu-item\"\n :class=\"`${data.type} ${data.className || ''}`\"\n @click=\"clickHandler(data, $event)\"\n @mousedown=\"mousedownHandler(data, $event)\"\n @mouseup=\"mouseupHandler(data, $event)\"\n >\n <TMagicDivider v-if=\"data.type === 'divider'\" :direction=\"data.direction || 'vertical'\"></TMagicDivider>\n <div v-else-if=\"data.type === 'text'\" class=\"menu-item-text\">{{ data.text }}</div>\n\n <template v-else-if=\"data.type === 'button'\">\n <TMagicTooltip v-if=\"data.tooltip\" effect=\"dark\" placement=\"bottom-start\" :content=\"data.tooltip\">\n <TMagicButton size=\"small\" text :disabled=\"disabled\"\n ><MIcon v-if=\"data.icon\" :icon=\"data.icon\"></MIcon><span>{{ data.text }}</span></TMagicButton\n >\n </TMagicTooltip>\n <TMagicButton v-else size=\"small\" text :disabled=\"disabled\"\n ><MIcon v-if=\"data.icon\" :icon=\"data.icon\"></MIcon><span>{{ data.text }}</span></TMagicButton\n >\n </template>\n\n <TMagicDropdown\n v-else-if=\"data.type === 'dropdown'\"\n trigger=\"click\"\n :disabled=\"disabled\"\n @command=\"dropdownHandler\"\n >\n <span class=\"el-dropdown-link menubar-menu-button\">\n {{ data.text }}<TMagicIcon class=\"el-icon--right\"><ArrowDown></ArrowDown></TMagicIcon>\n </span>\n <template #dropdown>\n <TMagicDropdownMenu v-if=\"data.items && data.items.length\">\n <TMagicDropdownItem v-for=\"(subItem, index) in data.items\" :key=\"index\" :command=\"{ data, subItem }\">{{\n subItem.text\n }}</TMagicDropdownItem>\n </TMagicDropdownMenu>\n </template>\n </TMagicDropdown>\n\n <component v-else-if=\"data.type === 'component'\" v-bind=\"data.props || {}\" :is=\"data.component\"></component>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorToolButton\">\nimport { computed, inject } from 'vue';\nimport { ArrowDown } from '@element-plus/icons-vue';\n\nimport {\n TMagicButton,\n TMagicDivider,\n TMagicDropdown,\n TMagicDropdownItem,\n TMagicDropdownMenu,\n TMagicIcon,\n TMagicTooltip,\n} from '@tmagic/design';\n\nimport MIcon from '../components/Icon.vue';\nimport type { MenuButton, MenuComponent, Services } from '../type';\n\nconst props = withDefaults(\n defineProps<{\n data?: MenuButton | MenuComponent;\n eventType?: 'mousedown' | 'mouseup' | 'click';\n }>(),\n {\n data: () => ({\n type: 'text',\n display: false,\n }),\n eventType: 'click',\n },\n);\nconst services = inject<Services>('services');\n\nconst disabled = computed(() => {\n if (typeof props.data === 'string') return false;\n if (props.data.type === 'component') return false;\n if (typeof props.data.disabled === 'function') {\n return props.data.disabled(services);\n }\n return props.data.disabled;\n});\n\nconst display = computed(() => {\n if (!props.data) return false;\n if (typeof props.data === 'string') return true;\n if (typeof props.data.display === 'function') {\n return props.data.display(services);\n }\n return props.data.display ?? true;\n});\n\nconst buttonHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (disabled.value) return;\n if (typeof (item as MenuButton).handler === 'function' && services) {\n (item as MenuButton).handler?.(services, event);\n }\n};\n\nconst dropdownHandler = (command: any) => {\n if (command.item.handler) {\n command.item.handler(services);\n }\n};\n\nconst clickHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'click') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n\nconst mousedownHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'mousedown') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n\nconst mouseupHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'mouseup') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorNavMenu',\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 <ToolButton :data=\"item\" v-for=\"(item, index) in buttons[key]\" :key=\"index\"></ToolButton>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorNavMenu\">\nimport { computed, inject, markRaw } from 'vue';\nimport { Back, Delete, FullScreen, Grid, Memo, Right, ScaleToOriginal, ZoomIn, ZoomOut } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport ToolButton from '@editor/components/ToolButton.vue';\nimport { ColumnLayout, MenuBarData, MenuButton, MenuComponent, MenuItem, Services } from '@editor/type';\n\nconst props = withDefaults(\n defineProps<{\n data?: MenuBarData;\n height?: number;\n }>(),\n {\n data: () => ({}),\n height: 35,\n },\n);\n\nconst services = inject<Services>('services');\nconst uiService = services?.uiService;\n\nconst columnWidth = computed(() => services?.uiService.get('columnWidth'));\nconst keys = Object.values(ColumnLayout);\n\nconst showGuides = computed((): boolean => uiService?.get('showGuides') ?? true);\nconst showRule = computed((): boolean => uiService?.get('showRule') ?? true);\nconst zoom = computed((): number => uiService?.get('zoom') ?? 1);\n\nconst isMac = /mac os x/.test(navigator.userAgent.toLowerCase());\nconst ctrl = isMac ? 'Command' : 'Ctrl';\n\nconst getConfig = (item: MenuItem): (MenuButton | MenuComponent)[] => {\n if (typeof item !== 'string') {\n return [item];\n }\n const config: (MenuButton | MenuComponent)[] = [];\n switch (item) {\n case '/':\n config.push({\n type: 'divider',\n className: 'divider',\n });\n break;\n case 'zoom':\n config.push(\n ...getConfig('zoom-out'),\n ...getConfig(`${parseInt(`${zoom.value * 100}`, 10)}%`),\n ...getConfig('zoom-in'),\n ...getConfig('scale-to-original'),\n ...getConfig('scale-to-fit'),\n );\n break;\n case 'delete':\n config.push({\n type: 'button',\n className: 'delete',\n icon: markRaw(Delete),\n tooltip: `刪除(Delete)`,\n disabled: () => services?.editorService.get('node')?.type === NodeType.PAGE,\n handler: () => {\n const node = services?.editorService.get('node');\n node && services?.editorService.remove(node);\n },\n });\n break;\n case 'undo':\n config.push({\n type: 'button',\n className: 'undo',\n icon: markRaw(Back),\n tooltip: `后退(${ctrl}+z)`,\n disabled: () => !services?.historyService.state.canUndo,\n handler: () => services?.editorService.undo(),\n });\n break;\n case 'redo':\n config.push({\n type: 'button',\n className: 'redo',\n icon: markRaw(Right),\n tooltip: `前进(${ctrl}+Shift+z)`,\n disabled: () => !services?.historyService.state.canRedo,\n handler: () => services?.editorService.redo(),\n });\n break;\n case 'zoom-in':\n config.push({\n type: 'button',\n className: 'zoom-in',\n icon: markRaw(ZoomIn),\n tooltip: `放大(${ctrl}+=)`,\n handler: () => uiService?.zoom(0.1),\n });\n break;\n case 'zoom-out':\n config.push({\n type: 'button',\n className: 'zoom-out',\n icon: markRaw(ZoomOut),\n tooltip: `縮小(${ctrl}+-)`,\n handler: () => uiService?.zoom(-0.1),\n });\n break;\n case 'scale-to-original':\n config.push({\n type: 'button',\n className: 'scale-to-original',\n icon: markRaw(ScaleToOriginal),\n tooltip: `缩放到实际大小(${ctrl}+1)`,\n handler: () => uiService?.set('zoom', 1),\n });\n break;\n case 'scale-to-fit':\n config.push({\n type: 'button',\n className: 'scale-to-fit',\n icon: markRaw(FullScreen),\n tooltip: `缩放以适应(${ctrl}+0)`,\n handler: async () => uiService?.set('zoom', await uiService.calcZoom()),\n });\n break;\n case 'rule':\n config.push({\n type: 'button',\n className: 'rule',\n icon: markRaw(Memo),\n tooltip: showRule.value ? '隐藏标尺' : '显示标尺',\n handler: () => uiService?.set('showRule', !showRule.value),\n });\n break;\n case 'guides':\n config.push({\n type: 'button',\n className: 'guides',\n icon: markRaw(Grid),\n tooltip: showGuides.value ? '隐藏参考线' : '显示参考线',\n handler: () => uiService?.set('showGuides', !showGuides.value),\n });\n break;\n default:\n config.push({\n type: 'text',\n text: item,\n });\n }\n return config;\n};\n\nconst buttons = computed(() => {\n const data: {\n [ColumnLayout.LEFT]: (MenuButton | MenuComponent)[];\n [ColumnLayout.CENTER]: (MenuButton | MenuComponent)[];\n [ColumnLayout.RIGHT]: (MenuButton | MenuComponent)[];\n } = {\n [ColumnLayout.LEFT]: [],\n [ColumnLayout.CENTER]: [],\n [ColumnLayout.RIGHT]: [],\n };\n keys.forEach((key) => {\n const items = props.data[key] || [];\n items.forEach((item) => {\n data[key].push(...getConfig(item));\n });\n });\n return data;\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorPropsPanel',\n})\n</script>\n<template>\n <div class=\"m-editor-props-panel\">\n <slot name=\"props-panel-header\"></slot>\n <MForm\n ref=\"configForm\"\n :class=\"`m-editor-props-panel ${propsPanelSize}`\"\n :popper-class=\"`m-editor-props-panel-popper ${propsPanelSize}`\"\n :size=\"propsPanelSize\"\n :init-values=\"values\"\n :config=\"curFormConfig\"\n @change=\"submit\"\n ></MForm>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorPropsPanel\">\nimport { computed, getCurrentInstance, inject, onMounted, onUnmounted, ref, watchEffect } from 'vue';\n\nimport { tMagicMessage } from '@tmagic/design';\nimport type { FormValue } from '@tmagic/form';\nimport { MForm } from '@tmagic/form';\n\nimport type { Services } from '@editor/type';\n\nconst emit = defineEmits(['mounted']);\n\nconst internalInstance = getCurrentInstance();\nconst values = ref<FormValue>({});\nconst configForm = ref<InstanceType<typeof MForm>>();\n// ts类型应该是FormConfig, 但是打包时会出错,所以暂时用any\nconst curFormConfig = ref<any>([]);\nconst services = inject<Services>('services');\nconst node = computed(() => services?.editorService.get('node'));\nconst propsPanelSize = computed(() => services?.uiService.get('propsPanelSize') || 'small');\nconst stage = computed(() => services?.editorService.get('stage'));\n\nconst init = async () => {\n if (!node.value) {\n curFormConfig.value = [];\n return;\n }\n\n const type = node.value.type || (node.value.items ? 'container' : 'text');\n curFormConfig.value = (await services?.propsService.getPropsConfig(type)) || [];\n values.value = node.value;\n};\n\nwatchEffect(init);\nservices?.propsService.on('props-configs-change', init);\n\nonMounted(() => {\n emit('mounted', internalInstance);\n});\n\nonUnmounted(() => {\n services?.propsService.off('props-configs-change', init);\n});\n\nwatchEffect(() => {\n if (configForm.value && stage.value) {\n configForm.value.formState.stage = stage.value;\n }\n});\n\nconst submit = async () => {\n try {\n const values = await configForm.value?.submitForm();\n services?.editorService.update(values);\n } catch (e: any) {\n console.error(e);\n tMagicMessage.closeAll();\n tMagicMessage.error(e.message);\n }\n};\n\ndefineExpose({ submit });\n</script>\n","<template>\n <TMagicInput\n v-model=\"filterText\"\n class=\"search-input\"\n size=\"small\"\n placeholder=\"输入关键字进行过滤\"\n clearable\n @input=\"filterTextChangeHandler\"\n >\n <template #prefix>\n <TMagicIcon><Search /></TMagicIcon>\n </template>\n </TMagicInput>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Search } from '@element-plus/icons-vue';\n\nimport { TMagicIcon, TMagicInput } from '@tmagic/design';\n\nconst emit = defineEmits(['search']);\n\nconst filterText = ref('');\n\nconst filterTextChangeHandler = () => {\n emit('search', filterText.value);\n};\n</script>\n","<template>\n <!-- app-manage cdn链接:https://cloudcache.tencent-cloud.com/qcloud/ui/static/console_aside_v4/6638c8a5-2e7f-477a-83b1-a413a0e4ba39.svg -->\n <svg xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"#7C878E\" fill-rule=\"evenodd\">\n <path d=\"M15.3,5.5 L8,0 L0.7,5.5 L8,11 L15.3,5.5 Z M8,2.5 L12,5.5 L8,8.5 L4,5.5 L8,2.5 Z\" fill-rule=\"nonzero\" />\n <path d=\"M8 13.5L2.3 9.2 0.7 10.5 8 16 15.3 10.5 13.7 9.2z\" />\n </g>\n </svg>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorAppManageIcon\"></script>\n","<template>\n <!-- 代码icon,cdn链接:https://cloudcache.tencent-cloud.com/qcloud/ui/static/government/0d463ed5-6407-4498-8865-3d05b5e70115.svg -->\n <svg viewBox=\"0 0 32 32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <!-- Generator: Sketch 60.1 (88133) - https://sketch.com -->\n <defs><rect id=\"path-1\" x=\"0\" y=\"0\" width=\"32\" height=\"32\"></rect></defs>\n <g id=\"组件规范\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"03图标\" transform=\"translate(-561.000000, -2356.000000)\">\n <g id=\"icon/line/Universal/code\" transform=\"translate(561.000000, 2356.000000)\">\n <g id=\"路径\">\n <mask id=\"mask-2\" fill=\"white\"><use xlink:href=\"#path-1\"></use></mask>\n <use id=\"蒙版\" fill=\"#D8D8D8\" opacity=\"0\" xlink:href=\"#path-1\"></use>\n <path\n d=\"M21.9284587,7.9482233 L29.8079004,15.827665 C29.9055315,15.9252961 29.9055315,16.0835874 29.8079004,16.1812184 L21.9284587,24.0606602 C21.8308276,24.1582912 21.6725364,24.1582912 21.5749053,24.0606602 L20.3374684,22.8232233 C20.2419143,22.7276698 20.2398813,22.5740096 20.331369,22.4759832 L20.3374687,22.4696702 L26.8027181,16.0044417 L20.3374687,9.53921328 C20.2398372,9.44158265 20.2398369,9.2832914 20.3374679,9.18566017 L21.5749053,7.9482233 C21.6725364,7.85059223 21.8308276,7.85059223 21.9284587,7.9482233 Z M10.3999684,7.9482233 L11.6374053,9.18566017 C11.7329594,9.28121371 11.7349925,9.43487387 11.6435048,9.53290029 L11.637405,9.53921328 L5.17215562,16.0044417 L11.637405,22.4696702 C11.7329593,22.5652236 11.7349926,22.7188837 11.643505,22.8169103 L11.6374053,22.8232233 L10.3999684,24.0606602 C10.3023374,24.1582912 10.1440461,24.1582912 10.046415,24.0606602 L2.1669733,16.1812184 C2.06934223,16.0835874 2.06934223,15.9252961 2.1669733,15.827665 L10.046415,7.9482233 C10.1440461,7.85059223 10.3023374,7.85059223 10.3999684,7.9482233 Z M17.2612532,9.29310422 L18.9262468,9.83189578 C19.0576112,9.87440526 19.1296423,10.0153579 19.0871328,10.1467222 L15.0848232,22.514807 C15.0423138,22.6461714 14.9013612,22.7182025 14.7699968,22.675693 L13.1050032,22.1369014 C12.9736388,22.0943919 12.9016077,21.9534393 12.9441172,21.822075 L16.9464268,9.45399022 C16.9889362,9.32262585 17.1298888,9.25059474 17.2612532,9.29310422 Z\"\n id=\"形状\"\n fill=\"#1D1F24\"\n mask=\"url(#mask-2)\"\n ></path>\n </g>\n </g>\n <g id=\"icon切图\" transform=\"translate(226.000000, 1782.000000)\"></g>\n </g>\n </g>\n </svg>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorCodeIcon\"></script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorCodeDraftEditor',\n})\n</script>\n<template>\n <div class=\"m-editor-wrapper\" :class=\"isFullScreen ? 'fullScreen' : 'normal'\">\n <magic-code-editor\n ref=\"codeEditor\"\n class=\"m-editor-container\"\n :init-values=\"`${codeContent}`\"\n @save=\"saveCodeDraft\"\n :language=\"language\"\n :options=\"codeOptions\"\n ></magic-code-editor>\n <div class=\"m-editor-content-bottom\" v-if=\"editable\">\n <TMagicButton type=\"primary\" class=\"button\" @click=\"toggleFullScreen\">\n {{ isFullScreen ? '退出全屏' : '全屏' }}</TMagicButton\n >\n <TMagicButton type=\"primary\" class=\"button\" @click=\"saveAndClose\">确认</TMagicButton>\n <TMagicButton type=\"primary\" class=\"button\" @click=\"close\">关闭</TMagicButton>\n </div>\n <div class=\"m-editor-content-bottom\" v-else>\n <TMagicButton type=\"primary\" class=\"button\" @click=\"toggleFullScreen\">\n {{ isFullScreen ? '退出全屏' : '全屏' }}</TMagicButton\n >\n <TMagicButton type=\"primary\" class=\"button\" @click=\"close\">关闭</TMagicButton>\n </div>\n </div>\n</template>\n<script lang=\"ts\" setup name=\"MEditorCodeDraftEditor\">\nimport { computed, inject, ref, watchEffect } from 'vue';\nimport type * as monaco from 'monaco-editor';\n\nimport { TMagicButton, tMagicMessage, tMagicMessageBox } from '@tmagic/design';\nimport { Id } from '@tmagic/schema';\nimport { datetimeFormatter } from '@tmagic/utils';\n\nimport MagicCodeEditor from '@editor/layouts/CodeEditor.vue';\nimport type { Services } from '@editor/type';\n\nconst props = withDefaults(\n defineProps<{\n /** 代码id */\n id: Id;\n /** 代码内容 */\n content: string;\n /** 是否可编辑 */\n editable?: boolean;\n /** 是否自动保存草稿 */\n autoSaveDraft?: boolean;\n /** 编辑器参数 */\n codeOptions?: Object;\n /** 编辑器语言 */\n language?: string;\n }>(),\n {\n editable: true,\n autoSaveDraft: true,\n },\n);\nconst emit = defineEmits(['close', 'saveAndClose']);\n\nconst services = inject<Services>('services');\n\nconst codeContent = ref<string>('');\nconst editorContent = ref<string>('');\nconst codeEditor = ref<InstanceType<typeof MagicCodeEditor>>();\n// 原始代码内容\nconst originCodeContent = ref<string>('');\nconst isFullScreen = ref<boolean>(false);\n\nconst codeOptions = computed(() => ({\n ...props.codeOptions,\n readOnly: !props.editable,\n}));\n\nwatchEffect(() => {\n codeContent.value = props.content;\n if (!originCodeContent.value) {\n // 暂存原始的代码内容\n originCodeContent.value = codeContent.value;\n }\n // 有草稿时展示上次保存的草稿内容\n const codeDraft = services?.codeBlockService.getCodeDraft(props.id);\n if (codeDraft) {\n codeContent.value = codeDraft;\n }\n});\n\n// 保存草稿\nconst saveCodeDraft = async (codeValue: string) => {\n if (!props.autoSaveDraft) return;\n if (originCodeContent.value === codeValue) {\n // 没修改或改回原样 有草稿的话删除草稿\n services?.codeBlockService.removeCodeDraft(props.id);\n return;\n }\n services?.codeBlockService.setCodeDraft(props.id, codeValue);\n tMagicMessage.success(`代码草稿成功保存到本地 ${datetimeFormatter(new Date())}`);\n};\n\n// 保存并关闭\nconst saveAndClose = (): void => {\n if (!codeEditor.value || !props.editable) return;\n // 代码内容\n editorContent.value = (codeEditor.value.getEditor() as monaco.editor.IStandaloneCodeEditor)?.getValue();\n emit('saveAndClose', editorContent.value);\n};\n\n// 关闭弹窗\nconst close = async (): Promise<void> => {\n const codeDraft = services?.codeBlockService.getCodeDraft(props.id);\n if (codeDraft) {\n try {\n await tMagicMessageBox.confirm('您有代码修改未保存,是否保存后再关闭?', '提示', {\n confirmButtonText: '保存并关闭',\n cancelButtonText: '直接关闭',\n type: 'warning',\n distinguishCancelAndClose: true,\n });\n\n // 保存之后再关闭\n saveAndClose();\n } catch (action: any) {\n if (action === 'cancel') {\n // 删除草稿 直接关闭\n services?.codeBlockService.removeCodeDraft(props.id);\n emit('close');\n }\n }\n } else {\n emit('close');\n }\n};\n\n// 切换全屏\nconst toggleFullScreen = (): void => {\n isFullScreen.value = !isFullScreen.value;\n if (codeEditor.value) {\n codeEditor.value.focus();\n }\n};\n\ndefineExpose({\n saveAndClose,\n close,\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorFunctionEditor',\n})\n</script>\n<template>\n <TMagicCard shadow=\"never\">\n <template #header>\n <div class=\"code-name-wrapper\">\n <div class=\"code-name-label\">代码块名称</div>\n <TMagicInput class=\"code-name-input\" v-model=\"codeName\" :disabled=\"!editable\" />\n </div>\n <div class=\"code-name-wrapper\">\n <div class=\"code-name-label\">参数</div>\n <m-form-table\n style=\"width: 800px\"\n :config=\"tableConfig\"\n :model=\"tableModel\"\n :enableToggleMode=\"false\"\n name=\"params\"\n prop=\"params\"\n size=\"small\"\n >\n </m-form-table>\n </div>\n </template>\n <CodeDraftEditor\n ref=\"codeDraftEditor\"\n :id=\"id\"\n :content=\"codeContent\"\n :editable=\"editable\"\n :autoSaveDraft=\"autoSaveDraft\"\n :codeOptions=\"codeOptions\"\n language=\"javascript\"\n @saveAndClose=\"saveAndClose\"\n @close=\"close\"\n ></CodeDraftEditor>\n </TMagicCard>\n</template>\n<script lang=\"ts\" setup name=\"MEditorFunctionEditor\">\nimport { inject, ref, watchEffect } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport { TMagicCard, TMagicInput, tMagicMessage } from '@tmagic/design';\nimport { ColumnConfig, TableConfig } from '@tmagic/form';\nimport { CodeParam, Id } from '@tmagic/schema';\n\nimport type { Services } from '@editor/type';\n\nimport CodeDraftEditor from './CodeDraftEditor.vue';\nconst defaultParamColConfig: ColumnConfig = {\n type: 'row',\n label: '参数类型',\n items: [\n {\n text: '参数类型',\n labelWidth: '70px',\n type: 'select',\n name: 'type',\n options: [\n {\n text: '数字',\n label: '数字',\n value: 'number',\n },\n {\n text: '字符串',\n label: '字符串',\n value: 'text',\n },\n ],\n },\n ],\n};\n\nconst props = withDefaults(\n defineProps<{\n /** 代码块id */\n id: Id;\n /** 代码块名称 */\n name: string;\n /** 代码内容 */\n content: string;\n /** 是否可编辑 */\n editable?: boolean;\n /** 是否自动保存草稿 */\n autoSaveDraft?: boolean;\n /** 编辑器扩展参数 */\n codeOptions?: object;\n /** 代码参数扩展配置 */\n paramsColConfig?: ColumnConfig;\n }>(),\n {\n editable: true,\n autoSaveDraft: true,\n },\n);\n\nconst paramsColConfig = props.paramsColConfig || defaultParamColConfig;\n\nconst tableConfig: TableConfig = {\n type: 'table',\n border: true,\n enableFullscreen: false,\n name: 'params',\n maxHeight: '300px',\n dropSort: false,\n items: [\n {\n type: 'text',\n label: '参数名',\n name: 'name',\n width: 200,\n },\n {\n type: 'text',\n label: '参数注释',\n name: 'tip',\n width: 200,\n },\n paramsColConfig,\n ],\n};\n\nconst services = inject<Services>('services');\n\nconst codeName = ref<string>('');\nconst codeContent = ref<string>('');\nconst evalRes = ref(true);\n\nconst tableModel = ref<{ params: CodeParam[] }>();\nwatchEffect(() => {\n codeName.value = props.name;\n codeContent.value = props.content;\n});\n\nconst initTableModel = (): void => {\n const codeDsl = cloneDeep(services?.codeBlockService.getCodeDsl());\n if (!codeDsl) return;\n tableModel.value = {\n params: codeDsl[props.id]?.params || [],\n };\n};\n\ninitTableModel();\n\n// 保存前钩子\nconst beforeSave = (codeValue: string): boolean => {\n try {\n // eval检测js代码是否存在语法错误\n // eslint-disable-next-line no-eval\n eval(codeValue);\n return true;\n } catch (e: any) {\n tMagicMessage.error(e.stack);\n return false;\n }\n};\n\n// 保存代码\nconst saveCode = async (codeValue: string): Promise<void> => {\n if (!props.editable) return;\n evalRes.value = beforeSave(codeValue);\n if (evalRes.value) {\n // 存入dsl\n await services?.codeBlockService.setCodeDslById(props.id, {\n name: codeName.value,\n content: codeValue,\n params: tableModel.value?.params || [],\n });\n tMagicMessage.success('代码成功保存到本地');\n // 删除草稿\n services?.codeBlockService.removeCodeDraft(props.id);\n }\n};\n\n// 保存并关闭\nconst saveAndClose = async (codeValue: string): Promise<void> => {\n await saveCode(codeValue);\n if (evalRes.value) {\n close();\n }\n};\n\n// 关闭弹窗\nconst close = (): void => {\n services?.codeBlockService.setCodeEditorShowStatus(false);\n};\n\nconst codeDraftEditor = ref<InstanceType<typeof CodeDraftEditor>>();\n\ndefineExpose({\n codeDraftEditor,\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorCodeBlockEditor',\n})\n</script>\n<template>\n <TMagicDrawer\n class=\"code-editor-dialog\"\n :model-value=\"true\"\n :title=\"currentTitle\"\n :close-on-press-escape=\"true\"\n :append-to-body=\"true\"\n :show-close=\"false\"\n :close-on-click-modal=\"true\"\n :size=\"size\"\n :before-close=\"handleClose\"\n >\n <Layout v-model:left=\"left\" :min-left=\"45\" class=\"code-editor-layout\">\n <!-- 右侧区域 -->\n <template #center>\n <div v-if=\"!isEmpty(codeConfig)\" class=\"m-editor-code-block-editor-panel\">\n <slot name=\"code-block-edit-panel-header\" :id=\"id\"></slot>\n <FunctionEditor\n ref=\"functionEditor\"\n v-if=\"codeConfig\"\n :id=\"id\"\n :name=\"codeConfig.name\"\n :content=\"codeConfig.content\"\n :paramsColConfig=\"paramsColConfig\"\n :editable=\"!!editable\"\n :autoSaveDraft=\"true\"\n :codeOptions=\"codeOptions\"\n ></FunctionEditor>\n </div>\n </template>\n </Layout>\n </TMagicDrawer>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorCodeBlockEditor\">\nimport { computed, inject, reactive, ref, watchEffect } from 'vue';\nimport { cloneDeep, forIn, isEmpty } from 'lodash-es';\n\nimport { TMagicDrawer } from '@tmagic/design';\nimport { ColumnConfig } from '@tmagic/form';\nimport { CodeBlockContent } from '@tmagic/schema';\n\nimport FunctionEditor from '@editor/components/FunctionEditor.vue';\nimport Layout from '@editor/components/Layout.vue';\nimport type { ListState, Services } from '@editor/type';\nimport { serializeConfig } from '@editor/utils/editor';\n\nconst services = inject<Services>('services');\nconst codeOptions = inject('codeOptions', {});\n\ndefineProps<{\n paramsColConfig?: ColumnConfig;\n}>();\n\nconst size = computed(() => globalThis.document.body.clientWidth - (services?.uiService.get('columnWidth').left || 0));\n\nconst left = ref(200);\nconst currentTitle = ref('');\n// 编辑器当前需展示的代码块内容\nconst codeConfig = ref<CodeBlockContent | null>(null);\n// select选择的内容(ListState)\nconst state = reactive<ListState>({\n codeList: [],\n});\n\nconst id = computed(() => services?.codeBlockService.getId() || '');\nconst editable = computed(() => services?.codeBlockService.getEditStatus());\n// 当前选中组件绑定的代码块id数组\nconst selectedIds = computed(() => services?.codeBlockService.getCombineIds() || []);\n\nwatchEffect(async () => {\n codeConfig.value = cloneDeep(await services?.codeBlockService.getCodeContentById(id.value)) || null;\n if (!codeConfig.value) return;\n codeConfig.value.content = serializeConfig(codeConfig.value.content);\n});\n\nwatchEffect(async () => {\n const codeDsl = (await services?.codeBlockService.getCodeDslByIds(selectedIds.value)) || null;\n if (!codeDsl) return;\n state.codeList = [];\n forIn(codeDsl, (value: CodeBlockContent, key: string) => {\n state.codeList.push({\n id: key,\n name: value.name,\n });\n });\n currentTitle.value = state.codeList[0]?.name || '';\n});\n\nconst functionEditor = ref<InstanceType<typeof FunctionEditor>>();\n\nconst handleClose = async () => {\n // 触发codeDraftEditor组件关闭事件\n await functionEditor.value?.codeDraftEditor?.close();\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorCodeBlockList',\n})\n</script>\n<template>\n <TMagicScrollbar class=\"m-editor-code-block-list m-editor-dep-list-panel\">\n <slot name=\"code-block-panel-header\">\n <div class=\"search-wrapper\">\n <SearchInput @search=\"filterTextChangeHandler\"></SearchInput>\n <TMagicButton class=\"create-code-button\" type=\"primary\" size=\"small\" @click=\"createCodeBlock\" v-if=\"editable\"\n >新增</TMagicButton\n >\n </div>\n </slot>\n\n <!-- 代码块列表 -->\n <TMagicTree\n ref=\"tree\"\n class=\"magic-editor-layer-tree\"\n node-key=\"id\"\n empty-text=\"暂无代码块\"\n :default-expanded-keys=\"expandedKeys\"\n :expand-on-click-node=\"false\"\n :data=\"codeList\"\n :highlight-current=\"true\"\n :filter-node-method=\"filterNode\"\n @node-click=\"clickHandler\"\n >\n <template #default=\"{ data }\">\n <div :id=\"data.id\" class=\"list-container\">\n <div class=\"list-item\">\n <CodeIcon v-if=\"data.type === 'code'\" class=\"codeIcon\"></CodeIcon>\n <AppManageIcon v-if=\"data.type === 'node'\" class=\"compIcon\"></AppManageIcon>\n <span class=\"name\" :class=\"{ code: data.type === 'code', hook: data.type === 'key' }\"\n >{{ data.name }} ({{ data.id }})</span\n >\n <!-- 右侧工具栏 -->\n <div class=\"right-tool\" v-if=\"data.type === 'code'\">\n <TMagicTooltip effect=\"dark\" :content=\"editable ? '编辑' : '查看'\" placement=\"bottom\">\n <Icon :icon=\"editable ? Edit : View\" class=\"edit-icon\" @click.stop=\"editCode(`${data.id}`)\"></Icon>\n </TMagicTooltip>\n <TMagicTooltip effect=\"dark\" content=\"删除\" placement=\"bottom\" v-if=\"editable\">\n <Icon :icon=\"Close\" class=\"edit-icon\" @click.stop=\"deleteCode(`${data.id}`)\"></Icon>\n </TMagicTooltip>\n <slot name=\"code-block-panel-tool\" :id=\"data.id\" :data=\"data.codeBlockContent\"></slot>\n </div>\n </div>\n </div>\n </template>\n </TMagicTree>\n\n <!-- 代码块编辑区 -->\n <CodeBlockEditor v-if=\"isShowCodeBlockEditor\" :paramsColConfig=\"paramsColConfig\">\n <template #code-block-edit-panel-header=\"{ id }\">\n <slot name=\"code-block-edit-panel-header\" :id=\"id\"></slot>\n </template>\n </CodeBlockEditor>\n </TMagicScrollbar>\n</template>\n\n<script setup lang=\"ts\" name=\"MEditorCodeBlockList\">\nimport { computed, inject, ref } from 'vue';\nimport { Close, Edit, View } from '@element-plus/icons-vue';\n\nimport { TMagicButton, tMagicMessage, TMagicScrollbar, TMagicTooltip, TMagicTree } from '@tmagic/design';\nimport { ColumnConfig } from '@tmagic/form';\nimport { CodeBlockContent, Id } from '@tmagic/schema';\n\nimport Icon from '@editor/components/Icon.vue';\nimport SearchInput from '@editor/components/SearchInput.vue';\nimport AppManageIcon from '@editor/icons/AppManageIcon.vue';\nimport CodeIcon from '@editor/icons/CodeIcon.vue';\nimport { CodeDeleteErrorType, CodeDslItem, Services } from '@editor/type';\n\nimport CodeBlockEditor from './CodeBlockEditor.vue';\n\nconst props = defineProps<{\n customError?: (id: Id, errorType: CodeDeleteErrorType) => any;\n paramsColConfig?: ColumnConfig;\n}>();\n\nconst { codeBlockService, depService, editorService } = inject<Services>('services') || {};\n\n// 代码块列表\nconst codeList = computed(() =>\n Object.values(depService?.targets['code-block'] || {}).map((target) => {\n // 组件节点\n const compNodes = Object.entries(target.deps).map(([id, dep]) => ({\n name: dep.name,\n type: 'node',\n id,\n children: dep.keys.map((key) => ({ name: key, id: key, type: 'key' })),\n }));\n return {\n id: target.id,\n name: target.name,\n type: 'code',\n codeBlockContent: codeBlockService?.getCodeContentById(target.id),\n children: compNodes,\n };\n }),\n);\n\n// 默认展开组件层级的节点\nconst expandedKeys = computed(() => codeList.value.map((item) => item.id));\n\nconst editable = computed(() => codeBlockService?.getEditStatus());\n\n// 是否展示代码编辑区\nconst isShowCodeBlockEditor = computed(() => codeBlockService?.getCodeEditorShowStatus() || false);\n\n// 新增代码块\nconst createCodeBlock = async () => {\n if (!codeBlockService) {\n tMagicMessage.error('新增代码块失败');\n return;\n }\n\n const codeConfig: CodeBlockContent = {\n name: '代码块',\n content: `({app, params}) => {\\n // place your code here\\n}`,\n params: [],\n };\n\n const id = await codeBlockService.getUniqueId();\n\n await codeBlockService.setCodeDslById(id, codeConfig);\n codeBlockService.setCodeEditorContent(true, id);\n};\n\n// 编辑代码块\nconst editCode = async (key: Id) => {\n codeBlockService?.setCodeEditorContent(true, key);\n};\n\n// 删除代码块\nconst deleteCode = (key: Id) => {\n const currentCode = codeList.value.find((codeItem) => codeItem.id === key);\n const existBinds = Boolean(currentCode?.children.length);\n const undeleteableList = codeBlockService?.getUndeletableList() || [];\n if (!existBinds && !undeleteableList.includes(key)) {\n // 无绑定关系,且不在不可删除列表中\n codeBlockService?.deleteCodeDslByIds([key]);\n } else {\n if (typeof props.customError === 'function') {\n props.customError(key, existBinds ? CodeDeleteErrorType.BIND : CodeDeleteErrorType.UNDELETEABLE);\n } else {\n tMagicMessage.error('代码块删除失败');\n }\n }\n};\n\nconst tree = ref<InstanceType<typeof TMagicTree>>();\n\nconst filterNode = (value: string, data: CodeDslItem): boolean => {\n if (!value) {\n return true;\n }\n return `${data.name}${data.id}`.toLocaleLowerCase().indexOf(value.toLocaleLowerCase()) !== -1;\n};\n\nconst filterTextChangeHandler = (val: string) => {\n tree.value?.filter(val);\n};\n\n// 选中组件\nconst selectComp = (compId: Id) => {\n const stage = editorService?.get('stage');\n editorService?.select(compId);\n stage?.select(compId);\n};\n\nconst clickHandler = (data: any, node: any) => {\n if (data.type === 'node') {\n selectComp(data.id);\n } else if (data.type === 'key') {\n selectComp(node.parent.data.id);\n }\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorComponentListPanel',\n})\n</script>\n<template>\n <TMagicScrollbar>\n <slot name=\"component-list-panel-header\"></slot>\n\n <TMagicCollapse class=\"ui-component-panel\" :model-value=\"collapseValue\">\n <SearchInput @search=\"filterTextChangeHandler\"></SearchInput>\n <template v-for=\"(group, index) in list\">\n <TMagicCollapseItem v-if=\"group.items && group.items.length\" :key=\"index\" :name=\"`${index}`\">\n <template #title><MIcon :icon=\"Grid\"></MIcon>{{ group.title }}</template>\n <div\n v-for=\"item in group.items\"\n class=\"component-item\"\n draggable=\"true\"\n :key=\"item.type\"\n @click=\"appendComponent(item)\"\n @dragstart=\"dragstartHandler(item, $event)\"\n @dragend=\"dragendHandler\"\n @drag=\"dragHandler\"\n >\n <slot name=\"component-list-item\" :component=\"item\">\n <MIcon :icon=\"item.icon\"></MIcon>\n\n <TMagicTooltip effect=\"dark\" placement=\"bottom\" :content=\"item.text\">\n <span>{{ item.text }}</span>\n </TMagicTooltip>\n </slot>\n </div>\n </TMagicCollapseItem>\n </template>\n </TMagicCollapse>\n </TMagicScrollbar>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorComponentListPanel\">\nimport { computed, inject, ref } from 'vue';\nimport { Grid } from '@element-plus/icons-vue';\nimport serialize from 'serialize-javascript';\n\nimport { TMagicCollapse, TMagicCollapseItem, TMagicScrollbar, TMagicTooltip } from '@tmagic/design';\nimport { removeClassNameByClassName } from '@tmagic/utils';\n\nimport MIcon from '@editor/components/Icon.vue';\nimport SearchInput from '@editor/components/SearchInput.vue';\nimport type { ComponentGroup, ComponentItem, Services, StageOptions } from '@editor/type';\n\nconst searchText = ref('');\n\nconst filterTextChangeHandler = (v: string) => {\n searchText.value = v;\n};\n\nconst services = inject<Services>('services');\nconst stageOptions = inject<StageOptions>('stageOptions');\n\nconst stage = computed(() => services?.editorService.get('stage'));\nconst list = computed(() =>\n services?.componentListService.getList().map((group: ComponentGroup) => ({\n ...group,\n items: group.items.filter((item: ComponentItem) => item.text.includes(searchText.value)),\n })),\n);\nconst collapseValue = computed(() =>\n Array(list.value?.length)\n .fill(1)\n .map((x, i) => `${i}`),\n);\n\nlet timeout: NodeJS.Timeout | undefined;\nlet clientX: number;\nlet clientY: number;\n\nconst appendComponent = ({ text, type, data = {} }: ComponentItem): void => {\n services?.editorService.add({\n name: text,\n type,\n ...data,\n });\n};\n\nconst dragstartHandler = ({ text, type, data = {} }: ComponentItem, e: DragEvent) => {\n if (e.dataTransfer) {\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData(\n 'data',\n serialize({\n name: text,\n type,\n ...data,\n }).replace(/\"(\\w+)\":\\s/g, '$1: '),\n );\n }\n};\n\nconst dragendHandler = () => {\n if (timeout) {\n globalThis.clearTimeout(timeout);\n timeout = undefined;\n }\n const doc = stage.value?.renderer.contentWindow?.document;\n if (doc && stageOptions) {\n removeClassNameByClassName(doc, stageOptions.containerHighlightClassName);\n }\n clientX = 0;\n clientY = 0;\n};\n\nconst dragHandler = (e: DragEvent) => {\n if (e.clientX !== clientX || e.clientY !== clientY) {\n clientX = e.clientX;\n clientY = e.clientY;\n if (timeout) {\n globalThis.clearTimeout(timeout);\n timeout = undefined;\n }\n return;\n }\n\n if (timeout || !stage.value) return;\n\n timeout = stage.value.getAddContainerHighlightClassNameTimeout(e);\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorContentMenu',\n})\n</script>\n<template>\n <div v-if=\"menuData.length\" v-show=\"visible\" class=\"magic-editor-content-menu\" ref=\"menu\" :style=\"menuStyle\">\n <div>\n <ToolButton\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 ></ToolButton>\n </div>\n <teleport to=\"body\">\n <content-menu\n class=\"sub-menu\"\n ref=\"subMenu\"\n :menu-data=\"subMenuData\"\n :is-sub-menu=\"true\"\n @hide=\"hide\"\n ></content-menu>\n </teleport>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorContentMenu\">\nimport { nextTick, onMounted, onUnmounted, ref } from 'vue';\n\nimport { MenuButton, MenuComponent } from '@editor/type';\n\nimport ToolButton from './ToolButton.vue';\n\nconst props = withDefaults(\n defineProps<{\n menuData?: (MenuButton | MenuComponent)[];\n isSubMenu?: boolean;\n }>(),\n {\n menuData: () => [],\n isSubMenu: false,\n },\n);\n\nconst emit = defineEmits(['hide', 'show']);\n\nconst menu = ref<HTMLDivElement>();\nconst subMenu = ref<any>();\nconst visible = ref(false);\nconst subMenuData = ref<(MenuButton | MenuComponent)[]>([]);\nconst menuStyle = ref({\n left: '0',\n top: '0',\n});\n\nconst hide = () => {\n if (!visible.value) return;\n\n visible.value = false;\n subMenu.value?.hide();\n\n emit('hide');\n};\n\nconst hideHandler = (e: MouseEvent) => {\n const target = e.target as HTMLElement | undefined;\n if (!visible.value || !target) {\n return;\n }\n if (menu.value?.contains(target) || subMenu.value?.$el?.contains(target)) {\n return;\n }\n hide();\n};\n\nconst show = (e: MouseEvent) => {\n // 加settimeout是以为,如果菜单中的按钮监听的是mouseup,那么菜单显示出来时鼠标如果正好在菜单上就会马上触发按钮的mouseup\n setTimeout(() => {\n visible.value = true;\n\n nextTick(() => {\n const menuHeight = menu.value?.clientHeight || 0;\n\n let top = e.clientY;\n if (menuHeight + e.clientY > document.body.clientHeight) {\n top = document.body.clientHeight - menuHeight;\n }\n\n menuStyle.value = {\n top: `${top}px`,\n left: `${e.clientX}px`,\n };\n\n emit('show');\n });\n }, 300);\n};\n\nconst showSubMenu = (item: MenuButton | MenuComponent) => {\n const menuItem = item as MenuButton;\n if (typeof item !== 'object' || !menuItem.items?.length) {\n return;\n }\n\n subMenuData.value = menuItem.items;\n if (menu.value) {\n subMenu.value.show({\n clientX: menu.value.offsetLeft + menu.value.clientWidth,\n clientY: menu.value.offsetTop,\n });\n }\n};\n\nonMounted(() => {\n if (props.isSubMenu) return;\n\n globalThis.addEventListener('mousedown', hideHandler, true);\n});\n\nonUnmounted(() => {\n if (props.isSubMenu) return;\n\n globalThis.removeEventListener('mousedown', hideHandler, true);\n});\n\ndefineExpose({\n hide,\n show,\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorLayerMenu',\n})\n</script>\n<template>\n <ContentMenu :menu-data=\"menuData\" ref=\"menu\" style=\"overflow: initial\"></ContentMenu>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorLayerMenu\">\nimport { computed, inject, markRaw, ref } from 'vue';\nimport { CopyDocument, Delete, Files, Plus } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport ContentMenu from '@editor/components/ContentMenu.vue';\nimport type { ComponentGroup, MenuButton, MenuComponent, Services } from '@editor/type';\n\nconst props = defineProps<{\n layerContentMenu: (MenuButton | MenuComponent)[];\n}>();\n\nconst services = inject<Services>('services');\nconst menu = ref<InstanceType<typeof ContentMenu>>();\nconst node = computed(() => services?.editorService.get('node'));\nconst isRoot = computed(() => node.value?.type === NodeType.ROOT);\nconst isPage = computed(() => node.value?.type === NodeType.PAGE);\nconst componentList = computed(() => services?.componentListService.getList() || []);\n\nconst 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\nconst 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\nconst menuData = computed<(MenuButton | MenuComponent)[]>(() => [\n {\n type: 'button',\n text: '新增',\n icon: markRaw(Plus),\n display: () => node.value?.items,\n items: getSubMenuData.value,\n },\n {\n type: 'button',\n text: '复制',\n icon: markRaw(CopyDocument),\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 ...props.layerContentMenu,\n]);\n\nconst show = (e: MouseEvent) => {\n menu.value?.show(e);\n};\n\ndefineExpose({\n show,\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorLayerPanel',\n})\n</script>\n<template>\n <TMagicScrollbar class=\"magic-editor-layer-panel\">\n <slot name=\"layer-panel-header\"></slot>\n\n <SearchInput @search=\"filterTextChangeHandler\"></SearchInput>\n\n <TMagicTree\n v-if=\"values.length\"\n class=\"magic-editor-layer-tree\"\n ref=\"tree\"\n node-key=\"id\"\n empty-text=\"页面空荡荡的\"\n draggable\n :default-expanded-keys=\"expandedKeys\"\n :default-checked-keys=\"checkedKeys\"\n :current-node-key=\"currentNodeKey\"\n :data=\"values\"\n :expand-on-click-node=\"false\"\n :highlight-current=\"!isMultiSelect\"\n :check-on-click-node=\"true\"\n :props=\"treeProps\"\n :filter-node-method=\"filterNode\"\n :allow-drop=\"allowDrop\"\n :show-checkbox=\"isMultiSelect\"\n @node-click=\"clickHandler\"\n @node-contextmenu=\"contextmenu\"\n @node-drag-end=\"handleDragEnd\"\n @node-collapse=\"handleCollapse\"\n @node-expand=\"handleExpand\"\n @check=\"checkHandler\"\n @mousedown=\"toggleClickFlag\"\n @mouseup=\"toggleClickFlag\"\n >\n <template #default=\"{ node, data }\">\n <div class=\"cus-tree-node\" :id=\"data.id\" @mouseenter=\"highlightHandler(data)\">\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 </TMagicTree>\n\n <Teleport to=\"body\">\n <LayerMenu ref=\"menu\" :layer-content-menu=\"layerContentMenu\"></LayerMenu>\n </Teleport>\n </TMagicScrollbar>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorLayerPanel\">\nimport { computed, inject, onMounted, onUnmounted, ref, watch } from 'vue';\nimport KeyController from 'keycon';\nimport { difference, throttle, union } from 'lodash-es';\n\nimport { TMagicScrollbar, TMagicTree } from '@tmagic/design';\nimport type { Id, MNode, MPage } from '@tmagic/schema';\nimport { MContainer, NodeType } from '@tmagic/schema';\nimport { getNodePath, isPage } from '@tmagic/utils';\n\nimport SearchInput from '@editor/components/SearchInput.vue';\nimport type { MenuButton, MenuComponent, Services } from '@editor/type';\nimport { Layout } from '@editor/type';\n\nimport LayerMenu from './LayerMenu.vue';\n\ndefineProps<{\n layerContentMenu: (MenuButton | MenuComponent)[];\n}>();\n\nconst throttleTime = 150;\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\n\nconst tree = ref<InstanceType<typeof TMagicTree>>();\nconst menu = ref<InstanceType<typeof LayerMenu>>();\n\n// 多选选中的组件id数组\nconst checkedKeys = ref<Id[]>([]);\n// 是否多选\nconst isCtrlKeyDown = ref(false);\n// 默认展开节点\nconst expandedKeys = ref<Id[]>([]);\nconst currentNodeKey = ref<Id>();\n// 鼠标是否按下标志,用于高亮状态互斥\nconst clicked = ref(false);\n\nconst treeProps = {\n children: 'items',\n disabled: (data: MNode) => Boolean(data.items?.length),\n class: (data: MNode) => {\n if (clicked.value || isPage(data)) return '';\n if (data.id === highlightNode?.value?.id && !checkedKeys.value.includes(data.id)) {\n return 'cus-tree-node-hover';\n }\n },\n};\n\nconst isMultiSelect = computed(() => isCtrlKeyDown.value || checkedKeys.value.length > 1);\n\nconst nodes = computed(() => editorService?.get('nodes') || []);\nconst page = computed(() => editorService?.get('page'));\nconst values = computed(() => (page.value ? [page.value] : []));\n// 高亮的节点\nconst highlightNode = computed(() => editorService?.get('highlightNode'));\n\n// 触发画布单选\nconst select = async (data: MNode) => {\n if (!data.id) {\n throw new Error('没有id');\n }\n\n await editorService?.select(data);\n editorService?.get('stage')?.select(data.id);\n};\n\n// 触发画布多选\nconst multiSelect = async (data: Id[]) => {\n await editorService?.multiSelect(data);\n editorService?.get('stage')?.multiSelect(data);\n};\n\n// 触发画布高亮\nconst highlight = (data: MNode) => {\n if (!data?.id) {\n throw new Error('没有id');\n }\n editorService?.highlight(data);\n editorService?.get('stage')?.highlight(data.id);\n};\n\n// tree方法:拖拽时判定目标节点能否成为拖动目标位置\nconst 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?.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// tree事件:拖拽结束时(可能未成功)触发的事件\nconst handleDragEnd = async (e: any) => {\n if (!tree.value) return;\n const { data: node } = e;\n const parent = editorService?.getParentById(node.id, false) as MContainer;\n const layout = await editorService?.getLayout(parent);\n node.style.position = layout;\n if (layout === Layout.RELATIVE) {\n node.style.top = 0;\n node.style.left = 0;\n }\n const data = tree.value.getData();\n const [page] = data as [MPage];\n editorService?.update(page);\n};\n\n// tree事件:节点被关闭时触发的事件\nconst handleCollapse = (data: MNode) => {\n expandedKeys.value = expandedKeys.value.filter((id) => id !== data.id);\n};\n\n// tree事件:节点被展开时触发的事件\nconst handleExpand = (data: MNode) => {\n if (!page.value) {\n expandedKeys.value = [];\n return;\n }\n\n expandedKeys.value = union(\n expandedKeys.value,\n getNodePath(data.id, [page.value]).map((node) => node.id),\n );\n};\n\n// tree方法:对树节点进行筛选时执行的方法\nconst 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// 过滤关键字\nconst filterTextChangeHandler = (val: string) => {\n tree.value?.filter(val);\n};\n\nwatch(nodes, (nodes) => {\n const ids = nodes?.map((node) => node.id) || [];\n\n const idsLength = ids.length;\n const checkedKeysLength = checkedKeys.value.length;\n\n if (\n difference(\n idsLength > checkedKeysLength ? ids : checkedKeys.value,\n idsLength > checkedKeysLength ? checkedKeys.value : ids,\n ).length\n ) {\n tree.value?.setCheckedKeys([], false);\n\n checkedKeys.value = ids.filter((id) => id !== page.value?.id);\n expandedKeys.value = union(expandedKeys.value, ids);\n }\n\n [currentNodeKey.value] = ids;\n\n setTimeout(() => {\n tree.value?.setCurrentKey(currentNodeKey.value);\n });\n});\n\nwatch(isMultiSelect, (isMultiSelect) => {\n if (!isMultiSelect) {\n currentNodeKey.value = editorService?.get('node')?.id;\n tree.value?.setCurrentKey(currentNodeKey.value);\n }\n});\n\nconst editorServiceRemoveHandler = () => {\n setTimeout(() => {\n tree.value?.getNode(editorService?.get('node')?.id)?.updateChildren();\n }, 0);\n};\n\nconst windowBlurHandler = () => {\n isCtrlKeyDown.value = false;\n};\n\nlet keycon: KeyController;\n\nonMounted(() => {\n editorService?.on('remove', editorServiceRemoveHandler);\n\n keycon = new KeyController();\n const isMac = /mac os x/.test(navigator.userAgent.toLowerCase());\n const ctrl = isMac ? 'meta' : 'ctrl';\n\n keycon\n .keydown((e) => {\n if (e.key !== ctrl) {\n isCtrlKeyDown.value = false;\n }\n })\n .keydown(ctrl, () => {\n isCtrlKeyDown.value = true;\n })\n .keyup(ctrl, () => {\n isCtrlKeyDown.value = false;\n });\n\n globalThis.addEventListener('blur', windowBlurHandler);\n});\n\nonUnmounted(() => {\n keycon.destroy();\n\n editorService?.off('remove', editorServiceRemoveHandler);\n globalThis.removeEventListener('blur', windowBlurHandler);\n});\n\n// 鼠标在组件树移动触发高亮\nconst highlightHandler = throttle((data: MNode) => {\n highlight(data);\n}, throttleTime);\n\nconst toggleClickFlag = () => {\n clicked.value = !clicked.value;\n};\n\n// 选择节点多选框\nconst checkHandler = (data: MNode, { checkedNodes }: any): void => {\n if (!isCtrlKeyDown.value && nodes.value.length < 2) {\n return;\n }\n if (checkedNodes.length > 0) {\n multiSelect(checkedNodes.map((node: MNode) => node.id));\n } else {\n multiSelect(nodes.value.map((node: MNode) => node.id));\n }\n};\n\n// 点击节点\nconst clickHandler = (data: MNode): void => {\n if (isCtrlKeyDown.value) {\n return;\n }\n if (services?.uiService.get('uiSelectMode')) {\n document.dispatchEvent(new CustomEvent('ui-select', { detail: data }));\n return;\n }\n select(data);\n};\n\n// 右键菜单\nconst contextmenu = async (event: MouseEvent, data: MNode): Promise<void> => {\n event.preventDefault();\n await select(data);\n menu.value?.show(event);\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorSidebar',\n})\n</script>\n<template>\n <component\n v-if=\"data.type === 'tabs' && data.items.length\"\n v-model=\"activeTabName\"\n class=\"m-editor-sidebar tmagic-design-tabs\"\n v-bind=\"tabsComponent.props({ type: 'card', tabPosition: 'left' })\"\n :is=\"tabsComponent.component\"\n >\n <component\n v-for=\"(config, index) in sideBarItems\"\n v-bind=\"tabPaneComponent.props({ name: config.text })\"\n :is=\"tabPaneComponent.component\"\n :key=\"config.$key || index\"\n >\n <template #label>\n <div :key=\"config.text\">\n <MIcon v-if=\"config.icon\" :icon=\"config.icon\"></MIcon>\n <div v-if=\"config.text\" class=\"magic-editor-tab-panel-title\">{{ config.text }}</div>\n </div>\n </template>\n\n <component v-if=\"config\" :is=\"config.component\" v-bind=\"config.props || {}\" v-on=\"config?.listeners || {}\">\n <template\n #component-list-panel-header\n v-if=\"config.$key === 'component-list' || config.slots?.componentListPanelHeader\"\n >\n <slot v-if=\"config.$key === 'component-list'\" name=\"component-list-panel-header\"></slot>\n <component v-else-if=\"config.slots?.componentListPanelHeader\" :is=\"config.slots.componentListPanelHeader\" />\n </template>\n\n <template\n #component-list-item=\"{ component }\"\n v-if=\"config.$key === 'component-list' || config.slots?.componentListItem\"\n >\n <slot v-if=\"config.$key === 'component-list'\" name=\"component-list-item\" :component=\"component\"></slot>\n <component\n v-else-if=\"config.slots?.componentListItem\"\n :is=\"config.slots.componentListItem\"\n :component=\"component\"\n />\n </template>\n\n <template #layer-panel-header v-if=\"config.$key === 'layer' || config.slots?.layerPanelHeader\">\n <slot v-if=\"config.$key === 'layer'\" name=\"layer-panel-header\"></slot>\n <component v-else-if=\"config.slots?.layerPanelHeader\" :is=\"config.slots.layerPanelHeader\" />\n </template>\n\n <template #code-block-panel-header v-if=\"config.$key === 'code-block' || config.slots?.codeBlockPanelHeader\">\n <slot v-if=\"config.$key === 'code-block'\" name=\"code-block-panel-header\"></slot>\n <component v-else-if=\"config.slots?.codeBlockPanelHeader\" :is=\"config.slots.codeBlockPanelHeader\" />\n </template>\n\n <template\n #code-block-panel-tool=\"{ id, data }\"\n v-if=\"config.$key === 'code-block' || config.slots?.codeBlockPanelTool\"\n >\n <slot v-if=\"config.$key === 'code-block'\" name=\"code-block-panel-tool\" :id=\"id\" :data=\"data\"></slot>\n <component v-else-if=\"config.slots?.codeBlockPanelTool\" :is=\"config.slots.codeBlockPanelTool\" />\n </template>\n\n <template\n #code-block-edit-panel-header=\"{ id }\"\n v-if=\"config.$key === 'code-block' || config.slots?.codeBlockEditPanelHeader\"\n >\n <slot v-if=\"config.$key === 'code-block'\" name=\"code-block-edit-panel-header\" :id=\"id\"></slot>\n <component v-else-if=\"config.slots?.codeBlockEditPanelHeader\" :is=\"config.slots.codeBlockEditPanelHeader\" />\n </template>\n\n <template\n #layer-node-content=\"{ data: nodeData, node }\"\n v-if=\"config.$key === 'layer' || config.slots?.layerNodeContent\"\n >\n <slot v-if=\"config.$key === 'layer'\" name=\"layer-node-content\" :data=\"nodeData\" :node=\"node\"></slot>\n <component\n v-else-if=\"config.slots?.layerNodeContent\"\n :is=\"config.slots.layerNodeContent\"\n :data=\"nodeData\"\n :node=\"node\"\n />\n </template>\n </component>\n </component>\n </component>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorSidebar\">\nimport { computed, ref, watch } from 'vue';\nimport { Coin, EditPen, Files } from '@element-plus/icons-vue';\n\nimport { getConfig } from '@tmagic/design';\n\nimport MIcon from '@editor/components/Icon.vue';\nimport type { MenuButton, MenuComponent, SideComponent, SideItem } from '@editor/type';\nimport { SideBarData } from '@editor/type';\n\nimport CodeBlockList from './code-block/CodeBlockList.vue';\nimport ComponentListPanel from './ComponentListPanel.vue';\nimport LayerPanel from './LayerPanel.vue';\n\nconst props = withDefaults(\n defineProps<{\n data?: SideBarData;\n layerContentMenu: (MenuButton | MenuComponent)[];\n }>(),\n {\n data: () => ({ type: 'tabs', status: '组件', items: ['component-list', 'layer', 'code-block'] }),\n },\n);\n\nconst tabPaneComponent = getConfig('components').tabPane;\nconst tabsComponent = getConfig('components').tabs;\n\nconst activeTabName = ref(props.data?.status);\n\nconst getItemConfig = (data: SideItem): SideComponent => {\n const map: Record<string, SideComponent> = {\n 'component-list': {\n $key: 'component-list',\n type: 'component',\n icon: Coin,\n text: '组件',\n component: ComponentListPanel,\n slots: {},\n },\n layer: {\n $key: 'layer',\n type: 'component',\n icon: Files,\n text: '已选组件',\n props: {\n layerContentMenu: props.layerContentMenu,\n },\n component: LayerPanel,\n slots: {},\n },\n 'code-block': {\n $key: 'code-block',\n type: 'component',\n icon: EditPen,\n text: '代码编辑',\n component: CodeBlockList,\n slots: {},\n },\n };\n\n return typeof data === 'string' ? map[data] : data;\n};\n\nconst sideBarItems = computed(() => props.data.items.map((item) => getItemConfig(item)));\n\nwatch(\n () => props.data.status,\n (status) => {\n activeTabName.value = status || '0';\n },\n);\n\ndefineExpose({\n activeTabName,\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorBreadcrumb',\n})\n</script>\n<template>\n <div v-if=\"nodes.length === 1\" class=\"m-editor-breadcrumb\">\n <template v-for=\"(item, index) in path\" :key=\"item.id\">\n <TMagicButton text :disabled=\"item.id === node?.id\" @click=\"select(item)\">{{ item.name }}</TMagicButton\n ><span v-if=\"index < path.length - 1\">/</span>\n </template>\n </div>\n</template>\n\n<script setup lang=\"ts\" name=\"MEditorBreadcrumb\">\nimport { computed, inject } from 'vue';\n\nimport { TMagicButton } from '@tmagic/design';\nimport type { MNode } from '@tmagic/schema';\nimport { getNodePath } from '@tmagic/utils';\n\nimport type { Services } from '@editor/type';\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\n\nconst node = computed(() => editorService?.get('node'));\nconst nodes = computed(() => editorService?.get('nodes') || []);\nconst root = computed(() => editorService?.get('root'));\nconst path = computed(() => getNodePath(node.value?.id || '', root.value?.items || []));\n\nconst select = async (node: MNode) => {\n await editorService?.select(node);\n editorService?.get('stage')?.select(node.id);\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorPageBarScrollContainer',\n})\n</script>\n<template>\n <div class=\"m-editor-page-bar\" ref=\"pageBar\">\n <div\n v-if=\"showAddPageButton\"\n id=\"m-editor-page-bar-add-icon\"\n class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\"\n @click=\"addPage\"\n >\n <Icon :icon=\"Plus\"></Icon>\n </div>\n <div v-else style=\"width: 21px\"></div>\n <div v-if=\"canScroll\" class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\" @click=\"scroll('left')\">\n <Icon :icon=\"ArrowLeftBold\"></Icon>\n </div>\n <div\n v-if=\"pageLength\"\n class=\"m-editor-page-bar-items\"\n ref=\"itemsContainer\"\n :style=\"`width: ${itemsContainerWidth}px`\"\n >\n <slot></slot>\n </div>\n <div v-if=\"canScroll\" class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\" @click=\"scroll('right')\">\n <Icon :icon=\"ArrowRightBold\"></Icon>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\" name=\"MEditorPageBarScrollContainer\">\nimport { computed, inject, nextTick, onMounted, onUnmounted, ref, toRaw, watch } from 'vue';\nimport { ArrowLeftBold, ArrowRightBold, Plus } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport Icon from '@editor/components/Icon.vue';\nimport type { Services } from '@editor/type';\nimport { generatePageNameByApp } from '@editor/utils/editor';\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\nconst uiService = services?.uiService;\n\nconst itemsContainer = ref<HTMLDivElement>();\nconst canScroll = ref(false);\n\nconst showAddPageButton = computed(() => uiService?.get('showAddPageButton'));\n\nconst itemsContainerWidth = ref(0);\n\nconst setCanScroll = () => {\n // 减去新增、左移、右移三个按钮的宽度\n // 37 = icon width 16 + padding 10 * 2 + border-right 1\n itemsContainerWidth.value = (pageBar.value?.clientWidth || 0) - 37 * 2 - (showAddPageButton.value ? 37 : 21);\n\n nextTick(() => {\n if (itemsContainer.value) {\n canScroll.value = itemsContainer.value.scrollWidth - itemsContainerWidth.value > 1;\n }\n });\n};\n\nconst resizeObserver = new ResizeObserver(() => {\n setCanScroll();\n});\n\nconst pageBar = ref<HTMLDivElement>();\nonMounted(() => {\n pageBar.value && resizeObserver.observe(pageBar.value);\n});\n\nonUnmounted(() => {\n resizeObserver.disconnect();\n});\n\nlet translateLeft = 0;\n\nconst scroll = (type: 'left' | 'right' | 'start' | 'end') => {\n if (!itemsContainer.value) return;\n\n const maxScrollLeft = itemsContainer.value.scrollWidth - itemsContainerWidth.value;\n\n if (type === 'left') {\n translateLeft += 100;\n\n if (translateLeft > 0) {\n translateLeft = 0;\n }\n } else if (type === 'right') {\n translateLeft -= 100;\n\n if (-translateLeft > maxScrollLeft) {\n translateLeft = -maxScrollLeft;\n }\n } else if (type === 'start') {\n translateLeft = 0;\n } else if (type === 'end') {\n translateLeft = -maxScrollLeft;\n }\n\n itemsContainer.value.style.transform = `translate(${translateLeft}px, 0px)`;\n};\n\nconst pageLength = computed(() => editorService?.get('pageLength'));\n\nwatch(pageLength, (length = 0, preLength = 0) => {\n setTimeout(() => {\n setCanScroll();\n if (length < preLength) {\n scroll('start');\n } else {\n scroll('end');\n }\n });\n});\n\nconst addPage = () => {\n if (!editorService) return;\n const root = toRaw(editorService.get('root'));\n if (!root) throw new Error('root 不能为空');\n const pageConfig = {\n type: NodeType.PAGE,\n name: generatePageNameByApp(root),\n };\n editorService.add(pageConfig);\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorPageBar',\n})\n</script>\n<template>\n <PageBarScrollContainer>\n <div\n v-for=\"item in (root && root.items) || []\"\n class=\"m-editor-page-bar-item\"\n :key=\"item.key\"\n :class=\"{ active: page?.id === item.id }\"\n @click=\"switchPage(item)\"\n >\n <div class=\"m-editor-page-bar-title\">\n <slot name=\"page-bar-title\" :page=\"item\">\n <TMagicTooltip effect=\"dark\" placement=\"top-start\" :content=\"item.name\">\n <span>{{ item.name || item.id }}</span>\n </TMagicTooltip>\n </slot>\n </div>\n\n <TMagicPopover popper-class=\"page-bar-popover\" placement=\"top\" :width=\"160\" trigger=\"hover\">\n <div>\n <slot name=\"page-bar-popover\" :page=\"item\">\n <ToolButton\n :data=\"{\n type: 'button',\n text: '复制',\n icon: DocumentCopy,\n handler: () => copy(item),\n }\"\n ></ToolButton>\n <ToolButton\n :data=\"{\n type: 'button',\n text: '删除',\n icon: Delete,\n handler: () => remove(item),\n }\"\n ></ToolButton>\n </slot>\n </div>\n <template #reference>\n <TMagicIcon class=\"m-editor-page-bar-menu-icon\">\n <CaretBottom></CaretBottom>\n </TMagicIcon>\n </template>\n </TMagicPopover>\n </div>\n </PageBarScrollContainer>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorPageBar\">\nimport { computed, inject } from 'vue';\nimport { CaretBottom, Delete, DocumentCopy } from '@element-plus/icons-vue';\n\nimport { TMagicIcon, TMagicPopover, TMagicTooltip } from '@tmagic/design';\nimport type { MPage } from '@tmagic/schema';\n\nimport ToolButton from '@editor/components/ToolButton.vue';\nimport type { Services } from '@editor/type';\n\nimport PageBarScrollContainer from './PageBarScrollContainer.vue';\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\n\nconst root = computed(() => editorService?.get('root'));\n\nconst page = computed(() => editorService?.get('page'));\n\nconst switchPage = (page: MPage) => {\n editorService?.select(page);\n};\n\nconst copy = (node: MPage) => {\n node && editorService?.copy(node);\n editorService?.paste({\n left: 0,\n top: 0,\n });\n};\n\nconst remove = (node: MPage) => {\n editorService?.remove(node);\n};\n</script>\n","import { EventEmitter } from 'events';\n\ninterface ScrollViewerOptions {\n container: HTMLDivElement;\n target: HTMLDivElement;\n zoom: number;\n correctionScrollSize?: {\n width: number;\n height: number;\n };\n}\n\nexport class ScrollViewer extends EventEmitter {\n private container: HTMLDivElement;\n private target: HTMLDivElement;\n private zoom = 1;\n\n private scrollLeft = 0;\n private scrollTop = 0;\n\n private scrollHeight = 0;\n private scrollWidth = 0;\n\n private width = 0;\n private height = 0;\n\n private translateXCorrectionValue = 0;\n private translateYCorrectionValue = 0;\n\n private correctionScrollSize = {\n width: 0,\n height: 0,\n };\n\n private resizeObserver = new ResizeObserver(() => {\n this.setSize();\n this.setScrollSize();\n });\n\n constructor(options: ScrollViewerOptions) {\n super();\n\n this.container = options.container;\n this.target = options.target;\n this.zoom = options.zoom;\n\n if (this.correctionScrollSize) {\n this.correctionScrollSize = {\n ...this.correctionScrollSize,\n ...options.correctionScrollSize,\n };\n }\n\n this.container.addEventListener('wheel', this.wheelHandler, false);\n\n this.setSize();\n this.setScrollSize();\n this.resizeObserver.observe(this.container);\n this.resizeObserver.observe(this.target);\n }\n\n public destroy() {\n this.resizeObserver.disconnect();\n this.container.removeEventListener('wheel', this.wheelHandler, false);\n this.removeAllListeners();\n }\n\n public setZoom(zoom: number) {\n this.zoom = zoom;\n this.setScrollSize();\n }\n\n public scrollTo({ left, top }: { left?: number; top?: number }) {\n if (typeof left !== 'undefined') {\n this.scrollLeft = left;\n }\n\n if (typeof top !== 'undefined') {\n this.scrollTop = top;\n }\n\n const translateX = -this.scrollLeft + this.translateXCorrectionValue;\n const translateY = -this.scrollTop + this.translateYCorrectionValue;\n this.target.style.transform = `translate(${translateX}px, ${translateY}px)`;\n }\n\n private wheelHandler = (event: WheelEvent) => {\n const { deltaX, deltaY, currentTarget } = event;\n\n if (currentTarget !== this.container) return;\n\n let top: number | undefined;\n if (this.scrollHeight > this.height) {\n top = this.scrollTop + this.getPos(deltaY, this.scrollTop, this.scrollHeight, this.height);\n }\n\n let left: number | undefined;\n if (this.scrollWidth > this.width) {\n left = this.scrollLeft + this.getPos(deltaX, this.scrollLeft, this.scrollWidth, this.width);\n }\n\n this.scrollTo({ left, top });\n this.emit('scroll', {\n scrollLeft: this.scrollLeft,\n scrollTop: this.scrollTop,\n scrollHeight: this.scrollHeight,\n scrollWidth: this.scrollWidth,\n });\n };\n\n private getPos(delta: number, scrollPos: number, scrollSize: number, size: number) {\n let pos = 0;\n if (delta < 0) {\n if (scrollPos > 0) {\n pos = Math.max(delta, -scrollPos);\n }\n } else {\n const leftPos = scrollSize - size - scrollPos;\n if (leftPos > 0) {\n pos = Math.min(delta, leftPos);\n }\n }\n return pos;\n }\n\n private setScrollSize = () => {\n const targetRect = this.target.getBoundingClientRect();\n this.scrollWidth = targetRect.width * this.zoom + this.correctionScrollSize.width;\n const targetMarginTop = Number(this.target.style.marginTop) || 0;\n this.scrollHeight = (targetRect.height + targetMarginTop) * this.zoom + this.correctionScrollSize.height;\n\n let left: number | undefined;\n let top: number | undefined;\n if (this.scrollWidth < this.width) {\n left = 0;\n this.translateXCorrectionValue = 0;\n } else {\n this.translateXCorrectionValue = (this.scrollWidth - this.width) / 2;\n }\n if (this.scrollHeight < this.height) {\n top = 0;\n this.translateYCorrectionValue = 0;\n } else {\n this.translateYCorrectionValue = (this.scrollHeight - this.height) / 2;\n }\n\n this.scrollTo({\n left,\n top,\n });\n\n this.emit('scroll', {\n scrollLeft: this.scrollLeft,\n scrollTop: this.scrollTop,\n scrollHeight: this.scrollHeight,\n scrollWidth: this.scrollWidth,\n });\n };\n\n private setSize = () => {\n const { width, height } = this.container.getBoundingClientRect();\n this.width = width;\n this.height = height;\n };\n}\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorScrollBar',\n})\n</script>\n<template>\n <div ref=\"bar\" class=\"m-editor-scroll-bar\" :class=\"isHorizontal ? 'horizontal' : 'vertical'\">\n <div ref=\"thumb\" class=\"m-editor-scroll-bar-thumb\" :style=\"thumbStyle\"></div>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorScrollBar\">\nimport { computed, onMounted, onUnmounted, ref } from 'vue';\nimport Gesto from 'gesto';\n\nconst props = defineProps<{\n size: number;\n scrollSize: number;\n isHorizontal?: boolean;\n pos: number;\n}>();\n\nconst emit = defineEmits(['scroll']);\n\nconst bar = ref<HTMLDivElement>();\nconst thumb = ref<HTMLDivElement>();\n\nconst thumbSize = computed(() => props.size * (props.size / props.scrollSize));\nconst thumbPos = computed(() => (props.pos / props.scrollSize) * props.size);\n\nconst thumbStyle = computed(() => ({\n [props.isHorizontal ? 'width' : 'height']: `${thumbSize.value}px`,\n transform: `translate${props.isHorizontal ? 'X' : 'Y'}(${thumbPos.value}px)`,\n}));\n\nlet gesto: Gesto;\n\nonMounted(() => {\n if (!thumb.value) return;\n const thumbEl = thumb.value;\n gesto = new Gesto(thumbEl, {\n container: window,\n });\n\n gesto\n .on('dragStart', (e) => {\n e.inputEvent.stopPropagation();\n e.inputEvent.preventDefault();\n })\n .on('drag', (e) => {\n scrollBy(getDelta(e));\n });\n\n bar.value?.addEventListener('wheel', wheelHandler, false);\n});\n\nonUnmounted(() => {\n if (gesto) gesto.off();\n bar.value?.removeEventListener('wheel', wheelHandler, false);\n});\n\nconst wheelHandler = (e: WheelEvent) => {\n const delta = props.isHorizontal ? e.deltaX : e.deltaY;\n if (delta) {\n e.preventDefault();\n }\n scrollBy(delta);\n};\n\nconst getDelta = (e: any) => {\n const ratio = (props.isHorizontal ? e.deltaX : e.deltaY) / props.size;\n return props.scrollSize * ratio;\n};\n\nconst scrollBy = (delta: number) => {\n if (delta < 0) {\n if (props.pos <= 0) {\n emit('scroll', 0);\n } else {\n emit('scroll', -Math.min(-delta, props.pos));\n }\n } else {\n const leftPos = props.size - (thumbSize.value + thumbPos.value);\n if (leftPos <= 0) {\n emit('scroll', 0);\n } else {\n emit('scroll', Math.min(delta, leftPos));\n }\n }\n};\n</script>\n\n<style lang=\"scss\">\n.m-editor-scroll-bar {\n position: absolute;\n background-color: transparent;\n opacity: 0.3;\n transition: background-color 0.2s linear, opacity 0.2s linear;\n\n .m-editor-scroll-bar-thumb {\n background-color: #aaa;\n border-radius: 6px;\n position: absolute;\n }\n\n &.horizontal {\n width: 100%;\n height: 15px;\n bottom: 0;\n\n .m-editor-scroll-bar-thumb {\n height: 6px;\n transition: background-color 0.2s linear, height 0.2s ease-in-out;\n bottom: 2px;\n }\n }\n\n &.vertical {\n height: 100%;\n width: 15px;\n right: 5px;\n\n .m-editor-scroll-bar-thumb {\n width: 6px;\n transition: background-color 0.2s linear, width 0.2s ease-in-out;\n right: 2px;\n }\n }\n\n &:hover,\n &:focus {\n background-color: #eee;\n opacity: 0.9;\n\n .m-editor-scroll-bar-thumb {\n background-color: #999;\n }\n\n &.horizontal {\n .m-editor-scroll-bar-thumb {\n height: 11px;\n }\n }\n\n &.vertical {\n .m-editor-scroll-bar-thumb {\n width: 11px;\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorScrollViewer',\n})\n</script>\n<template>\n <div class=\"m-editor-scroll-viewer-container\" ref=\"container\">\n <div ref=\"el\" :style=\"style\">\n <slot></slot>\n </div>\n\n <ScrollBar\n v-if=\"scrollHeight > wrapHeight\"\n :scroll-size=\"scrollHeight\"\n :size=\"wrapHeight\"\n :pos=\"vOffset\"\n @scroll=\"vScrollHandler\"\n ></ScrollBar>\n <ScrollBar\n v-if=\"scrollWidth > wrapWidth\"\n :is-horizontal=\"true\"\n :scroll-size=\"scrollWidth\"\n :pos=\"hOffset\"\n :size=\"wrapWidth\"\n @scroll=\"hScrollHandler\"\n ></ScrollBar>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorScrollViewer\">\nimport { computed, onMounted, onUnmounted, ref, watch } from 'vue';\n\nimport type { ScrollViewerEvent } from '@editor/type';\nimport { ScrollViewer } from '@editor/utils/scroll-viewer';\n\nimport ScrollBar from './ScrollBar.vue';\n\nconst props = withDefaults(\n defineProps<{\n width?: number;\n height?: number;\n wrapWidth?: number;\n wrapHeight?: number;\n zoom?: number;\n correctionScrollSize?: {\n width: number;\n height: number;\n };\n }>(),\n {\n width: 0,\n height: 0,\n wrapWidth: 0,\n wrapHeight: 0,\n zoom: 1,\n correctionScrollSize: () => ({\n width: 0,\n height: 0,\n }),\n },\n);\n\nconst container = ref<HTMLDivElement>();\nconst el = ref<HTMLDivElement>();\nconst style = computed(\n () => `\n width: ${props.width}px;\n height: ${props.height}px;\n position: absolute;\n margin-top: 30px;\n `,\n);\n\nconst scrollWidth = ref(0);\nconst scrollHeight = ref(0);\n\nlet scrollViewer: ScrollViewer;\n\nonMounted(() => {\n if (!container.value || !el.value) return;\n scrollViewer = new ScrollViewer({\n container: container.value,\n target: el.value,\n zoom: props.zoom,\n correctionScrollSize: props.correctionScrollSize,\n });\n\n scrollViewer.on('scroll', (data: ScrollViewerEvent) => {\n hOffset.value = data.scrollLeft;\n vOffset.value = data.scrollTop;\n scrollWidth.value = data.scrollWidth;\n scrollHeight.value = data.scrollHeight;\n });\n});\n\nonUnmounted(() => {\n scrollViewer.destroy();\n});\n\nwatch(\n () => props.zoom,\n () => {\n scrollViewer.setZoom(props.zoom);\n },\n);\n\nconst vOffset = ref(0);\nconst vScrollHandler = (delta: number) => {\n vOffset.value += delta;\n scrollViewer.scrollTo({\n top: vOffset.value,\n });\n};\nconst hOffset = ref(0);\nconst hScrollHandler = (delta: number) => {\n hOffset.value += delta;\n scrollViewer.scrollTo({\n left: hOffset.value,\n });\n};\n\ndefineExpose({\n container,\n});\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorViewerMenu',\n})\n</script>\n<template>\n <content-menu :menu-data=\"menuData\" ref=\"menu\"></content-menu>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorViewerMenu\">\nimport { computed, inject, markRaw, ref, watch } from 'vue';\nimport { Bottom, CopyDocument, Delete, DocumentCopy, Top } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\nimport { isPage } from '@tmagic/utils';\n\nimport ContentMenu from '@editor/components/ContentMenu.vue';\nimport storageService from '@editor/services/storage';\nimport { LayerOffset, Layout, MenuButton, MenuComponent, Services } from '@editor/type';\nimport { COPY_STORAGE_KEY } from '@editor/utils/editor';\n\nconst props = withDefaults(\n defineProps<{ isMultiSelect?: boolean; stageContentMenu: (MenuButton | MenuComponent)[] }>(),\n { isMultiSelect: false },\n);\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\nconst menu = ref<InstanceType<typeof ContentMenu>>();\nconst canPaste = ref(false);\nconst canCenter = ref(false);\n\nconst node = computed(() => editorService?.get('node'));\nconst nodes = computed(() => editorService?.get('nodes'));\nconst parent = computed(() => editorService?.get('parent'));\nconst stage = computed(() => editorService?.get('stage'));\n\nconst menuData = computed<(MenuButton | MenuComponent)[]>(() => [\n {\n type: 'button',\n text: '水平居中',\n display: () => canCenter.value,\n handler: () => {\n if (!nodes.value) return;\n editorService?.alignCenter(nodes.value);\n },\n },\n {\n type: 'button',\n text: '复制',\n icon: markRaw(CopyDocument),\n handler: () => {\n nodes.value && editorService?.copy(nodes.value);\n canPaste.value = true;\n },\n },\n {\n type: 'button',\n text: '粘贴',\n icon: markRaw(DocumentCopy),\n display: () => canPaste.value,\n handler: () => {\n const rect = menu.value?.$el.getBoundingClientRect();\n const parentRect = stage.value?.container?.getBoundingClientRect();\n const initialLeft = (rect?.left || 0) - (parentRect?.left || 0);\n const initialTop = (rect?.top || 0) - (parentRect?.top || 0);\n\n if (!nodes.value || nodes.value.length === 0) return;\n editorService?.paste({ left: initialLeft, top: initialTop });\n },\n },\n {\n type: 'divider',\n direction: 'horizontal',\n display: () => {\n if (!node.value) return false;\n return !isPage(node.value);\n },\n },\n {\n type: 'button',\n text: '上移一层',\n icon: markRaw(Top),\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(1);\n },\n },\n {\n type: 'button',\n text: '下移一层',\n icon: markRaw(Bottom),\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(-1);\n },\n },\n {\n type: 'button',\n text: '置顶',\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(LayerOffset.TOP);\n },\n },\n {\n type: 'button',\n text: '置底',\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(LayerOffset.BOTTOM);\n },\n },\n {\n type: 'divider',\n direction: 'horizontal',\n display: () => !isPage(node.value) && !props.isMultiSelect,\n },\n {\n type: 'button',\n text: '删除',\n icon: Delete,\n display: () => !isPage(node.value),\n handler: () => {\n nodes.value && editorService?.remove(nodes.value);\n },\n },\n {\n type: 'divider',\n direction: 'horizontal',\n },\n {\n type: 'button',\n text: '清空参考线',\n handler: () => {\n editorService?.get('stage')?.clearGuides();\n },\n },\n ...props.stageContentMenu,\n]);\n\nwatch(\n parent,\n async () => {\n if (!parent.value || !editorService) return (canCenter.value = false);\n const layout = await editorService.getLayout(parent.value);\n const isLayoutConform = [Layout.ABSOLUTE, Layout.FIXED].includes(layout);\n const isTypeConform = nodes.value?.every(\n (selectedNode) => ![NodeType.ROOT, NodeType.PAGE, 'pop'].includes(`${selectedNode?.type}`),\n );\n canCenter.value = isLayoutConform && !!isTypeConform;\n },\n { immediate: true },\n);\n\nconst show = async (e: MouseEvent) => {\n menu.value?.show(e);\n const data = await storageService.getItem(COPY_STORAGE_KEY);\n canPaste.value = data !== 'undefined' && !!data;\n};\n\ndefineExpose({ show });\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorStage',\n})\n</script>\n<template>\n <ScrollViewer\n class=\"m-editor-stage\"\n ref=\"stageWrap\"\n :width=\"stageRect?.width\"\n :height=\"stageRect?.height\"\n :wrap-width=\"stageContainerRect?.width\"\n :wrap-height=\"stageContainerRect?.height\"\n :zoom=\"zoom\"\n :correction-scroll-size=\"{\n width: 60,\n height: 50,\n }\"\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 <ViewerMenu ref=\"menu\" :is-multi-select=\"isMultiSelect\" :stage-content-menu=\"stageContentMenu\"></ViewerMenu>\n </Teleport>\n </ScrollViewer>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorStage\">\nimport { computed, inject, markRaw, nextTick, onMounted, onUnmounted, ref, toRaw, watch, watchEffect } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport type { MContainer } from '@tmagic/schema';\nimport StageCore, { calcValueByFontsize, getOffset, Runtime } from '@tmagic/stage';\n\nimport ScrollViewer from '@editor/components/ScrollViewer.vue';\nimport { Layout, MenuButton, MenuComponent, Services, StageOptions } from '@editor/type';\nimport { useStage } from '@editor/utils/stage';\n\nimport ViewerMenu from './ViewerMenu.vue';\n\ndefineProps<{\n stageContentMenu: (MenuButton | MenuComponent)[];\n}>();\n\nlet stage: StageCore | null = null;\nlet runtime: Runtime | null = null;\n\nconst services = inject<Services>('services');\nconst stageOptions = inject<StageOptions>('stageOptions');\n\nconst stageWrap = ref<InstanceType<typeof ScrollViewer>>();\nconst stageContainer = ref<HTMLDivElement>();\nconst menu = ref<InstanceType<typeof ViewerMenu>>();\n\nconst nodes = computed(() => services?.editorService.get('nodes') || []);\nconst isMultiSelect = computed(() => nodes.value.length > 1);\nconst stageRect = computed(() => services?.uiService.get('stageRect'));\nconst stageContainerRect = computed(() => services?.uiService.get('stageContainerRect'));\nconst root = computed(() => services?.editorService.get('root'));\nconst page = computed(() => services?.editorService.get('page'));\nconst zoom = computed(() => services?.uiService.get('zoom') || 1);\nconst node = computed(() => services?.editorService.get('node'));\n\nwatchEffect(() => {\n if (stage || !page.value) return;\n\n if (!stageContainer.value) return;\n if (!(stageOptions?.runtimeUrl || stageOptions?.render) || !root.value) return;\n\n stage = useStage(stageOptions);\n\n services?.editorService.set('stage', markRaw(stage));\n\n stage?.mount(stageContainer.value);\n\n if (!node.value?.id) return;\n stage?.on('runtime-ready', (rt) => {\n runtime = rt;\n // toRaw返回的值是一个引用而非快照,需要cloneDeep\n root.value && runtime?.updateRootConfig?.(cloneDeep(toRaw(root.value)));\n page.value?.id && runtime?.updatePageId?.(page.value.id);\n setTimeout(() => {\n node.value && stage?.select(toRaw(node.value.id));\n });\n });\n});\n\nwatch(zoom, (zoom) => {\n if (!stage || !zoom) return;\n stage.setZoom(zoom);\n});\n\nwatch(root, (root) => {\n if (runtime && root) {\n runtime.updateRootConfig?.(cloneDeep(toRaw(root)));\n }\n});\n\nwatch(page, (page) => {\n if (runtime && page) {\n runtime.updatePageId?.(page.id);\n nextTick(() => {\n stage?.select(page.id);\n });\n }\n});\n\nconst resizeObserver = new ResizeObserver((entries) => {\n for (const { contentRect } of entries) {\n services?.uiService.set('stageContainerRect', {\n width: contentRect.width,\n height: contentRect.height,\n });\n }\n});\n\nonMounted(() => {\n stageWrap.value?.container && resizeObserver.observe(stageWrap.value.container);\n});\n\nonUnmounted(() => {\n stage?.destroy();\n resizeObserver.disconnect();\n services?.editorService.set('stage', null);\n});\n\nconst contextmenuHandler = (e: MouseEvent) => {\n e.preventDefault();\n menu.value?.show(e);\n};\n\nconst dragoverHandler = (e: DragEvent) => {\n e.preventDefault();\n if (e.dataTransfer) {\n e.dataTransfer.dropEffect = 'move';\n }\n};\n\nconst dropHandler = async (e: DragEvent) => {\n e.preventDefault();\n\n const doc = stage?.renderer.contentWindow?.document;\n const parentEl: HTMLElement | null | undefined = doc?.querySelector(`.${stageOptions?.containerHighlightClassName}`);\n\n let parent: MContainer | undefined | null = page.value;\n if (parentEl) {\n parent = services?.editorService.getNodeById(parentEl.id, false) as MContainer;\n }\n\n if (e.dataTransfer && parent && stageContainer.value && stage) {\n // eslint-disable-next-line no-eval\n const config = eval(`(${e.dataTransfer.getData('data')})`);\n const layout = await services?.editorService.getLayout(parent);\n\n const containerRect = stageContainer.value.getBoundingClientRect();\n const { scrollTop, scrollLeft } = stage.mask;\n const { style = {} } = config;\n\n let top = 0;\n let left = 0;\n let position = 'relative';\n\n if (layout === Layout.ABSOLUTE) {\n position = 'absolute';\n top = e.clientY - containerRect.top + scrollTop;\n left = e.clientX - containerRect.left + scrollLeft;\n\n if (parentEl && doc) {\n const { left: parentLeft, top: parentTop } = getOffset(parentEl);\n left = left - calcValueByFontsize(doc, parentLeft);\n top = top - calcValueByFontsize(doc, parentTop);\n }\n }\n\n config.style = {\n ...style,\n position,\n top: top / zoom.value,\n left: left / zoom.value,\n };\n\n config.inputEvent = e;\n\n services?.editorService.add(config, parent);\n }\n};\n</script>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue'\nexport default defineComponent({\n name: 'MEditorWorkspace',\n})\n</script>\n<template>\n <div class=\"m-editor-workspace\" tabindex=\"-1\" ref=\"workspace\">\n <Breadcrumb></Breadcrumb>\n\n <slot name=\"stage\">\n <MagicStage v-if=\"page\" :stage-content-menu=\"stageContentMenu\"></MagicStage>\n </slot>\n\n <slot name=\"workspace-content\"></slot>\n\n <PageBar>\n <template #page-bar-title=\"{ page }\"><slot name=\"page-bar-title\" :page=\"page\"></slot></template>\n <template #page-bar-popover=\"{ page }\"><slot name=\"page-bar-popover\" :page=\"page\"></slot></template>\n </PageBar>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"MEditorWorkspace\">\nimport { computed, inject, onMounted, onUnmounted, ref } from 'vue';\nimport KeyController from 'keycon';\n\nimport { isPage } from '@tmagic/utils';\n\nimport type { MenuButton, MenuComponent, Services } from '@editor/type';\n\nimport Breadcrumb from './Breadcrumb.vue';\nimport PageBar from './PageBar.vue';\nimport MagicStage from './Stage.vue';\n\ndefineProps<{\n stageContentMenu: (MenuButton | MenuComponent)[];\n}>();\n\nconst services = inject<Services>('services');\nconst workspace = ref<HTMLDivElement>();\nconst nodes = computed(() => services?.editorService.get('nodes'));\nconst page = computed(() => services?.editorService.get('page'));\n\nconst mouseenterHandler = () => {\n workspace.value?.focus();\n};\n\nconst mouseleaveHandler = () => {\n workspace.value?.blur();\n};\n\nlet keycon: KeyController;\n\nonMounted(() => {\n workspace.value?.addEventListener('mouseenter', mouseenterHandler);\n workspace.value?.addEventListener('mouseleave', mouseleaveHandler);\n\n keycon = new KeyController(workspace.value);\n\n const isMac = /mac os x/.test(navigator.userAgent.toLowerCase());\n\n const ctrl = isMac ? 'meta' : 'ctrl';\n\n keycon\n .keyup('delete', (e) => {\n e.inputEvent.preventDefault();\n if (!nodes.value || isPage(nodes.value[0])) return;\n services?.editorService.remove(nodes.value);\n })\n .keyup('backspace', (e) => {\n e.inputEvent.preventDefault();\n if (!nodes.value || isPage(nodes.value[0])) return;\n services?.editorService.remove(nodes.value);\n })\n .keydown([ctrl, 'c'], (e) => {\n e.inputEvent.preventDefault();\n nodes.value && services?.editorService.copy(nodes.value);\n })\n .keydown([ctrl, 'v'], (e) => {\n e.inputEvent.preventDefault();\n nodes.value && services?.editorService.paste({ offsetX: 10, offsetY: 10 });\n })\n .keydown([ctrl, 'x'], (e) => {\n e.inputEvent.preventDefault();\n if (!nodes.value || isPage(nodes.value[0])) return;\n services?.editorService.copy(nodes.value);\n services?.editorService.remove(nodes.value);\n })\n .keydown([ctrl, 'z'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.undo();\n })\n .keydown([ctrl, 'shift', 'z'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.redo();\n })\n .keydown('up', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(0, -1);\n })\n .keydown('down', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(0, 1);\n })\n .keydown('left', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(-1, 0);\n })\n .keydown('right', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(1, 0);\n })\n .keydown([ctrl, 'up'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(0, -10);\n })\n .keydown([ctrl, 'down'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(0, 10);\n })\n .keydown([ctrl, 'left'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(-10, 0);\n })\n .keydown([ctrl, 'right'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.move(10, 0);\n })\n .keydown('tab', (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.selectNextNode();\n })\n .keydown([ctrl, 'tab'], (e) => {\n e.inputEvent.preventDefault();\n services?.editorService.selectNextPage();\n })\n .keydown([ctrl, '='], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.zoom(0.1);\n })\n .keydown([ctrl, 'numpadplus'], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.zoom(0.1);\n })\n .keydown([ctrl, '-'], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.zoom(-0.1);\n })\n .keydown([ctrl, 'numpad-'], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.zoom(-0.1);\n })\n .keydown([ctrl, '0'], async (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.set('zoom', await services.uiService.calcZoom());\n })\n .keydown([ctrl, '1'], (e) => {\n e.inputEvent.preventDefault();\n services?.uiService.set('zoom', 1);\n });\n});\n\nonUnmounted(() => {\n workspace.value?.removeEventListener('mouseenter', mouseenterHandler);\n workspace.value?.removeEventListener('mouseleave', mouseleaveHandler);\n keycon.destroy();\n});\n</script>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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 { keys, pick } from 'lodash-es';\n\nimport { CodeBlockContent, CodeBlockDSL, Id } from '@tmagic/schema';\n\nimport type { CodeState } from '@editor/type';\nimport { CODE_DRAFT_STORAGE_KEY } from '@editor/type';\nimport { info } from '@editor/utils/logger';\n\nimport BaseService from './BaseService';\n\nclass CodeBlock extends BaseService {\n private state = reactive<CodeState>({\n isShowCodeEditor: false,\n codeDsl: null,\n id: '',\n editable: true,\n combineIds: [],\n undeletableList: [],\n });\n\n constructor() {\n super([\n 'setCodeDslById',\n 'setCodeEditorShowStatus',\n 'setEditStatus',\n 'setCombineIds',\n 'setUndeleteableList',\n 'deleteCodeDslByIds',\n ]);\n }\n\n /**\n * 设置活动的代码块dsl数据源\n * @param {CodeBlockDSL} codeDsl 代码DSL\n * @returns {void}\n */\n public async setCodeDsl(codeDsl: CodeBlockDSL): Promise<void> {\n this.state.codeDsl = codeDsl;\n info('[code-block]:code-dsl-change', this.state.codeDsl);\n this.emit('code-dsl-change', this.state.codeDsl);\n }\n\n /**\n * 获取活动的代码块dsl数据源(默认从dsl中的codeBlocks字段读取)\n * 方法要支持钩子添加扩展,会被重写为异步方法,因此这里显示写为异步以提醒调用者需以异步形式调用\n * @param {boolean} forceRefresh 是否强制从活动dsl拉取刷新\n * @returns {CodeBlockDSL | null}\n */\n public getCodeDsl(): CodeBlockDSL | null {\n return this.state.codeDsl;\n }\n\n /**\n * 根据代码块id获取代码块内容\n * @param {Id} id 代码块id\n * @returns {CodeBlockContent | null}\n */\n public getCodeContentById(id: Id): CodeBlockContent | null {\n if (!id) return null;\n const totalCodeDsl = this.getCodeDsl();\n if (!totalCodeDsl) return null;\n return totalCodeDsl[id] ?? null;\n }\n\n /**\n * 设置代码块ID和代码内容到源dsl\n * @param {Id} id 代码块id\n * @param {CodeBlockContent} codeConfig 代码块内容配置信息\n * @returns {void}\n */\n public async setCodeDslById(id: Id, codeConfig: CodeBlockContent): Promise<void> {\n const codeDsl = this.getCodeDsl();\n\n if (!codeDsl) {\n throw new Error('dsl中没有codeBlocks');\n }\n\n const codeConfigProcessed = codeConfig;\n if (codeConfig.content) {\n // 在保存的时候转换代码内容\n // eslint-disable-next-line no-eval\n codeConfigProcessed.content = eval(codeConfig.content);\n }\n\n const existContent = codeDsl[id] || {};\n\n codeDsl[id] = {\n ...existContent,\n ...codeConfigProcessed,\n };\n\n this.emit('addOrUpdate', id, codeDsl[id]);\n }\n\n /**\n * 根据代码块id数组获取代码dsl\n * @param {string[]} ids 代码块id数组\n * @returns {CodeBlockDSL}\n */\n public getCodeDslByIds(ids: string[]): CodeBlockDSL {\n const codeDsl = this.getCodeDsl();\n return pick(codeDsl, ids) as CodeBlockDSL;\n }\n\n /**\n * 设置代码编辑面板展示状态\n * @param {boolean} status 是否展示代码编辑面板\n * @returns {void}\n */\n public async setCodeEditorShowStatus(status: boolean): Promise<void> {\n this.state.isShowCodeEditor = status;\n }\n\n /**\n * 获取代码编辑面板展示状态\n * @returns {boolean} 是否展示代码编辑面板\n */\n public getCodeEditorShowStatus(): boolean {\n return this.state.isShowCodeEditor;\n }\n\n /**\n * 设置代码编辑面板展示状态及展示内容\n * @param {boolean} status 是否展示代码编辑面板\n * @param {Id} id 代码块id\n * @returns {void}\n */\n public setCodeEditorContent(status: boolean, id: Id): void {\n if (!id) return;\n this.setId(id);\n this.state.isShowCodeEditor = status;\n }\n\n /**\n * 获取当前选中的代码块内容\n * @returns {CodeBlockContent | null}\n */\n public getCurrentDsl(): CodeBlockContent | null {\n return this.getCodeContentById(this.state.id);\n }\n\n /**\n * 获取编辑状态\n * @returns {boolean} 是否可编辑\n */\n public getEditStatus(): boolean {\n return this.state.editable;\n }\n\n /**\n * 设置编辑状态\n * @param {boolean} status 是否可编辑\n * @returns {void}\n */\n public async setEditStatus(status: boolean): Promise<void> {\n this.state.editable = status;\n }\n\n /**\n * 设置当前选中的代码块ID\n * @param {Id} id 代码块id\n * @returns {void}\n */\n public setId(id: Id): void {\n if (!id) return;\n this.state.id = id;\n }\n\n /**\n * 获取当前选中的代码块ID\n * @returns {Id} id 代码块id\n */\n public getId(): Id {\n return this.state.id;\n }\n\n /**\n * 设置当前选中组件已关联绑定的代码块id数组\n * @param {string[]} ids 代码块id数组\n * @returns {void}\n */\n public async setCombineIds(ids: string[]): Promise<void> {\n this.state.combineIds = ids;\n }\n\n /**\n * 获取当前选中组件已关联绑定的代码块id数组\n * @returns {string[]}\n */\n public getCombineIds(): string[] {\n return this.state.combineIds;\n }\n\n /**\n * 获取不可删除列表\n * @returns {Id[]}\n */\n public getUndeletableList(): Id[] {\n return this.state.undeletableList;\n }\n\n /**\n * 设置不可删除列表:为业务逻辑预留的不可删除的代码块列表,由业务逻辑维护(如代码块上线后不可删除)\n * @param {Id[]} codeIds 代码块id数组\n * @returns {void}\n */\n public async setUndeleteableList(codeIds: Id[]): Promise<void> {\n this.state.undeletableList = codeIds;\n }\n\n /**\n * 设置代码草稿\n */\n public setCodeDraft(codeId: Id, content: string): void {\n globalThis.localStorage.setItem(`${CODE_DRAFT_STORAGE_KEY}_${codeId}`, content);\n }\n\n /**\n * 获取代码草稿\n */\n public getCodeDraft(codeId: Id): string | null {\n return globalThis.localStorage.getItem(`${CODE_DRAFT_STORAGE_KEY}_${codeId}`);\n }\n\n /**\n * 删除代码草稿\n */\n public removeCodeDraft(codeId: Id): void {\n globalThis.localStorage.removeItem(`${CODE_DRAFT_STORAGE_KEY}_${codeId}`);\n }\n\n /**\n * 在dsl数据源中删除指定id的代码块\n * @param {Id[]} codeIds 需要删除的代码块id数组\n */\n public async deleteCodeDslByIds(codeIds: Id[]): Promise<void> {\n const currentDsl = await this.getCodeDsl();\n\n if (!currentDsl) return;\n\n codeIds.forEach((id) => {\n delete currentDsl[id];\n\n this.emit('remove', id);\n });\n }\n\n /**\n * 生成代码块唯一id\n * @returns {Id} 代码块唯一id\n */\n public async getUniqueId(): Promise<Id> {\n const newId = `code_${Math.random().toString(10).substring(2).substring(0, 4)}`;\n // 判断是否重复\n const dsl = await this.getCodeDsl();\n const existedIds = keys(dsl);\n if (!existedIds.includes(newId)) return newId;\n return await this.getUniqueId();\n }\n\n public resetState() {\n this.state.isShowCodeEditor = false;\n this.state.codeDsl = null;\n this.state.id = '';\n this.state.editable = true;\n this.state.combineIds = [];\n this.state.undeletableList = [];\n }\n\n public destroy(): void {\n this.resetState();\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n}\n\nexport type CodeBlockService = CodeBlock;\n\nexport default new CodeBlock();\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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[]): void {\n this.state.list = componentGroupList;\n }\n\n public getList(): ComponentGroup[] {\n return this.state.list;\n }\n\n public resetState() {\n this.state.list = [];\n }\n\n public destroy() {\n this.resetState();\n this.removeAllListeners();\n this.removeAllPlugins();\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) 2023 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 { EventEmitter } from 'events';\n\nimport { reactive } from 'vue';\n\nimport { MNode } from '@tmagic/schema';\n\ntype IsTarget = (key: string | number, value: any) => boolean;\n\ninterface TargetOptions {\n isTarget: IsTarget;\n id: string | number;\n type?: string;\n name: string;\n}\n\ninterface Dep {\n [key: string | number]: {\n name: string;\n keys: (string | number)[];\n };\n}\n\ninterface TargetList {\n [key: string]: {\n [key: string | number]: Target;\n };\n}\n\n/**\n * 需要收集依赖的目标\n * 例如:一个代码块可以为一个目标\n */\nexport class Target extends EventEmitter {\n /**\n * 如何识别目标\n */\n public isTarget: IsTarget;\n /**\n * 目标id,不可重复\n * 例如目标是代码块,则为代码块id\n */\n public id: string | number;\n /**\n * 目标名称,用于显示在依赖列表中\n */\n public name: string;\n /**\n * 不同的目标可以进行分类,例如代码块,数据源可以为两个不同的type\n */\n public type = 'default';\n /**\n * 依赖详情\n * 实例:{ 'node_id': { name: 'node_name', keys: [ created, mounted ] } }\n */\n public deps = reactive<Dep>({});\n\n constructor(options: TargetOptions) {\n super();\n this.isTarget = options.isTarget;\n this.id = options.id;\n this.name = options.name;\n if (options.type) {\n this.type = options.type;\n }\n }\n\n /**\n * 更新依赖\n * @param node 节点配置\n * @param key 哪个key配置了这个目标的id\n */\n public updateDep(node: MNode, key: string | number) {\n const dep = this.deps[node.id] || {\n name: node.name,\n keys: [],\n };\n\n if (node.name) {\n dep.name = node.name;\n }\n\n this.deps[node.id] = dep;\n\n if (dep.keys.indexOf(key) === -1) {\n dep.keys.push(key);\n }\n\n this.emit('change');\n }\n\n /**\n * 删除依赖\n * @param node 哪个节点的依赖需要移除,如果为空,则移除所有依赖\n * @param key 节点下哪个key需要移除,如果为空,则移除改节点下的所有依赖key\n * @returns void\n */\n public removeDep(node?: MNode, key?: string | number) {\n if (!node) {\n Object.keys(this.deps).forEach((depKey) => {\n delete this.deps[depKey];\n });\n this.emit('change');\n return;\n }\n\n const dep = this.deps[node.id];\n\n if (!dep) return;\n\n if (key) {\n const index = dep.keys.indexOf(key);\n dep.keys.splice(index, 1);\n\n if (dep.keys.length === 0) {\n delete this.deps[node.id];\n }\n } else {\n delete this.deps[node.id];\n }\n\n this.emit('change');\n }\n\n /**\n * 判断指定节点下的指定key是否存在在依赖列表中\n * @param node 哪个节点\n * @param key 哪个key\n * @returns boolean\n */\n public hasDep(node: MNode, key: string | number) {\n const dep = this.deps[node.id];\n\n return Boolean(dep?.keys.find((d) => d === key));\n }\n\n public destroy() {\n this.removeAllListeners();\n }\n}\n\nexport class Watcher extends EventEmitter {\n public targets = reactive<TargetList>({});\n\n /**\n * 获取指定类型中的所有target\n * @param type 分类\n * @returns Target[]\n */\n public getTargets(type = 'default') {\n return this.targets[type] || {};\n }\n\n /**\n * 添加新的目标\n * @param target Target\n */\n public addTarget(target: Target) {\n const targets = this.getTargets(target.type) || {};\n this.targets[target.type] = targets;\n targets[target.id] = target;\n\n this.emit('add-target', target);\n }\n\n /**\n * 获取指定id的target\n * @param id target id\n * @returns Target\n */\n public getTarget(id: string | number) {\n const allTargets = Object.values(this.targets);\n for (const targets of allTargets) {\n if (targets[id]) {\n return targets[id];\n }\n }\n }\n\n /**\n * 判断是否存在指定id的target\n * @param id target id\n * @returns boolean\n */\n public hasTarget(id: string | number) {\n const allTargets = Object.values(this.targets);\n for (const targets of allTargets) {\n if (targets[id]) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * 删除指定id的target\n * @param id target id\n */\n public removeTarget(id: string | number) {\n const allTargets = Object.values(this.targets);\n for (const targets of allTargets) {\n if (targets[id]) {\n targets[id].destroy();\n delete targets[id];\n }\n }\n\n this.emit('remove-target');\n }\n\n /**\n * 删除指定分类的所有target\n * @param type 分类\n * @returns void\n */\n public removeTargets(type = 'default') {\n const targets = this.targets[type];\n\n if (!targets) return;\n\n for (const target of Object.values(targets)) {\n target.destroy();\n }\n\n delete this.targets[type];\n\n this.emit('remove-target');\n }\n\n /**\n * 删除所有target\n */\n public clearTargets() {\n Object.keys(this.targets).forEach((key) => {\n delete this.targets[key];\n });\n }\n\n /**\n * 收集依赖\n * @param nodes 需要收集的节点\n * @param deep 是否需要收集子节点\n */\n public collect(nodes: MNode[], deep = false) {\n Object.values(this.targets).forEach((targets) => {\n Object.values(targets).forEach((target) => {\n nodes.forEach((node) => {\n target.removeDep(node);\n this.collectItem(node, target, deep);\n });\n });\n });\n }\n\n /**\n * 清除依赖\n * @param nodes 需要清除依赖的节点\n */\n public clear(nodes?: MNode[]) {\n Object.values(this.targets).forEach((targets) => {\n Object.values(targets).forEach((target) => {\n if (nodes) {\n nodes.forEach((node) => {\n target.removeDep(node);\n\n if (Array.isArray(node.items)) {\n this.clear(node.items);\n }\n });\n } else {\n target.removeDep();\n }\n });\n });\n }\n\n private collectItem(node: MNode, target: Target, deep = false) {\n const collectTarget = (config: Record<string | number, any>, prop = '') => {\n const doCollect = (key: string, value: any) => {\n const keyIsItems = key === 'items';\n const fullKey = prop ? `${prop}.${key}` : key;\n\n if (target.isTarget(key, value)) {\n target.updateDep(node, fullKey);\n } else if (!keyIsItems && Array.isArray(value)) {\n value.forEach((item, index) => {\n collectTarget(item, `${fullKey}.${index}`);\n });\n } else if (Object.prototype.toString.call(value) === '[object Object]') {\n collectTarget(value, fullKey);\n }\n\n if (keyIsItems && deep && Array.isArray(value)) {\n value.forEach((child) => {\n this.collectItem(child, target, deep);\n });\n }\n };\n\n Object.entries(config).forEach(([key, value]) => {\n doCollect(key, value);\n });\n };\n\n collectTarget(node);\n }\n}\n\nexport type DepService = Watcher;\n\nexport default new Watcher();\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 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\nlet eventMap: Record<string, EventOption[]> = reactive({});\nlet methodMap: Record<string, EventOption[]> = reactive({});\n\nclass Events extends BaseService {\n constructor() {\n super([]);\n }\n\n public init(componentGroupList: ComponentGroup[]) {\n componentGroupList.forEach((group) => {\n group.items.forEach((element) => {\n const type = toLine(element.type);\n if (!this.getEvent(type)) {\n this.setEvent(type, DEFAULT_EVENTS);\n }\n if (!this.getMethod(type)) {\n this.setMethod(type, DEFAULT_METHODS);\n }\n });\n });\n }\n\n public setEvents(events: Record<string, EventOption[]>) {\n Object.keys(events).forEach((type: string) => {\n this.setEvent(toLine(type), events[type] || []);\n });\n }\n\n public setEvent(type: string, events: EventOption[]) {\n eventMap[type] = [...DEFAULT_EVENTS, ...events];\n }\n\n public getEvent(type: string): EventOption[] {\n return cloneDeep(eventMap[type] || DEFAULT_EVENTS);\n }\n\n public setMethods(methods: Record<string, EventOption[]>) {\n Object.keys(methods).forEach((type: string) => {\n this.setMethod(toLine(type), methods[type] || []);\n });\n }\n\n public setMethod(type: string, method: EventOption[]) {\n methodMap[type] = [...DEFAULT_METHODS, ...method];\n }\n\n public getMethod(type: string) {\n return cloneDeep(methodMap[type] || DEFAULT_METHODS);\n }\n\n public resetState() {\n eventMap = reactive({});\n methodMap = reactive({});\n }\n\n public destroy() {\n this.resetState();\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n}\n\nexport type EventsService = Events;\n\nexport default new Events();\n","import type { PropType } from 'vue';\n\nimport type { EventOption } from '@tmagic/core';\nimport type { FormConfig } from '@tmagic/form';\nimport type { MApp, MNode } from '@tmagic/schema';\nimport StageCore, {\n CONTAINER_HIGHLIGHT_CLASS_NAME,\n ContainerHighlightType,\n CustomizeMoveableOptionsCallbackConfig,\n MoveableOptions,\n UpdateDragEl,\n} from '@tmagic/stage';\n\nimport type { ComponentGroup, MenuBarData, MenuButton, MenuComponent, SideBarData, StageRect } from './type';\n\nexport default {\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 /** 顶部工具栏配置 */\n menu: {\n type: Object as PropType<MenuBarData>,\n default: () => ({ left: [], right: [] }),\n },\n\n /** 组件树右键菜单 */\n layerContentMenu: {\n type: Array as PropType<(MenuButton | MenuComponent)[]>,\n default: () => [],\n },\n\n /** 画布右键菜单 */\n stageContentMenu: {\n type: Array as PropType<(MenuButton | MenuComponent)[]>,\n default: () => [],\n },\n\n /** 中间工作区域中画布渲染的内容 */\n render: {\n type: Function as PropType<(stage: StageCore) => HTMLDivElement | Promise<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 as PropType<Record<string, { events: EventOption[]; methods: EventOption[] }>>,\n default: () => ({}),\n },\n\n /** 画布中组件选中框的移动范围 */\n moveableOptions: {\n type: [Object, Function] as PropType<\n MoveableOptions | ((config?: CustomizeMoveableOptionsCallbackConfig) => MoveableOptions)\n >,\n },\n\n /** 编辑器初始化时默认选中的组件ID */\n defaultSelected: {\n type: [Number, String],\n },\n\n canSelect: {\n type: Function as PropType<(el: HTMLElement) => boolean | Promise<boolean>>,\n default: (el: HTMLElement) => Boolean(el.id),\n },\n\n isContainer: {\n type: Function as PropType<(el: HTMLElement) => boolean | Promise<boolean>>,\n default: (el: HTMLElement) => el.classList.contains('magic-ui-container'),\n },\n\n containerHighlightClassName: {\n type: String,\n default: CONTAINER_HIGHLIGHT_CLASS_NAME,\n },\n\n containerHighlightDuration: {\n type: Number,\n default: 800,\n },\n\n containerHighlightType: {\n type: String as PropType<ContainerHighlightType>,\n default: ContainerHighlightType.DEFAULT,\n },\n\n stageRect: {\n type: [String, Object] as PropType<StageRect>,\n },\n\n codeOptions: {\n type: Object,\n default: () => ({}),\n },\n\n updateDragEl: {\n type: Function as PropType<UpdateDragEl>,\n },\n\n disabledDragStart: {\n type: Boolean,\n },\n};\n","import { isEmpty } from 'lodash-es';\n\nimport { CodeBlockContent, HookType, Id } from '@tmagic/schema';\n\nimport { Target } from '@editor/services/dep';\nimport type { HookData } from '@editor/type';\n\nexport const createCodeBlockTarget = (id: Id, codeBlock: CodeBlockContent) =>\n new Target({\n type: 'code-block',\n id,\n name: codeBlock.name,\n isTarget: (key: string | number, value: any) => {\n if (value?.hookType === HookType.CODE && !isEmpty(value.hookData)) {\n const index = value.hookData.findIndex((item: HookData) => item.codeId === id);\n return Boolean(index > -1);\n }\n\n return false;\n },\n });\n","import type { ExtractPropTypes } from 'vue';\nimport { onUnmounted, toRaw, watch } from 'vue';\n\nimport type { EventOption } from '@tmagic/core';\nimport type { CodeBlockContent, Id, MApp, MNode, MPage } from '@tmagic/schema';\n\nimport { createCodeBlockTarget } from './utils/dep';\nimport editorProps from './editorProps';\nimport type { Services } from './type';\n\nexport declare type LooseRequired<T> = {\n [P in string & keyof T]: T[P];\n};\n\nexport const initServiceState = (\n props: Readonly<LooseRequired<Readonly<ExtractPropTypes<typeof editorProps>>>>,\n {\n editorService,\n historyService,\n componentListService,\n propsService,\n eventsService,\n uiService,\n codeBlockService,\n }: Services,\n) => {\n // 初始值变化,重新设置节点信息\n watch(\n () => props.modelValue,\n (modelValue) => {\n editorService.set('root', modelValue);\n },\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(() => {\n editorService.resetState();\n historyService.resetState();\n propsService.resetState();\n uiService.resetState();\n componentListService.resetState();\n codeBlockService.resetState();\n });\n};\n\nexport const initServiceEvents = (\n props: Readonly<LooseRequired<Readonly<ExtractPropTypes<typeof editorProps>>>>,\n emit: (event: 'props-panel-mounted' | 'update:modelValue', ...args: any[]) => void,\n { editorService, codeBlockService, depService }: Services,\n) => {\n const rootChangeHandler = async (value: MApp, preValue?: MApp | null) => {\n const nodeId = editorService.get('node')?.id || props.defaultSelected;\n let node;\n if (nodeId) {\n node = editorService.getNodeById(nodeId);\n }\n\n if (node && node !== value) {\n await editorService.select(node.id);\n } else if (value?.items?.length) {\n await editorService.select(value.items[0]);\n } else if (value?.id) {\n editorService.set('nodes', [value]);\n editorService.set('parent', null);\n editorService.set('page', null);\n }\n\n if (toRaw(value) !== toRaw(preValue)) {\n emit('update:modelValue', value);\n }\n\n value.codeBlocks = value.codeBlocks || {};\n\n codeBlockService.setCodeDsl(value.codeBlocks);\n\n depService.removeTargets('code-block');\n\n Object.entries(value.codeBlocks).forEach(([id, code]) => {\n depService.addTarget(createCodeBlockTarget(id, code));\n });\n\n if (value && Array.isArray(value.items)) {\n depService.collect(value.items, true);\n } else {\n depService.clear();\n }\n };\n\n const nodeAddHandler = (nodes: MNode[]) => {\n depService.collect(nodes);\n };\n\n const nodeUpdateHandler = (nodes: MNode[]) => {\n depService.collect(nodes);\n };\n\n const nodeRemoveHandler = (nodes: MNode[]) => {\n depService.clear(nodes);\n };\n\n const historyChangeHandler = (page: MPage) => {\n depService.collect([page], true);\n };\n\n editorService.on('history-change', historyChangeHandler);\n editorService.on('root-change', rootChangeHandler);\n editorService.on('add', nodeAddHandler);\n editorService.on('remove', nodeRemoveHandler);\n editorService.on('update', nodeUpdateHandler);\n\n const codeBlockAddOrUpdateHandler = (id: Id, codeBlock: CodeBlockContent) => {\n if (depService.hasTarget(id)) {\n depService.getTarget(id)!.name = codeBlock.name;\n return;\n }\n\n depService.addTarget(createCodeBlockTarget(id, codeBlock));\n };\n\n const codeBlockRemoveHandler = (id: Id) => {\n depService.removeTarget(id);\n };\n\n codeBlockService.on('addOrUpdate', codeBlockAddOrUpdateHandler);\n codeBlockService.on('remove', codeBlockRemoveHandler);\n\n onUnmounted(() => {\n editorService.off('history-change', historyChangeHandler);\n editorService.off('root-change', rootChangeHandler);\n editorService.off('add', nodeAddHandler);\n editorService.off('remove', nodeRemoveHandler);\n editorService.off('update', nodeUpdateHandler);\n\n codeBlockService.off('addOrUpdate', codeBlockAddOrUpdateHandler);\n codeBlockService.off('remove', codeBlockRemoveHandler);\n });\n};\n","<template>\n <Framework :code-options=\"codeOptions\">\n <template #nav>\n <slot name=\"nav\" :editorService=\"editorService\"><TMagicNavMenu :data=\"menu\"></TMagicNavMenu></slot>\n </template>\n\n <template #sidebar>\n <slot name=\"sidebar\" :editorService=\"editorService\">\n <Sidebar :data=\"sidebar\" :layer-content-menu=\"layerContentMenu\">\n <template #layer-panel-header>\n <slot name=\"layer-panel-header\"></slot>\n </template>\n\n <template #layer-node-content=\"{ node, data }\">\n <slot name=\"layer-node-content\" :data=\"data\" :node=\"node\"></slot>\n </template>\n\n <template #component-list-panel-header>\n <slot name=\"component-list-panel-header\"></slot>\n </template>\n\n <template #component-list-item=\"{ component }\">\n <slot name=\"component-list-item\" :component=\"component\"></slot>\n </template>\n\n <template #code-block-panel-header>\n <slot name=\"code-block-panel-header\"></slot>\n </template>\n\n <template #code-block-panel-tool=\"{ id, data }\">\n <slot name=\"code-block-panel-tool\" :id=\"id\" :data=\"data\"></slot>\n </template>\n\n <template #code-block-edit-panel-header=\"{ id }\">\n <slot name=\"code-block-edit-panel-header\" :id=\"id\"></slot>\n </template>\n </Sidebar>\n </slot>\n </template>\n\n <template #workspace>\n <slot name=\"workspace\" :editorService=\"editorService\">\n <Workspace :stage-content-menu=\"stageContentMenu\">\n <template #stage><slot name=\"stage\"></slot></template>\n <template #workspace-content><slot name=\"workspace-content\" :editorService=\"editorService\"></slot></template>\n <template #page-bar-title=\"{ page }\"><slot name=\"page-bar-title\" :page=\"page\"></slot></template>\n <template #page-bar-popover=\"{ page }\"><slot name=\"page-bar-popover\" :page=\"page\"></slot></template>\n </Workspace>\n </slot>\n </template>\n\n <template #props-panel>\n <slot name=\"props-panel\">\n <PropsPanel @mounted=\"(instance: any) => $emit('props-panel-mounted', instance)\">\n <template #props-panel-header>\n <slot name=\"props-panel-header\"></slot>\n </template>\n </PropsPanel>\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, provide, reactive } from 'vue';\n\nimport Framework from './layouts/Framework.vue';\nimport NavMenu from './layouts/NavMenu.vue';\nimport PropsPanel from './layouts/PropsPanel.vue';\nimport Sidebar from './layouts/sidebar/Sidebar.vue';\nimport Workspace from './layouts/workspace/Workspace.vue';\nimport codeBlockService from './services/codeBlock';\nimport componentListService from './services/componentList';\nimport depService from './services/dep';\nimport editorService from './services/editor';\nimport eventsService from './services/events';\nimport historyService from './services/history';\nimport propsService from './services/props';\nimport storageService from './services/storage';\nimport uiService from './services/ui';\nimport editorProps from './editorProps';\nimport { initServiceEvents, initServiceState } from './initService';\nimport type { Services } from './type';\n\nexport default defineComponent({\n name: 'm-editor',\n\n components: {\n TMagicNavMenu: NavMenu,\n Sidebar,\n Workspace,\n PropsPanel,\n Framework,\n },\n\n props: editorProps,\n\n emits: ['props-panel-mounted', 'update:modelValue'],\n\n setup(props, { emit }) {\n const services: Services = {\n componentListService,\n eventsService,\n historyService,\n propsService,\n editorService,\n uiService,\n storageService,\n codeBlockService,\n depService,\n };\n\n initServiceEvents(props, emit, services);\n initServiceState(props, services);\n\n provide('services', services);\n\n provide('codeOptions', props.codeOptions);\n provide(\n 'stageOptions',\n reactive({\n runtimeUrl: props.runtimeUrl,\n autoScrollIntoView: props.autoScrollIntoView,\n render: props.render,\n moveableOptions: props.moveableOptions,\n canSelect: props.canSelect,\n updateDragEl: props.updateDragEl,\n isContainer: props.isContainer,\n containerHighlightClassName: props.containerHighlightClassName,\n containerHighlightDuration: props.containerHighlightDuration,\n containerHighlightType: props.containerHighlightType,\n disabledDragStart: props.disabledDragStart,\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) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { App } from 'vue';\n\nimport Code from './fields/Code.vue';\nimport CodeLink from './fields/CodeLink.vue';\nimport CodeSelect from './fields/CodeSelect.vue';\nimport CodeSelectCol from './fields/CodeSelectCol.vue';\nimport EventSelect from './fields/EventSelect.vue';\nimport uiSelect from './fields/UISelect.vue';\nimport CodeEditor from './layouts/CodeEditor.vue';\nimport { setConfig } from './utils/config';\nimport Editor from './Editor.vue';\nimport type { InstallOptions } from './type';\n\nimport './theme/index.scss';\n\nexport type { MoveableOptions } from '@tmagic/stage';\nexport * from './type';\nexport * from './utils';\nexport { default as TMagicEditor } from './Editor.vue';\nexport { default as TMagicCodeEditor } from './layouts/CodeEditor.vue';\nexport { default as editorService } from './services/editor';\nexport { default as propsService } from './services/props';\nexport { default as historyService } from './services/history';\nexport { default as storageService } from './services/storage';\nexport { default as eventsService } from './services/events';\nexport { default as uiService } from './services/ui';\nexport { default as codeBlockService } from './services/codeBlock';\nexport { default as depService } from './services/dep';\nexport { default as ComponentListPanel } from './layouts/sidebar/ComponentListPanel.vue';\nexport { default as LayerPanel } from './layouts/sidebar/LayerPanel.vue';\nexport { default as CodeSelect } from './fields/CodeSelect.vue';\nexport { default as CodeSelectCol } from './fields/CodeSelectCol.vue';\nexport { default as EventSelect } from './fields/EventSelect.vue';\nexport { default as CodeBlockList } from './layouts/sidebar/code-block/CodeBlockList.vue';\nexport { default as PropsPanel } from './layouts/PropsPanel.vue';\nexport { default as ToolButton } from './components/ToolButton.vue';\nexport { default as ContentMenu } from './components/ContentMenu.vue';\nexport { default as Icon } from './components/Icon.vue';\nexport { default as LayoutContainer } from './components/Layout.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 app.component(Editor.name, Editor);\n app.component('m-fields-ui-select', uiSelect);\n app.component('m-fields-code-link', CodeLink);\n app.component('m-fields-vs-code', Code);\n app.component('magic-code-editor', CodeEditor);\n app.component('m-fields-code-select', CodeSelect);\n app.component('m-fields-code-select-col', CodeSelectCol);\n app.component('m-fields-event-select', EventSelect);\n },\n};\n"],"names":["__default__","clientWidth","center","ColumnLayout","LayerOffset","Layout","Keys","CodeDeleteErrorType","methodName","Protocol","storage","key","options","namespace","item","protocol","node","Editor","values","_hoisted_2","_createElementVNode","_hoisted_3","_sfc_render","_hoisted_1","_hoisted_4","codeValue","page","nodes","isMultiSelect","getConfig","ComponentListPanel","LayerPanel","CodeBlockList","zoom","root","e","codeDsl","id","NavMenu","Sidebar","Workspace","PropsPanel","Framework","_resolveComponent","_openBlock","_createBlock","_withCtx","_renderSlot","_createVNode","uiSelect","CodeLink","Code","CodeEditor","CodeSelect","CodeSelectCol","EventSelect"],"mappings":"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"}
|