@tmagic/editor 1.3.6 → 1.3.8
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/LICENSE +5432 -0
- package/dist/style.css +34 -11
- package/dist/tmagic-editor.js +1360 -957
- package/dist/tmagic-editor.js.map +1 -1
- package/dist/tmagic-editor.umd.cjs +1382 -977
- package/dist/tmagic-editor.umd.cjs.map +1 -1
- package/package.json +17 -17
- package/src/Editor.vue +15 -7
- package/src/components/CodeBlockEditor.vue +2 -2
- package/src/components/ContentMenu.vue +5 -5
- package/src/components/ScrollBar.vue +2 -2
- package/src/components/ScrollViewer.vue +2 -2
- package/src/components/SplitView.vue +2 -2
- package/src/components/Tree.vue +1 -1
- package/src/components/TreeNode.vue +3 -3
- package/src/editorProps.ts +14 -4
- package/src/fields/PageFragmentSelect.vue +63 -0
- package/src/hooks/use-getso.ts +2 -2
- package/src/hooks/use-stage.ts +18 -1
- package/src/index.ts +3 -0
- package/src/initService.ts +15 -5
- package/src/layouts/AddPageBox.vue +16 -4
- package/src/layouts/CodeEditor.vue +2 -2
- package/src/layouts/Framework.vue +19 -3
- package/src/layouts/PropsPanel.vue +9 -7
- package/src/layouts/page-bar/AddButton.vue +48 -0
- package/src/layouts/page-bar/PageBar.vue +158 -0
- package/src/layouts/{workspace → page-bar}/PageBarScrollContainer.vue +61 -35
- package/src/layouts/page-bar/SwitchTypeButton.vue +45 -0
- package/src/layouts/sidebar/Sidebar.vue +2 -0
- package/src/layouts/sidebar/layer/LayerMenu.vue +39 -27
- package/src/layouts/sidebar/layer/LayerPanel.vue +7 -1
- package/src/layouts/sidebar/layer/use-click.ts +5 -3
- package/src/layouts/sidebar/layer/use-keybinding.ts +8 -8
- package/src/layouts/sidebar/layer/use-node-status.ts +3 -3
- package/src/layouts/workspace/Workspace.vue +6 -7
- package/src/layouts/workspace/viewer/NodeListMenu.vue +2 -2
- package/src/layouts/workspace/viewer/Stage.vue +12 -5
- package/src/layouts/workspace/viewer/ViewerMenu.vue +93 -80
- package/src/services/dataSource.ts +17 -0
- package/src/services/dep.ts +4 -0
- package/src/services/editor.ts +66 -35
- package/src/services/history.ts +6 -2
- package/src/services/keybinding.ts +48 -13
- package/src/theme/code-block.scss +0 -16
- package/src/theme/page-bar.scss +18 -1
- package/src/theme/page-fragment-select.scss +14 -0
- package/src/theme/theme.scss +1 -0
- package/src/theme/tree.scss +6 -0
- package/src/type.ts +23 -7
- package/src/utils/content-menu.ts +2 -2
- package/src/utils/editor.ts +22 -15
- package/src/utils/operator.ts +4 -4
- package/types/components/ToolButton.vue.d.ts +2 -2
- package/types/editorProps.d.ts +11 -2
- package/types/fields/PageFragmentSelect.vue.d.ts +31 -0
- package/types/index.d.ts +1 -0
- package/types/layouts/AddPageBox.vue.d.ts +14 -1
- package/types/layouts/Framework.vue.d.ts +14 -1
- package/types/layouts/PropsPanel.vue.d.ts +19 -10
- package/types/layouts/page-bar/AddButton.vue.d.ts +16 -0
- package/types/layouts/page-bar/PageBar.vue.d.ts +28 -0
- package/types/layouts/page-bar/PageBarScrollContainer.vue.d.ts +24 -0
- package/types/layouts/page-bar/SwitchTypeButton.vue.d.ts +20 -0
- package/types/layouts/sidebar/Sidebar.vue.d.ts +2 -0
- package/types/layouts/sidebar/layer/LayerMenu.vue.d.ts +22 -3
- package/types/layouts/sidebar/layer/LayerPanel.vue.d.ts +2 -0
- package/types/layouts/sidebar/layer/use-click.d.ts +25 -3
- package/types/layouts/sidebar/layer/use-keybinding.d.ts +1 -1
- package/types/layouts/workspace/Workspace.vue.d.ts +2 -0
- package/types/layouts/workspace/viewer/Stage.vue.d.ts +2 -0
- package/types/layouts/workspace/viewer/ViewerMenu.vue.d.ts +8 -0
- package/types/services/dataSource.d.ts +2 -0
- package/types/services/dep.d.ts +1 -0
- package/types/services/editor.d.ts +3 -2
- package/types/services/history.d.ts +3 -2
- package/types/services/keybinding.d.ts +21 -1
- package/types/type.d.ts +26 -12
- package/types/utils/editor.d.ts +9 -7
- package/src/layouts/workspace/PageBar.vue +0 -87
- package/types/layouts/workspace/PageBar.vue.d.ts +0 -15
- package/types/layouts/workspace/PageBarScrollContainer.vue.d.ts +0 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmagic-editor.js","sources":["../src/utils/config.ts","../src/layouts/CodeEditor.vue","../src/fields/Code.vue","../src/fields/CodeLink.vue","../src/fields/CodeSelect.vue","../src/components/CodeBlockEditor.vue","../src/utils/data-source/formConfigs/base.ts","../src/utils/data-source/formConfigs/http.ts","../src/utils/data-source/index.ts","../src/utils/compose.ts","../src/services/BaseService.ts","../src/services/dataSource.ts","../src/utils/props.ts","../src/utils/logger.ts","../src/type.ts","../src/utils/editor.ts","../src/services/dep.ts","../src/utils/undo-redo.ts","../src/services/history.ts","../src/services/storage.ts","../src/services/props.ts","../src/services/editor.ts","../src/utils/operator.ts","../src/components/CodeParams.vue","../src/components/Icon.vue","../src/hooks/use-code-block-edit.ts","../src/fields/CodeSelectCol.vue","../src/fields/DataSourceFields.vue","../src/fields/DataSourceFieldSelect.vue","../src/fields/DataSourceInput.vue","../src/hooks/use-data-source-method.ts","../src/fields/DataSourceMethods.vue","../src/fields/DataSourceMethodSelect.vue","../src/fields/DataSourceMocks.vue","../src/fields/DataSourceSelect.vue","../src/fields/EventSelect.vue","../src/fields/KeyValue.vue","../src/fields/UISelect.vue","../src/hooks/use-getso.ts","../src/components/Resizer.vue","../src/components/SplitView.vue","../src/layouts/AddPageBox.vue","../src/layouts/Framework.vue","../src/components/ToolButton.vue","../src/layouts/NavMenu.vue","../src/layouts/PropsPanel.vue","../src/hooks/use-float-box.ts","../src/components/SearchInput.vue","../src/utils/tree.ts","../src/components/TreeNode.vue","../src/components/Tree.vue","../src/hooks/use-filter.ts","../src/hooks/use-node-status.ts","../src/layouts/sidebar/code-block/CodeBlockList.vue","../src/layouts/sidebar/code-block/CodeBlockListPanel.vue","../src/layouts/sidebar/data-source/DataSourceConfigPanel.vue","../src/layouts/sidebar/data-source/DataSourceList.vue","../src/layouts/sidebar/data-source/DataSourceListPanel.vue","../src/components/ContentMenu.vue","../src/utils/content-menu.ts","../src/layouts/sidebar/layer/LayerMenu.vue","../src/layouts/sidebar/layer/LayerNodeTool.vue","../src/layouts/sidebar/layer/use-click.ts","../src/layouts/sidebar/layer/use-drag.ts","../src/utils/keybinding-config.ts","../src/layouts/sidebar/layer/use-keybinding.ts","../src/layouts/sidebar/layer/use-node-status.ts","../src/layouts/sidebar/layer/LayerPanel.vue","../src/layouts/sidebar/ComponentListPanel.vue","../src/layouts/sidebar/Sidebar.vue","../src/utils/scroll-viewer.ts","../src/components/ScrollBar.vue","../src/components/ScrollViewer.vue","../src/services/ui.ts","../src/hooks/use-stage.ts","../src/components/FloatingBox.vue","../src/layouts/workspace/viewer/NodeListMenu.vue","../src/layouts/workspace/viewer/ViewerMenu.vue","../src/layouts/workspace/viewer/Stage.vue","../src/layouts/workspace/Breadcrumb.vue","../src/layouts/workspace/PageBarScrollContainer.vue","../src/layouts/workspace/PageBar.vue","../src/layouts/workspace/Workspace.vue","../src/services/codeBlock.ts","../src/services/componentList.ts","../src/services/events.ts","../src/services/keybinding.ts","../src/editorProps.ts","../src/initService.ts","../src/Editor.vue","../src/index.ts"],"sourcesContent":["/*\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 = <K extends keyof InstallOptions>(key: K): InstallOptions[K] => $TMAGIC_EDITOR[key];\n\nexport { getConfig, setConfig };\n","<template>\n <div :class=\"`magic-code-editor`\">\n <Teleport to=\"body\" :disabled=\"!fullScreen\">\n <div\n :class=\"`magic-code-editor-wrapper${fullScreen ? ' full-screen' : ''}`\"\n :style=\"!fullScreen && height ? `height: ${height}` : '100%'\"\n >\n <TMagicButton\n class=\"magic-code-editor-full-screen-icon\"\n circle\n size=\"small\"\n :icon=\"FullScreen\"\n @click=\"fullScreenHandler\"\n ></TMagicButton>\n <div ref=\"codeEditor\" class=\"magic-code-editor-content\"></div>\n </div>\n </Teleport>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { onMounted, onUnmounted, ref, watch } from 'vue';\nimport { FullScreen } from '@element-plus/icons-vue';\nimport { throttle } from 'lodash-es';\nimport * as monaco from 'monaco-editor';\nimport serialize from 'serialize-javascript';\n\nimport { TMagicButton } from '@tmagic/design';\n\nimport { getConfig } from '@editor/utils/config';\n\ndefineOptions({\n name: 'MEditorCodeEditor',\n});\n\nconst props = withDefaults(\n defineProps<{\n initValues?: any;\n modifiedValues?: any;\n type?: 'diff';\n language?: string;\n options?: {\n [key: string]: any;\n };\n height?: string;\n autoSave?: boolean;\n parse?: boolean;\n }>(),\n {\n initValues: '',\n autoSave: true,\n language: 'javascript',\n options: () => ({\n tabSize: 2,\n }),\n parse: false,\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 if (language === 'json') {\n value = JSON.stringify(v, null, 2);\n } else {\n value = serialize(v, {\n space: 2,\n unsafe: true,\n }).replace(/\"(\\w+)\":\\s/g, '$1: ');\n }\n } else {\n value = v;\n }\n if (language === 'javascript' && value.startsWith('{') && value.endsWith('}')) {\n value = `(${value})`;\n }\n return value;\n};\n\nconst parse = (v: string | any, language: string): any => {\n if (typeof v !== 'string') {\n return v;\n }\n\n if (language === 'json') {\n return JSON.parse(v);\n }\n\n return getConfig('parseDSL')(v);\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.toLocaleLowerCase());\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 const newValue = getEditorValue();\n values.value = newValue;\n emit('save', props.parse ? parse(newValue, props.language) : newValue);\n }\n });\n\n if (props.type !== 'diff' && props.autoSave) {\n vsEditor?.onDidBlurEditorWidget(() => {\n const newValue = getEditorValue();\n if (values.value !== newValue) {\n values.value = newValue;\n emit('save', props.parse ? parse(newValue, props.language) : newValue);\n }\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\nconst fullScreen = ref(false);\nconst fullScreenHandler = () => {\n fullScreen.value = !fullScreen.value;\n setTimeout(() => {\n vsEditor?.focus();\n vsEditor?.layout();\n vsDiffEditor?.focus();\n vsDiffEditor?.layout();\n });\n};\n\ndefineExpose({\n values,\n\n getEditor() {\n return vsEditor || vsDiffEditor;\n },\n\n getVsEditor() {\n return vsEditor;\n },\n\n getVsDiffEditor() {\n return vsDiffEditor;\n },\n\n setEditorValue,\n getEditorValue,\n\n focus() {\n vsEditor?.focus();\n vsDiffEditor?.focus();\n },\n});\n</script>\n","<template>\n <MagicCodeEditor\n :height=\"config.height\"\n :init-values=\"model[name]\"\n :language=\"config.language\"\n :options=\"{\n ...config.options,\n readOnly: disabled,\n }\"\n :parse=\"config.parse\"\n @save=\"save\"\n ></MagicCodeEditor>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { FieldProps } from '@tmagic/form';\n\nimport MagicCodeEditor from '@editor/layouts/CodeEditor.vue';\n\ndefineOptions({\n name: 'MEditorCode',\n});\n\nconst emit = defineEmits<{\n change: [value: string | any];\n}>();\n\nconst props = withDefaults(\n defineProps<\n FieldProps<{\n language?: string;\n options?: {\n [key: string]: any;\n };\n height?: string;\n parse?: boolean;\n }>\n >(),\n {\n disabled: false,\n },\n);\n\nconst save = (v: string | any) => {\n props.model[props.name] = v;\n emit('change', v);\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>\nimport { computed, reactive, watch } from 'vue';\nimport serialize from 'serialize-javascript';\n\nimport type { FieldProps } from '@tmagic/form';\n\nimport { getConfig } from '@editor/utils/config';\n\ndefineOptions({\n name: 'MEditorCodeLink',\n});\n\nconst props = defineProps<\n FieldProps<{\n type: 'code-link';\n name: string;\n text?: string;\n formTitle?: string;\n codeOptions?: Object;\n }>\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 const parseDSL = getConfig('parseDSL');\n props.model[props.name] = parseDSL(`(${v[props.name]})`);\n emit('change', props.model[props.name]);\n } catch (e) {\n console.error(e);\n }\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>\nimport { computed, inject, watch } from 'vue';\nimport { isEmpty } from 'lodash-es';\n\nimport { TMagicCard } from '@tmagic/design';\nimport type { FieldProps } from '@tmagic/form';\nimport { HookType } from '@tmagic/schema';\n\nimport type { Services } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorCodeSelect',\n});\n\nconst emit = defineEmits(['change']);\n\nconst services = inject<Services>('services');\n\nconst props = withDefaults(\n defineProps<\n FieldProps<{\n className?: string;\n }>\n >(),\n {},\n);\n\nconst codeConfig = computed(() => ({\n type: 'group-list',\n name: 'hookData',\n enableToggleMode: false,\n expandAll: true,\n titleKey: 'codeId',\n items: [\n {\n type: 'code-select-col',\n name: 'codeId',\n labelWidth: 0,\n disabled: () => !services?.codeBlockService.getEditStatus(),\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","<template>\n <component\n :is=\"slideType === 'box' ? MFormBox : MFormDrawer\"\n class=\"m-editor-code-block-editor\"\n ref=\"fomDrawer\"\n label-width=\"80px\"\n :close-on-press-escape=\"false\"\n :title=\"content.name\"\n :width=\"size\"\n :config=\"functionConfig\"\n :values=\"content\"\n :disabled=\"disabled\"\n :before-close=\"beforeClose\"\n @change=\"changeHandler\"\n @submit=\"submitForm\"\n @error=\"errorHandler\"\n @open=\"openHandler\"\n @closed=\"closedHandler\"\n >\n <template #left>\n <TMagicButton type=\"primary\" text @click=\"difVisible = true\">查看修改</TMagicButton>\n </template>\n </component>\n\n <TMagicDialog v-model=\"difVisible\" title=\"查看修改\" fullscreen>\n <div style=\"display: flex; margin-bottom: 10px\">\n <div style=\"flex: 1\"><TMagicTag size=\"small\" type=\"info\">修改前</TMagicTag></div>\n <div style=\"flex: 1\"><TMagicTag size=\"small\" type=\"success\">修改后</TMagicTag></div>\n </div>\n\n <CodeEditor\n v-if=\"difVisible\"\n ref=\"magicVsEditor\"\n type=\"diff\"\n language=\"json\"\n :initValues=\"content.content\"\n :modifiedValues=\"fomDrawer?.form?.values.content\"\n :style=\"`height: ${height - 200}px`\"\n ></CodeEditor>\n\n <template #footer>\n <span class=\"dialog-footer\">\n <TMagicButton size=\"small\" @click=\"difVisible = false\">取消</TMagicButton>\n <TMagicButton size=\"small\" type=\"primary\" @click=\"diffChange\">确定</TMagicButton>\n </span>\n </template>\n </TMagicDialog>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, onUnmounted, ref } from 'vue';\n\nimport { TMagicButton, TMagicDialog, tMagicMessage, tMagicMessageBox, TMagicTag } from '@tmagic/design';\nimport { ColumnConfig, FormConfig, FormState, MFormBox, MFormDrawer } from '@tmagic/form';\nimport type { CodeBlockContent } from '@tmagic/schema';\n\nimport CodeEditor from '@editor/layouts/CodeEditor.vue';\nimport type { Services, SlideType } from '@editor/type';\nimport { getConfig } from '@editor/utils/config';\n\ndefineOptions({\n name: 'MEditorCodeBlockEditor',\n});\n\nconst props = defineProps<{\n content: CodeBlockContent;\n disabled?: boolean;\n isDataSource?: boolean;\n dataSourceType?: string;\n slideType?: SlideType;\n}>();\n\nconst emit = defineEmits<{\n submit: [values: CodeBlockContent];\n}>();\n\nconst services = inject<Services>('services');\n\nconst difVisible = ref(false);\nconst height = ref(globalThis.innerHeight);\n\nconst windowReizehandler = () => {\n height.value = globalThis.innerHeight;\n};\n\nglobalThis.addEventListener('resize', windowReizehandler);\n\nonUnmounted(() => {\n globalThis.removeEventListener('resize', windowReizehandler);\n});\n\nconst magicVsEditor = ref<InstanceType<typeof CodeEditor>>();\n\nconst diffChange = () => {\n if (!magicVsEditor.value || !fomDrawer.value?.form) {\n return;\n }\n\n fomDrawer.value.form.values.content = magicVsEditor.value.getEditorValue();\n\n difVisible.value = false;\n};\n\nconst columnWidth = computed(() => services?.uiService.get('columnWidth'));\nconst size = computed(() =>\n columnWidth.value ? columnWidth.value.center + columnWidth.value.right - (props.isDataSource ? 100 : 0) : 600,\n);\n\nconst codeEditorHeight = ref('600px');\n\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 text: '组件',\n label: '组件',\n value: 'ui-select',\n },\n ],\n },\n ],\n};\n\nconst functionConfig = computed<FormConfig>(() => [\n {\n text: '名称',\n name: 'name',\n rules: [{ required: true, message: '请输入名称', trigger: 'blur' }],\n },\n {\n text: '描述',\n name: 'desc',\n },\n {\n text: '执行时机',\n name: 'timing',\n type: 'select',\n options: () => {\n const options = [\n { text: '初始化前', value: 'beforeInit' },\n { text: '初始化后', value: 'afterInit' },\n ];\n if (props.dataSourceType !== 'base') {\n options.push({ text: '请求前', value: 'beforeRequest' });\n options.push({ text: '请求后', value: 'afterRequest' });\n }\n return options;\n },\n display: () => props.isDataSource,\n },\n {\n type: 'table',\n border: true,\n text: '参数',\n enableFullscreen: false,\n enableToggleMode: false,\n name: 'params',\n dropSort: false,\n items: [\n {\n type: 'text',\n label: '参数名',\n name: 'name',\n },\n {\n type: 'text',\n label: '描述',\n name: 'extra',\n },\n services?.codeBlockService.getParamsColConfig() || defaultParamColConfig,\n ],\n },\n {\n name: 'content',\n type: 'vs-code',\n options: inject('codeOptions', {}),\n height: codeEditorHeight.value,\n onChange: (formState: FormState | undefined, code: string) => {\n try {\n // 检测js代码是否存在语法错误\n getConfig('parseDSL')(code);\n\n return code;\n } catch (error: any) {\n tMagicMessage.error(error.message);\n\n throw error;\n }\n },\n },\n]);\n\nconst submitForm = (values: CodeBlockContent) => {\n emit('submit', values);\n};\n\nconst errorHandler = (error: any) => {\n tMagicMessage.error(error.message);\n};\n\nconst fomDrawer = ref<InstanceType<typeof MFormDrawer>>();\n\nconst openHandler = () => {\n setTimeout(() => {\n if (fomDrawer.value) {\n const height = fomDrawer.value?.bodyHeight - 348 - (props.isDataSource ? 50 : 0);\n codeEditorHeight.value = `${height > 100 ? height : 600}px`;\n }\n });\n};\n\nconst changedValue = ref<CodeBlockContent>();\nconst changeHandler = (values: CodeBlockContent) => {\n changedValue.value = values;\n};\n\nconst beforeClose = (done: (cancel?: boolean) => void) => {\n if (!changedValue.value) {\n done();\n return;\n }\n tMagicMessageBox\n .confirm('当前代码块已修改,是否保存?', '提示', {\n confirmButtonText: '保存并关闭',\n cancelButtonText: '不保存并关闭',\n type: 'warning',\n distinguishCancelAndClose: true,\n })\n .then(() => {\n changedValue.value && submitForm(changedValue.value);\n done();\n })\n .catch((action: string) => {\n done(action === 'close');\n });\n};\n\nconst closedHandler = () => {\n changedValue.value = undefined;\n};\n\ndefineExpose({\n show() {\n fomDrawer.value?.show();\n },\n\n hide() {\n fomDrawer.value?.hide();\n },\n});\n</script>\n","import type { FormConfig } from '@tmagic/form';\n\nexport default function (): FormConfig {\n return [\n {\n name: 'id',\n type: 'hidden',\n },\n {\n name: 'type',\n text: '类型',\n type: 'hidden',\n defaultValue: 'base',\n },\n {\n name: 'title',\n text: '名称',\n rules: [\n {\n required: true,\n message: '请输入名称',\n },\n ],\n },\n {\n name: 'description',\n text: '描述',\n },\n ];\n}\n","import { FormConfig } from '@tmagic/form';\n\nexport default [\n {\n name: 'autoFetch',\n text: '自动请求',\n type: 'switch',\n defaultValue: true,\n },\n {\n name: 'responseOptions',\n items: [\n {\n name: 'dataPath',\n text: '数据路径',\n },\n ],\n },\n {\n type: 'fieldset',\n name: 'options',\n legend: 'HTTP 配置',\n items: [\n {\n name: 'url',\n text: 'URL',\n },\n {\n name: 'method',\n text: 'Method',\n type: 'select',\n options: [\n { text: 'GET', value: 'GET' },\n { text: 'POST', value: 'POST' },\n { text: 'PUT', value: 'PUT' },\n { text: 'DELETE', value: 'DELETE' },\n ],\n },\n {\n name: 'params',\n type: 'key-value',\n defaultValue: {},\n text: '参数',\n },\n {\n name: 'data',\n type: 'key-value',\n defaultValue: {},\n advanced: true,\n text: '请求体',\n },\n {\n name: 'headers',\n type: 'key-value',\n defaultValue: {},\n text: '请求头',\n },\n ],\n },\n] as FormConfig;\n","import { FormConfig, FormState } from '@tmagic/form';\nimport { DataSchema, DataSourceSchema } from '@tmagic/schema';\n\nimport BaseFormConfig from './formConfigs/base';\nimport HttpFormConfig from './formConfigs/http';\n\nconst fillConfig = (config: FormConfig): FormConfig => [\n ...BaseFormConfig(),\n ...config,\n {\n type: 'tab',\n items: [\n {\n title: '数据定义',\n items: [\n {\n name: 'fields',\n type: 'data-source-fields',\n defaultValue: () => [],\n },\n ],\n },\n {\n title: '方法定义',\n items: [\n {\n name: 'methods',\n type: 'data-source-methods',\n defaultValue: () => [],\n },\n ],\n },\n {\n title: '事件配置',\n display: false,\n items: [\n {\n name: 'events',\n src: 'datasource',\n type: 'event-select',\n },\n ],\n },\n {\n title: 'mock数据',\n items: [\n {\n name: 'mocks',\n type: 'data-source-mocks',\n defaultValue: () => [],\n },\n ],\n },\n {\n title: '请求参数裁剪',\n display: (formState: FormState, { model }: any) => model.type === 'http',\n items: [\n {\n name: 'beforeRequest',\n type: 'vs-code',\n parse: true,\n height: '600px',\n },\n ],\n },\n {\n title: '响应数据裁剪',\n display: (formState: FormState, { model }: any) => model.type === 'http',\n items: [\n {\n name: 'afterResponse',\n type: 'vs-code',\n parse: true,\n height: '600px',\n },\n ],\n },\n ],\n },\n];\n\nexport const getFormConfig = (type: string, configs: Record<string, FormConfig>): FormConfig => {\n switch (type) {\n case 'base':\n return fillConfig([]);\n case 'http':\n return fillConfig(HttpFormConfig);\n default:\n return fillConfig(configs[type] || []);\n }\n};\n\nexport const getFormValue = (type: string, values: Partial<DataSourceSchema>): Partial<DataSourceSchema> => {\n if (type !== 'http') {\n return values;\n }\n\n return {\n beforeRequest: `(options, context) => {\n /**\n * 用户可以直接编写函数,在原始接口调用之前,会运行该函数,将这个函数的返回值作为该数据源接口的入参\n *\n * options: HttpOptions\n *\n * interface HttpOptions {\n * // 请求链接\n * url: string;\n * // query参数\n * params?: Record<string, string>;\n * // body数据\n * data?: Record<string, any>;\n * // 请求头\n * headers?: Record<string, string>;\n * // 请求方法 GET/POST\n * method?: Method;\n * }\n *\n * context:上下文对象\n *\n * interface Content {\n * app: AppCore;\n * dataSource: HttpDataSource;\n * }\n *\n * return: HttpOptions\n */\n\n // 此处的返回值会作为这个接口的入参\n return options;\n}`,\n afterResponse: `(response, context) => {\n /**\n * 用户可以直接编写函数,在原始接口返回之后,会运行该函数,将这个函数的返回值作为该数据源接口的返回\n\n * context:上下文对象\n *\n * interface Content {\n * app: AppCore;\n * dataSource: HttpDataSource;\n * }\n *\n */\n\n // 此处的返回值会作为这个接口的返回值\n return response;\n}`,\n ...values,\n };\n};\n\nexport const getDisplayField = (dataSources: DataSourceSchema[], key: string) => {\n const displayState: { value: string; type: 'var' | 'text' }[] = [];\n\n // 匹配es6字符串模块\n const matches = key.matchAll(/\\$\\{([\\s\\S]+?)\\}/g);\n let index = 0;\n for (const match of matches) {\n if (typeof match.index === 'undefined') break;\n\n // 字符串常量\n displayState.push({\n type: 'text',\n value: key.substring(index, match.index),\n });\n\n let dsText = '';\n let ds: DataSourceSchema | undefined;\n let fields: DataSchema[] | undefined;\n\n // 将模块解析成数据源对应的值\n match[1].split('.').forEach((item, index) => {\n if (index === 0) {\n ds = dataSources.find((ds) => ds.id === item);\n dsText += ds?.title || item;\n fields = ds?.fields;\n return;\n }\n\n const field = fields?.find((field) => field.name === item);\n fields = field?.fields;\n dsText += `.${field?.title || item}`;\n });\n\n displayState.push({\n type: 'var',\n value: dsText,\n });\n\n index = match.index + match[0].length;\n }\n\n if (index < key.length) {\n displayState.push({\n type: 'text',\n value: key.substring(index),\n });\n }\n\n return displayState;\n};\n","/**\n * @param {Array} middleware\n * @return {Function}\n */\nexport const compose = (middleware: Function[], isAsync: boolean) => {\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> | void {\n if (i <= index) {\n const error = new Error('next() 被多次调用');\n if (isAsync) {\n return Promise.reject(error);\n }\n throw error;\n }\n index = i;\n let fn = middleware[i];\n if (i === middleware.length && next) fn = next;\n if (!fn) {\n if (isAsync) {\n return Promise.resolve();\n }\n return;\n }\n\n if (isAsync) {\n try {\n return Promise.resolve(fn(...args, dispatch.bind(null, i + 1)));\n } catch (err) {\n return Promise.reject(err);\n }\n }\n try {\n return fn(...args, dispatch.bind(null, i + 1));\n } catch (err) {\n throw 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 = (\n args: any[],\n scope: any,\n sourceMethod: any,\n beforeMethodName: string,\n afterMethodName: string,\n fn: (args: any[], next?: Function | undefined) => void,\n) => {\n try {\n let beforeArgs = args;\n\n for (const beforeMethod of scope.pluginOptionsList[beforeMethodName]) {\n beforeArgs = 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 = fn(beforeArgs, sourceMethod.bind(scope));\n\n for (const afterMethod of scope.pluginOptionsList[afterMethodName]) {\n returnValue = afterMethod(returnValue, ...beforeArgs);\n\n if (isError(returnValue)) throw returnValue;\n }\n\n return returnValue;\n } catch (error) {\n throw error;\n }\n};\n\nconst doAsyncAction = 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> | 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: { name: string; isAsync: boolean }[] = [], serialMethods: string[] = []) {\n super();\n\n methods.forEach(({ name: propertyName, isAsync }) => {\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], isAsync);\n Object.defineProperty(scope, propertyName, {\n value: isAsync\n ? async (...args: any[]) => {\n if (!serialMethods.includes(propertyName)) {\n return doAsyncAction(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 doAsyncAction(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 : (...args: any[]) => doAction(args, scope, sourceMethod, beforeMethodName, afterMethodName, fn),\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","import { reactive } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport type { EventOption } from '@tmagic/core';\nimport type { FormConfig } from '@tmagic/form';\nimport type { DataSourceSchema } from '@tmagic/schema';\nimport { guid } from '@tmagic/utils';\n\nimport type { DatasourceTypeOption } from '@editor/type';\nimport { getFormConfig, getFormValue } from '@editor/utils/data-source';\n\nimport BaseService from './BaseService';\n\ninterface State {\n datasourceTypeList: DatasourceTypeOption[];\n dataSources: DataSourceSchema[];\n editable: boolean;\n configs: Record<string, FormConfig>;\n values: Record<string, Partial<DataSourceSchema>>;\n events: Record<string, EventOption[]>;\n methods: Record<string, EventOption[]>;\n}\n\ntype StateKey = keyof State;\nclass DataSource extends BaseService {\n private state = reactive<State>({\n datasourceTypeList: [],\n dataSources: [],\n editable: true,\n configs: {},\n values: {},\n events: {},\n methods: {},\n });\n\n public set<K extends StateKey, T extends State[K]>(name: K, value: T) {\n this.state[name] = value;\n }\n\n public get<K extends StateKey>(name: K): State[K] {\n return this.state[name];\n }\n\n public getFormConfig(type = 'base') {\n return getFormConfig(type, this.get('configs'));\n }\n\n public setFormConfig(type: string, config: FormConfig) {\n this.get('configs')[type] = config;\n }\n\n public getFormValue(type = 'base') {\n return getFormValue(type, this.get('values')[type]);\n }\n\n public setFormValue(type: string, value: Partial<DataSourceSchema>) {\n this.get('values')[type] = value;\n }\n\n public getFormEvent(type = 'base') {\n return this.get('events')[type] || [];\n }\n\n public setFormEvent(type: string, value: EventOption[] = []) {\n this.get('events')[type] = value;\n }\n\n public getFormMethod(type = 'base') {\n return this.get('methods')[type] || [];\n }\n\n public setFormMethod(type: string, value: EventOption[] = []) {\n this.get('methods')[type] = value;\n }\n\n public add(config: DataSourceSchema) {\n const newConfig = {\n ...config,\n id: this.createId(),\n };\n\n this.get('dataSources').push(newConfig);\n\n this.emit('add', newConfig);\n\n return newConfig;\n }\n\n public update(config: DataSourceSchema) {\n const dataSources = this.get('dataSources');\n\n const index = dataSources.findIndex((ds) => ds.id === config.id);\n\n dataSources[index] = cloneDeep(config);\n\n this.emit('update', config);\n\n return config;\n }\n\n public remove(id: string) {\n const dataSources = this.get('dataSources');\n const index = dataSources.findIndex((ds) => ds.id === id);\n dataSources.splice(index, 1);\n\n this.emit('remove', id);\n }\n\n public getDataSourceById(id: string) {\n return this.get('dataSources').find((ds) => ds.id === id);\n }\n\n public resetState() {\n this.set('dataSources', []);\n }\n\n public destroy() {\n this.removeAllListeners();\n this.resetState();\n this.removeAllPlugins();\n }\n\n private createId(): string {\n return `ds_${guid()}`;\n }\n}\n\nexport type DataSourceService = DataSource;\n\nexport default new DataSource();\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 { FormConfig, FormState, TabPaneConfig } from '@tmagic/form';\n\nimport dataSourceService from '@editor/services/dataSource';\n\nconst arrayOptions = [\n { text: '包含', value: 'include' },\n { text: '不包含', value: 'not_include' },\n];\n\nconst eqOptions = [\n { text: '等于', value: '=' },\n { text: '不等于', value: '!=' },\n];\n\nconst numberOptions = [\n { text: '大于', value: '>' },\n { text: '大于等于', value: '>=' },\n { text: '小于', value: '<' },\n { text: '小于等于', value: '<=' },\n { text: '在范围内', value: 'between' },\n { text: '不在范围内', value: 'not_between' },\n];\n\nexport const styleTabConfig: TabPaneConfig = {\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: 'borderWidth',\n text: '宽度',\n defaultValue: '0',\n },\n {\n name: 'borderColor',\n text: '颜色',\n type: 'colorPicker',\n },\n {\n name: 'borderStyle',\n text: '样式',\n type: 'select',\n defaultValue: 'none',\n options: [\n { text: 'none', value: 'none' },\n { text: 'hidden', value: 'hidden' },\n { text: 'dotted', value: 'dotted' },\n { text: 'dashed', value: 'dashed' },\n { text: 'solid', value: 'solid' },\n { text: 'double', value: 'double' },\n { text: 'groove', value: 'groove' },\n { text: 'ridge', value: 'ridge' },\n { text: 'inset', value: 'inset' },\n { text: 'outset', value: 'outset' },\n ],\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\nexport const eventTabConfig: TabPaneConfig = {\n title: '事件',\n items: [\n {\n name: 'events',\n src: 'component',\n labelWidth: '100px',\n type: 'event-select',\n },\n ],\n};\n\nexport const advancedTabConfig: TabPaneConfig = {\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\nexport const displayTabConfig: TabPaneConfig = {\n title: '显示条件',\n display: (vm: FormState, { model }: any) => model.type !== 'page',\n items: [\n {\n type: 'groupList',\n name: 'displayConds',\n titlePrefix: '条件组',\n expandAll: true,\n items: [\n {\n type: 'table',\n name: 'cond',\n items: [\n {\n type: 'data-source-field-select',\n name: 'field',\n value: 'key',\n label: '字段',\n },\n {\n type: 'select',\n options: (mForm, { model }) => {\n const [id, field] = model.field;\n\n const ds = dataSourceService.getDataSourceById(id);\n\n const type = ds?.fields.find((f) => f.name === field)?.type;\n\n if (type === 'array') {\n return arrayOptions;\n }\n\n if (type === 'boolean') {\n return [\n { text: '是', value: 'is' },\n { text: '不是', value: 'not' },\n ];\n }\n\n if (type === 'number') {\n return [...eqOptions, ...numberOptions];\n }\n\n if (type === 'string') {\n return [...arrayOptions, ...eqOptions];\n }\n\n return [...arrayOptions, ...eqOptions, ...numberOptions];\n },\n label: '条件',\n name: 'op',\n },\n {\n label: '值',\n items: [\n {\n name: 'value',\n type: (mForm, { model }) => {\n const [id, field] = model.field;\n\n const ds = dataSourceService.getDataSourceById(id);\n\n const type = ds?.fields.find((f) => f.name === field)?.type;\n\n if (type === 'number') {\n return 'number';\n }\n\n if (type === 'boolean') {\n return 'select';\n }\n\n return 'text';\n },\n options: [\n { text: 'true', value: true },\n { text: 'false', value: false },\n ],\n display: (vm, { model }) => !['between', 'not_between'].includes(model.op),\n },\n {\n name: 'range',\n type: 'number-range',\n display: (vm, { model }) => ['between', 'not_between'].includes(model.op),\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n};\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 { ...styleTabConfig },\n { ...eventTabConfig },\n { ...advancedTabConfig },\n { ...displayTabConfig },\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 { ColumnConfig, FilterFunction, 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 RenderType,\n UpdateDragEl,\n} from '@tmagic/stage';\n\nimport type { CodeBlockService } from './services/codeBlock';\nimport type { ComponentListService } from './services/componentList';\nimport type { DataSourceService } from './services/dataSource';\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 { KeybindingService } from './services/keybinding';\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 interface FrameworkSlots {\n header(props: {}): any;\n nav(props: {}): any;\n 'content-before'(props: {}): any;\n 'content-after'(props: {}): any;\n 'src-code'(props: {}): any;\n sidebar(props: {}): any;\n empty(props: {}): any;\n workspace(props: {}): any;\n 'props-panel'(props: {}): any;\n 'footer'(props: {}): any;\n}\n\nexport interface WorkspaceSlots {\n stage(props: {}): any;\n 'workspace-content'(props: {}): any;\n 'page-bar-title'(props: { page: MPage }): any;\n 'page-bar-popover'(props: { page: MPage }): any;\n}\n\nexport interface ComponentListPanelSlots {\n 'component-list-panel-header'(props: {}): any;\n 'component-list-item'(props: { component: ComponentItem }): any;\n}\n\nexport interface CodeBlockListPanelSlots extends CodeBlockListSlots {\n 'code-block-panel-search'(props: {}): any;\n 'code-block-panel-header'(props: {}): any;\n}\n\nexport interface CodeBlockListSlots {\n 'code-block-panel-tool'(props: { id: Id; data: any }): any;\n}\n\nexport interface DataSourceListSlots {\n 'data-source-panel-tool'(props: { data: any }): any;\n}\n\nexport interface LayerNodeSlots {\n 'layer-node-content'(props: { data: MNode }): any;\n 'layer-node-tool'(props: { data: MNode }): any;\n 'layer-node-label'(props: { data: MNode }): any;\n}\n\nexport interface LayerPanelSlots extends LayerNodeSlots {\n 'layer-panel-header'(props: {}): any;\n}\n\nexport interface PropsPanelSlots {\n 'props-panel-header'(props: {}): any;\n}\n\nexport type SidebarSlots = LayerPanelSlots & CodeBlockListPanelSlots & ComponentListPanelSlots & DataSourceListSlots;\n\nexport type BeforeAdd = (config: MNode, parent: MContainer) => Promise<MNode> | MNode;\nexport type GetConfig = (config: FormConfig) => Promise<FormConfig> | FormConfig;\n\nexport interface InstallOptions {\n parseDSL: <T = any>(dsl: string) => T;\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 dataSourceService: DataSourceService;\n keybindingService: KeybindingService;\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 renderType: RenderType;\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, Partial<MNode>>;\n relateIdMap: Record<Id, Id>;\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 | string;\n height: number | string;\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: {\n width: number;\n height: number;\n };\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 /** slide 拖拽悬浮窗 state */\n floatBox: Map<\n string,\n {\n status: boolean;\n zIndex: number;\n top: number;\n left: number;\n }\n >;\n\n /** 是否隐藏侧边栏 */\n hideSlideBar: 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 id?: string | number;\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 /** slide 唯一标识 key */\n $key: string;\n\n /** 组件扩展参数 */\n boxComponentConfig?: {\n /** Vue3组件 */\n component?: any;\n /** 传入组件的props对象 */\n props?: Record<string, any>;\n };\n}\n\n/**\n * component-list: 组件列表\n * layer: 已选组件树\n * code-block: 代码块\n */\nexport type SideItem = 'component-list' | 'layer' | 'code-block' | 'data-source' | SideComponent;\n\n/** 工具栏 */\nexport interface SideBarData {\n /** 容器类型 */\n type: 'tabs';\n /** 默认激活的内容 */\n status: string;\n /** panel列表 */\n items: SideItem[];\n}\n\n/**\n * drawer 抽屉\n * box 悬浮窗\n */\nexport type SlideType = 'drawer' | 'box';\n\nexport interface ComponentItem {\n /** 显示文案 */\n text: string;\n /** 详情,用于tooltip */\n desc?: 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 /** 代码块DSL数据源 */\n codeDsl: CodeBlockDSL | null;\n /** 代码块是否可编辑 */\n editable: boolean;\n /** list模式下左侧展示的代码列表 */\n combineIds: string[];\n /** 为业务逻辑预留的不可删除的代码块列表,由业务逻辑维护(如代码块上线后不可删除) */\n undeletableList: Id[];\n paramsColConfig?: ColumnConfig;\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 src: 'datasource' | 'component';\n labelWidth?: string;\n /** 事件名称表单配置 */\n eventNameConfig?: FormItem;\n /** 动作类型配置 */\n actionTypeConfig?: FormItem;\n /** 联动组件配置 */\n targetCompConfig?: FormItem;\n /** 联动组件动作配置 */\n compActionConfig?: FormItem;\n /** 联动代码配置 */\n codeActionConfig?: FormItem;\n /** 联动数据源配置 */\n dataSourceActionConfig?: FormItem;\n}\n\nexport enum KeyBindingCommand {\n /** 复制 */\n COPY_NODE = 'tmagic-system-copy-node',\n /** 粘贴 */\n PASTE_NODE = 'tmagic-system-paste-node',\n /** 删除 */\n DELETE_NODE = 'tmagic-system-delete-node',\n /** 剪切 */\n CUT_NODE = 'tmagic-system-cut-node',\n /** 撤销 */\n UNDO = 'tmagic-system-undo',\n /** 重做 */\n REDO = 'tmagic-system-redo',\n /** 放大 */\n ZOOM_IN = 'tmagic-system-zoom-in',\n /** 缩小 */\n ZOOM_OUT = 'tmagic-system-zoom-out',\n /** 缩放到实际大小 */\n ZOOM_RESET = 'tmagic-system-zoom-reset',\n /** 缩放以适应 */\n ZOOM_FIT = 'tmagic-system-zoom-fit',\n /** 向上移动1px */\n MOVE_UP_1 = 'tmagic-system-move-up-1',\n /** 向下移动1px */\n MOVE_DOWN_1 = 'tmagic-system-move-down-1',\n /** 向左移动1px */\n MOVE_LEFT_1 = 'tmagic-system-move-left-1',\n /** 向右移动1px */\n MOVE_RIGHT_1 = 'tmagic-system-move-right-1',\n /** 向上移动10px */\n MOVE_UP_10 = 'tmagic-system-move-up-10',\n /** 向下移动10px */\n MOVE_DOWN_10 = 'tmagic-system-move-down-10',\n /** 向左移动10px */\n MOVE_LEFT_10 = 'tmagic-system-move-left-10',\n /** 向右移动10px */\n MOVE_RIGHT_10 = 'tmagic-system-move-right-10',\n /** 切换组件 */\n SWITCH_NODE = 'tmagic-system-switch-node',\n}\n\nexport interface KeyBindingItem {\n command: KeyBindingCommand | string;\n keybinding?: string | string[];\n when: [string, 'keyup' | 'keydown'][];\n}\n\nexport interface KeyBindingCacheItem {\n type: string;\n command: KeyBindingCommand | string;\n keybinding?: string | string[];\n eventType: 'keyup' | 'keydown';\n binded: boolean;\n}\n\nexport interface CodeSelectColConfig {\n type: 'code-select-col';\n name: string;\n text: string;\n labelWidth?: number | string;\n disabled?: boolean | FilterFunction;\n display?: boolean | FilterFunction;\n}\n\nexport interface DataSourceMethodSelectConfig {\n type: 'data-source-method-select';\n name: string;\n text: string;\n labelWidth?: number | string;\n disabled?: boolean | FilterFunction;\n display?: boolean | FilterFunction;\n}\n\nexport interface DataSourceFieldSelectConfig {\n type: 'data-source-field-select';\n name: string;\n value?: 'key' | 'value';\n labelWidth?: number | string;\n disabled?: boolean | FilterFunction;\n display?: boolean | FilterFunction;\n}\n\n/** 可新增的数据源类型选项 */\nexport interface DatasourceTypeOption {\n /** 数据源类型 */\n type: string;\n /** 数据源名称 */\n text: string;\n}\n\n/** 组件树节点状态 */\nexport interface LayerNodeStatus {\n /** 显隐 */\n visible: boolean;\n /** 展开子节点 */\n expand: boolean;\n /** 选中 */\n selected: boolean;\n /** 是否可拖拽 */\n draggable: boolean;\n}\n\n/** 拖拽类型 */\nexport enum DragType {\n /** 从组件列表拖到画布 */\n COMPONENT_LIST = 'component-list',\n /** 拖动组件树节点 */\n LAYER_TREE = 'layer-tree',\n}\n\n/** 当uiService.get('uiSelectMode')为true,点击组件(包括任何形式,组件树/画布)时触发的事件名 */\nexport const UI_SELECT_MODE_EVENT_NAME = 'ui-select';\n\nexport interface TreeNodeData {\n id: Id;\n name?: string;\n items?: TreeNodeData[];\n [key: string]: any;\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 { Id, 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 = (id: Id, parent: MContainer | MApp): number => {\n const items = parent?.items || [];\n return items.findIndex((item: MNode) => `${item.id}` === `${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 setChilrenLayout = (node: MContainer, layout: Layout) => {\n node.items?.forEach((child: MNode) => {\n setLayout(child, layout);\n });\n return node;\n};\n\nexport const setLayout = (node: MNode, layout: Layout) => {\n if (isPop(node)) return;\n\n const style = node.style || {};\n\n // 是 fixed 不做处理\n if (style.position === 'fixed') return;\n\n if (layout !== Layout.RELATIVE) {\n style.position = 'absolute';\n } else {\n node.style = getRelativeStyle(style);\n node.style.right = 'auto';\n node.style.bottom = 'auto';\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\nexport interface NodeItem {\n items?: NodeItem[];\n [key: string]: any;\n}\n\nexport const traverseNode = <T extends NodeItem = NodeItem>(\n node: T,\n cb: (node: T, parents: T[]) => void,\n parents: T[] = [],\n) => {\n cb(node, parents);\n\n if (node.items?.length) {\n parents.push(node);\n node.items.forEach((item) => {\n traverseNode(item as T, cb, [...parents]);\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 */\nimport { reactive } from 'vue';\n\nimport { DepTargetType, type Target, Watcher } from '@tmagic/dep';\nimport type { Id, MNode } from '@tmagic/schema';\n\nimport BaseService from './BaseService';\n\nclass Dep extends BaseService {\n private watcher = new Watcher({ initialTargets: reactive({}) });\n\n public removeTargets(type: string = DepTargetType.DEFAULT) {\n this.watcher.removeTargets(type);\n\n this.emit('remove-target');\n }\n\n public getTargets(type: string = DepTargetType.DEFAULT) {\n return this.watcher.getTargets(type);\n }\n\n public getTarget(id: Id, type: string = DepTargetType.DEFAULT) {\n return this.watcher.getTarget(id, type);\n }\n\n public addTarget(target: Target) {\n this.watcher.addTarget(target);\n this.emit('add-target', target);\n }\n\n public removeTarget(id: Id, type: string = DepTargetType.DEFAULT) {\n this.watcher.removeTarget(id, type);\n this.emit('remove-target');\n }\n\n public clearTargets() {\n this.watcher.clearTargets();\n }\n\n public collect(nodes: MNode[], deep = false, type?: DepTargetType) {\n this.watcher.collect(nodes, deep, type);\n this.emit('collected', nodes, deep);\n }\n\n public clear(nodes?: MNode[]) {\n return this.watcher.clear(nodes);\n }\n\n public hasTarget(id: Id, type: string = DepTargetType.DEFAULT) {\n return this.watcher.hasTarget(id, type);\n }\n\n public hasSpecifiedTypeTarget(type: string = DepTargetType.DEFAULT): boolean {\n return this.watcher.hasSpecifiedTypeTarget(type);\n }\n}\n\nexport type DepService = Dep;\n\nexport default new Dep();\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 = 20) {\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 * 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 { getConfig } from '@editor/utils/config';\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([\n { name: 'getStorage', isAsync: false },\n { name: 'getNamespace', isAsync: false },\n { name: 'clear', isAsync: false },\n { name: 'getItem', isAsync: false },\n { name: 'removeItem', isAsync: false },\n { name: 'setItem', isAsync: false },\n ]);\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 getStorage(): Storage {\n return this.storage;\n }\n\n public getNamespace(): string {\n return this.namespace;\n }\n\n /**\n * 清理,支持storageService.usePlugin\n */\n public clear(): void {\n const storage = this.getStorage();\n storage.clear();\n }\n /**\n * 获取存储项,支持storageService.usePlugin\n */\n public getItem(key: string, options: Options = {}): any {\n const storage = this.getStorage();\n const namespace = 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 return getConfig('parseDSL')(`(${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 key(index: number): string | null {\n const storage = this.getStorage();\n return storage.key(index);\n }\n\n /**\n * 移除存储项,支持storageService.usePlugin\n */\n public removeItem(key: string, options: Options = {}): void {\n const storage = this.getStorage();\n const namespace = this.getNamespace();\n storage.removeItem(`${options.namespace || namespace}:${key}`);\n }\n\n /**\n * 设置存储项,支持storageService.usePlugin\n */\n public setItem(key: string, value: any, options: Options = {}): void {\n const storage = this.getStorage();\n const namespace = 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, get, mergeWith, set } from 'lodash-es';\n\nimport { DepTargetType } from '@tmagic/dep';\nimport type { FormConfig } from '@tmagic/form';\nimport type { Id, MComponent, MNode } from '@tmagic/schema';\nimport { guid, toLine } from '@tmagic/utils';\n\nimport depService from '@editor/services/dep';\nimport editorService from '@editor/services/editor';\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 relateIdMap: {},\n });\n\n constructor() {\n super([\n { name: 'setPropsConfig', isAsync: true },\n { name: 'getPropsConfig', isAsync: true },\n { name: 'setPropsValue', isAsync: true },\n { name: 'getPropsValue', isAsync: true },\n { name: 'createId', isAsync: false },\n { name: 'setNewItemId', isAsync: true },\n { name: 'fillConfig', isAsync: true },\n { name: 'getDefaultPropsValue', isAsync: true },\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, Partial<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: Partial<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 * 如果没有相同ID并且force为false则保持不变\n * @param {Object} config 组件配置\n * @param {Boolean} force 是否强制设置新的ID\n */\n /* eslint no-param-reassign: [\"error\", { \"props\": false }] */\n public async setNewItemId(config: MNode, force = true) {\n if (force || editorService.getNodeById(config.id)) {\n const newId = await this.createId(config.type || 'component');\n this.setRelateId(config.id, newId);\n config.id = newId;\n }\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 /**\n * 替换关联ID\n * @param originConfigs 原组件配置\n * @param targetConfigs 待替换的组件配置\n */\n public replaceRelateId(originConfigs: MNode[], targetConfigs: MNode[]) {\n const relateIdMap = this.getRelateIdMap();\n if (Object.keys(relateIdMap).length === 0) return;\n const target = depService.getTarget(DepTargetType.RELATED_COMP_WHEN_COPY, DepTargetType.RELATED_COMP_WHEN_COPY);\n if (!target) return;\n originConfigs.forEach((config: MNode) => {\n const newId = relateIdMap[config.id];\n const targetConfig = targetConfigs.find((targetConfig) => targetConfig.id === newId);\n if (!targetConfig) return;\n target.deps[config.id]?.keys?.forEach((fullKey) => {\n const relateOriginId = get(config, fullKey);\n const relateTargetId = relateIdMap[relateOriginId];\n if (!relateTargetId) return;\n set(targetConfig, fullKey, relateTargetId);\n });\n });\n }\n\n /**\n * 清除setNewItemId前后映射关系\n */\n public clearRelateId() {\n this.state.relateIdMap = {};\n }\n\n public destroy() {\n this.resetState();\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n\n /**\n * 获取setNewItemId前后映射关系\n * @param oldId 原组件ID\n * @returns 新旧ID映射\n */\n private getRelateIdMap() {\n return this.state.relateIdMap;\n }\n\n /**\n * 记录setNewItemId前后映射关系\n * @param oldId 原组件ID\n * @param newId 分配的新ID\n */\n private setRelateId(oldId: Id, newId: Id) {\n this.state.relateIdMap[oldId] = newId;\n }\n}\n\nexport type PropsService = Props;\n\nexport default new Props();\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 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, get, isObject, mergeWith, uniq } from 'lodash-es';\n\nimport { DepTargetType } from '@tmagic/dep';\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 depService from '@editor/services/dep';\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 setChilrenLayout,\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 { name: 'getLayout', isAsync: true },\n { name: 'select', isAsync: true },\n { name: 'doAdd', isAsync: true },\n { name: 'add', isAsync: true },\n { name: 'doRemove', isAsync: true },\n { name: 'remove', isAsync: true },\n { name: 'doUpdate', isAsync: true },\n { name: 'update', isAsync: true },\n { name: 'sort', isAsync: true },\n { name: 'copy', isAsync: true },\n { name: 'paste', isAsync: true },\n { name: 'doPaste', isAsync: true },\n { name: 'doAlignCenter', isAsync: true },\n { name: 'alignCenter', isAsync: true },\n { name: 'moveLayer', isAsync: true },\n { name: 'moveToContainer', isAsync: true },\n { name: 'move', isAsync: true },\n { name: 'undo', isAsync: true },\n { name: 'redo', isAsync: true },\n { name: 'highlight', isAsync: true },\n { name: 'dragTo', isAsync: true },\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 | null): 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.id, 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.id, 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.id, 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.id, 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 (Array.isArray(newConfig.items) && newLayout !== layout) {\n newConfig = setChilrenLayout(newConfig as MContainer, 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 if (newNodes[0]?.type !== NodeType.ROOT) {\n this.pushHistoryState();\n }\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 * 将组件节点配置存储到localStorage中\n * @param config 组件节点配置\n * @returns\n */\n public copy(config: MNode | MNode[]): void {\n storageService.setItem(COPY_STORAGE_KEY, Array.isArray(config) ? config : [config], {\n protocol: Protocol.OBJECT,\n });\n }\n\n /**\n * 复制时会带上组件关联的依赖\n * @param config 组件节点配置\n * @returns\n */\n public copyWithRelated(config: MNode | MNode[]): void {\n const copyNodes: MNode[] = Array.isArray(config) ? config : [config];\n // 关联的组件也一并复制\n depService.getTarget(DepTargetType.RELATED_COMP_WHEN_COPY, DepTargetType.RELATED_COMP_WHEN_COPY)?.removeDep();\n depService.collect(copyNodes, true, DepTargetType.RELATED_COMP_WHEN_COPY);\n const customTarget = depService.getTarget(\n DepTargetType.RELATED_COMP_WHEN_COPY,\n DepTargetType.RELATED_COMP_WHEN_COPY,\n );\n if (customTarget) {\n Object.keys(customTarget.deps).forEach((nodeId: Id) => {\n const node = this.getNodeById(nodeId);\n if (!node) return;\n customTarget!.deps[nodeId].keys.forEach((key) => {\n const relateNodeId = get(node, key);\n const isExist = copyNodes.find((node) => node.id === relateNodeId);\n if (!isExist) {\n const relateNode = this.getNodeById(relateNodeId);\n if (relateNode) {\n copyNodes.push(relateNode);\n }\n }\n });\n });\n }\n storageService.setItem(COPY_STORAGE_KEY, copyNodes, {\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[] = storageService.getItem(COPY_STORAGE_KEY);\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 const pasteConfigs = await this.doPaste(config, position);\n propsService.replaceRelateId(config, pasteConfigs);\n return this.add(pasteConfigs, parent);\n }\n\n public async doPaste(config: MNode[], position: PastePosition = {}): Promise<MNode[]> {\n propsService.clearRelateId();\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 = layout === Layout.FIXED ? doc.body : el?.offsetParent;\n if (parentEl && el) {\n node.style.left = (parentEl.clientWidth - el.clientWidth) / 2;\n node.style.right = '';\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 node.style.right = '';\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, 0, node);\n } else if (offset === LayerOffset.BOTTOM) {\n brothers.splice(isRelative ? brothers.length : 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.id, 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 public async dragTo(config: MNode, targetParent: MContainer, targetIndex: number) {\n if (!targetParent || !Array.isArray(targetParent.items)) return;\n\n const { parent, node: curNode } = this.getNodeInfo(config.id, false);\n if (!parent || !curNode) throw new Error('找不要删除的节点');\n\n const index = getNodeIndex(curNode.id, parent);\n\n if (typeof index !== 'number' || index === -1) throw new Error('找不要删除的节点');\n\n if (parent.id === targetParent.id) {\n if (index === targetIndex) return;\n\n if (index < targetIndex) {\n targetIndex -= 1;\n }\n }\n\n const layout = await this.getLayout(parent);\n const newLayout = await this.getLayout(targetParent);\n\n if (newLayout !== layout) {\n setLayout(config, newLayout);\n }\n\n parent.items?.splice(index, 1);\n\n targetParent.items?.splice(targetIndex, 0, config);\n\n const page = this.get('page');\n const root = this.get('root');\n const stage = this.get('stage');\n\n if (stage && page && root) {\n stage.update({\n config: cloneDeep(page),\n parentId: root.id,\n root: cloneDeep(root),\n });\n }\n\n this.addModifiedNodeId(config.id);\n this.addModifiedNodeId(parent.id);\n\n this.pushHistoryState();\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 || !['absolute', 'fixed'].includes(style.position)) return;\n\n const update = (style: { [key: string]: any }) =>\n this.update({\n id,\n type,\n style,\n });\n\n if (top) {\n if (isNumber(style.top)) {\n update({\n ...style,\n top: Number(style.top) + Number(top),\n bottom: '',\n });\n } else if (isNumber(style.bottom)) {\n update({\n ...style,\n bottom: Number(style.bottom) - Number(top),\n top: '',\n });\n }\n }\n\n if (left) {\n if (isNumber(style.left)) {\n update({\n ...style,\n left: Number(style.left) + Number(left),\n right: '',\n });\n } else if (isNumber(style.right)) {\n update({\n ...style,\n right: Number(style.right) - Number(left),\n left: '',\n });\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","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 const pasteConfig = await propsService.setNewItemId(configItem, false);\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","<template>\n <MForm\n ref=\"form\"\n :config=\"codeParamsConfig\"\n :init-values=\"model\"\n :disabled=\"disabled\"\n :size=\"size\"\n :watch-props=\"false\"\n @change=\"onParamsChangeHandler\"\n ></MForm>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue';\n\nimport { FormConfig, MForm } from '@tmagic/form';\n\nimport type { CodeParamStatement } from '@editor/type';\nimport { error } from '@editor/utils';\n\ndefineOptions({\n name: 'MEditorCodeParams',\n});\n\nconst props = defineProps<{\n model: any;\n size?: 'small' | 'default' | 'large';\n disabled?: boolean;\n name: string;\n paramsConfig: CodeParamStatement[];\n}>();\n\nconst emit = defineEmits(['change']);\n\nconst form = ref<InstanceType<typeof MForm>>();\n\nconst getFormConfig = (items: FormConfig = []) => [\n {\n type: 'fieldset',\n items,\n legend: '参数',\n labelWidth: '70px',\n name: props.name,\n },\n];\n\nconst codeParamsConfig = computed(() => getFormConfig(props.paramsConfig));\n\n/**\n * 参数值修改更新\n */\nconst onParamsChangeHandler = async () => {\n try {\n const value = await form.value?.submitForm(true);\n emit('change', value);\n } catch (e) {\n error(e);\n }\n};\n</script>\n","<template>\n <TMagicIcon v-if=\"!icon\" class=\"magic-editor-icon\"><Edit></Edit></TMagicIcon>\n <TMagicIcon\n v-else-if=\"typeof icon === 'string' && (icon.startsWith('http') || isRelativePath(icon))\"\n 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>\nimport { toRaw } from 'vue';\nimport { Edit } from '@element-plus/icons-vue';\n\nimport { TMagicIcon } from '@tmagic/design';\n\ndefineOptions({\n name: 'MEditorIcon',\n});\n\ndefineProps<{\n icon?: any;\n}>();\n\nconst isRelativePath = (str: string) => /^(\\.|(\\.\\.)?\\/)/.test(str);\n</script>\n","import { nextTick, ref } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport { tMagicMessage } from '@tmagic/design';\nimport type { CodeBlockContent } from '@tmagic/schema';\n\nimport CodeBlockEditor from '@editor/components/CodeBlockEditor.vue';\nimport type { CodeBlockService } from '@editor/services/codeBlock';\n\nexport const useCodeBlockEdit = (codeBlockService?: CodeBlockService) => {\n const codeConfig = ref<CodeBlockContent>();\n const codeId = ref<string>();\n const codeBlockEditor = ref<InstanceType<typeof CodeBlockEditor>>();\n\n // 新增代码块\n const createCodeBlock = async () => {\n if (!codeBlockService) {\n tMagicMessage.error('新增代码块失败');\n return;\n }\n\n codeConfig.value = {\n name: '代码块',\n content: `({app, params}) => {\\n // place your code here\\n}`,\n params: [],\n };\n\n codeId.value = await codeBlockService.getUniqueId();\n\n await nextTick();\n\n codeBlockEditor.value?.show();\n };\n\n // 编辑代码块\n const editCode = async (id: string) => {\n const codeBlock = await codeBlockService?.getCodeContentById(id);\n\n if (!codeBlock) {\n tMagicMessage.error('获取代码块内容失败');\n return;\n }\n\n let codeContent = codeBlock.content;\n\n if (typeof codeContent !== 'string') {\n codeContent = codeContent.toString();\n }\n\n codeConfig.value = {\n ...cloneDeep(codeBlock),\n content: codeContent,\n };\n codeId.value = id;\n\n await nextTick();\n\n codeBlockEditor.value?.show();\n };\n\n // 删除代码块\n const deleteCode = async (key: string) => {\n codeBlockService?.deleteCodeDslByIds([key]);\n };\n\n const submitCodeBlockHandler = async (values: CodeBlockContent) => {\n if (!codeId.value) return;\n\n await codeBlockService?.setCodeDslById(codeId.value, values);\n\n tMagicMessage.success('代码块保存成功');\n\n codeBlockEditor.value?.hide();\n };\n\n return {\n codeId,\n codeConfig,\n codeBlockEditor,\n\n createCodeBlock,\n editCode,\n deleteCode,\n submitCodeBlockHandler,\n };\n};\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 :size=\"size\"\n @change=\"onParamsChangeHandler\"\n ></m-form-container>\n <!-- 查看/编辑按钮 -->\n <Icon v-if=\"model[name]\" class=\"icon\" :icon=\"!disabled ? Edit : View\" @click=\"editCode(model[name])\"></Icon>\n </div>\n\n <!-- 参数填写框 -->\n <CodeParams\n v-if=\"paramsConfig.length\"\n name=\"params\"\n :model=\"model\"\n :size=\"size\"\n :params-config=\"paramsConfig\"\n @change=\"onParamsChangeHandler\"\n ></CodeParams>\n\n <CodeBlockEditor\n ref=\"codeBlockEditor\"\n v-if=\"codeConfig\"\n :disabled=\"disabled\"\n :content=\"codeConfig\"\n @submit=\"submitCodeBlockHandler\"\n ></CodeBlockEditor>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"\">\nimport { computed, inject, ref, watch } from 'vue';\nimport { Edit, View } from '@element-plus/icons-vue';\nimport { isEmpty, map } from 'lodash-es';\n\nimport { createValues, FieldProps } from '@tmagic/form';\nimport type { Id } from '@tmagic/schema';\n\nimport CodeBlockEditor from '@editor/components/CodeBlockEditor.vue';\nimport CodeParams from '@editor/components/CodeParams.vue';\nimport Icon from '@editor/components/Icon.vue';\nimport { useCodeBlockEdit } from '@editor/hooks/use-code-block-edit';\nimport type { CodeParamStatement, CodeSelectColConfig, Services } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorCodeSelectCol',\n});\n\nconst services = inject<Services>('services');\nconst emit = defineEmits(['change']);\n\nconst props = withDefaults(defineProps<FieldProps<CodeSelectColConfig>>(), {\n disabled: false,\n});\n\n/**\n * 根据代码块id获取代码块参数配置\n * @param codeId 代码块ID\n */\nconst getParamItemsConfig = (codeId?: Id): CodeParamStatement[] => {\n if (!codeDsl.value || !codeId) return [];\n\n const paramStatements = codeDsl.value[codeId]?.params;\n\n if (isEmpty(paramStatements)) return [];\n\n return paramStatements.map((paramState: CodeParamStatement) => ({\n labelWidth: '100px',\n text: paramState.name,\n ...paramState,\n }));\n};\n\nconst codeDsl = computed(() => services?.codeBlockService.getCodeDsl());\nconst paramsConfig = ref<CodeParamStatement[]>(getParamItemsConfig(props.model[props.name]));\n\nwatch(\n () => props.model[props.name],\n (v, preV) => {\n if (v !== preV) {\n paramsConfig.value = getParamItemsConfig(v);\n }\n },\n);\n\nconst selectConfig = {\n type: 'select',\n name: props.name,\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 paramsConfig.value = getParamItemsConfig(codeId);\n\n if (paramsConfig.value.length) {\n model.params = createValues(formState, paramsConfig.value, {}, model.params);\n } else {\n model.params = {};\n }\n\n return codeId;\n },\n};\n\n/**\n * 参数值修改更新\n */\nconst onParamsChangeHandler = (value: any) => {\n props.model.params = value.params;\n emit('change', props.model);\n};\n\nconst { codeBlockEditor, codeConfig, editCode, submitCodeBlockHandler } = useCodeBlockEdit(services?.codeBlockService);\n</script>\n","<template>\n <div class=\"m-editor-data-source-fields\">\n <MagicTable :data=\"model[name]\" :columns=\"fieldColumns\"></MagicTable>\n\n <div class=\"m-editor-data-source-fields-footer\">\n <TMagicButton size=\"small\" :disabled=\"disabled\" plain @click=\"newFromJsonHandler()\">快速添加</TMagicButton>\n <TMagicButton size=\"small\" type=\"primary\" :disabled=\"disabled\" plain @click=\"newHandler()\">添加</TMagicButton>\n </div>\n\n <MFormDrawer\n ref=\"addDialog\"\n label-width=\"80px\"\n :title=\"fieldTitle\"\n :config=\"dataSourceFieldsConfig\"\n :values=\"fieldValues\"\n :parentValues=\"model[name]\"\n :disabled=\"disabled\"\n :width=\"width\"\n @submit=\"fieldChange\"\n ></MFormDrawer>\n\n <MFormDrawer\n ref=\"addFromJsonDialog\"\n title=\"快速添加数据定义\"\n :config=\"jsonFromConfig\"\n :values=\"jsonFromValues\"\n :disabled=\"disabled\"\n :width=\"width\"\n @submit=\"addFromJsonFromChange\"\n ></MFormDrawer>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, ref } from 'vue';\n\nimport { TMagicButton, tMagicMessage, tMagicMessageBox } from '@tmagic/design';\nimport { type FieldProps, type FormConfig, type FormState, MFormDrawer } from '@tmagic/form';\nimport type { DataSchema } from '@tmagic/schema';\nimport { MagicTable } from '@tmagic/table';\nimport { getDefaultValueFromFields } from '@tmagic/utils';\n\nimport type { Services } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorDataSourceFields',\n});\n\nconst props = withDefaults(\n defineProps<\n FieldProps<{\n type: 'data-source-fields';\n }>\n >(),\n {\n disabled: false,\n },\n);\n\nconst emit = defineEmits(['change']);\n\nconst services = inject<Services>('services');\n\nconst addDialog = ref<InstanceType<typeof MFormDrawer>>();\n\nconst fieldValues = ref<Record<string, any>>({});\nconst fieldTitle = ref('');\n\nconst width = computed(() => globalThis.document.body.clientWidth - (services?.uiService.get('columnWidth').left || 0));\n\nconst newHandler = () => {\n fieldValues.value = {};\n fieldTitle.value = '新增属性';\n addDialog.value?.show();\n};\n\nconst fieldChange = ({ index, ...value }: Record<string, any>) => {\n if (index > -1) {\n props.model[props.name][index] = value;\n } else {\n props.model[props.name].push(value);\n }\n\n addDialog.value?.hide();\n\n emit('change', props.model[props.name]);\n};\n\nconst fieldColumns = [\n {\n label: '属性名称',\n prop: 'title',\n },\n {\n label: '属性key',\n prop: 'name',\n },\n {\n label: '属性描述',\n prop: 'description',\n },\n {\n label: '默认值',\n prop: 'defaultValue',\n },\n {\n label: '操作',\n fixed: 'right',\n actions: [\n {\n text: '编辑',\n handler: (row: Record<string, any>, index: number) => {\n fieldValues.value = {\n ...row,\n index,\n };\n fieldTitle.value = `编辑${row.title}`;\n addDialog.value?.show();\n },\n },\n {\n text: '删除',\n buttonType: 'danger',\n handler: async (row: Record<string, any>, index: number) => {\n await tMagicMessageBox.confirm(`确定删除${row.title}(${row.name})?`, '提示');\n props.model[props.name].splice(index, 1);\n emit('change', props.model[props.name]);\n },\n },\n ],\n },\n];\n\nconst dataSourceFieldsConfig: FormConfig = [\n { name: 'index', type: 'hidden', filter: 'number', defaultValue: -1 },\n {\n name: 'type',\n text: '数据类型',\n type: 'select',\n defaultValue: 'string',\n options: [\n { text: '字符串', value: 'string' },\n { text: '数字', value: 'number' },\n { text: '布尔值', value: 'boolean' },\n { text: '对象', value: 'object' },\n { text: '数组', value: 'array' },\n { text: 'null', value: 'null' },\n { text: 'any', value: 'any' },\n ],\n },\n {\n name: 'name',\n text: '字段名称',\n rules: [\n {\n required: true,\n message: '请输入字段名称',\n },\n {\n validator: ({ value, callback }, { model, parent }) => {\n const index = parent.findIndex((item: Record<string, any>) => item.name === value);\n if ((model.index === -1 && index > -1) || (model.index > -1 && index > -1 && index !== model.index)) {\n return callback(`属性key(${value})已存在`);\n }\n callback();\n },\n },\n ],\n },\n {\n name: 'title',\n text: '展示名称',\n rules: [\n {\n required: true,\n message: '请输入展示名称',\n },\n ],\n },\n {\n name: 'description',\n text: '描述',\n type: 'textarea',\n },\n {\n name: 'defaultValue',\n text: '默认值',\n height: '200px',\n parse: true,\n type: (mForm: FormState | undefined, { model }: any) => {\n if (model.type === 'number') return 'number';\n if (model.type === 'boolean') return 'select';\n if (model.type === 'string') return 'text';\n\n return 'vs-code';\n },\n options: [\n { text: 'true', value: true },\n { text: 'false', value: false },\n ],\n },\n {\n name: 'enable',\n text: '是否可用',\n type: 'switch',\n defaultValue: true,\n },\n {\n name: 'fields',\n type: 'data-source-fields',\n defaultValue: [],\n display: (formState: FormState | undefined, { model }: any) => model.type === 'object' || model.type === 'array',\n },\n];\n\nconst addFromJsonDialog = ref<InstanceType<typeof MFormDrawer>>();\nconst jsonFromConfig: FormConfig = [\n {\n name: 'data',\n type: 'vs-code',\n labelWidth: '0',\n language: 'json',\n height: '600px',\n options: inject('codeOptions', {}),\n },\n];\n\nconst jsonFromValues = ref({\n data: {},\n});\n\nconst newFromJsonHandler = () => {\n jsonFromValues.value.data = getDefaultValueFromFields(props.model[props.name]);\n addFromJsonDialog.value?.show();\n};\n\nconst getValueType = (value: any) => {\n if (Array.isArray(value)) return 'array';\n if (value === null) return 'null';\n if (typeof value === 'object') return 'object';\n if (typeof value === 'number') return 'number';\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'string') return 'string';\n\n return 'any';\n};\n\nconst getFieldsConfig = (value: any, fields: DataSchema[] = []) => {\n if (!value || typeof value !== 'object') throw new Error('数据格式错误');\n\n const newFields: DataSchema[] = [];\n Object.entries(value).forEach(([key, value]) => {\n const type = getValueType(value);\n\n const oldField = fields.find((field) => field.name === key);\n\n let childFields: DataSchema[] = [];\n if (Array.isArray(value) && value.length > 0) {\n childFields = getFieldsConfig(value[0], oldField?.fields);\n } else if (type === 'object') {\n childFields = getFieldsConfig(value, oldField?.fields);\n }\n\n newFields.push({\n name: key,\n title: oldField?.title || key,\n type,\n description: oldField?.description || '',\n enable: oldField?.enable ?? true,\n defaultValue: value,\n fields: childFields,\n });\n });\n\n return newFields;\n};\n\nconst addFromJsonFromChange = ({ data }: { data: string }) => {\n try {\n const value = JSON.parse(data);\n\n props.model[props.name] = getFieldsConfig(value, props.model[props.name]);\n\n addFromJsonDialog.value?.hide();\n\n emit('change', props.model[props.name]);\n } catch (e: any) {\n tMagicMessage.error(e.message);\n }\n};\n</script>\n","<template>\n <m-form-container\n :config=\"{\n ...config,\n ...cascaderConfig,\n }\"\n :model=\"model\"\n @change=\"onChangeHandler\"\n ></m-form-container>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject } from 'vue';\n\nimport type { CascaderOption, FieldProps } from '@tmagic/form';\nimport type { DataSchema } from '@tmagic/schema';\nimport { DATA_SOURCE_FIELDS_SELECT_VALUE_PREFIX } from '@tmagic/utils';\n\nimport type { DataSourceFieldSelectConfig, Services } from '@editor/type';\n\nconst services = inject<Services>('services');\nconst emit = defineEmits(['change']);\n\nconst props = withDefaults(defineProps<FieldProps<DataSourceFieldSelectConfig>>(), {\n disabled: false,\n});\n\nconst dataSources = computed(() => services?.dataSourceService.get('dataSources'));\n\nconst getOptionChildren = (fields: DataSchema[] = []): CascaderOption[] =>\n fields.map((field) => ({\n label: field.title || field.name,\n value: field.name,\n children: field.type === 'array' ? [] : getOptionChildren(field.fields),\n }));\n\nconst cascaderConfig = computed(() => {\n const valueIsKey = props.config.value === 'key';\n\n return {\n type: 'cascader',\n name: props.name,\n checkStrictly: !valueIsKey,\n text: '',\n options: () =>\n dataSources.value\n ?.filter((ds) => ds.fields?.length)\n ?.map((ds) => ({\n label: ds.title || ds.id,\n value: valueIsKey ? ds.id : `${DATA_SOURCE_FIELDS_SELECT_VALUE_PREFIX}${ds.id}`,\n children: getOptionChildren(ds.fields),\n })) || [],\n };\n});\n\nconst onChangeHandler = (value: any) => {\n emit('change', value);\n};\n</script>\n","<template>\n <component\n v-if=\"disabled || isFocused\"\n :is=\"getConfig('components')?.autocomplete.component || 'el-autocomplete'\"\n class=\"tmagic-design-auto-complete\"\n ref=\"autocomplete\"\n v-model=\"state\"\n v-bind=\"\n getConfig('components')?.autocomplete.props({\n disabled,\n size,\n fetchSuggestions: querySearch,\n triggerOnFocus: false,\n clearable: true,\n }) || {}\n \"\n style=\"width: 100%\"\n @blur=\"blurHandler\"\n @input=\"inputHandler\"\n @select=\"selectHandler\"\n >\n <template #suffix>\n <Icon :icon=\"Coin\" />\n </template>\n <template #default=\"{ item }\">\n <div style=\"display: flex; flex-direction: column; line-height: 1.2em\">\n <div>{{ item.text }}</div>\n <span style=\"font-size: 10px; color: rgba(0, 0, 0, 0.6)\">{{ item.value }}</span>\n </div>\n </template>\n </component>\n <div :class=\"`tmagic-data-source-input-text el-input el-input--${size}`\" @mouseup=\"mouseupHandler\" v-else>\n <div :class=\"`tmagic-data-source-input-text-wrapper el-input__wrapper ${isFocused ? ' is-focus' : ''}`\">\n <div class=\"el-input__inner\">\n <template v-for=\"(item, index) in displayState\">\n <span :key=\"index\" v-if=\"item.type === 'text'\" style=\"margin-right: 2px\">{{ item.value }}</span>\n <TMagicTag :key=\"index\" :size=\"size\" v-if=\"item.type === 'var'\">{{ item.value }}</TMagicTag>\n </template>\n\n <Icon class=\"tmagic-data-source-input-icon\" :icon=\"Coin\" />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, nextTick, ref, watch } from 'vue';\nimport { Coin } from '@element-plus/icons-vue';\n\nimport { getConfig, TMagicAutocomplete, TMagicTag } from '@tmagic/design';\nimport type { FieldProps } from '@tmagic/form';\nimport type { DataSchema, DataSourceSchema } from '@tmagic/schema';\n\nimport Icon from '@editor/components/Icon.vue';\nimport type { Services } from '@editor/type';\nimport { getDisplayField } from '@editor/utils/data-source';\n\ndefineOptions({\n name: 'MEditorDataSourceInput',\n});\n\nconst props = withDefaults(\n defineProps<\n FieldProps<{\n type: 'data-source-input';\n name: string;\n text: string;\n }>\n >(),\n {\n disabled: false,\n },\n);\n\nconst emit = defineEmits<{\n change: [value: string];\n}>();\n\nconst { dataSourceService } = inject<Services>('services') || {};\n\nconst autocomplete = ref<InstanceType<typeof TMagicAutocomplete>>();\nconst isFocused = ref(false);\nconst state = ref('');\nconst displayState = ref<{ value: string; type: 'var' | 'text' }[]>([]);\n\nconst input = computed<HTMLInputElement>(() => autocomplete.value?.inputRef?.input);\nconst dataSources = computed(() => dataSourceService?.get('dataSources') || []);\n\nconst setDisplayState = () => {\n displayState.value = getDisplayField(dataSources.value, state.value);\n};\n\nwatch(\n () => props.model[props.name],\n (value = '') => {\n state.value = value;\n\n setDisplayState();\n },\n { immediate: true },\n);\n\nconst mouseupHandler = async () => {\n isFocused.value = true;\n await nextTick();\n autocomplete.value?.focus();\n};\n\nconst blurHandler = () => {\n isFocused.value = false;\n\n setDisplayState();\n\n emit('change', state.value);\n};\n\nconst changeHandler = (v: string) => {\n emit('change', v);\n};\n\nlet inputText = '';\n\nconst inputHandler = (v: string) => {\n if (!v) {\n inputText = v;\n }\n};\n\n/**\n * 光标位置是不是}\n * @param selectionStart 光标位置\n */\nconst isRightCurlyBracket = (selectionStart = 0) => {\n const lastChar = inputText.substring(selectionStart - 1, selectionStart);\n return lastChar === '}';\n};\n\n/**\n * 获取光标位置\n */\nconst getSelectionStart = () => {\n let selectionStart = input.value?.selectionStart || 0;\n\n // 输入法可能会自动补全},如果当前光标前面一个字符是},则光标前移一位\n if (isRightCurlyBracket(selectionStart)) {\n selectionStart -= 1;\n }\n\n return selectionStart;\n};\n\n/**\n * 当前输入的是{\n * @param leftCurlyBracketIndex {字符索引\n */\nconst curCharIsLeftCurlyBracket = (leftCurlyBracketIndex: number) =>\n leftCurlyBracketIndex > 0 && leftCurlyBracketIndex === getSelectionStart() - 1;\n\n/**\n * 当前输入的是.\n * @param leftCurlyBracketIndex .字符索引\n */\nconst curCharIsDot = (dotIndex: number) => dotIndex > -1 && dotIndex === getSelectionStart() - 1;\n\n/**\n * @param leftCurlyBracketIndex 左大括号字符索引\n * @param cb 建议的方法\n */\nconst dsQuerySearch = (queryString: string, leftCurlyBracketIndex: number, cb: (data: { value: string }[]) => void) => {\n let result: DataSourceSchema[] = [];\n\n if (curCharIsLeftCurlyBracket(leftCurlyBracketIndex)) {\n // 当前输入的是{\n result = dataSources.value;\n } else if (leftCurlyBracketIndex > 0) {\n // 当前输入的是{xx\n const queryName = queryString.substring(leftCurlyBracketIndex + 1).toLowerCase();\n result = dataSources.value.filter((ds) => ds.title?.toLowerCase().includes(queryName) || ds.id.includes(queryName));\n }\n\n cb(\n result.map((ds) => ({\n value: ds.id,\n text: ds.title,\n type: 'dataSource',\n })),\n );\n};\n\n/**\n * 字段提示\n * @param queryString 当前输入框内的字符串\n * @param leftAngleIndex {字符索引\n * @param dotIndex .字符索引\n * @param cb 建议回调\n */\nconst fieldQuerySearch = (\n queryString: string,\n leftAngleIndex: number,\n dotIndex: number,\n cb: (data: { value: string }[]) => void,\n) => {\n let result: DataSchema[] = [];\n\n const dsKey = queryString.substring(leftAngleIndex + 1, dotIndex);\n\n // 可能是xx.xx.xx,存在链式调用\n const keys = dsKey.split('.');\n\n // 最前的是数据源id\n const dsId = keys.shift();\n const ds = dataSources.value.find((ds) => ds.id === dsId);\n if (!ds) {\n cb([]);\n return;\n }\n\n let fields = ds.fields || [];\n\n // 后面这些是字段\n let key = keys.shift();\n while (key) {\n for (const field of fields) {\n if (field.name === key) {\n fields = field.fields || [];\n key = keys.shift();\n break;\n }\n }\n }\n\n if (curCharIsDot(dotIndex)) {\n // 当前输入的是.\n result = fields || [];\n } else if (dotIndex > -1) {\n const queryName = queryString.substring(dotIndex + 1).toLowerCase();\n result =\n fields.filter(\n (field) => field.name?.toLowerCase().includes(queryName) || field.title?.toLowerCase().includes(queryName),\n ) || [];\n }\n\n cb(\n result.map((field) => ({\n value: field.name,\n text: field.title,\n type: 'field',\n })),\n );\n};\n\n/**\n * 数据源提示\n * @param queryString 当前输入框内的字符串\n * @param cb 建议回调\n */\nconst querySearch = (queryString: string, cb: (data: { value: string }[]) => void) => {\n inputText = queryString;\n\n const selectionStart = getSelectionStart();\n\n const curQueryString = queryString.substring(0, selectionStart);\n\n const fieldKeyStringLastIndex = curQueryString.lastIndexOf('.');\n const dsKeyStringLastIndex = curQueryString.lastIndexOf('${') + 1;\n\n const isFieldTip = fieldKeyStringLastIndex > dsKeyStringLastIndex;\n\n if (isFieldTip) {\n fieldQuerySearch(curQueryString, dsKeyStringLastIndex, fieldKeyStringLastIndex, cb);\n } else {\n dsQuerySearch(curQueryString, dsKeyStringLastIndex, cb);\n }\n};\n\n/**\n * 选择建议\n * @param value 建议值\n * @param type 建议类型,是数据源还是字段\n */\nconst selectHandler = async ({ value, type }: { value: string; type: 'dataSource' | 'field' }) => {\n const isDataSource = type === 'dataSource';\n const selectionStart = input.value?.selectionStart || 0;\n let startText = inputText.substring(0, selectionStart);\n\n const dotIndex = startText.lastIndexOf('.');\n const leftCurlyBracketIndex = startText.lastIndexOf('${') + 1;\n\n const endText = inputText.substring(selectionStart);\n\n let suggestText = value;\n\n if (isDataSource) {\n if (!curCharIsLeftCurlyBracket(leftCurlyBracketIndex)) {\n startText = startText.substring(0, leftCurlyBracketIndex + 1);\n }\n\n // 当前光标后一位是否为},不是的话需要补上\n if (!isRightCurlyBracket(selectionStart + 1)) {\n suggestText = `${suggestText}}`;\n }\n } else if (!curCharIsDot(dotIndex)) {\n startText = startText.substring(0, dotIndex + 1);\n }\n\n state.value = `${startText}${suggestText}${endText}`;\n\n await nextTick();\n\n // 由于选择数据源时会在后面补全}, 所以光标要前移2位\n let newSelectionStart = 0;\n if (isDataSource) {\n newSelectionStart = leftCurlyBracketIndex + suggestText.length;\n } else {\n newSelectionStart = dotIndex + suggestText.length + 1;\n }\n input.value?.setSelectionRange(newSelectionStart, newSelectionStart);\n\n changeHandler(state.value);\n};\n</script>\n","import { nextTick, ref } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport { tMagicMessage } from '@tmagic/design';\nimport type { CodeBlockContent, DataSourceSchema } from '@tmagic/schema';\n\nimport CodeBlockEditor from '@editor/components/CodeBlockEditor.vue';\nimport { getConfig } from '@editor/utils/config';\n\nexport const useDataSourceMethod = () => {\n const codeConfig = ref<CodeBlockContent>();\n const codeBlockEditor = ref<InstanceType<typeof CodeBlockEditor>>();\n\n const dataSource = ref<DataSourceSchema>();\n const dataSourceMethod = ref('');\n\n return {\n codeConfig,\n codeBlockEditor,\n\n createCode: async (model: DataSourceSchema) => {\n codeConfig.value = {\n name: '',\n content: `({ params, dataSource, app }) => {\\n // place your code here\\n}`,\n params: [],\n };\n\n await nextTick();\n\n dataSource.value = model;\n dataSourceMethod.value = '';\n\n codeBlockEditor.value?.show();\n },\n\n editCode: async (model: DataSourceSchema, methodName: string) => {\n const method = model.methods?.find((method) => method.name === methodName);\n\n if (!method) {\n tMagicMessage.error('获取数据源方法失败');\n return;\n }\n\n let codeContent = method.content;\n\n if (typeof codeContent !== 'string') {\n codeContent = codeContent.toString();\n }\n\n codeConfig.value = {\n ...cloneDeep(method),\n content: codeContent,\n };\n\n await nextTick();\n\n dataSource.value = model;\n dataSourceMethod.value = methodName;\n\n codeBlockEditor.value?.show();\n },\n\n deleteCode: async (model: DataSourceSchema, methodName: string) => {\n if (!model.methods) return;\n\n const index = model.methods.findIndex((method) => method.name === methodName);\n\n if (index === -1) {\n return;\n }\n\n model.methods.splice(index, 1);\n },\n\n submitCode: (values: CodeBlockContent) => {\n if (!dataSource.value) return;\n\n if (!dataSource.value.methods) {\n dataSource.value.methods = [];\n }\n\n if (values.content) {\n // 在保存的时候转换代码内容\n const parseDSL = getConfig('parseDSL');\n if (typeof values.content === 'string') {\n values.content = parseDSL<(...args: any[]) => any>(values.content);\n }\n }\n\n if (dataSourceMethod.value) {\n const index = dataSource.value.methods.findIndex((method) => method.name === dataSourceMethod.value);\n dataSource.value.methods.splice(index, 1, values);\n } else {\n dataSource.value.methods.push(values);\n }\n\n codeBlockEditor.value?.hide();\n },\n };\n};\n","<template>\n <div class=\"m-editor-data-source-methods\">\n <MagicTable :data=\"model[name]\" :columns=\"methodColumns\"></MagicTable>\n\n <div class=\"m-editor-data-source-methods-footer\">\n <TMagicButton size=\"small\" type=\"primary\" :disabled=\"disabled\" plain @click=\"createCodeHandler\"\n >添加</TMagicButton\n >\n </div>\n\n <CodeBlockEditor\n v-if=\"codeConfig\"\n ref=\"codeBlockEditor\"\n :disabled=\"disabled\"\n :content=\"codeConfig\"\n :is-data-source=\"true\"\n :data-source-type=\"model.type\"\n @submit=\"submitCodeHandler\"\n ></CodeBlockEditor>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { TMagicButton } from '@tmagic/design';\nimport type { FieldProps } from '@tmagic/form';\nimport type { CodeBlockContent } from '@tmagic/schema';\nimport { MagicTable } from '@tmagic/table';\n\nimport CodeBlockEditor from '@editor/components/CodeBlockEditor.vue';\nimport { useDataSourceMethod } from '@editor/hooks/use-data-source-method';\nimport type { CodeParamStatement } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorDataSourceMethods',\n});\n\nconst props = withDefaults(\n defineProps<\n FieldProps<{\n type: 'data-source-methods';\n }>\n >(),\n {\n disabled: false,\n },\n);\n\nconst emit = defineEmits(['change']);\n\nconst { codeConfig, codeBlockEditor, createCode, editCode, deleteCode, submitCode } = useDataSourceMethod();\n\nconst methodColumns = [\n {\n label: '名称',\n prop: 'name',\n },\n {\n label: '描述',\n prop: 'desc',\n },\n {\n label: '执行时机',\n prop: 'timing',\n },\n {\n label: '参数',\n prop: 'params',\n formatter: (params: CodeParamStatement[]) => params.map((item) => item.name).join(', '),\n },\n {\n label: '操作',\n fixed: 'right',\n actions: [\n {\n text: '编辑',\n handler: (row: CodeBlockContent) => {\n editCode(props.model, row.name);\n emit('change', props.model[props.name]);\n },\n },\n {\n text: '删除',\n buttonType: 'danger',\n handler: (row: CodeBlockContent) => {\n deleteCode(props.model, row.name);\n emit('change', props.model[props.name]);\n },\n },\n ],\n },\n];\n\nconst createCodeHandler = () => {\n createCode(props.model);\n\n emit('change', props.model[props.name]);\n};\n\nconst submitCodeHandler = (values: CodeBlockContent) => {\n submitCode(values);\n\n emit('change', props.model[props.name]);\n};\n</script>\n","<template>\n <div class=\"m-fields-data-source-method-select\">\n <div class=\"data-source-method-select-container\">\n <m-form-container\n class=\"select\"\n :config=\"cascaderConfig\"\n :model=\"model\"\n @change=\"onChangeHandler\"\n ></m-form-container>\n <Icon v-if=\"model[name]\" class=\"icon\" :icon=\"!disabled ? Edit : View\" @click=\"editCodeHandler\"></Icon>\n </div>\n\n <CodeParams\n v-if=\"paramsConfig.length\"\n name=\"params\"\n :model=\"model\"\n :size=\"size\"\n :disabled=\"disabled\"\n :params-config=\"paramsConfig\"\n @change=\"onChangeHandler\"\n ></CodeParams>\n\n <CodeBlockEditor\n ref=\"codeBlockEditor\"\n v-if=\"codeConfig\"\n :disabled=\"disabled\"\n :content=\"codeConfig\"\n @submit=\"submitCodeBlockHandler\"\n ></CodeBlockEditor>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"\">\nimport { computed, inject, ref } from 'vue';\nimport { Edit, View } from '@element-plus/icons-vue';\n\nimport { createValues, FieldProps } from '@tmagic/form';\nimport type { CodeBlockContent, Id } from '@tmagic/schema';\n\nimport CodeBlockEditor from '@editor/components/CodeBlockEditor.vue';\nimport CodeParams from '@editor/components/CodeParams.vue';\nimport Icon from '@editor/components/Icon.vue';\nimport { useDataSourceMethod } from '@editor/hooks/use-data-source-method';\nimport type { CodeParamStatement, DataSourceMethodSelectConfig, Services } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorDataSourceMethodSelect',\n});\n\nconst services = inject<Services>('services');\nconst emit = defineEmits(['change']);\n\nconst dataSourceService = services?.dataSourceService;\n\nconst props = withDefaults(defineProps<FieldProps<DataSourceMethodSelectConfig>>(), {\n disabled: false,\n});\n\nconst dataSources = computed(() => dataSourceService?.get('dataSources'));\n\nconst getParamItemsConfig = ([dataSourceId, medthodName]: [Id, string] = ['', '']): CodeParamStatement[] => {\n if (!dataSourceId) return [];\n\n const paramStatements = dataSources.value\n ?.find((item) => item.id === dataSourceId)\n ?.methods?.find((item) => item.name === medthodName)?.params;\n\n if (!paramStatements) return [];\n\n return paramStatements.map((paramState: CodeParamStatement) => ({\n text: paramState.name,\n ...paramState,\n }));\n};\n\nconst paramsConfig = ref<CodeParamStatement[]>(getParamItemsConfig(props.model.dataSourceMethod));\n\nconst setParamsConfig = (dataSourceMethod: [Id, string], formState: any = {}) => {\n // 通过下拉框选择的codeId变化后修正model的值,避免写入其他codeId的params\n paramsConfig.value = dataSourceMethod ? getParamItemsConfig(dataSourceMethod) : [];\n\n if (paramsConfig.value.length) {\n props.model.params = createValues(formState, paramsConfig.value, {}, props.model.params);\n } else {\n props.model.params = {};\n }\n};\n\nconst methodsOptions = computed(\n () =>\n dataSources.value\n ?.filter((ds) => ds.methods?.length || dataSourceService?.getFormMethod(ds.type).length)\n ?.map((ds) => ({\n label: ds.title || ds.id,\n value: ds.id,\n children: [\n ...(dataSourceService?.getFormMethod(ds.type) || []),\n ...(ds.methods || []).map((method) => ({\n label: method.name,\n value: method.name,\n })),\n ],\n })) || [],\n);\n\nconst cascaderConfig = computed(() => ({\n type: 'cascader',\n name: props.name,\n options: methodsOptions.value,\n onChange: (formState: any, dataSourceMethod: [Id, string]) => {\n setParamsConfig(dataSourceMethod, formState);\n\n return dataSourceMethod;\n },\n}));\n\n/**\n * 参数值修改更新\n */\nconst onChangeHandler = (value: any) => {\n props.model.params = value.params;\n emit('change', props.model);\n};\n\nconst { codeBlockEditor, codeConfig, editCode, submitCode } = useDataSourceMethod();\n\nconst editCodeHandler = () => {\n const [id, name] = props.model[props.name];\n\n const dataSource = dataSourceService?.getDataSourceById(id);\n\n if (!dataSource) return;\n\n editCode(dataSource, name);\n\n setParamsConfig([id, name]);\n};\n\nconst submitCodeBlockHandler = (value: CodeBlockContent) => {\n submitCode(value);\n};\n</script>\n","<template>\n <div class=\"m-editor-data-source-fields\">\n <MagicTable :data=\"model[name]\" :columns=\"columns\"></MagicTable>\n\n <div class=\"m-editor-data-source-fields-footer\">\n <TMagicButton size=\"small\" type=\"primary\" :disabled=\"disabled\" plain @click=\"newHandler()\">添加</TMagicButton>\n </div>\n\n <MFormDrawer\n ref=\"addDialog\"\n label-width=\"120px\"\n :title=\"drawerTitle\"\n :config=\"formConfig\"\n :values=\"formValues\"\n :parentValues=\"model[name]\"\n :disabled=\"disabled\"\n :width=\"width\"\n @submit=\"formChangeHandler\"\n ></MFormDrawer>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, ref } from 'vue';\n\nimport { TMagicButton, tMagicMessageBox, TMagicSwitch } from '@tmagic/design';\nimport { type FieldProps, type FormConfig, type FormState, MFormDrawer } from '@tmagic/form';\nimport type { MockSchema } from '@tmagic/schema';\nimport { MagicTable } from '@tmagic/table';\nimport { getDefaultValueFromFields } from '@tmagic/utils';\n\nimport CodeEditor from '@editor/layouts/CodeEditor.vue';\nimport { Services } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorDataSourceMocks',\n});\n\nconst props = withDefaults(\n defineProps<\n FieldProps<{\n type: 'data-source-mocks';\n }>\n >(),\n {\n disabled: false,\n },\n);\n\nconst emit = defineEmits(['change']);\n\nconst services = inject<Services>('services');\nconst width = computed(() => globalThis.document.body.clientWidth - (services?.uiService.get('columnWidth').left || 0));\n\nconst addDialog = ref<InstanceType<typeof MFormDrawer>>();\nconst drawerTitle = ref('');\nconst formValues = ref<Record<string, any>>({});\n\nconst formConfig: FormConfig = [\n { name: 'index', type: 'hidden', filter: 'number', defaultValue: -1 },\n {\n name: 'title',\n text: '名称',\n rules: [\n {\n required: true,\n message: '请输入字段名称',\n },\n {\n required: true,\n message: '请输入名称',\n },\n ],\n },\n {\n name: 'description',\n text: '描述',\n },\n {\n name: 'enable',\n text: '启用',\n type: 'switch',\n },\n {\n name: 'useInEditor',\n text: '编辑器中使用',\n type: 'switch',\n },\n {\n name: 'data',\n text: 'mock数据',\n type: 'vs-code',\n language: 'json',\n options: inject('codeOptions', {}),\n defaultValue: '{}',\n height: '400px',\n onChange: (formState: FormState | undefined, v: string | any) => {\n if (typeof v !== 'string') return v;\n return JSON.parse(v);\n },\n rules: [\n {\n validator: ({ value, callback }) => {\n if (typeof value !== 'string') return callback();\n\n try {\n // 检测json是否存在语法错误\n JSON.parse(value);\n\n callback();\n } catch (error: any) {\n callback(error);\n }\n },\n },\n ],\n },\n];\n\nconst columns = [\n {\n type: 'expand',\n component: CodeEditor,\n props: (row: MockSchema) => ({\n initValues: row.data,\n language: 'json',\n height: '150px',\n options: {\n readOnly: true,\n },\n }),\n },\n {\n label: '名称',\n prop: 'title',\n },\n {\n label: '描述',\n prop: 'description',\n },\n {\n label: '是否启用',\n prop: 'enable',\n type: 'component',\n component: TMagicSwitch,\n props: (row: MockSchema) => ({\n modelValue: row.enable,\n activeValue: true,\n inactiveValue: false,\n }),\n listeners: (row: MockSchema, index: number) => ({\n 'update:modelValue': (v: boolean) => {\n toggleValue(row, 'enable', v, index);\n },\n }),\n },\n {\n label: '编辑器中使用',\n prop: 'useInEditor',\n type: 'component',\n component: TMagicSwitch,\n props: (row: MockSchema) => ({\n modelValue: row.useInEditor,\n activeValue: true,\n inactiveValue: false,\n }),\n listeners: (row: MockSchema, index: number) => ({\n 'update:modelValue': (v: boolean) => {\n toggleValue(row, 'useInEditor', v, index);\n },\n }),\n },\n {\n label: '操作',\n fixed: 'right',\n actions: [\n {\n text: '编辑',\n handler: (row: MockSchema, index: number) => {\n formValues.value = {\n ...row,\n index,\n };\n drawerTitle.value = `编辑${row.title}`;\n addDialog.value?.show();\n },\n },\n {\n text: '删除',\n buttonType: 'danger',\n handler: async (row: MockSchema, index: number) => {\n await tMagicMessageBox.confirm(`确定删除${row.title}?`, '提示');\n props.model[props.name].splice(index, 1);\n emit('change', props.model[props.name]);\n },\n },\n ],\n },\n];\n\nconst newHandler = () => {\n const isFirstRow = props.model[props.name].length === 0;\n formValues.value = {\n data: getDefaultValueFromFields(props.model.fields || []),\n useInEditor: isFirstRow,\n enable: isFirstRow,\n };\n drawerTitle.value = '新增Mock';\n addDialog.value?.show();\n};\n\nconst formChangeHandler = ({ index, ...value }: Record<string, any>) => {\n if (index > -1) {\n props.model[props.name][index] = value;\n } else {\n props.model[props.name].push(value);\n }\n\n addDialog.value?.hide();\n\n emit('change', props.model[props.name]);\n};\n\nconst toggleValue = (row: MockSchema, key: 'enable' | 'useInEditor', value: boolean, index: number) => {\n if (value) {\n props.model[props.name].forEach((item: MockSchema) => {\n item[key] = false;\n });\n }\n\n formChangeHandler({\n ...row,\n [key]: value,\n index,\n });\n};\n</script>\n","<template>\n <MSelect\n :model=\"model\"\n :name=\"name\"\n :size=\"size\"\n :prop=\"prop\"\n :disabled=\"disabled\"\n :config=\"selectConfig\"\n :last-values=\"lastValues\"\n @change=\"changeHandler\"\n ></MSelect>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject } from 'vue';\n\nimport { FieldProps, MSelect, SelectConfig } from '@tmagic/form';\n\nimport { Services } from '../type';\n\ndefineOptions({\n name: 'MEditorDataSourceSelect',\n});\n\nconst emit = defineEmits(['change']);\n\nconst props = withDefaults(\n defineProps<\n FieldProps<{\n type: 'data-source-select';\n name: string;\n text?: string;\n placeholder?: string;\n dataSourceType?: string;\n value?: 'id' | 'value';\n }>\n >(),\n {\n disabled: false,\n },\n);\n\nconst { dataSourceService } = inject<Services>('services') || {};\n\nconst dataSources = computed(() => dataSourceService?.get('dataSources') || []);\n\nconst selectConfig = computed<SelectConfig>(() => {\n const { type, dataSourceType, value, ...config } = props.config;\n\n const valueIsId = props.config.value === 'id';\n\n return {\n ...config,\n type: 'select',\n valueKey: 'dataSourceId',\n options: dataSources.value\n .filter((ds) => !props.config.dataSourceType || ds.type === props.config.dataSourceType)\n .map((ds) => ({\n value: valueIsId\n ? ds.id\n : {\n isBindDataSource: true,\n dataSourceType: ds.type,\n dataSourceId: ds.id,\n },\n text: ds.title || ds.id,\n })),\n };\n});\n\nconst changeHandler = (value: any) => {\n emit('change', value);\n};\n</script>\n","<template>\n <div class=\"m-fields-event-select\">\n <m-form-table\n v-if=\"isOldVersion\"\n ref=\"eventForm\"\n name=\"events\"\n :size=\"size\"\n :disabled=\"disabled\"\n :model=\"model\"\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=\"size\" :disabled=\"disabled\" @click=\"addEvent()\"\n >添加事件</TMagicButton\n >\n <m-form-panel\n v-for=\"(cardItem, index) in model[name]\"\n :key=\"index\"\n :disabled=\"disabled\"\n :size=\"size\"\n :config=\"actionsConfig\"\n :model=\"cardItem\"\n :label-width=\"config.labelWidth || '100px'\"\n @change=\"onChangeHandler\"\n >\n <template #header>\n <m-form-container\n class=\"fullWidth\"\n :config=\"eventNameConfig\"\n :model=\"cardItem\"\n :disabled=\"disabled\"\n :size=\"size\"\n @change=\"onChangeHandler\"\n ></m-form-container>\n <TMagicButton\n style=\"color: #f56c6c\"\n text\n :icon=\"Delete\"\n :disabled=\"disabled\"\n :size=\"size\"\n @click=\"removeEvent(index)\"\n ></TMagicButton>\n </template>\n </m-form-panel>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue';\nimport { Delete } from '@element-plus/icons-vue';\nimport { has } from 'lodash-es';\n\nimport type { EventOption } from '@tmagic/core';\nimport { TMagicButton } from '@tmagic/design';\nimport type { FieldProps, FormState } from '@tmagic/form';\nimport { ActionType } from '@tmagic/schema';\n\nimport type { CodeSelectColConfig, DataSourceMethodSelectConfig, EventSelectConfig, Services } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorEventSelect',\n});\n\nconst props = defineProps<FieldProps<EventSelectConfig>>();\n\nconst emit = defineEmits(['change']);\n\nconst services = inject<Services>('services');\n\nconst editorService = services?.editorService;\nconst dataSourceService = services?.dataSourceService;\nconst eventsService = services?.eventsService;\nconst codeBlockService = services?.codeBlockService;\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 let events: EventOption[] = [];\n\n if (!eventsService || !dataSourceService) return events;\n\n if (props.config.src === 'component') {\n events = eventsService.getEvent(formValue.type);\n } else if (props.config.src === 'datasource') {\n events = dataSourceService.getFormEvent(formValue.type);\n }\n\n return events.map((option) => ({\n text: option.label,\n value: option.value,\n }));\n },\n };\n return { ...defaultEventNameConfig, ...props.config.eventNameConfig };\n});\n\n// 联动类型\nconst actionTypeConfig = computed(() => {\n const defaultActionTypeConfig = {\n name: 'actionType',\n text: '联动类型',\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 disabled: !Object.keys(codeBlockService?.getCodeDsl() || {}).length,\n value: ActionType.CODE,\n },\n {\n text: '数据源',\n label: '数据源',\n disabled: !dataSourceService\n ?.get('dataSources')\n ?.filter((ds) => ds.methods?.length || dataSourceService?.getFormMethod(ds.type).length).length,\n value: ActionType.DATA_SOURCE,\n },\n ],\n };\n return { ...defaultActionTypeConfig, ...props.config.actionTypeConfig };\n});\n\n// 联动组件配置\nconst targetCompConfig = computed(() => {\n const defaultTargetCompConfig = {\n name: 'to',\n text: '联动组件',\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 type: 'select',\n display: (mForm: FormState, { model }: { model: Record<any, any> }) => model.actionType === ActionType.COMP,\n options: (mForm: FormState, { model }: any) => {\n const node = editorService?.getNodeById(model.to);\n if (!node?.type) return [];\n\n return eventsService?.getMethod(node.type).map((option: 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: CodeSelectColConfig = {\n type: 'code-select-col',\n text: '代码块',\n name: 'codeId',\n disabled: () => !codeBlockService?.getEditStatus(),\n display: (mForm, { model }) => model.actionType === ActionType.CODE,\n };\n return { ...defaultCodeActionConfig, ...props.config.codeActionConfig };\n});\n\n// 数据源联动配置\nconst dataSourceActionConfig = computed(() => {\n const defaultDataSourceActionConfig: DataSourceMethodSelectConfig = {\n type: 'data-source-method-select',\n text: '数据源方法',\n name: 'dataSourceMethod',\n display: (mForm, { model }) => model.actionType === ActionType.DATA_SOURCE,\n };\n return { ...defaultDataSourceActionConfig, ...props.config.dataSourceActionConfig };\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 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 = editorService?.getNodeById(model.to);\n if (!node?.type) return [];\n\n return 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 expandAll: true,\n enableToggleMode: false,\n titlePrefix: '动作',\n items: [\n actionTypeConfig.value,\n targetCompConfig.value,\n compActionConfig.value,\n codeActionConfig.value,\n dataSourceActionConfig.value,\n ],\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","<template>\n <div class=\"m-fields-key-value\">\n <div v-if=\"!showCode\">\n <div class=\"m-fields-key-value-item\" v-for=\"(item, index) in records\" :key=\"index\">\n <TMagicInput\n placeholder=\"key\"\n v-model=\"records[index][0]\"\n :disabled=\"disabled\"\n :size=\"size\"\n @change=\"keyChangeHandler\"\n ></TMagicInput>\n <span class=\"m-fileds-key-value-delimiter\">:</span>\n <TMagicInput\n placeholder=\"value\"\n v-model=\"records[index][1]\"\n :disabled=\"disabled\"\n :size=\"size\"\n @change=\"valueChangeHandler\"\n ></TMagicInput>\n\n <TMagicButton\n class=\"m-fileds-key-value-delete\"\n type=\"danger\"\n :size=\"size\"\n :disabled=\"disabled\"\n circle\n plain\n :icon=\"Delete\"\n @click=\"deleteHandler(index)\"\n ></TMagicButton>\n </div>\n\n <TMagicButton type=\"primary\" :size=\"size\" :disabled=\"disabled\" plain :icon=\"Plus\" @click=\"addHandler\"\n >添加</TMagicButton\n >\n </div>\n\n <MagicCodeEditor\n v-if=\"config.advanced && showCode\"\n height=\"200px\"\n :init-values=\"model[name]\"\n language=\"json\"\n :options=\"{\n readOnly: disabled,\n }\"\n :parse=\"true\"\n @save=\"save\"\n ></MagicCodeEditor>\n\n <TMagicButton\n v-if=\"config.advanced\"\n size=\"default\"\n :disabled=\"disabled\"\n text\n :icon=\"CodeIcon\"\n @click=\"showCode = !showCode\"\n ></TMagicButton>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watchEffect } from 'vue';\nimport { Delete, Plus } from '@element-plus/icons-vue';\n\nimport { TMagicButton, TMagicInput } from '@tmagic/design';\nimport type { FieldProps } from '@tmagic/form';\n\nimport CodeIcon from '@editor/icons/CodeIcon.vue';\nimport MagicCodeEditor from '@editor/layouts/CodeEditor.vue';\n\ndefineOptions({\n name: 'MEditorKeyValue',\n});\n\nconst props = withDefaults(\n defineProps<\n FieldProps<{\n type: 'key-value';\n name: string;\n text: string;\n advanced?: boolean;\n }>\n >(),\n {\n disabled: false,\n },\n);\n\nconst emit = defineEmits<(e: 'change', value: Record<string, any>) => void>();\n\nconst records = ref<[string, string][]>([]);\nconst showCode = ref(false);\n\nwatchEffect(() => {\n const initValues: [string, any][] = Object.entries(props.model[props.name] || {});\n\n for (const [, value] of initValues) {\n if (typeof value !== 'string') {\n showCode.value = true;\n break;\n }\n }\n\n records.value = initValues;\n});\n\nconst getValue = () => {\n const record: Record<string, string> = {};\n records.value.forEach(([key, value]) => {\n if (key) {\n record[key] = value;\n }\n });\n return record;\n};\n\nconst keyChangeHandler = () => {\n emit('change', getValue());\n};\n\nconst valueChangeHandler = () => {\n emit('change', getValue());\n};\n\nconst addHandler = () => {\n records.value.push(['', '']);\n};\n\nconst deleteHandler = (index: number) => {\n records.value.splice(index, 1);\n emit('change', getValue());\n};\n\nconst save = (v: string | any) => {\n emit('change', v);\n};\n</script>\n","<template>\n <div class=\"m-fields-ui-select\" v-if=\"uiSelectMode\" @click=\"cancelHandler\">\n <TMagicButton type=\"danger\" :icon=\"Delete\" :disabled=\"disabled\" :size=\"size\" text style=\"padding: 0\"\n >取消</TMagicButton\n >\n </div>\n <div class=\"m-fields-ui-select\" v-else style=\"display: flex\">\n <template v-if=\"val\">\n <TMagicTooltip content=\"清除\" placement=\"top\">\n <TMagicButton\n style=\"padding: 0\"\n type=\"danger\"\n :icon=\"Close\"\n :disabled=\"disabled\"\n :size=\"size\"\n text\n @click.stop=\"deleteHandler\"\n ></TMagicButton>\n </TMagicTooltip>\n\n <TMagicTooltip content=\"点击选中组件\" placement=\"top\">\n <TMagicButton\n text\n style=\"padding: 0; margin: 0\"\n :disabled=\"disabled\"\n :size=\"size\"\n @click=\"selectNode(val)\"\n @mouseenter=\"highlight(val)\"\n @mouseleave=\"unhightlight\"\n >{{ `${toName}_${val}` }}</TMagicButton\n >\n </TMagicTooltip>\n </template>\n\n <TMagicTooltip v-else content=\"点击此处选择\" placement=\"top\">\n <TMagicButton text style=\"padding: 0; margin: 0\" :disabled=\"disabled\" :size=\"size\" @click=\"startSelect\"\n >点击此处选择</TMagicButton\n >\n </TMagicTooltip>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, ref } from 'vue';\nimport { Close, Delete } from '@element-plus/icons-vue';\nimport { throttle } from 'lodash-es';\n\nimport { TMagicButton, TMagicTooltip } from '@tmagic/design';\nimport type { FieldProps, FormState } from '@tmagic/form';\nimport type { Id } from '@tmagic/schema';\n\nimport { Services, UI_SELECT_MODE_EVENT_NAME } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorUISelect',\n});\n\nconst props = defineProps<FieldProps<any>>();\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_MODE_EVENT_NAME, 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_MODE_EVENT_NAME, 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\nconst selectNode = async (id: Id) => {\n await services?.editorService.select(id);\n services?.editorService.get('stage')?.select(id);\n};\n\nconst highlight = throttle((id: Id) => {\n services?.editorService.highlight(id);\n services?.editorService.get('stage')?.highlight(id);\n}, 150);\n\nconst unhightlight = () => {\n services?.editorService.set('highlightNode', null);\n services?.editorService.get('stage')?.clearHighlight();\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","import { onMounted, onUnmounted, type Ref, ref } from 'vue';\nimport Gesto, { type OnDrag } from 'gesto';\n\nexport const useGetSo = (target: Ref<HTMLElement | undefined>, emit: (evt: 'change', e: OnDrag<Gesto>) => void) => {\n let getso: Gesto;\n const isDraging = ref(false);\n\n onMounted(() => {\n if (!target.value) return;\n getso = new Gesto(target.value, {\n container: window,\n pinchOutside: true,\n })\n .on('drag', (e) => {\n if (!target.value) return;\n\n emit('change', e);\n })\n .on('dragStart', () => {\n isDraging.value = true;\n })\n .on('dragEnd', () => {\n isDraging.value = false;\n });\n });\n\n onUnmounted(() => {\n getso?.unset();\n isDraging.value = false;\n });\n\n return {\n isDraging,\n };\n};\n","<template>\n <span ref=\"target\" class=\"m-editor-resizer\" :class=\"{ 'm-editor-resizer-draging': isDraging }\">\n <slot></slot>\n </span>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ref } from 'vue';\nimport type { OnDrag } from 'gesto';\n\nimport { useGetSo } from '@editor/hooks/use-getso';\n\ndefineOptions({\n name: 'MEditorResizer',\n});\n\nconst emit = defineEmits<{\n change: [e: OnDrag];\n}>();\n\nconst target = ref<HTMLSpanElement>();\nconst { isDraging } = useGetSo(target, emit);\n</script>\n","<template>\n <div ref=\"el\" class=\"m-editor-layout\" :style=\"`min-width: ${props.minCenter + props.minLeft + props.minRight}px`\">\n <template v-if=\"hasLeft && $slots.left\">\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 && $slots.right\">\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>\nimport { computed, onMounted, onUnmounted, ref } from 'vue';\nimport { OnDrag } from 'gesto';\n\nimport Resizer from './Resizer.vue';\n\ndefineOptions({\n name: 'MEditorLayout',\n});\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, l = 0, r = 0) => {\n let right = r > 0 ? r : 0;\n let left = l > 0 ? l : 0;\n let center = clientWidth - left - right;\n\n if (center < props.minCenter) {\n center = props.minCenter;\n if (right > center + props.minRight) {\n right = clientWidth - left - center;\n } else {\n right = props.minRight;\n left = clientWidth - right - center;\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 }: OnDrag) => {\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 }: OnDrag) => {\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, 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\ndefineExpose({\n updateWidth() {\n const columnWidth = getCenterWidth(el.value?.clientWidth || clientWidth, props.left, props.right);\n\n emit('change', {\n left: columnWidth.left,\n center: center.value,\n right: columnWidth.right,\n });\n },\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>\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\ndefineOptions({\n name: 'MEditorAddPageBox',\n});\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","<template>\n <div class=\"m-editor\" ref=\"content\" style=\"min-width: 180px\">\n <slot name=\"header\"></slot>\n\n <slot name=\"nav\"></slot>\n\n <slot name=\"content-before\"></slot>\n\n <slot name=\"src-code\" v-if=\"showSrc\">\n <CodeEditor class=\"m-editor-content\" :init-values=\"root\" :options=\"codeOptions\" @save=\"saveCode\"></CodeEditor>\n </slot>\n\n <SplitView\n v-else\n ref=\"splitView\"\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 :min-center=\"100\"\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\" #right>\n <TMagicScrollbar>\n <slot name=\"props-panel\"></slot>\n </TMagicScrollbar>\n </template>\n </SplitView>\n\n <slot name=\"content-after\"></slot>\n <slot name=\"footer\"></slot>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, ref, watch } from 'vue';\n\nimport { TMagicScrollbar } from '@tmagic/design';\n\nimport SplitView from '@editor/components/SplitView.vue';\nimport type { FrameworkSlots, GetColumnWidth, Services } from '@editor/type';\nimport { getConfig } from '@editor/utils/config';\n\nimport AddPageBox from './AddPageBox.vue';\nimport CodeEditor from './CodeEditor.vue';\n\ndefineSlots<FrameworkSlots>();\n\ndefineOptions({\n name: 'MEditorFramework',\n});\n\nconst DEFAULT_LEFT_COLUMN_WIDTH = 310;\nconst DEFAULT_RIGHT_COLUMN_WIDTH = 480;\n\nconst codeOptions = inject('codeOptions', {});\nconst { editorService, uiService } = inject<Services>('services') || {};\n\nconst content = ref<HTMLDivElement>();\nconst splitView = ref<InstanceType<typeof SplitView>>();\n\nconst root = computed(() => editorService?.get('root'));\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 getLeftColumnWidthCacheData = () =>\n Number(globalThis.localStorage.getItem(LEFT_COLUMN_WIDTH_STORAGE_KEY)) || DEFAULT_LEFT_COLUMN_WIDTH;\n\nconst leftColumnWidthCacheData = getLeftColumnWidthCacheData();\nconst RightColumnWidthCacheData =\n Number(globalThis.localStorage.getItem(RIGHT_COLUMN_WIDTH_STORAGE_KEY)) || DEFAULT_RIGHT_COLUMN_WIDTH;\n\nconst columnWidth = ref<Partial<GetColumnWidth>>({\n left: leftColumnWidthCacheData,\n center: 0,\n right: RightColumnWidthCacheData,\n});\n\nwatch(\n [pageLength, splitView],\n () => {\n splitView.value?.updateWidth();\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\nwatch(\n () => uiService?.get('hideSlideBar'),\n (hideSlideBar) => {\n columnWidth.value.left = hideSlideBar ? 0 : getLeftColumnWidthCacheData();\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 const parseDSL = getConfig('parseDSL');\n editorService?.set('root', parseDSL(value));\n } catch (e: any) {\n console.error(e);\n }\n};\n</script>\n","<template>\n <div\n v-if=\"display\"\n class=\"menu-item\"\n :class=\"`${data.type} ${data.className || ''}`\"\n @click=\"clickHandler(data, $event)\"\n @mousedown=\"mousedownHandler(data, $event)\"\n @mouseup=\"mouseupHandler(data, $event)\"\n >\n <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\" :title=\"data.text\"\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>\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\ndefineOptions({\n name: 'MEditorToolButton',\n});\n\nconst props = withDefaults(\n defineProps<{\n data?: MenuButton | MenuComponent;\n eventType?: 'mousedown' | 'mouseup' | 'click';\n }>(),\n {\n data: () => ({\n type: 'text',\n display: false,\n }),\n eventType: 'click',\n },\n);\nconst services = inject<Services>('services');\n\nconst disabled = computed(() => {\n if (typeof props.data === 'string') return false;\n if (props.data.type === 'component') return false;\n if (typeof props.data.disabled === 'function') {\n return props.data.disabled(services);\n }\n return props.data.disabled;\n});\n\nconst display = computed(() => {\n if (!props.data) return false;\n if (typeof props.data === 'string') return true;\n if (typeof props.data.display === 'function') {\n return props.data.display(services);\n }\n return props.data.display ?? true;\n});\n\nconst buttonHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (disabled.value) return;\n if (typeof (item as MenuButton).handler === 'function' && services) {\n (item as MenuButton).handler?.(services, event);\n }\n};\n\nconst dropdownHandler = (command: any) => {\n if (command.item.handler) {\n command.item.handler(services);\n }\n};\n\nconst clickHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'click') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n\nconst mousedownHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'mousedown') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n\nconst mouseupHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'mouseup') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n</script>\n","<template>\n <div class=\"m-editor-nav-menu\" :style=\"{ height: `${height}px` }\">\n <div v-for=\"key in keys\" :class=\"`menu-${key}`\" :key=\"key\" :style=\"`width: ${columnWidth?.[key]}px`\">\n <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>\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\ndefineOptions({\n name: 'MEditorNavMenu',\n});\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","<template>\n <div class=\"m-editor-props-panel\" v-show=\"nodes.length === 1\">\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 :extend-state=\"extendState\"\n @change=\"submit\"\n ></MForm>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, getCurrentInstance, inject, onMounted, onUnmounted, ref, watchEffect } from 'vue';\n\nimport { tMagicMessage } from '@tmagic/design';\nimport type { FormState, FormValue } from '@tmagic/form';\nimport { MForm } from '@tmagic/form';\n\nimport type { PropsPanelSlots, Services } from '@editor/type';\n\ndefineSlots<PropsPanelSlots>();\n\ndefineOptions({\n name: 'MEditorPropsPanel',\n});\n\ndefineProps<{\n extendState?: (state: FormState) => Record<string, any> | Promise<Record<string, any>>;\n}>();\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 nodes = computed(() => services?.editorService.get('nodes') || []);\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({ configForm, submit });\n</script>\n","import { computed, ComputedRef, inject, nextTick, ref, watch } from 'vue';\nimport Moveable from 'moveable';\n\nimport { type Services } from '@editor/type';\n\nexport const useFloatBox = (slideKeys: ComputedRef<string[]>) => {\n const services = inject<Services>('services');\n const moveable = ref<Moveable>();\n const floatBox = ref<HTMLElement[]>();\n\n const floatBoxStates = computed(() => services?.uiService.get('floatBox'));\n\n const curKey = ref('');\n const target = computed(() =>\n floatBox.value\n ? floatBox.value.find((item) => item.classList.contains(`m-editor-float-box-${curKey.value}`))\n : undefined,\n );\n\n const showingBoxKeys = computed(() =>\n [...(floatBoxStates.value?.keys() ?? [])].filter((key) => floatBoxStates.value?.get(key)?.status),\n );\n\n const isDraging = ref(false);\n\n const showFloatBox = async (key: string) => {\n const curBoxStatus = floatBoxStates.value?.get(curKey.value)?.status;\n if (curKey.value === key && curBoxStatus) return;\n curKey.value = key;\n setSlideState(key, {\n zIndex: getMaxZIndex() + 1,\n status: true,\n });\n\n await nextTick();\n if (moveable.value) {\n moveable.value.target = target.value;\n moveable.value.dragTarget = getDragTarget();\n moveable.value.updateRect();\n } else {\n initFloatBoxMoveable();\n }\n };\n\n const setSlideState = (key: string, data: Record<string, string | number | boolean>) => {\n const slideState = floatBoxStates.value?.get(key);\n if (!slideState) return;\n floatBoxStates.value?.set(key, {\n ...slideState,\n ...data,\n });\n };\n\n const getDragTarget = (key?: string) => `.m-editor-float-box-header-${key ?? curKey.value}`;\n\n const closeFloatBox = (key: string) => {\n setSlideState(key, {\n status: false,\n });\n\n // 如果只有一个,关掉后需要销毁moveable实例\n if (!floatBoxStates.value?.values) return;\n const keys = [...floatBoxStates.value?.keys()];\n const values = [...floatBoxStates.value?.values()];\n const lastFloatBoxLen = values.filter((state) => state.status).length;\n if (lastFloatBoxLen === 0) {\n moveable.value?.destroy();\n moveable.value = undefined;\n return;\n }\n\n // 如果关掉的 box 是最大的,需要选中下面的一层\n if (key === curKey.value) {\n // 查找显示的最大 zIndex 对应的 index\n const zIndexList = values.filter((item) => item.status).map((item) => item.zIndex);\n const maxZIndex = Math.max(...zIndexList);\n const key = keys.find((key) => floatBoxStates.value?.get(key)?.zIndex === maxZIndex);\n if (!key) return;\n showFloatBox(key);\n }\n };\n\n const getMaxZIndex = () => {\n if (!floatBoxStates.value?.values()) return 0;\n const list = [...floatBoxStates.value?.values()].map((state) => state.zIndex);\n return Math.max(...list) ?? 0;\n };\n\n const initFloatBoxMoveable = () => {\n const dragTarget = getDragTarget();\n moveable.value = new Moveable(document.body, {\n target: target.value,\n draggable: true,\n resizable: true,\n edge: true,\n keepRatio: false,\n origin: false,\n snappable: true,\n dragTarget,\n dragTargetSelf: false,\n linePadding: 10,\n controlPadding: 10,\n elementGuidelines: [...(floatBoxStates.value?.keys() ?? [])].map((key) => getDragTarget(key)),\n bounds: { left: 0, top: 0, right: 0, bottom: 0, position: 'css' },\n });\n moveable.value.on('drag', (e) => {\n e.target.style.transform = e.transform;\n });\n moveable.value.on('resize', (e) => {\n e.target.style.width = `${e.width}px`;\n e.target.style.height = `${e.height}px`;\n e.target.style.transform = e.drag.transform;\n });\n };\n\n const dragendHandler = (key: string, e: DragEvent) => {\n setSlideState(key, {\n left: e.clientX,\n top: e.clientY,\n });\n showFloatBox(key);\n isDraging.value = false;\n };\n\n document.body.addEventListener('dragover', (e: DragEvent) => {\n if (!isDraging.value) return;\n e.preventDefault();\n });\n\n const dragstartHandler = () => (isDraging.value = true);\n\n // 监听 slide 长度变化,更新 ui serice map\n watch(\n () => slideKeys.value,\n () => {\n services?.uiService.setFloatBox(slideKeys.value);\n },\n {\n deep: true,\n immediate: true,\n },\n );\n\n return {\n showFloatBox,\n closeFloatBox,\n dragstartHandler,\n dragendHandler,\n floatBoxStates,\n floatBox,\n showingBoxKeys,\n };\n};\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\ndefineOptions({\n name: 'MEditorSearchInput',\n});\n\nconst emit = defineEmits(['search']);\n\nconst filterText = ref('');\n\nlet timer: NodeJS.Timeout | null = null;\nconst filterTextChangeHandler = () => {\n timer && clearTimeout(timer);\n timer = setTimeout(() => {\n emit('search', filterText.value);\n }, 300);\n};\n</script>\n","import type { Id } from '@tmagic/schema';\nimport { getKeys } from '@tmagic/utils';\n\nimport type { LayerNodeStatus } from '@editor/type';\n\nexport const updateStatus = (nodeStatusMap: Map<Id, LayerNodeStatus>, id: Id, status: Partial<LayerNodeStatus>) => {\n const nodeStatus = nodeStatusMap.get(id);\n\n if (!nodeStatus) return;\n getKeys(status).forEach((key) => {\n if (nodeStatus[key] !== undefined && status[key] !== undefined) {\n nodeStatus[key] = Boolean(status[key]);\n }\n });\n};\n","<template>\n <div\n v-show=\"visible\"\n class=\"m-editor-tree-node\"\n :draggable=\"draggable\"\n :data-node-id=\"data.id\"\n :data-is-container=\"Array.isArray(data.items)\"\n @dragstart=\"handleDragStart\"\n @dragleave=\"handleDragLeave\"\n @dragend=\"handleDragEnd\"\n >\n <div\n class=\"tree-node\"\n :class=\"{ selected, expanded }\"\n :style=\"`padding-left: ${indent}px`\"\n @contextmenu=\"nodeContentmenuHandler\"\n @mouseenter=\"mouseenterHandler\"\n >\n <MIcon\n class=\"expand-icon\"\n :style=\"hasChilren ? '' : 'color: transparent; cursor: default'\"\n :icon=\"expanded ? ArrowDown : ArrowRight\"\n @click=\"expandHandler\"\n ></MIcon>\n\n <div class=\"tree-node-content\" @click=\"nodeClickHandler\">\n <slot name=\"tree-node-content\" :data=\"data\">\n <div class=\"tree-node-label\">\n <slot name=\"tree-node-label\" :data=\"data\">{{ `${data.name} (${data.id})` }}</slot>\n </div>\n <div class=\"tree-node-tool\">\n <slot name=\"tree-node-tool\" :data=\"data\"></slot>\n </div>\n </slot>\n </div>\n </div>\n\n <div v-if=\"hasChilren && expanded\" class=\"m-editor-tree-node-children\">\n <TreeNode\n v-for=\"item in data.items\"\n :key=\"item.id\"\n :data=\"item\"\n :node-status-map=\"nodeStatusMap\"\n :indent=\"indent + 11\"\n >\n <template #tree-node-content=\"{ data: nodeData }\">\n <slot name=\"tree-node-content\" :data=\"nodeData\"> </slot>\n </template>\n <template #tree-node-label=\"{ data: nodeData }\">\n <slot name=\"tree-node-label\" :data=\"nodeData\"> </slot>\n </template>\n <template #tree-node-tool=\"{ data: nodeData }\">\n <slot name=\"tree-node-tool\" :data=\"nodeData\"> </slot>\n </template>\n </TreeNode>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject } from 'vue';\nimport { ArrowDown, ArrowRight } from '@element-plus/icons-vue';\n\nimport type { Id } from '@tmagic/schema';\n\nimport MIcon from '@editor/components/Icon.vue';\nimport type { LayerNodeStatus, TreeNodeData } from '@editor/type';\nimport { updateStatus } from '@editor/utils/tree';\n\ndefineSlots<{\n 'tree-node-label'(props: { data: TreeNodeData }): any;\n 'tree-node-tool'(props: { data: TreeNodeData }): any;\n 'tree-node-content'(props: { data: TreeNodeData }): any;\n}>();\n\ndefineOptions({\n name: 'MEditorTreeNode',\n});\n\nconst emit = defineEmits<{\n 'node-dragstart': [event: DragEvent, data: TreeNodeData];\n 'node-dragleave': [event: DragEvent, data: TreeNodeData];\n 'node-dragend': [event: DragEvent, data: TreeNodeData];\n 'node-contextmenu': [event: MouseEvent, data: TreeNodeData];\n 'node-mouseenter': [event: MouseEvent, data: TreeNodeData];\n 'node-click': [event: MouseEvent, data: TreeNodeData];\n}>();\n\nconst treeEmit = inject<typeof emit>('treeEmit');\n\nconst props = withDefaults(\n defineProps<{\n data: TreeNodeData;\n nodeStatusMap: Map<Id, LayerNodeStatus>;\n indent?: number;\n }>(),\n {\n indent: 0,\n },\n);\n\nconst nodeStatus = computed(\n () =>\n props.nodeStatusMap?.get(props.data.id) || {\n selected: false,\n expand: false,\n visible: false,\n draggable: false,\n },\n);\n\nconst expanded = computed(() => nodeStatus.value.expand);\nconst selected = computed(() => nodeStatus.value.selected);\nconst visible = computed(() => nodeStatus.value.visible);\nconst draggable = computed(() => nodeStatus.value.draggable);\n\nconst hasChilren = computed(() => props.data.items?.some((item) => props.nodeStatusMap.get(item.id)?.visible));\n\nconst handleDragStart = (event: DragEvent) => {\n treeEmit?.('node-dragstart', event, props.data);\n};\n\nconst handleDragLeave = (event: DragEvent) => {\n treeEmit?.('node-dragleave', event, props.data);\n};\n\nconst handleDragEnd = (event: DragEvent) => {\n treeEmit?.('node-dragend', event, props.data);\n};\n\nconst nodeContentmenuHandler = (event: MouseEvent) => {\n treeEmit?.('node-contextmenu', event, props.data);\n};\n\nconst mouseenterHandler = (event: MouseEvent) => {\n treeEmit?.('node-mouseenter', event, props.data);\n};\n\nconst expandHandler = () => {\n updateStatus(props.nodeStatusMap, props.data.id, {\n expand: !expanded.value,\n });\n};\n\nconst nodeClickHandler = (event: MouseEvent) => {\n treeEmit?.('node-click', event, props.data);\n};\n</script>\n","<template>\n <div class=\"m-editor-tree\" @dragover=\"handleDragOver\">\n <template v-if=\"data?.length\">\n <TreeNode v-for=\"item in data\" :key=\"item.id\" :data=\"item\" :indent=\"indent\" :node-status-map=\"nodeStatusMap\">\n <template #tree-node-content=\"{ data: nodeData }\">\n <slot name=\"tree-node-content\" :data=\"nodeData\"> </slot>\n </template>\n\n <template #tree-node-label=\"{ data: nodeData }\">\n <slot name=\"tree-node-label\" :data=\"nodeData\"> </slot>\n </template>\n\n <template #tree-node-tool=\"{ data: nodeData }\">\n <slot name=\"tree-node-tool\" :data=\"nodeData\"> </slot>\n </template>\n </TreeNode>\n </template>\n <div v-else>\n <p>{{ emptyText }}</p>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide } from 'vue';\n\nimport type { Id } from '@tmagic/schema';\n\nimport type { LayerNodeStatus, TreeNodeData } from '@editor/type';\n\nimport TreeNode from './TreeNode.vue';\n\ndefineSlots<{\n 'tree-node-content'(props: { data: TreeNodeData }): any;\n 'tree-node-label'(props: { data: TreeNodeData }): any;\n 'tree-node-tool'(props: { data: TreeNodeData }): any;\n}>();\n\ndefineOptions({\n name: 'MEditorTree',\n});\n\nconst emit = defineEmits<{\n 'node-dragover': [event: DragEvent];\n 'node-dragstart': [event: DragEvent, data: TreeNodeData];\n 'node-dragleave': [event: DragEvent, data: TreeNodeData];\n 'node-dragend': [event: DragEvent, data: TreeNodeData];\n 'node-contextmenu': [event: MouseEvent, data: TreeNodeData];\n 'node-mouseenter': [event: MouseEvent, data: TreeNodeData];\n 'node-click': [event: MouseEvent, data: TreeNodeData];\n}>();\n\nprovide('treeEmit', emit);\n\nwithDefaults(\n defineProps<{\n data: TreeNodeData[];\n nodeStatusMap: Map<Id, LayerNodeStatus>;\n indent?: number;\n emptyText?: string;\n }>(),\n {\n indent: 0,\n emptyText: '暂无数据',\n },\n);\n\nconst handleDragOver = (event: DragEvent) => {\n emit('node-dragover', event);\n};\n</script>\n","import { type Ref, ref } from 'vue';\n\nimport type { Id, MNode } from '@tmagic/schema';\n\nimport type { LayerNodeStatus, TreeNodeData } from '@editor/type';\nimport { traverseNode } from '@editor/utils';\nimport { updateStatus } from '@editor/utils/tree';\n\nexport const useFilter = (\n nodeData: Ref<TreeNodeData[]>,\n nodeStatusMap: Ref<Map<Id, LayerNodeStatus> | undefined>,\n filterNodeMethod: (value: string, data: MNode) => boolean,\n) => {\n // tree方法:对树节点进行筛选时执行的方法\n const filterIsMatch = (value: string | string[], data: MNode): boolean => {\n const string = !Array.isArray(value) ? [value] : value;\n\n if (!string.length) {\n return true;\n }\n\n return string.some((v) => filterNodeMethod(v, data));\n };\n\n const filter = (text: string | string[]) => {\n if (!nodeData.value.length) return;\n\n nodeData.value.forEach((node) => {\n traverseNode(node, (node: MNode, parents: MNode[]) => {\n if (!nodeStatusMap.value) return;\n\n const visible = filterIsMatch(text, node);\n if (visible && parents.length) {\n parents.forEach((parent) => {\n updateStatus(nodeStatusMap.value!, parent.id, {\n visible,\n expand: true,\n });\n });\n }\n\n updateStatus(nodeStatusMap.value, node.id, {\n visible,\n });\n });\n });\n };\n\n return {\n filterText: ref(''),\n filterTextChangeHandler(text: string | string[]) {\n filter(text);\n },\n };\n};\n","import { ComputedRef, ref, watch } from 'vue';\n\nimport type { Id, MNode } from '@tmagic/schema';\n\nimport { LayerNodeStatus, TreeNodeData } from '@editor/type';\nimport { traverseNode } from '@editor/utils';\n\nconst createPageNodeStatus = (nodeData: TreeNodeData[], initalLayerNodeStatus?: Map<Id, LayerNodeStatus>) => {\n const map = new Map<Id, LayerNodeStatus>();\n\n nodeData.forEach((node: MNode) =>\n traverseNode(node, (node) => {\n map.set(\n node.id,\n initalLayerNodeStatus?.get(node.id) || {\n visible: true,\n expand: false,\n selected: false,\n draggable: false,\n },\n );\n }),\n );\n\n return map;\n};\n\nexport const useNodeStatus = (nodeData: ComputedRef<TreeNodeData[]>) => {\n /** 所有页面的节点状态 */\n const nodeStatusMap = ref(new Map<Id, LayerNodeStatus>());\n\n // 切换页面或者新增页面,重新生成节点状态\n watch(\n nodeData,\n (nodeData) => {\n // 生成节点状态\n nodeStatusMap.value = createPageNodeStatus(nodeData, nodeStatusMap.value);\n },\n {\n immediate: true,\n deep: true,\n },\n );\n\n return {\n nodeStatusMap,\n };\n};\n","<template>\n <Tree :data=\"codeList\" :node-status-map=\"nodeStatusMap\" @node-click=\"clickHandler\">\n <template #tree-node-label=\"{ data }\">\n <div\n :class=\"{\n code: data.type === 'code',\n hook: data.type === 'key',\n disabled: data.type === 'key' || data.type === 'code',\n }\"\n >\n {{ data.name }} {{ data.key ? `(${data.key})` : '' }}\n </div>\n </template>\n\n <template #tree-node-tool=\"{ data }\">\n <TMagicTooltip v-if=\"data.type === 'code'\" effect=\"dark\" :content=\"editable ? '编辑' : '查看'\" placement=\"bottom\">\n <Icon :icon=\"editable ? Edit : View\" class=\"edit-icon\" @click.stop=\"editCode(`${data.key}`)\"></Icon>\n </TMagicTooltip>\n <TMagicTooltip v-if=\"data.type === 'code' && editable\" effect=\"dark\" content=\"删除\" placement=\"bottom\">\n <Icon :icon=\"Close\" class=\"edit-icon\" @click.stop=\"deleteCode(`${data.key}`)\"></Icon>\n </TMagicTooltip>\n <slot name=\"code-block-panel-tool\" :id=\"data.key\" :data=\"data\"></slot>\n </template>\n </Tree>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue';\nimport { Close, Edit, View } from '@element-plus/icons-vue';\n\nimport { DepTargetType } from '@tmagic/dep';\nimport { tMagicMessage, tMagicMessageBox, TMagicTooltip } from '@tmagic/design';\nimport type { Id, MNode } from '@tmagic/schema';\n\nimport Icon from '@editor/components/Icon.vue';\nimport Tree from '@editor/components/Tree.vue';\nimport { useFilter } from '@editor/hooks/use-filter';\nimport { useNodeStatus } from '@editor/hooks/use-node-status';\nimport { type CodeBlockListSlots, CodeDeleteErrorType, type Services, type TreeNodeData } from '@editor/type';\n\ndefineSlots<CodeBlockListSlots>();\n\ndefineOptions({\n name: 'MEditorCodeBlockList',\n});\n\nconst props = defineProps<{\n customError?: (id: Id, errorType: CodeDeleteErrorType) => any;\n}>();\n\nconst emit = defineEmits<{\n edit: [id: string];\n remove: [id: string];\n}>();\n\nconst services = inject<Services>('services');\nconst { codeBlockService, depService, editorService } = services || {};\n\n// 代码块列表\nconst codeList = computed<TreeNodeData[]>(() =>\n Object.values(depService?.getTargets(DepTargetType.CODE_BLOCK) || {}).map((target) => {\n // 组件节点\n const compNodes: TreeNodeData[] = Object.entries(target.deps).map(([id, dep]) => ({\n name: dep.name,\n type: 'node',\n id: `${target.id}_${id}`,\n key: id,\n items: dep.keys.map((key) => {\n const data: TreeNodeData = { name: `${key}`, id: `${target.id}_${id}_${key}`, type: 'key' };\n return data;\n }),\n }));\n\n const data: TreeNodeData = {\n id: target.id,\n key: target.id,\n name: target.name,\n type: 'code',\n codeBlockContent: codeBlockService?.getCodeContentById(target.id),\n items: compNodes,\n };\n\n return data;\n }),\n);\n\nconst filterNode = (value: string, data: MNode): boolean => {\n if (!value) {\n return true;\n }\n return `${data.name}${data.id}`.toLocaleLowerCase().includes(value.toLocaleLowerCase());\n};\n\nconst { nodeStatusMap } = useNodeStatus(codeList);\nconst { filterTextChangeHandler } = useFilter(codeList, nodeStatusMap, filterNode);\n\nconst editable = computed(() => codeBlockService?.getEditStatus());\n\n// 选中组件\nconst selectComp = (compId: Id) => {\n const stage = editorService?.get('stage');\n editorService?.select(compId);\n stage?.select(compId);\n};\n\nconst clickHandler = (event: MouseEvent, data: any) => {\n if (data.type === 'node') {\n selectComp(data.key);\n }\n};\n\n// 编辑代码块\nconst editCode = (id: string) => {\n emit('edit', id);\n};\n\nconst deleteCode = async (id: string) => {\n const currentCode = codeList.value.find((codeItem) => codeItem.id === id);\n const existBinds = Boolean(currentCode?.items?.length);\n const undeleteableList = codeBlockService?.getUndeletableList() || [];\n if (!existBinds && !undeleteableList.includes(id)) {\n await tMagicMessageBox.confirm('确定删除该代码块吗?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning',\n });\n\n // 无绑定关系,且不在不可删除列表中\n emit('remove', id);\n } else {\n if (typeof props.customError === 'function') {\n props.customError(id, existBinds ? CodeDeleteErrorType.BIND : CodeDeleteErrorType.UNDELETEABLE);\n } else {\n tMagicMessage.error('代码块删除失败');\n }\n }\n};\n\ndefineExpose({\n filter: filterTextChangeHandler,\n});\n</script>\n","<template>\n <TMagicScrollbar class=\"m-editor-code-block-list m-editor-layer-panel\">\n <slot name=\"code-block-panel-header\">\n <div class=\"search-wrapper\">\n <SearchInput @search=\"filterTextChangeHandler\"></SearchInput>\n <TMagicButton v-if=\"editable\" class=\"create-code-button\" type=\"primary\" size=\"small\" @click=\"createCodeBlock\"\n >新增</TMagicButton\n >\n <slot name=\"code-block-panel-search\"></slot>\n </div>\n </slot>\n\n <!-- 代码块列表 -->\n <CodeBlockList ref=\"codeBlockList\" :custom-error=\"customError\" @edit=\"editCode\" @remove=\"deleteCode\">\n <template #code-block-panel-tool=\"{ id, data }\">\n <slot name=\"code-block-panel-tool\" :id=\"id\" :data=\"data\"></slot>\n </template>\n </CodeBlockList>\n </TMagicScrollbar>\n\n <!-- 代码块编辑区 -->\n <CodeBlockEditor\n v-if=\"codeConfig\"\n ref=\"codeBlockEditor\"\n :disabled=\"!editable\"\n :content=\"codeConfig\"\n :slideType=\"slideType\"\n @submit=\"submitCodeBlockHandler\"\n ></CodeBlockEditor>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, ref } from 'vue';\n\nimport { TMagicButton, TMagicScrollbar } from '@tmagic/design';\nimport type { Id } from '@tmagic/schema';\n\nimport CodeBlockEditor from '@editor/components/CodeBlockEditor.vue';\nimport SearchInput from '@editor/components/SearchInput.vue';\nimport { useCodeBlockEdit } from '@editor/hooks/use-code-block-edit';\nimport type { CodeBlockListPanelSlots, CodeDeleteErrorType, Services, SlideType } from '@editor/type';\n\nimport CodeBlockList from './CodeBlockList.vue';\n\ndefineSlots<CodeBlockListPanelSlots>();\n\ndefineOptions({\n name: 'MEditorCodeBlockListPanel',\n});\n\ndefineProps<{\n customError?: (id: Id, errorType: CodeDeleteErrorType) => any;\n slideType?: SlideType;\n}>();\n\nconst { codeBlockService } = inject<Services>('services') || {};\n\nconst editable = computed(() => codeBlockService?.getEditStatus());\n\nconst { codeBlockEditor, codeConfig, editCode, deleteCode, createCodeBlock, submitCodeBlockHandler } =\n useCodeBlockEdit(codeBlockService);\n\nconst codeBlockList = ref<InstanceType<typeof CodeBlockList>>();\n\nconst filterTextChangeHandler = (val: string) => {\n codeBlockList.value?.filter(val);\n};\n</script>\n","<template>\n <component\n :is=\"slideType === 'box' ? MFormBox : MFormDrawer\"\n ref=\"fomDrawer\"\n label-width=\"80px\"\n :close-on-press-escape=\"false\"\n :title=\"title\"\n :width=\"size\"\n :config=\"dataSourceConfig\"\n :values=\"initValues\"\n :disabled=\"disabled\"\n @submit=\"submitHandler\"\n @error=\"errorHandler\"\n ></component>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, ref, watchEffect } from 'vue';\n\nimport { tMagicMessage } from '@tmagic/design';\nimport { FormConfig, MFormBox, MFormDrawer } from '@tmagic/form';\nimport { DataSourceSchema } from '@tmagic/schema';\n\nimport type { Services, SlideType } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorDataSourceConfigPanel',\n});\n\nconst props = defineProps<{\n title?: string;\n values: any;\n disabled: boolean;\n slideType?: SlideType;\n}>();\n\nconst emit = defineEmits(['submit']);\n\nconst services = inject<Services>('services');\n\nconst size = computed(() => globalThis.document.body.clientWidth - (services?.uiService.get('columnWidth').left || 0));\n\nconst fomDrawer = ref<InstanceType<typeof MFormDrawer>>();\n\nconst initValues = ref<Partial<DataSourceSchema>>({});\nconst dataSourceConfig = ref<FormConfig>([]);\n\nwatchEffect(() => {\n initValues.value = props.values;\n dataSourceConfig.value = services?.dataSourceService.getFormConfig(initValues.value.type) || [];\n});\n\nconst submitHandler = (values: any) => {\n emit('submit', values);\n};\n\nconst errorHandler = (error: any) => {\n tMagicMessage.error(error.message);\n};\n\ndefineExpose({\n show() {\n fomDrawer.value?.show();\n },\n\n hide() {\n fomDrawer.value?.hide();\n },\n});\n</script>\n","<template>\n <Tree :data=\"list\" :node-status-map=\"nodeStatusMap\" @node-click=\"clickHandler\">\n <template #tree-node-label=\"{ data }\">\n <div\n :class=\"{\n ds: data.type === 'ds',\n hook: data.type === 'key',\n disabled: data.type === 'key' || data.type === 'ds',\n }\"\n >\n {{ data.name }} {{ data.key ? `(${data.key})` : '' }}\n </div>\n </template>\n <template #tree-node-tool=\"{ data }\">\n <TMagicTooltip v-if=\"data.type === 'ds'\" effect=\"dark\" :content=\"editable ? '编辑' : '查看'\" placement=\"bottom\">\n <Icon :icon=\"editable ? Edit : View\" class=\"edit-icon\" @click.stop=\"editHandler(`${data.key}`)\"></Icon>\n </TMagicTooltip>\n <TMagicTooltip v-if=\"data.type === 'ds' && editable\" effect=\"dark\" content=\"删除\" placement=\"bottom\">\n <Icon :icon=\"Close\" class=\"edit-icon\" @click.stop=\"removeHandler(`${data.key}`)\"></Icon>\n </TMagicTooltip>\n <slot name=\"data-source-panel-tool\" :data=\"data\"></slot>\n </template>\n </Tree>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue';\nimport { Close, Edit, View } from '@element-plus/icons-vue';\n\nimport { DepTargetType } from '@tmagic/dep';\nimport { tMagicMessageBox, TMagicTooltip } from '@tmagic/design';\nimport { DepData, Id, MNode } from '@tmagic/schema';\n\nimport Icon from '@editor/components/Icon.vue';\nimport Tree from '@editor/components/Tree.vue';\nimport { useFilter } from '@editor/hooks/use-filter';\nimport { useNodeStatus } from '@editor/hooks/use-node-status';\nimport type { DataSourceListSlots, Services } from '@editor/type';\n\ndefineSlots<DataSourceListSlots>();\n\ndefineOptions({\n name: 'MEditorDataSourceList',\n});\n\nconst emit = defineEmits<{\n edit: [id: string];\n remove: [id: string];\n}>();\n\nconst { depService, editorService, dataSourceService } = inject<Services>('services') || {};\n\nconst editable = computed(() => dataSourceService?.get('editable') ?? true);\n\nconst dataSources = computed(() => dataSourceService?.get('dataSources') || []);\n\nconst dsDep = computed(() => depService?.getTargets(DepTargetType.DATA_SOURCE) || {});\nconst dsMethodDep = computed(() => depService?.getTargets(DepTargetType.DATA_SOURCE_METHOD) || {});\nconst dsCondDep = computed(() => depService?.getTargets(DepTargetType.DATA_SOURCE_COND) || {});\n\nconst getKeyTreeConfig = (dep: DepData[string], type?: string, parentKey?: Id) =>\n dep.keys.map((key) => ({\n name: key,\n id: `${parentKey}_${key}`,\n type: 'key',\n isMethod: type === 'method',\n isCond: type === 'cond',\n }));\n\nconst getNodeTreeConfig = (id: string, dep: DepData[string], type?: string, parentKey?: Id) => ({\n name: dep.name,\n type: 'node',\n id: `${parentKey}_${id}`,\n key: id,\n items: getKeyTreeConfig(dep, type, `${parentKey}_${id}`),\n});\n\n/**\n * 生成tree中依赖节点的数据\n * @param items 节点\n * @param deps 依赖\n * @param type 依赖类型\n */\nconst mergeChildren = (dsId: Id, items: any[], deps: DepData, type?: string) => {\n Object.entries(deps).forEach(([id, dep]) => {\n // 已经生成过的节点\n const nodeItem = items.find((item) => item.key === id);\n // 节点存在,则追加依赖的key\n if (nodeItem) {\n nodeItem.items = nodeItem.items.concat(getKeyTreeConfig(dep, type, nodeItem.key));\n } else {\n // 节点不存在,则生成\n items.push(getNodeTreeConfig(id, dep, type, dsId));\n }\n });\n};\n\nconst list = computed(() =>\n dataSources.value.map((ds) => {\n const dsDeps = dsDep.value[ds.id]?.deps || {};\n const dsMethodDeps = dsMethodDep.value[ds.id]?.deps || {};\n const dsCondDeps = dsCondDep.value[ds.id]?.deps || {};\n\n const items: any[] = [];\n // 数据源依赖分为三种类型:key/node、method、cond,是分开存储,这里将其合并展示\n mergeChildren(ds.id, items, dsDeps);\n mergeChildren(ds.id, items, dsMethodDeps, 'method');\n mergeChildren(ds.id, items, dsCondDeps, 'cond');\n\n return {\n id: ds.id,\n key: ds.id,\n name: ds.title,\n type: 'ds',\n items,\n };\n }),\n);\n\nconst filterNode = (value: string, data: MNode): boolean => {\n if (!value) {\n return true;\n }\n return `${data.name}${data.id}`.toLocaleLowerCase().includes(value.toLocaleLowerCase());\n};\n\nconst { nodeStatusMap } = useNodeStatus(list);\nconst { filterTextChangeHandler } = useFilter(list, nodeStatusMap, filterNode);\n\nconst editHandler = (id: string) => {\n emit('edit', id);\n};\n\nconst removeHandler = async (id: string) => {\n await tMagicMessageBox.confirm('确定删除?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning',\n });\n\n emit('remove', id);\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 = (event: MouseEvent, data: any) => {\n if (data.type === 'node') {\n selectComp(data.key);\n }\n};\n\ndefineExpose({\n filter: filterTextChangeHandler,\n});\n</script>\n","<template>\n <TMagicScrollbar class=\"data-source-list-panel m-editor-layer-panel\">\n <div class=\"search-wrapper\">\n <SearchInput @search=\"filterTextChangeHandler\"></SearchInput>\n <TMagicPopover v-if=\"editable\" placement=\"right\">\n <template #reference>\n <TMagicButton type=\"primary\" size=\"small\">新增</TMagicButton>\n </template>\n <div class=\"data-source-list-panel-add-menu\">\n <ToolButton\n v-for=\"(item, index) in datasourceTypeList\"\n :data=\"{\n type: 'button',\n text: item.text,\n handler: () => {\n addHandler(item.type);\n },\n }\"\n :key=\"index\"\n ></ToolButton>\n </div>\n </TMagicPopover>\n </div>\n\n <!-- 数据源列表 -->\n <DataSourceList @edit=\"editHandler\" @remove=\"removeHandler\"></DataSourceList>\n </TMagicScrollbar>\n <DataSourceConfigPanel\n ref=\"editDialog\"\n :disabled=\"!editable\"\n :values=\"dataSourceValues\"\n :title=\"dialogTitle\"\n :slideType=\"slideType\"\n @submit=\"submitDataSourceHandler\"\n ></DataSourceConfigPanel>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, ref } from 'vue';\nimport { mergeWith } from 'lodash-es';\n\nimport { TMagicButton, TMagicPopover, TMagicScrollbar } from '@tmagic/design';\nimport type { DataSourceSchema } from '@tmagic/schema';\n\nimport SearchInput from '@editor/components/SearchInput.vue';\nimport ToolButton from '@editor/components/ToolButton.vue';\nimport type { DataSourceListSlots, Services, SlideType } from '@editor/type';\n\nimport DataSourceConfigPanel from './DataSourceConfigPanel.vue';\nimport DataSourceList from './DataSourceList.vue';\n\ndefineSlots<DataSourceListSlots>();\n\ndefineOptions({\n name: 'MEditorDataSourceListPanel',\n});\n\ndefineProps<{\n slideType?: SlideType;\n}>();\n\nconst { dataSourceService } = inject<Services>('services') || {};\n\nconst editDialog = ref<InstanceType<typeof DataSourceConfigPanel>>();\n\nconst dataSourceValues = ref<Record<string, any>>({});\n\nconst dialogTitle = ref('');\n\nconst editable = computed(() => dataSourceService?.get('editable') ?? true);\nconst datasourceTypeList = computed(() =>\n [\n { text: '基础', type: 'base' },\n { text: 'HTTP', type: 'http' },\n ].concat(dataSourceService?.get('datasourceTypeList') ?? []),\n);\n\nconst addHandler = (type: string) => {\n if (!editDialog.value) return;\n\n const datasourceType = datasourceTypeList.value.find((item) => item.type === type);\n\n dataSourceValues.value = mergeWith(\n { type, title: datasourceType?.text },\n dataSourceService?.getFormValue(type) || {},\n (objValue, srcValue) => {\n if (Array.isArray(srcValue)) {\n return srcValue;\n }\n },\n );\n\n dialogTitle.value = `新增${datasourceType?.text || ''}`;\n\n editDialog.value.show();\n};\n\nconst editHandler = (id: string) => {\n if (!editDialog.value) return;\n\n dataSourceValues.value = {\n ...dataSourceService?.getDataSourceById(id),\n };\n\n dialogTitle.value = `编辑${dataSourceValues.value.title || ''}`;\n\n editDialog.value.show();\n};\n\nconst removeHandler = (id: string) => {\n dataSourceService?.remove(id);\n};\n\nconst submitDataSourceHandler = (value: DataSourceSchema) => {\n if (value.id) {\n dataSourceService?.update(value);\n } else {\n dataSourceService?.add(value);\n }\n\n editDialog.value?.hide();\n};\n\nconst dataSourceList = ref<InstanceType<typeof DataSourceList>>();\n\nconst filterTextChangeHandler = (val: string) => {\n dataSourceList.value?.filter(val);\n};\n</script>\n","<template>\n <transition name=\"fade\">\n <div\n v-show=\"visible\"\n class=\"magic-editor-content-menu\"\n ref=\"menu\"\n :style=\"menuStyle\"\n @mouseenter=\"mouseenterHandler()\"\n >\n <slot name=\"title\"></slot>\n <div>\n <ToolButton\n v-for=\"(item, index) in menuData\"\n event-type=\"mouseup\"\n ref=\"buttons\"\n :class=\"{ active: active && item.id === active }\"\n :data=\"item\"\n :key=\"index\"\n @mouseup=\"clickHandler\"\n @mouseenter=\"showSubMenu(item, index)\"\n ></ToolButton>\n </div>\n <teleport to=\"body\">\n <content-menu\n v-if=\"subMenuData.length\"\n class=\"sub-menu\"\n ref=\"subMenu\"\n :active=\"active\"\n :menu-data=\"subMenuData\"\n :is-sub-menu=\"true\"\n @hide=\"hide\"\n ></content-menu>\n </teleport>\n </div>\n </transition>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, nextTick, onMounted, onUnmounted, ref } from 'vue';\n\nimport { MenuButton, MenuComponent } from '@editor/type';\n\nimport ToolButton from './ToolButton.vue';\n\ndefineOptions({\n name: 'MEditorContentMenu',\n});\n\nconst props = withDefaults(\n defineProps<{\n menuData?: (MenuButton | MenuComponent)[];\n isSubMenu?: boolean;\n active?: string | number;\n autoHide?: boolean;\n }>(),\n {\n menuData: () => [],\n isSubMenu: false,\n autoHide: true,\n },\n);\n\nconst emit = defineEmits<{\n hide: [];\n show: [];\n mouseenter: [];\n}>();\n\nconst menu = ref<HTMLDivElement>();\nconst buttons = ref<InstanceType<typeof ToolButton>[]>();\nconst subMenu = ref<any>();\nconst visible = ref(false);\nconst subMenuData = ref<(MenuButton | MenuComponent)[]>([]);\n\nconst menuPosition = ref({\n left: 0,\n top: 0,\n});\n\nconst menuStyle = computed(() => ({\n top: `${menuPosition.value.top}px`,\n left: `${menuPosition.value.left}px`,\n}));\n\nconst contains = (el: HTMLElement) => menu.value?.contains(el) || subMenu.value?.contains(el);\n\nconst hide = () => {\n if (!visible.value) return;\n\n visible.value = false;\n subMenu.value?.hide();\n\n emit('hide');\n};\n\nconst clickHandler = () => {\n if (!props.autoHide) return;\n\n hide();\n};\n\nconst outsideClickhideHandler = (e: MouseEvent) => {\n if (!props.autoHide) return;\n\n const target = e.target as HTMLElement | undefined;\n if (!visible.value || !target) {\n return;\n }\n if (contains(target)) {\n return;\n }\n hide();\n};\n\nconst setPosition = (e: { clientY: number; clientX: number }) => {\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 menuPosition.value = {\n top,\n left: e.clientX,\n };\n};\n\nconst show = (e?: { clientY: number; clientX: number }) => {\n // 加settimeout是以为,如果菜单中的按钮监听的是mouseup,那么菜单显示出来时鼠标如果正好在菜单上就会马上触发按钮的mouseup\n setTimeout(() => {\n visible.value = true;\n\n nextTick(() => {\n e && setPosition(e);\n\n emit('show');\n });\n }, 300);\n};\n\nconst showSubMenu = (item: MenuButton | MenuComponent, index: number) => {\n const menuItem = item as MenuButton;\n if (typeof item !== 'object') {\n return;\n }\n\n subMenuData.value = menuItem.items || [];\n setTimeout(() => {\n if (!visible.value) {\n return;\n }\n\n if (menu.value) {\n // 将子菜单放置在按钮右侧,与按钮齐平\n let y = menu.value.offsetTop;\n if (buttons.value?.[index].$el) {\n const rect = buttons.value?.[index].$el.getBoundingClientRect();\n y = rect.top;\n }\n subMenu.value?.show({\n clientX: menu.value.offsetLeft + menu.value.clientWidth,\n clientY: y,\n });\n }\n }, 0);\n};\n\nconst mouseenterHandler = () => {\n emit('mouseenter');\n};\n\nonMounted(() => {\n if (props.isSubMenu) return;\n\n globalThis.addEventListener('mousedown', outsideClickhideHandler, true);\n});\n\nonUnmounted(() => {\n if (props.isSubMenu) return;\n\n globalThis.removeEventListener('mousedown', outsideClickhideHandler, true);\n});\n\ndefineExpose({\n menu,\n menuPosition,\n hide,\n show,\n contains,\n setPosition,\n});\n</script>\n","import { computed, markRaw, Ref } from 'vue';\nimport { CopyDocument, Delete, DocumentCopy } from '@element-plus/icons-vue';\n\nimport { Id, MContainer, NodeType } from '@tmagic/schema';\nimport { isPage } from '@tmagic/utils';\n\nimport ContentMenu from '@editor/components/ContentMenu.vue';\nimport type { MenuButton, Services } from '@editor/type';\n\nimport { COPY_STORAGE_KEY } from './editor';\n\nexport const useDeleteMenu = (): MenuButton => ({\n type: 'button',\n text: '删除',\n icon: Delete,\n display: (services) => {\n const node = services?.editorService?.get('node');\n return node?.type !== NodeType.ROOT && !isPage(node);\n },\n handler: (services) => {\n const nodes = services?.editorService?.get('nodes');\n nodes && services?.editorService?.remove(nodes);\n },\n});\n\nexport const useCopyMenu = (): MenuButton => ({\n type: 'button',\n text: '复制',\n icon: markRaw(CopyDocument),\n handler: (services) => {\n const nodes = services?.editorService?.get('nodes');\n nodes && services?.editorService?.copy(nodes);\n },\n});\n\nexport const usePasteMenu = (menu?: Ref<InstanceType<typeof ContentMenu> | undefined>): MenuButton => ({\n type: 'button',\n text: '粘贴',\n icon: markRaw(DocumentCopy),\n display: (services) => !!services?.storageService?.getItem(COPY_STORAGE_KEY),\n handler: (services) => {\n const nodes = services?.editorService?.get('nodes');\n if (!nodes || nodes.length === 0) return;\n\n if (menu?.value?.$el) {\n const stage = services?.editorService?.get('stage');\n const rect = menu.value.$el.getBoundingClientRect();\n const parentRect = stage?.container?.getBoundingClientRect();\n const initialLeft = (rect.left || 0) - (parentRect?.left || 0);\n const initialTop = (rect.top || 0) - (parentRect?.top || 0);\n services?.editorService?.paste({ left: initialLeft, top: initialTop });\n } else {\n services?.editorService?.paste();\n }\n },\n});\n\nconst moveTo = (id: Id, services?: Services) => {\n if (!services?.editorService) return;\n\n const nodes = services.editorService.get('nodes') || [];\n const parent = services.editorService.getNodeById(id) as MContainer;\n\n if (!parent) return;\n\n services?.editorService.add(nodes, parent);\n services?.editorService.remove(nodes);\n};\n\nexport const useMoveToMenu = (services?: Services): MenuButton => {\n const root = computed(() => services?.editorService?.get('root'));\n\n return {\n type: 'button',\n text: '移动至',\n display: (services) => {\n const node = services?.editorService?.get('node');\n const pageLength = services?.editorService?.get('pageLength') || 0;\n return !isPage(node) && pageLength > 1;\n },\n items: (root.value?.items || [])\n .filter((page) => page.id !== services?.editorService?.get('page')?.id)\n .map((page) => ({\n text: `${page.name}(${page.id})`,\n type: 'button',\n handler: (services?: Services) => {\n moveTo(page.id, services);\n },\n })),\n };\n};\n","<template>\n <ContentMenu :menu-data=\"menuData\" ref=\"menu\" style=\"overflow: initial\"></ContentMenu>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, markRaw, ref } from 'vue';\nimport { Files, Plus } from '@element-plus/icons-vue';\n\nimport { isPage } from '@tmagic/utils';\n\nimport ContentMenu from '@editor/components/ContentMenu.vue';\nimport FolderMinusIcon from '@editor/icons/FolderMinusIcon.vue';\nimport type { ComponentGroup, MenuButton, MenuComponent, Services } from '@editor/type';\nimport { useCopyMenu, useDeleteMenu, useMoveToMenu, usePasteMenu } from '@editor/utils/content-menu';\n\ndefineOptions({\n name: 'MEditorLayerMenu',\n});\n\nconst props = defineProps<{\n layerContentMenu: (MenuButton | MenuComponent)[];\n}>();\n\nconst emit = defineEmits<{\n 'collapse-all': [];\n}>();\n\nconst services = inject<Services>('services');\nconst menu = ref<InstanceType<typeof ContentMenu>>();\nconst node = computed(() => services?.editorService.get('node'));\nconst nodes = computed(() => services?.editorService.get('nodes'));\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: FolderMinusIcon,\n display: () => isPage(node.value),\n handler: () => {\n emit('collapse-all');\n },\n },\n {\n type: 'button',\n text: '新增',\n icon: markRaw(Plus),\n display: () => node.value?.items && nodes.value?.length === 1,\n items: getSubMenuData.value,\n },\n useCopyMenu(),\n usePasteMenu(),\n useDeleteMenu(),\n useMoveToMenu(services),\n ...props.layerContentMenu,\n]);\n\nconst show = (e: MouseEvent) => {\n menu.value?.show(e);\n};\n\ndefineExpose({\n show,\n});\n</script>\n","<template>\n <template v-if=\"data.type !== 'page'\">\n <MIcon v-if=\"data.visible === false\" :icon=\"Hide\" @click.stop=\"setNodeVisible(true)\" title=\"点击显示\"></MIcon>\n <MIcon v-else :icon=\"View\" @click.stop=\"setNodeVisible(false)\" class=\"node-lock\" title=\"点击隐藏\"></MIcon>\n </template>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject } from 'vue';\nimport { Hide, View } from '@element-plus/icons-vue';\n\nimport type { MNode } from '@tmagic/schema';\n\nimport MIcon from '@editor/components/Icon.vue';\nimport { Services } from '@editor/type';\n\nconst props = defineProps<{\n data: MNode;\n}>();\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\n\nconst setNodeVisible = (visible: boolean) => {\n if (!editorService) return;\n\n editorService.update({\n id: props.data.id,\n visible,\n });\n};\n</script>\n","import { type ComputedRef, nextTick, type Ref, ref } from 'vue';\nimport { throttle } from 'lodash-es';\n\nimport { Id, MNode } from '@tmagic/schema';\n\nimport { LayerNodeStatus, Services, TreeNodeData, UI_SELECT_MODE_EVENT_NAME } from '@editor/type';\nimport { updateStatus } from '@editor/utils/tree';\n\nimport LayerMenu from './LayerMenu.vue';\n\nexport const useClick = (\n services: Services | undefined,\n isCtrlKeyDown: Ref<boolean>,\n nodeStatusMap: ComputedRef<Map<Id, LayerNodeStatus> | undefined>,\n) => {\n // 触发画布选中\n const select = async (data: MNode) => {\n if (!data.id) {\n throw new Error('没有id');\n }\n\n if (isCtrlKeyDown.value) {\n multiSelect(data);\n } else {\n await services?.editorService.select(data);\n services?.editorService.get('stage')?.select(data.id);\n }\n };\n\n const multiSelect = async (data: MNode) => {\n const nodes = services?.editorService.get('nodes') || [];\n\n const newNodes: Id[] = [];\n let isCancel = false;\n nodes.forEach((node) => {\n if (node.id === data.id) {\n isCancel = true;\n return;\n }\n\n newNodes.push(node.id);\n });\n\n // 只剩一个不能取消选中\n if (!isCancel || newNodes.length === 0) {\n newNodes.push(data.id);\n }\n\n await services?.editorService.multiSelect(newNodes);\n services?.editorService.get('stage')?.multiSelect(newNodes);\n };\n\n const throttleTime = 300;\n // 鼠标在组件树移动触发高亮\n const highlightHandler = throttle((event: MouseEvent, data: TreeNodeData) => {\n highlight(data);\n }, throttleTime);\n\n // 触发画布高亮\n const highlight = (data: TreeNodeData) => {\n services?.editorService?.highlight(data);\n services?.editorService?.get('stage')?.highlight(data.id);\n };\n\n const nodeClickHandler = (event: MouseEvent, data: TreeNodeData) => {\n if (!nodeStatusMap?.value) return;\n\n if (services?.uiService.get('uiSelectMode')) {\n document.dispatchEvent(new CustomEvent(UI_SELECT_MODE_EVENT_NAME, { detail: data }));\n return;\n }\n\n if (data.items && data.items.length > 0 && !isCtrlKeyDown.value) {\n updateStatus(nodeStatusMap.value, data.id, {\n expand: true,\n });\n }\n\n nextTick(() => {\n select(data);\n });\n };\n\n // 右键菜单\n const menu = ref<InstanceType<typeof LayerMenu>>();\n\n return {\n menu,\n\n nodeClickHandler,\n\n nodeContentmenuHandler(event: MouseEvent, data: TreeNodeData) {\n event.preventDefault();\n\n const nodes = services?.editorService.get('nodes') || [];\n if (nodes.length < 2 || !nodes.includes(data)) {\n nodeClickHandler(event, data);\n }\n\n menu.value?.show(event);\n },\n\n highlightHandler,\n };\n};\n","import type { Id, MContainer, MNode } from '@tmagic/schema';\nimport { addClassName, removeClassName } from '@tmagic/utils';\n\nimport { DragType, type Services } from '@editor/type';\nimport { getNodeIndex } from '@editor/utils';\n\nexport declare type NodeDropType = 'before' | 'after' | 'inner' | 'none';\n\nconst dragState: {\n dragOverNodeId: Id;\n dropType: NodeDropType | '';\n container: HTMLElement | null;\n} = {\n dragOverNodeId: '',\n dropType: '',\n container: null,\n};\n\nconst getNodeEl = (el: HTMLElement): HTMLElement | void => {\n if (el.dataset.nodeId) {\n return el;\n }\n\n if (el.parentElement) {\n return getNodeEl(el.parentElement);\n }\n};\n\nconst removeStatusClass = (el: HTMLElement | null) => {\n if (!el) return;\n\n ['drag-before', 'drag-after', 'drag-inner'].forEach((className) => {\n el.querySelectorAll(`.${className}`).forEach((el) => {\n removeClassName(el, className);\n });\n });\n};\n\n/**\n * dragstart/dragleave/dragend 属于源节点\n * dragover 属于目标节点\n * 这些方法并不是同一个dom事件触发的\n */\nexport const useDrag = (services: Services | undefined) => {\n const handleDragStart = (event: DragEvent) => {\n if (!event.dataTransfer || !event.target || !event.currentTarget) return;\n\n const targetEl = getNodeEl(event.target as HTMLElement);\n\n if (!targetEl || targetEl !== event.currentTarget) return;\n\n event.dataTransfer.effectAllowed = 'move';\n\n try {\n event.dataTransfer.setData(\n 'text/json',\n JSON.stringify({\n dragType: DragType.LAYER_TREE,\n }),\n );\n } catch {}\n };\n\n const handleDragOver = (event: DragEvent) => {\n if (!event.target) return;\n\n const targetEl = getNodeEl(event.target as HTMLElement);\n if (!targetEl?.draggable) return;\n\n const labelEl = targetEl.children[0];\n if (!labelEl) return;\n\n const { top: targetTop, height: targetHeight } = labelEl.getBoundingClientRect();\n\n const distance = event.clientY - targetTop;\n const isContainer = targetEl.dataset.isContainer === 'true';\n\n if (distance < targetHeight / 3) {\n dragState.dropType = 'before';\n addClassName(labelEl, globalThis.document, 'drag-before');\n removeClassName(labelEl, 'drag-after', 'drag-inner');\n } else if (distance > (targetHeight * 2) / 3) {\n dragState.dropType = 'after';\n addClassName(labelEl, globalThis.document, 'drag-after');\n removeClassName(labelEl, 'drag-before', 'drag-inner');\n } else if (isContainer) {\n dragState.dropType = 'inner';\n addClassName(labelEl, globalThis.document, 'drag-inner');\n removeClassName(labelEl, 'drag-before', 'drag-after');\n }\n\n if (!dragState.dropType) {\n return;\n }\n\n dragState.dragOverNodeId = targetEl.dataset.nodeId || '';\n dragState.container = event.currentTarget as HTMLElement;\n\n event.preventDefault();\n };\n\n const handleDragLeave = (event: DragEvent) => {\n if (!event.target || !event.currentTarget) return;\n\n const targetEl = getNodeEl(event.target as HTMLElement);\n\n if (!targetEl || targetEl !== event.currentTarget) return;\n\n const labelEl = targetEl.children[0];\n\n removeClassName(labelEl, 'drag-before', 'drag-after', 'drag-inner');\n };\n\n const handleDragEnd = (event: DragEvent, node: MNode) => {\n if (!event.target || !event.currentTarget) return;\n\n const targetEl = getNodeEl(event.target as HTMLElement);\n\n if (!targetEl || targetEl !== event.currentTarget) return;\n\n removeStatusClass(dragState.container);\n\n if (node && dragState.dragOverNodeId && dragState.dropType && services) {\n if (dragState.dragOverNodeId === node.id) {\n return;\n }\n\n const targetInfo = services.editorService.getNodeInfo(dragState.dragOverNodeId, false);\n const targetNode = targetInfo.node;\n let targetParent = targetInfo.parent;\n\n if (!targetParent || !targetNode) return;\n\n let targetIndex = -1;\n\n if (Array.isArray(targetNode.items) && dragState.dropType === 'inner') {\n targetIndex = targetNode.items.length;\n targetParent = targetNode as MContainer;\n } else {\n targetIndex = getNodeIndex(dragState.dragOverNodeId, targetParent);\n }\n\n if (dragState.dropType === 'after') {\n targetIndex += 1;\n }\n\n services?.editorService.dragTo(node, targetParent, targetIndex);\n }\n\n dragState.dragOverNodeId = '';\n dragState.dropType = '';\n dragState.container = null;\n };\n\n return {\n handleDragStart,\n handleDragEnd,\n handleDragLeave,\n handleDragOver,\n };\n};\n","import { KeyBindingCommand, KeyBindingItem } from '@editor/type';\n\nexport enum KeyBindingContainerKey {\n STAGE = 'stage',\n LAYER_PANEL = 'layer-panel',\n}\n\nexport default [\n {\n command: KeyBindingCommand.DELETE_NODE,\n keybinding: ['delete', 'backspace'],\n when: [\n [KeyBindingContainerKey.STAGE, 'keyup'],\n [KeyBindingContainerKey.LAYER_PANEL, 'keydown'],\n ],\n },\n {\n command: KeyBindingCommand.COPY_NODE,\n keybinding: 'ctrl+c',\n when: [\n [KeyBindingContainerKey.STAGE, 'keydown'],\n [KeyBindingContainerKey.LAYER_PANEL, 'keydown'],\n ],\n },\n {\n command: KeyBindingCommand.PASTE_NODE,\n keybinding: 'ctrl+v',\n when: [\n [KeyBindingContainerKey.STAGE, 'keydown'],\n [KeyBindingContainerKey.LAYER_PANEL, 'keydown'],\n ],\n },\n {\n command: KeyBindingCommand.CUT_NODE,\n keybinding: 'ctrl+x',\n when: [\n [KeyBindingContainerKey.STAGE, 'keydown'],\n [KeyBindingContainerKey.LAYER_PANEL, 'keydown'],\n ],\n },\n {\n command: KeyBindingCommand.UNDO,\n keybinding: 'ctrl+z',\n when: [\n [KeyBindingContainerKey.STAGE, 'keydown'],\n [KeyBindingContainerKey.LAYER_PANEL, 'keydown'],\n ],\n },\n {\n command: KeyBindingCommand.REDO,\n keybinding: 'ctrl+shift+z',\n when: [\n [KeyBindingContainerKey.STAGE, 'keydown'],\n [KeyBindingContainerKey.LAYER_PANEL, 'keydown'],\n ],\n },\n {\n command: KeyBindingCommand.MOVE_UP_1,\n keybinding: 'up',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.MOVE_DOWN_1,\n keybinding: 'down',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.MOVE_LEFT_1,\n keybinding: 'left',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.MOVE_RIGHT_1,\n keybinding: 'right',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.MOVE_UP_10,\n keybinding: 'ctrl+up',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.MOVE_DOWN_10,\n keybinding: 'ctrl+down',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.MOVE_LEFT_10,\n keybinding: 'ctrl+left',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.MOVE_RIGHT_10,\n keybinding: 'ctrl+right',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.SWITCH_NODE,\n keybinding: 'tab',\n when: [\n [KeyBindingContainerKey.STAGE, 'keydown'],\n [KeyBindingContainerKey.LAYER_PANEL, 'keydown'],\n ],\n },\n {\n command: KeyBindingCommand.ZOOM_IN,\n keybinding: ['ctrl+=', 'ctrl+numpadplus'],\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.ZOOM_OUT,\n keybinding: ['ctrl+-', 'ctrl+numpad-'],\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.ZOOM_FIT,\n keybinding: 'ctrl+0',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.ZOOM_RESET,\n keybinding: 'ctrl+1',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n] as KeyBindingItem[];\n","import { type Ref, ref, watchEffect } from 'vue';\n\nimport Tree from '@editor/components/Tree.vue';\nimport type { Services } from '@editor/type';\nimport { KeyBindingContainerKey } from '@editor/utils/keybinding-config';\n\nexport const useKeybinding = (\n services: Services | undefined,\n contianer: Ref<InstanceType<typeof Tree> | undefined>,\n) => {\n const keybindingService = services?.keybindingService;\n\n // 是否多选\n const isCtrlKeyDown = ref(false);\n\n const windowBlurHandler = () => {\n isCtrlKeyDown.value = false;\n };\n\n keybindingService?.registeCommand('layer-panel-global-keyup', () => {\n isCtrlKeyDown.value = false;\n });\n\n keybindingService?.registeCommand('layer-panel-global-keydwon', () => {\n isCtrlKeyDown.value = true;\n });\n\n keybindingService?.registe([\n {\n command: 'layer-panel-global-keydwon',\n keybinding: 'ctrl',\n when: [['global', 'keydown']],\n },\n {\n command: 'layer-panel-global-keyup',\n keybinding: 'ctrl',\n when: [['global', 'keyup']],\n },\n ]);\n\n watchEffect(() => {\n if (contianer.value) {\n globalThis.addEventListener('blur', windowBlurHandler);\n keybindingService?.registeEl(KeyBindingContainerKey.LAYER_PANEL, contianer.value.$el);\n } else {\n globalThis.removeEventListener('blur', windowBlurHandler);\n keybindingService?.unregisteEl(KeyBindingContainerKey.LAYER_PANEL);\n }\n });\n\n return {\n isCtrlKeyDown,\n };\n};\n","import { computed, ref, watch } from 'vue';\n\nimport type { Id, MNode, MPage } from '@tmagic/schema';\nimport { getNodePath } from '@tmagic/utils';\n\nimport { LayerNodeStatus, Services } from '@editor/type';\nimport { traverseNode } from '@editor/utils';\nimport { updateStatus } from '@editor/utils/tree';\n\nconst createPageNodeStatus = (page: MPage, initalLayerNodeStatus?: Map<Id, LayerNodeStatus>) => {\n const map = new Map<Id, LayerNodeStatus>();\n\n map.set(page.id, {\n visible: true,\n expand: true,\n selected: true,\n draggable: false,\n });\n\n page.items.forEach((node: MNode) =>\n traverseNode<MNode>(node, (node) => {\n map.set(\n node.id,\n initalLayerNodeStatus?.get(node.id) || {\n visible: true,\n expand: false,\n selected: false,\n draggable: true,\n },\n );\n }),\n );\n\n return map;\n};\n\nexport const useNodeStatus = (services: Services | undefined) => {\n const page = computed(() => services?.editorService.get('page'));\n const nodes = computed(() => services?.editorService.get('nodes') || []);\n\n /** 所有页面的节点状态 */\n const nodeStatusMaps = ref(new Map<Id, Map<Id, LayerNodeStatus>>());\n\n /** 当前页面的节点状态 */\n const nodeStatusMap = computed(() =>\n page.value ? nodeStatusMaps.value.get(page.value.id) : new Map<Id, LayerNodeStatus>(),\n );\n\n // 切换页面或者新增页面,重新生成节点状态\n watch(\n page,\n (page) => {\n if (!page) {\n return;\n }\n // 生成节点状态\n nodeStatusMaps.value.set(page.id, createPageNodeStatus(page, nodeStatusMaps.value.get(page.id)));\n },\n {\n immediate: true,\n },\n );\n\n // 选中状态变化,更新节点状态\n watch(\n nodes,\n (nodes) => {\n if (!nodeStatusMap.value) return;\n\n for (const [id, status] of nodeStatusMap.value.entries()) {\n status.selected = nodes.some((node) => node.id === id);\n if (status.selected) {\n getNodePath(id, page.value?.items).forEach((node) => {\n updateStatus(nodeStatusMap.value!, node.id, {\n expand: true,\n });\n });\n }\n }\n },\n {\n immediate: true,\n },\n );\n\n services?.editorService.on('add', (newNodes: MNode[]) => {\n newNodes.forEach((node) => {\n traverseNode(node, (node: MNode) => {\n nodeStatusMap.value?.set(node.id, {\n visible: true,\n expand: Array.isArray(node.items),\n selected: true,\n draggable: true,\n });\n });\n });\n });\n\n services?.editorService.on('remove', (nodes: MNode[]) => {\n nodes.forEach((node) => {\n traverseNode(node, (node: MNode) => {\n nodeStatusMap.value?.delete(node.id);\n });\n });\n });\n\n return {\n nodeStatusMaps,\n nodeStatusMap,\n };\n};\n","<template>\n <TMagicScrollbar class=\"m-editor-layer-panel\">\n <slot name=\"layer-panel-header\"></slot>\n\n <SearchInput @search=\"filterTextChangeHandler\"></SearchInput>\n\n <Tree\n v-if=\"page && nodeStatusMap\"\n tabindex=\"-1\"\n ref=\"tree\"\n :data=\"nodeData\"\n :node-status-map=\"nodeStatusMap\"\n @node-dragover=\"handleDragOver\"\n @node-dragstart=\"handleDragStart\"\n @node-dragleave=\"handleDragLeave\"\n @node-dragend=\"handleDragEnd\"\n @node-contextmenu=\"nodeContentmenuHandler\"\n @node-mouseenter=\"mouseenterHandler\"\n @node-click=\"nodeClickHandler\"\n >\n <template #tree-node-content=\"{ data: nodeData }\">\n <slot name=\"layer-node-content\" :data=\"nodeData\"> </slot>\n </template>\n\n <template #tree-node-tool=\"{ data: nodeData }\">\n <slot name=\"layer-node-tool\" :data=\"nodeData\">\n <LayerNodeTool :data=\"nodeData\"></LayerNodeTool>\n </slot>\n </template>\n\n <template #tree-node-label=\"{ data: nodeData }\">\n <slot name=\"layer-node-label\" :data=\"nodeData\"></slot>\n </template>\n </Tree>\n\n <Teleport to=\"body\">\n <LayerMenu ref=\"menu\" :layer-content-menu=\"layerContentMenu\" @collapse-all=\"collapseAllHandler\"></LayerMenu>\n </Teleport>\n </TMagicScrollbar>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, ref } from 'vue';\n\nimport { TMagicScrollbar } from '@tmagic/design';\nimport type { MNode } from '@tmagic/schema';\n\nimport SearchInput from '@editor/components/SearchInput.vue';\nimport Tree from '@editor/components/Tree.vue';\nimport { useFilter } from '@editor/hooks/use-filter';\nimport { LayerPanelSlots, MenuButton, MenuComponent, Services, TreeNodeData } from '@editor/type';\n\nimport LayerMenu from './LayerMenu.vue';\nimport LayerNodeTool from './LayerNodeTool.vue';\nimport { useClick } from './use-click';\nimport { useDrag } from './use-drag';\nimport { useKeybinding } from './use-keybinding';\nimport { useNodeStatus } from './use-node-status';\n\ndefineSlots<LayerPanelSlots>();\n\ndefineOptions({\n name: 'MEditorLayerPanel',\n});\n\ndefineProps<{\n layerContentMenu: (MenuButton | MenuComponent)[];\n}>();\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\n\nconst tree = ref<InstanceType<typeof Tree>>();\n\nconst page = computed(() => editorService?.get('page'));\nconst nodeData = computed<TreeNodeData[]>(() => (!page.value ? [] : [page.value]));\n\nconst { nodeStatusMap } = useNodeStatus(services);\nconst { isCtrlKeyDown } = useKeybinding(services, tree);\n\nconst filterNodeMethod = (v: string, data: MNode): boolean => {\n let name = '';\n if (data.name) {\n name = data.name;\n } else if (data.items) {\n name = 'container';\n }\n\n return `${data.id}${name}${data.type}`.includes(v);\n};\n\nconst { filterTextChangeHandler } = useFilter(nodeData, nodeStatusMap, filterNodeMethod);\n\nconst collapseAllHandler = () => {\n if (!page.value || !nodeStatusMap.value) return;\n const items = nodeStatusMap.value.entries();\n for (const [id, status] of items) {\n if (id === page.value.id) {\n continue;\n }\n status.expand = false;\n }\n};\n\nconst { handleDragStart, handleDragEnd, handleDragLeave, handleDragOver } = useDrag(services);\n\nconst {\n menu,\n nodeClickHandler,\n nodeContentmenuHandler,\n highlightHandler: mouseenterHandler,\n} = useClick(services, isCtrlKeyDown, nodeStatusMap);\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 <TMagicTooltip placement=\"right\" :disabled=\"!Boolean(item.desc)\" :content=\"item.desc\">\n <MIcon :icon=\"item.icon\"></MIcon>\n </TMagicTooltip>\n <span :title=\"item.text\">{{ item.text }}</span>\n </slot>\n </div>\n </TMagicCollapseItem>\n </template>\n </TMagicCollapse>\n </TMagicScrollbar>\n</template>\n\n<script lang=\"ts\" setup>\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 {\n type ComponentGroup,\n type ComponentItem,\n ComponentListPanelSlots,\n DragType,\n type Services,\n type StageOptions,\n} from '@editor/type';\n\ndefineSlots<ComponentListPanelSlots>();\n\ndefineOptions({\n name: 'MEditorComponentListPanel',\n});\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 e.dataTransfer?.setData(\n 'text/json',\n serialize({\n dragType: DragType.COMPONENT_LIST,\n data: {\n name: text,\n type,\n ...data,\n },\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.delayedMarkContainer(e);\n};\n</script>\n","<template>\n <div class=\"m-editor-sidebar\" v-if=\"data.type === 'tabs' && data.items.length\">\n <div class=\"m-editor-sidebar-header\">\n <div\n class=\"m-editor-sidebar-header-item\"\n v-for=\"(config, index) in sideBarItems\"\n v-show=\"!floatBoxStates?.get(config.$key)?.status\"\n draggable=\"true\"\n :key=\"config.$key ?? index\"\n :class=\"{ 'is-active': activeTabName === config.text }\"\n @click=\"activeTabName = config.text || `${index}`\"\n @dragstart=\"dragstartHandler\"\n @dragend=\"dragendHandler(config.$key, $event)\"\n >\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 </div>\n <div\n class=\"m-editor-sidebar-content\"\n v-for=\"(config, index) in sideBarItems\"\n :key=\"config.$key ?? index\"\n v-show=\"activeTabName === config.text\"\n >\n <component\n v-if=\"config && !floatBoxStates?.get(config.$key)?.status\"\n :is=\"config.component\"\n v-bind=\"config.props || {}\"\n v-on=\"config?.listeners || {}\"\n >\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 #layer-node-content=\"{ data: nodeData }\"\n v-if=\"config.$key === 'layer' || config.slots?.layerNodeContent\"\n >\n <slot v-if=\"config.$key === 'layer'\" name=\"layer-node-content\" :data=\"nodeData\"></slot>\n <component v-else-if=\"config.slots?.layerNodeContent\" :is=\"config.slots.layerNodeContent\" :data=\"nodeData\" />\n </template>\n\n <template #layer-node-label=\"{ data: nodeData }\" v-if=\"config.$key === 'layer' || config.slots?.layerNodeLabel\">\n <slot v-if=\"config.$key === 'layer'\" name=\"layer-node-label\" :data=\"nodeData\"></slot>\n <component v-else-if=\"config.slots?.layerNodeLabel\" :is=\"config.slots.layerNodeTool\" :data=\"nodeData\" />\n </template>\n\n <template #layer-node-tool=\"{ data: nodeData }\" v-if=\"config.$key === 'layer' || config.slots?.layerNodeTool\">\n <slot v-if=\"config.$key === 'layer'\" name=\"layer-node-tool\" :data=\"nodeData\"></slot>\n <component v-else-if=\"config.slots?.layerNodeTool\" :is=\"config.slots.layerNodeTool\" :data=\"nodeData\" />\n </template>\n\n <template\n #data-source-panel-tool=\"{ data }\"\n v-if=\"config.$key === 'data-source' || config.slots?.codeBlockPanelTool\"\n >\n <slot v-if=\"config.$key === 'data-source'\" name=\"data-source-panel-tool\" :data=\"data\"></slot>\n <component v-else-if=\"config.slots?.DataSourcePanelTool\" :is=\"config.slots.DataSourcePanelTool\" />\n </template>\n </component>\n </div>\n </div>\n\n <Teleport to=\"body\">\n <div class=\"m-editor-float-box-list\">\n <div\n v-for=\"(config, index) in sideBarItems\"\n :key=\"config.$key ?? index\"\n ref=\"floatBox\"\n :class=\"['m-editor-float-box', `m-editor-float-box-${config.$key}`]\"\n :style=\"{\n left: `${floatBoxStates?.get(config.$key)?.left}px`,\n top: `${floatBoxStates?.get(config.$key)?.top}px`,\n zIndex: floatBoxStates?.get(config.$key)?.zIndex,\n }\"\n v-show=\"floatBoxStates?.get(config.$key)?.status\"\n >\n <div\n :class=\"['m-editor-float-box-header', `m-editor-float-box-header-${config.$key}`]\"\n @click=\"showFloatBox(config.$key)\"\n >\n <div>{{ config.text }}</div>\n <MIcon class=\"m-editor-float-box-close\" :icon=\"Close\" @click.stop=\"closeFloatBox(config.$key)\"></MIcon>\n </div>\n <div class=\"m-editor-float-box-body\">\n <component\n v-if=\"config && floatBoxStates?.get(config.$key)?.status\"\n :is=\"config.boxComponentConfig?.component || config.component\"\n v-bind=\"config.boxComponentConfig?.props || config.props || {}\"\n v-on=\"config?.listeners || {}\"\n />\n </div>\n </div>\n </div>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, ref, watch } from 'vue';\nimport { Close, Coin, EditPen, Goods, List } from '@element-plus/icons-vue';\n\nimport MIcon from '@editor/components/Icon.vue';\nimport { useFloatBox } from '@editor/hooks/use-float-box';\nimport type {\n MenuButton,\n MenuComponent,\n Services,\n SideBarData,\n SidebarSlots,\n SideComponent,\n SideItem,\n} from '@editor/type';\n\nimport CodeBlockListPanel from './code-block/CodeBlockListPanel.vue';\nimport DataSourceListPanel from './data-source/DataSourceListPanel.vue';\nimport LayerPanel from './layer/LayerPanel.vue';\nimport ComponentListPanel from './ComponentListPanel.vue';\n\ndefineSlots<SidebarSlots>();\n\ndefineOptions({\n name: 'MEditorSidebar',\n});\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', 'data-source'] }),\n },\n);\n\nconst services = inject<Services>('services');\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: Goods,\n text: '组件',\n component: ComponentListPanel,\n slots: {},\n },\n layer: {\n $key: 'layer',\n type: 'component',\n icon: List,\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: CodeBlockListPanel,\n slots: {},\n boxComponentConfig: {\n props: {\n slideType: 'box',\n },\n },\n },\n 'data-source': {\n $key: 'data-source',\n type: 'component',\n icon: Coin,\n text: '数据源',\n component: DataSourceListPanel,\n slots: {},\n boxComponentConfig: {\n props: {\n slideType: 'box',\n },\n },\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\nconst slideKeys = computed(() => sideBarItems.value.map((sideBarItem) => sideBarItem.$key));\n\nconst { showFloatBox, closeFloatBox, dragstartHandler, dragendHandler, floatBoxStates, floatBox, showingBoxKeys } =\n useFloatBox(slideKeys);\n\nwatch(\n () => showingBoxKeys.value.length,\n () => {\n const isActiveTabShow = showingBoxKeys.value.some(\n (key) => activeTabName.value === sideBarItems.value.find((v) => v.$key === key)?.text,\n );\n if (!isActiveTabShow && activeTabName.value) return;\n const nextSlideBarItem = sideBarItems.value.find((sideBarItem) => !showingBoxKeys.value.includes(sideBarItem.$key));\n if (!nextSlideBarItem) {\n activeTabName.value = '';\n services?.uiService.set('hideSlideBar', true);\n return;\n }\n services?.uiService.set('hideSlideBar', false);\n activeTabName.value = nextSlideBarItem?.text;\n },\n);\n\ndefineExpose({\n activeTabName,\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","<template>\n <div ref=\"bar\" class=\"m-editor-scroll-bar\" :class=\"isHorizontal ? 'horizontal' : 'vertical'\">\n <div ref=\"thumb\" class=\"m-editor-scroll-bar-thumb\" :style=\"thumbStyle\"></div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onMounted, onUnmounted, ref } from 'vue';\nimport Gesto from 'gesto';\n\ndefineOptions({\n name: 'MEditorScrollBar',\n});\n\nconst props = defineProps<{\n size: number;\n scrollSize: number;\n isHorizontal?: boolean;\n pos: number;\n}>();\n\nconst emit = defineEmits(['scroll']);\n\nconst bar = ref<HTMLDivElement>();\nconst thumb = ref<HTMLDivElement>();\n\nconst thumbSize = computed(() => props.size * (props.size / props.scrollSize));\nconst thumbPos = computed(() => (props.pos / props.scrollSize) * props.size);\n\nconst thumbStyle = computed(() => ({\n [props.isHorizontal ? 'width' : 'height']: `${thumbSize.value}px`,\n transform: `translate${props.isHorizontal ? 'X' : 'Y'}(${thumbPos.value}px)`,\n}));\n\nlet gesto: Gesto;\n\nonMounted(() => {\n if (!thumb.value) return;\n const thumbEl = thumb.value;\n gesto = new Gesto(thumbEl, {\n container: window,\n });\n\n gesto\n .on('dragStart', (e) => {\n e.inputEvent.stopPropagation();\n e.inputEvent.preventDefault();\n })\n .on('drag', (e) => {\n scrollBy(getDelta(e));\n });\n\n bar.value?.addEventListener('wheel', wheelHandler, false);\n});\n\nonUnmounted(() => {\n if (gesto) gesto.off();\n bar.value?.removeEventListener('wheel', wheelHandler, false);\n});\n\nconst wheelHandler = (e: WheelEvent) => {\n const delta = props.isHorizontal ? e.deltaX : e.deltaY;\n if (delta) {\n e.preventDefault();\n }\n scrollBy(delta);\n};\n\nconst getDelta = (e: any) => {\n const ratio = (props.isHorizontal ? e.deltaX : e.deltaY) / props.size;\n return props.scrollSize * ratio;\n};\n\nconst scrollBy = (delta: number) => {\n if (delta < 0) {\n if (props.pos <= 0) {\n emit('scroll', 0);\n } else {\n emit('scroll', -Math.min(-delta, props.pos));\n }\n } else {\n const leftPos = props.size - (thumbSize.value + thumbPos.value);\n if (leftPos <= 0) {\n emit('scroll', 0);\n } else {\n emit('scroll', Math.min(delta, leftPos));\n }\n }\n};\n</script>\n\n<style lang=\"scss\">\n.m-editor-scroll-bar {\n position: absolute;\n background-color: transparent;\n opacity: 0.3;\n transition: background-color 0.2s linear, opacity 0.2s linear;\n\n .m-editor-scroll-bar-thumb {\n background-color: #aaa;\n border-radius: 6px;\n position: absolute;\n }\n\n &.horizontal {\n width: 100%;\n height: 15px;\n bottom: 0;\n\n .m-editor-scroll-bar-thumb {\n height: 6px;\n transition: background-color 0.2s linear, height 0.2s ease-in-out;\n bottom: 2px;\n }\n }\n\n &.vertical {\n height: 100%;\n width: 15px;\n right: 5px;\n\n .m-editor-scroll-bar-thumb {\n width: 6px;\n transition: background-color 0.2s linear, width 0.2s ease-in-out;\n right: 2px;\n }\n }\n\n &:hover,\n &:focus {\n background-color: #eee;\n opacity: 0.9;\n\n .m-editor-scroll-bar-thumb {\n background-color: #999;\n }\n\n &.horizontal {\n .m-editor-scroll-bar-thumb {\n height: 11px;\n }\n }\n\n &.vertical {\n .m-editor-scroll-bar-thumb {\n width: 11px;\n }\n }\n }\n}\n</style>\n","<template>\n <div class=\"m-editor-scroll-viewer-container\" ref=\"container\">\n <div ref=\"el\" :style=\"style\">\n <slot></slot>\n </div>\n\n <ScrollBar\n v-if=\"scrollHeight > wrapHeight\"\n :scroll-size=\"scrollHeight\"\n :size=\"wrapHeight\"\n :pos=\"vOffset\"\n @scroll=\"vScrollHandler\"\n ></ScrollBar>\n <ScrollBar\n v-if=\"scrollWidth > wrapWidth\"\n :is-horizontal=\"true\"\n :scroll-size=\"scrollWidth\"\n :pos=\"hOffset\"\n :size=\"wrapWidth\"\n @scroll=\"hScrollHandler\"\n ></ScrollBar>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onMounted, onUnmounted, ref, watch } from 'vue';\n\nimport { isNumber } from '@tmagic/utils';\n\nimport type { ScrollViewerEvent } from '@editor/type';\nimport { ScrollViewer } from '@editor/utils/scroll-viewer';\n\nimport ScrollBar from './ScrollBar.vue';\n\ndefineOptions({\n name: 'MEditorScrollViewer',\n});\n\nconst props = withDefaults(\n defineProps<{\n width?: number | string;\n height?: number | string;\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: ${isNumber(`${props.width}`) ? `${props.width}px` : props.width};\n height: ${isNumber(`${props.height}`) ? `${props.height}px` : props.height};\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","/*\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 { convertToNumber } from '@tmagic/utils';\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 floatBox: new Map(),\n hideSlideBar: false,\n});\n\nclass Ui extends BaseService {\n constructor() {\n super([\n { name: 'zoom', isAsync: true },\n { name: 'calcZoom', isAsync: true },\n ]);\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 let stageWidth: number = convertToNumber(stageRect.width, width);\n let stageHeight: number = convertToNumber(stageRect.height, height);\n\n // 30为标尺的大小\n stageWidth = stageWidth + 30;\n stageHeight = stageHeight + 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 async setFloatBox(keys: string[]) {\n const map = state.floatBox;\n for (const key of keys) {\n if (map.get(key)) continue;\n map.set(key, {\n status: false,\n zIndex: 99,\n top: 0,\n left: 0,\n });\n }\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 type { MNode } from '@tmagic/schema';\nimport StageCore, { GuidesType, RemoveEventData, SortEventData, UpdateEventData } from '@tmagic/stage';\n\nimport editorService from '@editor/services/editor';\nimport uiService from '@editor/services/ui';\nimport {\n H_GUIDE_LINE_STORAGE_KEY,\n StageOptions,\n UI_SELECT_MODE_EVENT_NAME,\n V_GUIDE_LINE_STORAGE_KEY,\n} from '@editor/type';\nimport { getGuideLineFromCache } from '@editor/utils/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 renderType: stageOptions.renderType,\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_MODE_EVENT_NAME, { 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 const nodes = ev.data.map(({ el }) => editorService.getNodeById(el.id));\n editorService.remove(nodes.filter((node) => Boolean(node)) as MNode[]);\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","<template>\n <Teleport to=\"body\" v-if=\"visible\">\n <div ref=\"target\" class=\"m-editor-float-box\" :style=\"style\">\n <div ref=\"dragTarget\" class=\"m-editor-float-box-title\">\n <slot name=\"title\">\n <span>{{ title }}</span>\n </slot>\n <div>\n <TMagicButton text size=\"small\" :icon=\"Close\" @click=\"closeHandler\"></TMagicButton>\n </div>\n </div>\n <div class=\"m-editor-float-box-body\">\n <slot name=\"body\"></slot>\n </div>\n </div>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, ref, watch } from 'vue';\nimport { Close } from '@element-plus/icons-vue';\nimport VanillaMoveable from 'moveable';\n\nimport { TMagicButton } from '@tmagic/design';\n\ninterface Position {\n left: number;\n top: number;\n}\n\ninterface Rect {\n width: number | string;\n height: number | string;\n}\n\nconst props = withDefaults(defineProps<{ visible: boolean; position?: Position; rect?: Rect; title?: string }>(), {\n visible: false,\n title: '',\n position: () => ({ left: 0, top: 0 }),\n rect: () => ({ width: 'auto', height: 'auto' }),\n});\n\nconst emit = defineEmits<{\n 'update:visible': [boolean];\n}>();\n\nconst target = ref<HTMLDivElement>();\nconst dragTarget = ref<HTMLDivElement>();\n\nconst style = computed(() => ({\n left: `${props.position.left}px`,\n top: `${props.position.top}px`,\n width: typeof props.rect.width === 'string' ? props.rect.width : `${props.rect.width}px`,\n height: typeof props.rect.height === 'string' ? props.rect.height : `${props.rect.height}px`,\n}));\n\nlet moveable: VanillaMoveable | null = null;\n\nconst initMoveable = () => {\n moveable = new VanillaMoveable(globalThis.document.body, {\n className: 'm-editor-floating-box-moveable',\n target: target.value,\n draggable: true,\n resizable: true,\n edge: true,\n keepRatio: false,\n origin: false,\n snappable: true,\n dragTarget: dragTarget.value,\n dragTargetSelf: false,\n linePadding: 10,\n controlPadding: 10,\n });\n\n moveable.on('drag', (e) => {\n e.target.style.transform = e.transform;\n });\n\n moveable.on('resize', (e) => {\n e.target.style.width = `${e.width}px`;\n e.target.style.height = `${e.height}px`;\n e.target.style.transform = e.drag.transform;\n });\n};\n\nconst destroyMoveable = () => {\n moveable?.destroy();\n moveable = null;\n};\n\nwatch(\n () => props.visible,\n async (visible) => {\n if (visible) {\n await nextTick();\n initMoveable();\n } else {\n destroyMoveable();\n }\n },\n {\n immediate: true,\n },\n);\n\nonBeforeUnmount(() => {\n destroyMoveable();\n});\n\nconst closeHandler = () => {\n emit('update:visible', false);\n};\n\ndefineExpose({\n target,\n});\n</script>\n","<template>\n <TMagicTooltip v-if=\"page && buttonVisible\" content=\"点击查看当前位置下的组件\">\n <div ref=\"button\" class=\"m-editor-stage-float-button\" @click=\"visible = true\">可选组件</div>\n </TMagicTooltip>\n <FloatingBox\n v-if=\"page && nodeStatusMap && buttonVisible\"\n ref=\"box\"\n v-model:visible=\"visible\"\n title=\"当前位置下的组件\"\n :position=\"menuPosition\"\n >\n <template #body>\n <Tree\n class=\"m-editor-node-list-menu magic-editor-layer-tree\"\n :data=\"nodeData\"\n :node-status-map=\"nodeStatusMap\"\n @node-click=\"clickHandler\"\n ></Tree>\n </template>\n </FloatingBox>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, nextTick, ref, watch } from 'vue';\n\nimport { TMagicTooltip } from '@tmagic/design';\nimport type { MNode } from '@tmagic/schema';\n\nimport FloatingBox from '@editor/components/FloatingBox.vue';\nimport Tree from '@editor/components/Tree.vue';\nimport { useFilter } from '@editor/hooks/use-filter';\nimport { useNodeStatus } from '@editor/layouts/sidebar/layer/use-node-status';\nimport type { Services, TreeNodeData } from '@editor/type';\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\n\nconst visible = ref(false);\nconst buttonVisible = ref(false);\nconst button = ref<HTMLDivElement>();\nconst box = ref<InstanceType<typeof FloatingBox>>();\n\nconst stage = computed(() => editorService?.get('stage'));\nconst page = computed(() => editorService?.get('page'));\nconst nodes = computed(() => editorService?.get('nodes') || []);\nconst nodeData = computed<TreeNodeData[]>(() => (!page.value ? [] : [page.value]));\n\nconst { nodeStatusMap } = useNodeStatus(services);\n\nconst filterNodeMethod = (value: string, data: MNode): boolean => data.id === value;\n\nconst { filterTextChangeHandler } = useFilter(nodeData, nodeStatusMap, filterNodeMethod);\n\nconst unWatch = watch(\n stage,\n (stage) => {\n if (!stage) return;\n\n stage.on('select', (el: HTMLElement, event: MouseEvent) => {\n const els = stage.renderer.getElementsFromPoint(event) || [];\n const ids = els.map((el) => el.id).filter((id) => Boolean(id));\n\n buttonVisible.value = ids.length > 3;\n\n filterTextChangeHandler(ids);\n });\n\n unWatch();\n },\n {\n immediate: true,\n },\n);\n\nwatch(\n nodes,\n (nodes) => {\n if (!nodeStatusMap.value) return;\n\n for (const [id, status] of nodeStatusMap.value.entries()) {\n status.selected = nodes.some((node) => node.id === id);\n }\n },\n {\n immediate: true,\n },\n);\n\nconst clickHandler = async (event: MouseEvent, data: TreeNodeData) => {\n await editorService?.select(data.id);\n stage.value?.select(data.id);\n};\n\nconst menuPosition = ref({\n left: 0,\n top: 0,\n});\n\nwatch(visible, async (visible) => {\n if (!button.value || !visible) {\n return;\n }\n\n await nextTick();\n\n const rect = button.value.getBoundingClientRect();\n const height = box.value?.target?.clientHeight || 0;\n\n menuPosition.value = {\n left: rect.left + rect.width + 5,\n top: rect.top - height / 2 + rect.height / 2,\n };\n});\n</script>\n","<template>\n <ContentMenu :menu-data=\"menuData\" ref=\"menu\"></ContentMenu>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, markRaw, ref, watch } from 'vue';\nimport { Bottom, 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 CenterIcon from '@editor/icons/CenterIcon.vue';\nimport { LayerOffset, Layout, MenuButton, MenuComponent, Services } from '@editor/type';\nimport { useCopyMenu, useDeleteMenu, useMoveToMenu, usePasteMenu } from '@editor/utils/content-menu';\n\ndefineOptions({\n name: 'MEditorViewerMenu',\n});\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 canCenter = ref(false);\n\nconst node = computed(() => editorService?.get('node'));\nconst nodes = computed(() => editorService?.get('nodes'));\nconst parent = computed(() => editorService?.get('parent'));\n\nconst menuData = computed<(MenuButton | MenuComponent)[]>(() => [\n {\n type: 'button',\n text: '水平居中',\n icon: markRaw(CenterIcon),\n display: () => canCenter.value,\n handler: () => {\n if (!nodes.value) return;\n editorService?.alignCenter(nodes.value);\n },\n },\n useCopyMenu(),\n usePasteMenu(menu),\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 icon: markRaw(Top),\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(LayerOffset.TOP);\n },\n },\n {\n type: 'button',\n text: '置底',\n icon: markRaw(Bottom),\n display: () => !isPage(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(LayerOffset.BOTTOM);\n },\n },\n useMoveToMenu(services),\n {\n type: 'divider',\n direction: 'horizontal',\n display: () => !isPage(node.value) && !props.isMultiSelect,\n },\n useDeleteMenu(),\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 = (e: MouseEvent) => {\n menu.value?.show(e);\n};\n\ndefineExpose({ show });\n</script>\n","<template>\n <ScrollViewer\n class=\"m-editor-stage\"\n ref=\"stageWrap\"\n tabindex=\"-1\"\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 @click=\"stageWrap?.container?.focus()\"\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 <NodeListMenu></NodeListMenu>\n\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>\nimport { computed, inject, markRaw, nextTick, onMounted, onUnmounted, ref, toRaw, watch, watchEffect } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport type { MApp, MContainer } from '@tmagic/schema';\nimport StageCore, { calcValueByFontsize, getOffset, Runtime } from '@tmagic/stage';\n\nimport ScrollViewer from '@editor/components/ScrollViewer.vue';\nimport { useStage } from '@editor/hooks/use-stage';\nimport { DragType, Layout, type MenuButton, type MenuComponent, type Services, type StageOptions } from '@editor/type';\nimport { getConfig } from '@editor/utils/config';\nimport { KeyBindingContainerKey } from '@editor/utils/keybinding-config';\n\nimport NodeListMenu from './NodeListMenu.vue';\nimport ViewerMenu from './ViewerMenu.vue';\n\ndefineOptions({\n name: 'MEditorStage',\n});\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 stage.on('select', () => {\n stageWrap.value?.container?.focus();\n });\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(page, (page) => {\n if (runtime && page) {\n runtime.updatePageId?.(page.id);\n nextTick(() => {\n stage?.select(page.id);\n });\n }\n});\n\nconst rootChangeHandler = (root: MApp) => {\n if (runtime && root) {\n runtime.updateRootConfig?.(cloneDeep(toRaw(root)));\n }\n};\n\nservices?.editorService.on('root-change', rootChangeHandler);\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 if (stageWrap.value?.container) {\n resizeObserver.observe(stageWrap.value.container);\n services?.keybindingService.registeEl(KeyBindingContainerKey.STAGE, stageWrap.value.container);\n }\n});\n\nonUnmounted(() => {\n stage?.destroy();\n resizeObserver.disconnect();\n services?.editorService.set('stage', null);\n services?.keybindingService.unregisteEl('stage');\n services?.editorService.off('root-change', rootChangeHandler);\n});\n\nconst parseDSL = getConfig('parseDSL');\n\nconst contextmenuHandler = (e: MouseEvent) => {\n e.preventDefault();\n menu.value?.show(e);\n};\n\nconst dragoverHandler = (e: DragEvent) => {\n if (!e.dataTransfer) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n};\n\nconst dropHandler = async (e: DragEvent) => {\n if (!e.dataTransfer) return;\n\n const data = e.dataTransfer.getData('text/json');\n\n if (!data) return;\n\n const config = parseDSL(`(${data})`);\n\n if (!config || config.dragType !== DragType.COMPONENT_LIST) return;\n\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 (parent && stageContainer.value && stage) {\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.data;\n\n let top = 0;\n let left = 0;\n let position = 'relative';\n\n if (style.position === 'fixed') {\n position = 'fixed';\n top = e.clientY - containerRect.top;\n left = e.clientX - containerRect.left;\n } else 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.data.style = {\n ...style,\n position,\n top: top / zoom.value,\n left: left / zoom.value,\n };\n\n config.data.inputEvent = e;\n\n services?.editorService.add(config.data, parent);\n }\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\">\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\ndefineOptions({\n name: 'MEditorBreadcrumb',\n});\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","<template>\n <div class=\"m-editor-page-bar\" ref=\"pageBar\">\n <div\n v-if=\"showAddPageButton\"\n id=\"m-editor-page-bar-add-icon\"\n class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\"\n @click=\"addPage\"\n >\n <Icon :icon=\"Plus\"></Icon>\n </div>\n <div v-else style=\"width: 21px\"></div>\n <div v-if=\"canScroll\" class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\" @click=\"scroll('left')\">\n <Icon :icon=\"ArrowLeftBold\"></Icon>\n </div>\n <div\n v-if=\"pageLength\"\n class=\"m-editor-page-bar-items\"\n ref=\"itemsContainer\"\n :style=\"`width: ${itemsContainerWidth}px`\"\n >\n <slot></slot>\n </div>\n <div v-if=\"canScroll\" class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\" @click=\"scroll('right')\">\n <Icon :icon=\"ArrowRightBold\"></Icon>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, nextTick, onMounted, onUnmounted, ref, toRaw, watch } from 'vue';\nimport { ArrowLeftBold, ArrowRightBold, Plus } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\n\nimport Icon from '@editor/components/Icon.vue';\nimport type { Services } from '@editor/type';\nimport { generatePageNameByApp } from '@editor/utils/editor';\n\ndefineOptions({\n name: 'MEditorPageBarScrollContainer',\n});\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","<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>\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\ndefineOptions({\n name: 'MEditorPageBar',\n});\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","<template>\n <div class=\"m-editor-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>\nimport { computed, inject } from 'vue';\n\nimport type { MenuButton, MenuComponent, Services, WorkspaceSlots } from '@editor/type';\n\nimport MagicStage from './viewer/Stage.vue';\nimport Breadcrumb from './Breadcrumb.vue';\nimport PageBar from './PageBar.vue';\n\ndefineSlots<WorkspaceSlots>();\n\ndefineOptions({\n name: 'MEditorWorkspace',\n});\n\ndefineProps<{\n stageContentMenu: (MenuButton | MenuComponent)[];\n}>();\n\nconst services = inject<Services>('services');\n\nconst page = computed(() => services?.editorService.get('page'));\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 type { ColumnConfig } from '@tmagic/form';\nimport type { CodeBlockContent, CodeBlockDSL, Id } from '@tmagic/schema';\n\nimport type { CodeState } from '@editor/type';\nimport { CODE_DRAFT_STORAGE_KEY } from '@editor/type';\nimport { getConfig } from '@editor/utils/config';\n\nimport BaseService from './BaseService';\n\nclass CodeBlock extends BaseService {\n private state = reactive<CodeState>({\n codeDsl: null,\n editable: true,\n combineIds: [],\n undeletableList: [],\n paramsColConfig: undefined,\n });\n\n constructor() {\n super([\n { name: 'setCodeDslById', isAsync: true },\n { name: 'setEditStatus', isAsync: true },\n { name: 'setCombineIds', isAsync: true },\n { name: 'setUndeleteableList', isAsync: true },\n { name: 'deleteCodeDslByIds', isAsync: true },\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 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: Partial<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 const parseDSL = getConfig('parseDSL');\n if (typeof codeConfig.content === 'string') {\n codeConfig.content = parseDSL<(...args: any[]) => any>(codeConfig.content);\n }\n codeConfigProcessed.content = 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 * @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 {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 public setParamsColConfig(config: ColumnConfig): void {\n this.state.paramsColConfig = config;\n }\n\n public getParamsColConfig(): ColumnConfig | undefined {\n return this.state.paramsColConfig;\n }\n\n /**\n * 生成代码块唯一id\n * @returns {Id} 代码块唯一id\n */\n public async getUniqueId(): Promise<string> {\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.codeDsl = null;\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 */\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 KeyController, { KeyControllerEvent } from 'keycon';\n\nimport { isPage } from '@tmagic/utils';\n\nimport { KeyBindingCacheItem, KeyBindingCommand, KeyBindingItem } from '@editor/type';\n\nimport BaseService from './BaseService';\nimport editorService from './editor';\nimport uiService from './ui';\n\nclass Keybinding extends BaseService {\n public ctrlKey = /mac os x/.test(navigator.userAgent.toLowerCase()) ? 'meta' : 'ctrl';\n\n private controllers = new Map<string, KeyController>();\n\n private bindingList: KeyBindingCacheItem[] = [];\n\n private commands: Record<KeyBindingCommand | string, (e: KeyboardEvent) => void | Promise<void>> = {\n [KeyBindingCommand.DELETE_NODE]: () => {\n const nodes = editorService.get('nodes');\n\n if (!nodes || isPage(nodes[0])) return;\n editorService.remove(nodes);\n },\n [KeyBindingCommand.COPY_NODE]: () => {\n const nodes = editorService.get('nodes');\n nodes && editorService.copy(nodes);\n },\n [KeyBindingCommand.CUT_NODE]: () => {\n const nodes = editorService.get('nodes');\n\n if (!nodes || isPage(nodes[0])) return;\n editorService.copy(nodes);\n editorService.remove(nodes);\n },\n [KeyBindingCommand.PASTE_NODE]: () => {\n const nodes = editorService.get('nodes');\n nodes && editorService.paste({ offsetX: 10, offsetY: 10 });\n },\n [KeyBindingCommand.UNDO]: () => {\n editorService.undo();\n },\n [KeyBindingCommand.REDO]: () => {\n editorService.redo();\n },\n [KeyBindingCommand.ZOOM_IN]: () => {\n uiService.zoom(0.1);\n },\n [KeyBindingCommand.ZOOM_OUT]: () => {\n uiService.zoom(-0.1);\n },\n [KeyBindingCommand.ZOOM_RESET]: () => {\n uiService.set('zoom', 1);\n },\n [KeyBindingCommand.ZOOM_FIT]: async () => {\n uiService.set('zoom', await uiService.calcZoom());\n },\n [KeyBindingCommand.MOVE_UP_1]: () => {\n editorService.move(0, -1);\n },\n [KeyBindingCommand.MOVE_DOWN_1]: () => {\n editorService.move(0, 1);\n },\n [KeyBindingCommand.MOVE_LEFT_1]: () => {\n editorService.move(-1, 0);\n },\n [KeyBindingCommand.MOVE_RIGHT_1]: () => {\n editorService.move(1, 0);\n },\n [KeyBindingCommand.MOVE_UP_10]: () => {\n editorService.move(0, -10);\n },\n [KeyBindingCommand.MOVE_DOWN_10]: () => {\n editorService.move(0, 10);\n },\n [KeyBindingCommand.MOVE_LEFT_10]: () => {\n editorService.move(-10, 0);\n },\n [KeyBindingCommand.MOVE_RIGHT_10]: () => {\n editorService.move(10, 0);\n },\n [KeyBindingCommand.SWITCH_NODE]: () => {\n editorService.selectNextNode();\n },\n };\n\n public registeCommand(command: string, handler: (e: KeyboardEvent) => void | Promise<void>) {\n this.commands[command] = handler;\n }\n\n public unregisteCommand(command: string) {\n delete this.commands[command];\n }\n\n public registeEl(name: string, el?: HTMLElement) {\n if (name !== 'global' && !el) {\n throw new Error('只有name为global可以不传el');\n }\n\n const keycon = new KeyController(el);\n this.controllers.set(name, keycon);\n this.bind(name);\n }\n\n public unregisteEl(name: string) {\n this.controllers.get(name)?.destroy();\n this.controllers.delete(name);\n this.bindingList.forEach((item) => {\n item.binded = false;\n });\n }\n\n public registe(maps: KeyBindingItem[]) {\n for (const keybindingItem of maps) {\n const { command, keybinding, when } = keybindingItem;\n\n for (const [type = '', eventType = 'keydown'] of when) {\n const cacheItem: KeyBindingCacheItem = { type, command, keybinding, eventType, binded: false };\n\n this.bindingList.push(cacheItem);\n }\n }\n\n this.bind();\n }\n\n public reset() {\n this.controllers.forEach((keycon) => {\n keycon.destroy();\n });\n this.controllers.clear();\n this.bindingList = [];\n }\n\n public destroy() {\n this.reset();\n }\n\n private bind(name?: string) {\n for (const item of this.bindingList) {\n const { type, eventType, command, keybinding, binded } = item;\n\n if (name && name !== type) {\n continue;\n }\n\n if (binded) {\n continue;\n }\n\n const keycon = this.controllers.get(type);\n if (!keycon) {\n continue;\n }\n\n const handler = (e: KeyControllerEvent) => {\n e.inputEvent.preventDefault();\n\n this.commands[command]?.(e.inputEvent);\n };\n this.getKeyconKeys(keybinding).forEach((keys) => {\n if (keys[0]) {\n keycon[eventType](keys, handler);\n } else {\n keycon[eventType](handler);\n }\n });\n\n item.binded = true;\n }\n }\n\n private getKeyconKeys(keybinding: string | string[] = '') {\n const splitKey = (key: string) => key.split('+').map((k) => (k === 'ctrl' ? this.ctrlKey : k));\n\n if (Array.isArray(keybinding)) {\n return keybinding.map((key) => splitKey(key));\n }\n return [splitKey(keybinding)];\n }\n}\n\nexport type KeybindingService = Keybinding;\n\nexport default new Keybinding();\n","import type { EventOption } from '@tmagic/core';\nimport { CustomTargetOptions } from '@tmagic/dep';\nimport type { FormConfig, FormState } from '@tmagic/form';\nimport type { DataSourceSchema, Id, MApp, MNode } from '@tmagic/schema';\nimport StageCore, {\n CONTAINER_HIGHLIGHT_CLASS_NAME,\n ContainerHighlightType,\n CustomizeMoveableOptionsCallbackConfig,\n MoveableOptions,\n RenderType,\n UpdateDragEl,\n} from '@tmagic/stage';\n\nimport type {\n ComponentGroup,\n DatasourceTypeOption,\n MenuBarData,\n MenuButton,\n MenuComponent,\n SideBarData,\n StageRect,\n} from './type';\n\nexport interface EditorProps {\n /** 页面初始值 */\n modelValue?: MApp;\n /** 左侧面板中的组件类型列表 */\n componentGroupList?: ComponentGroup[];\n /** 左侧面板中的数据源类型列表 */\n datasourceList?: DatasourceTypeOption[];\n /** 左侧面板配置 */\n sidebar?: SideBarData;\n /** 顶部工具栏配置 */\n menu?: MenuBarData;\n /** 组件树右键菜单 */\n layerContentMenu?: (MenuButton | MenuComponent)[];\n /** 画布右键菜单 */\n stageContentMenu?: (MenuButton | MenuComponent)[];\n /** 中间工作区域中画布渲染的内容 */\n render?: (stage: StageCore) => HTMLDivElement | Promise<HTMLDivElement>;\n /** 中间工作区域中画布通过iframe渲染时的页面url */\n runtimeUrl?: string;\n /** 是用iframe渲染还是直接渲染 */\n renderType?: RenderType;\n /** 选中时是否自动滚动到可视区域 */\n autoScrollIntoView?: boolean;\n /** 组件的属性配置表单的dsl */\n propsConfigs?: Record<string, FormConfig>;\n /** 添加组件时的默认值 */\n propsValues?: Record<string, Partial<MNode>>;\n /** 组件联动事件选项列表 */\n eventMethodList?: Record<string, { events: EventOption[]; methods: EventOption[] }>;\n /** 添加数据源时的默认值 */\n datasourceValues?: Record<string, Partial<DataSourceSchema>>;\n /** 数据源的属性配置表单的dsl */\n datasourceConfigs?: Record<string, FormConfig>;\n datasourceEventMethodList?: Record<string, { events: EventOption[]; methods: EventOption[] }>;\n /** 画布中组件选中框的移动范围 */\n moveableOptions?: MoveableOptions | ((config?: CustomizeMoveableOptionsCallbackConfig) => MoveableOptions);\n /** 编辑器初始化时默认选中的组件ID */\n defaultSelected?: Id;\n canSelect?: (el: HTMLElement) => boolean | Promise<boolean>;\n isContainer?: (el: HTMLElement) => boolean | Promise<boolean>;\n containerHighlightClassName?: string;\n containerHighlightDuration?: number;\n containerHighlightType?: ContainerHighlightType;\n stageRect?: StageRect;\n codeOptions?: { [key: string]: any };\n updateDragEl?: UpdateDragEl;\n disabledDragStart?: boolean;\n extendFormState?: (state: FormState) => Record<string, any> | Promise<Record<string, any>>;\n /** 自定义依赖收集器,复制组件时会将关联依赖一并复制 */\n collectorOptions?: CustomTargetOptions;\n}\n\nexport const defaultEditorProps = {\n componentGroupList: () => [],\n datasourceList: () => [],\n menu: () => ({ left: [], right: [] }),\n layerContentMenu: () => [],\n stageContentMenu: () => [],\n propsConfigs: () => ({}),\n propsValues: () => ({}),\n eventMethodList: () => ({}),\n datasourceValues: () => ({}),\n datasourceConfigs: () => ({}),\n canSelect: (el: HTMLElement) => Boolean(el.id),\n isContainer: (el: HTMLElement) => el.classList.contains('magic-ui-container'),\n containerHighlightClassName: CONTAINER_HIGHLIGHT_CLASS_NAME,\n containerHighlightDuration: 800,\n containerHighlightType: ContainerHighlightType.DEFAULT,\n codeOptions: () => ({}),\n renderType: RenderType.IFRAME,\n};\n","import { onUnmounted, reactive, toRaw, watch } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport type { EventOption } from '@tmagic/core';\nimport {\n createCodeBlockTarget,\n createDataSourceCondTarget,\n createDataSourceMethodTarget,\n createDataSourceTarget,\n createRelatedCompTarget,\n DepTargetType,\n Target,\n} from '@tmagic/dep';\nimport type { CodeBlockContent, DataSourceSchema, Id, MApp, MNode, MPage } from '@tmagic/schema';\nimport { getNodes } from '@tmagic/utils';\n\nimport PropsPanel from './layouts/PropsPanel.vue';\nimport { EditorProps } from './editorProps';\nimport { Services } from './type';\n\nexport declare type LooseRequired<T> = {\n [P in string & keyof T]: T[P];\n};\n\nexport const initServiceState = (\n props: EditorProps,\n {\n editorService,\n historyService,\n componentListService,\n propsService,\n eventsService,\n uiService,\n codeBlockService,\n keybindingService,\n dataSourceService,\n }: Services,\n) => {\n // 初始值变化,重新设置节点信息\n watch(\n () => props.modelValue,\n (modelValue) => {\n editorService.set('root', modelValue || null);\n },\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.componentGroupList,\n (componentGroupList) => componentGroupList && componentListService.setList(componentGroupList),\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.datasourceList,\n (datasourceList) => datasourceList && dataSourceService.set('datasourceTypeList', datasourceList),\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.propsConfigs,\n (configs) => configs && propsService.setPropsConfigs(configs),\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.propsValues,\n (values) => 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 eventMethodList &&\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.datasourceConfigs,\n (configs) => {\n configs &&\n Object.entries(configs).forEach(([key, value]) => {\n dataSourceService.setFormConfig(key, value);\n });\n },\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.datasourceValues,\n (values) => {\n values &&\n Object.entries(values).forEach(([key, value]) => {\n dataSourceService.setFormValue(key, value);\n });\n },\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.datasourceEventMethodList,\n (eventMethodList) => {\n const eventsList: Record<string, EventOption[]> = {};\n const methodsList: Record<string, EventOption[]> = {};\n\n eventMethodList &&\n Object.keys(eventMethodList).forEach((type: string) => {\n eventsList[type] = eventMethodList[type].events;\n methodsList[type] = eventMethodList[type].methods;\n });\n\n Object.entries(eventsList).forEach(([key, value]) => {\n dataSourceService.setFormEvent(key, value);\n });\n Object.entries(methodsList).forEach(([key, value]) => {\n dataSourceService.setFormMethod(key, value);\n });\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 keybindingService.reset();\n });\n};\n\nexport const initServiceEvents = (\n props: EditorProps,\n emit: ((event: 'props-panel-mounted', instance: InstanceType<typeof PropsPanel>) => void) &\n ((event: 'update:modelValue', value: MApp | null) => void),\n { editorService, codeBlockService, dataSourceService, depService }: Services,\n) => {\n const getApp = () => {\n const stage = editorService.get('stage');\n return stage?.renderer.runtime?.getApp?.();\n };\n\n const updateDataSourceSchema = () => {\n const root = editorService.get('root');\n\n if (root?.dataSources) {\n getApp()?.dataSourceManager?.updateSchema(root.dataSources);\n }\n };\n\n const updateNodeWhenDataSourceChange = (nodes: MNode[]) => {\n const root = editorService.get('root');\n const stage = editorService.get('stage');\n\n if (!root || !stage) return;\n\n const app = getApp();\n\n if (!app) return;\n\n if (app.dsl) {\n app.dsl.dataSourceDeps = root.dataSourceDeps;\n app.dsl.dataSourceCondDeps = root.dataSourceCondDeps;\n app.dsl.dataSources = root.dataSources;\n }\n\n updateDataSourceSchema();\n\n nodes.forEach((node) => {\n const deps = Object.values(root.dataSourceDeps || {});\n deps.forEach((dep) => {\n if (dep[node.id]) {\n stage.update({\n config: cloneDeep(node),\n parentId: editorService.getParentById(node.id)?.id,\n root: cloneDeep(root),\n });\n }\n });\n });\n };\n\n const targetAddHandler = (target: Target) => {\n const root = editorService.get('root');\n if (!root) return;\n\n if (target.type === DepTargetType.DATA_SOURCE) {\n if (!root.dataSourceDeps) {\n root.dataSourceDeps = {};\n }\n root.dataSourceDeps[target.id] = target.deps;\n }\n\n if (target.type === DepTargetType.DATA_SOURCE_COND) {\n if (!root.dataSourceCondDeps) {\n root.dataSourceCondDeps = {};\n }\n root.dataSourceCondDeps[target.id] = target.deps;\n }\n };\n\n const targetRemoveHandler = (id: string | number) => {\n const root = editorService.get('root');\n\n if (root?.dataSourceDeps) {\n delete root.dataSourceDeps[id];\n }\n\n if (root?.dataSourceCondDeps) {\n delete root.dataSourceCondDeps[id];\n }\n };\n\n const depUpdateHandler = (node: MNode) => {\n updateNodeWhenDataSourceChange([node]);\n };\n\n const collectedHandler = (nodes: MNode[]) => {\n updateNodeWhenDataSourceChange(nodes);\n };\n\n depService.on('add-target', targetAddHandler);\n depService.on('remove-target', targetRemoveHandler);\n depService.on('dep-update', depUpdateHandler);\n depService.on('collected', collectedHandler);\n\n const initDataSourceDepTarget = (ds: DataSourceSchema) => {\n depService.addTarget(createDataSourceTarget(ds, reactive({})));\n depService.addTarget(createDataSourceMethodTarget(ds, reactive({})));\n depService.addTarget(createDataSourceCondTarget(ds, reactive({})));\n };\n\n const rootChangeHandler = async (value: MApp | null, preValue?: MApp | null) => {\n if (!value) return;\n\n value.codeBlocks = value.codeBlocks || {};\n value.dataSources = value.dataSources || [];\n\n codeBlockService.setCodeDsl(value.codeBlocks);\n dataSourceService.set('dataSources', value.dataSources);\n\n depService.removeTargets(DepTargetType.CODE_BLOCK);\n\n Object.entries(value.codeBlocks).forEach(([id, code]) => {\n depService.addTarget(createCodeBlockTarget(id, code));\n });\n\n dataSourceService.get('dataSources').forEach((ds) => {\n initDataSourceDepTarget(ds);\n });\n\n if (Array.isArray(value.items)) {\n depService.collect(value.items, true);\n } else {\n depService.clear();\n delete value.dataSourceDeps;\n }\n\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\n // 新增节点,收集依赖\n const nodeAddHandler = (nodes: MNode[]) => {\n depService.collect(nodes);\n };\n\n // 节点更新,收集依赖\n const nodeUpdateHandler = (nodes: MNode[]) => {\n depService.collect(nodes);\n };\n\n // 节点删除,清除对齐的依赖收集\n const nodeRemoveHandler = (nodes: MNode[]) => {\n depService.clear(nodes);\n };\n\n // 由于历史记录变化是更新整个page,所以历史记录变化时,需要重新收集依赖\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, DepTargetType.CODE_BLOCK)) {\n depService.getTarget(id, DepTargetType.CODE_BLOCK)!.name = codeBlock.name;\n return;\n }\n\n depService.addTarget(createCodeBlockTarget(id, codeBlock));\n };\n\n const codeBlockRemoveHandler = (id: Id) => {\n depService.removeTarget(id, DepTargetType.CODE_BLOCK);\n };\n\n codeBlockService.on('addOrUpdate', codeBlockAddOrUpdateHandler);\n codeBlockService.on('remove', codeBlockRemoveHandler);\n\n const dataSourceAddHandler = (config: DataSourceSchema) => {\n initDataSourceDepTarget(config);\n getApp()?.dataSourceManager?.addDataSource(config);\n };\n\n const dataSourceUpdateHandler = (config: DataSourceSchema) => {\n const root = editorService.get('root');\n removeDataSourceTarget(config.id);\n initDataSourceDepTarget(config);\n\n depService.collect(root?.items || [], true);\n\n const targets = depService.getTargets(DepTargetType.DATA_SOURCE);\n\n const nodes = getNodes(Object.keys(targets[config.id].deps), root?.items);\n\n updateNodeWhenDataSourceChange(nodes);\n };\n\n const removeDataSourceTarget = (id: string) => {\n depService.removeTarget(id, DepTargetType.DATA_SOURCE);\n depService.removeTarget(id, DepTargetType.DATA_SOURCE_COND);\n depService.removeTarget(id, DepTargetType.DATA_SOURCE_METHOD);\n };\n\n const dataSourceRemoveHandler = (id: string) => {\n removeDataSourceTarget(id);\n getApp()?.dataSourceManager?.removeDataSource(id);\n };\n\n dataSourceService.on('add', dataSourceAddHandler);\n dataSourceService.on('update', dataSourceUpdateHandler);\n dataSourceService.on('remove', dataSourceRemoveHandler);\n\n // 初始化复制组件相关的依赖收集器\n if (props.collectorOptions && !depService.hasTarget(DepTargetType.RELATED_COMP_WHEN_COPY)) {\n depService.addTarget(createRelatedCompTarget(props.collectorOptions));\n }\n\n onUnmounted(() => {\n depService.off('add-target', targetAddHandler);\n depService.off('remove-target', targetRemoveHandler);\n depService.off('dep-update', depUpdateHandler);\n depService.off('collected', collectedHandler);\n\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 dataSourceService.off('add', dataSourceAddHandler);\n dataSourceService.off('update', dataSourceUpdateHandler);\n dataSourceService.off('remove', dataSourceRemoveHandler);\n });\n};\n","<template>\n <Framework>\n <template #header>\n <slot name=\"header\"></slot>\n </template>\n\n <template #nav>\n <slot name=\"nav\" :editorService=\"editorService\"><TMagicNavMenu :data=\"menu\"></TMagicNavMenu></slot>\n </template>\n\n <template #content-before>\n <slot name=\"content-before\"></slot>\n </template>\n\n <template #src-code><slot name=\"src-code\" :editorService=\"editorService\"></slot></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=\"{ data }\">\n <slot name=\"layer-node-content\" :data=\"data\"></slot>\n </template>\n\n <template #layer-node-label=\"{ data }\">\n <slot name=\"layer-node-label\" :data=\"data\"></slot>\n </template>\n\n <template #layer-node-tool=\"{ data }\">\n <slot name=\"layer-node-tool\" :data=\"data\"></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 #data-source-panel-tool=\"{ data }\">\n <slot name=\"data-source-panel-tool\" :data=\"data\"></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\n :extend-state=\"extendFormState\"\n @mounted=\"(instance: any) => $emit('props-panel-mounted', instance)\"\n >\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\n <template #content-after>\n <slot name=\"content-after\"></slot>\n </template>\n\n <template #footer>\n <slot name=\"footer\"></slot>\n </template>\n </Framework>\n</template>\n\n<script lang=\"ts\" setup>\nimport { provide, reactive } from 'vue';\n\nimport type { MApp } from '@tmagic/schema';\n\nimport Framework from './layouts/Framework.vue';\nimport TMagicNavMenu 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 dataSourceService from './services/dataSource';\nimport depService from './services/dep';\nimport editorService, { type EditorService } from './services/editor';\nimport eventsService from './services/events';\nimport historyService from './services/history';\nimport keybindingService from './services/keybinding';\nimport propsService from './services/props';\nimport storageService from './services/storage';\nimport uiService from './services/ui';\nimport keybindingConfig from './utils/keybinding-config';\nimport { defaultEditorProps, EditorProps } from './editorProps';\nimport { initServiceEvents, initServiceState } from './initService';\nimport type { FrameworkSlots, PropsPanelSlots, Services, SidebarSlots, WorkspaceSlots } from './type';\n\ndefineSlots<\n FrameworkSlots &\n WorkspaceSlots &\n SidebarSlots &\n PropsPanelSlots & {\n workspace(props: { editorService: EditorService }): any;\n 'workspace-content'(props: { editorService: EditorService }): any;\n }\n>();\n\ndefineOptions({\n name: 'MEditor',\n});\n\nconst emit = defineEmits<{\n 'props-panel-mounted': [instance: InstanceType<typeof PropsPanel>];\n 'update:modelValue': [value: MApp | null];\n}>();\n\nconst props = withDefaults(defineProps<EditorProps>(), defaultEditorProps);\n\nconst services: Services = {\n componentListService,\n eventsService,\n historyService,\n propsService,\n editorService,\n uiService,\n storageService,\n codeBlockService,\n depService,\n dataSourceService,\n keybindingService,\n};\n\ninitServiceEvents(props, emit, services);\ninitServiceState(props, services);\nkeybindingService.registe(keybindingConfig);\nkeybindingService.registeEl('global');\n\nprovide('services', services);\n\nprovide('codeOptions', props.codeOptions);\nprovide(\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 renderType: props.renderType,\n }),\n);\n\ndefineExpose(services);\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 DataSourceFields from './fields/DataSourceFields.vue';\nimport DataSourceFieldSelect from './fields/DataSourceFieldSelect.vue';\nimport DataSourceInput from './fields/DataSourceInput.vue';\nimport DataSourceMethods from './fields/DataSourceMethods.vue';\nimport DataSourceMethodSelect from './fields/DataSourceMethodSelect.vue';\nimport DataSourceMocks from './fields/DataSourceMocks.vue';\nimport DataSourceSelect from './fields/DataSourceSelect.vue';\nimport EventSelect from './fields/EventSelect.vue';\nimport KeyValue from './fields/KeyValue.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 { OnDrag } from 'gesto';\n\nexport { DepTargetType } from '@tmagic/dep';\nexport type { MoveableOptions } from '@tmagic/stage';\nexport * from './type';\nexport * from './hooks';\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 dataSourceService } from './services/dataSource';\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/layer/LayerPanel.vue';\nexport { default as CodeSelect } from './fields/CodeSelect.vue';\nexport { default as CodeSelectCol } from './fields/CodeSelectCol.vue';\nexport { default as DataSourceFields } from './fields/DataSourceFields.vue';\nexport { default as DataSourceMocks } from './fields/DataSourceMocks.vue';\nexport { default as DataSourceMethods } from './fields/DataSourceMethods.vue';\nexport { default as DataSourceInput } from './fields/DataSourceInput.vue';\nexport { default as DataSourceSelect } from './fields/DataSourceSelect.vue';\nexport { default as DataSourceMethodSelect } from './fields/DataSourceMethodSelect.vue';\nexport { default as DataSourceFieldSelect } from './fields/DataSourceFieldSelect.vue';\nexport { default as EventSelect } from './fields/EventSelect.vue';\nexport { default as KeyValue } from './fields/KeyValue.vue';\nexport { default as CodeBlockList } from './layouts/sidebar/code-block/CodeBlockList.vue';\nexport { default as CodeBlockListPanel } from './layouts/sidebar/code-block/CodeBlockListPanel.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/SplitView.vue';\nexport { default as SplitView } from './components/SplitView.vue';\nexport { default as Resizer } from './components/Resizer.vue';\nexport { default as CodeBlockEditor } from './components/CodeBlockEditor.vue';\n\nconst defaultInstallOpt: InstallOptions = {\n // eslint-disable-next-line no-eval\n parseDSL: (dsl: string) => eval(dsl),\n};\n\nexport default {\n install: (app: App, opt?: Partial<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 app.component('m-fields-data-source-fields', DataSourceFields);\n app.component('m-fields-data-source-mocks', DataSourceMocks);\n app.component('m-fields-key-value', KeyValue);\n app.component('m-fields-data-source-input', DataSourceInput);\n app.component('m-fields-data-source-select', DataSourceSelect);\n app.component('m-fields-data-source-methods', DataSourceMethods);\n app.component('m-fields-data-source-method-select', DataSourceMethodSelect);\n app.component('m-fields-data-source-field-select', DataSourceFieldSelect);\n },\n};\n"],"names":["height","fillConfig","index","ds","field","methodName","ColumnLayout","LayerOffset","Layout","Keys","CodeDeleteErrorType","KeyBindingCommand","DragType","Protocol","targetConfig","node","style","value","method","CodeEditor","clientWidth","center","values","key","createPageNodeStatus","useNodeStatus","nodeData","data","services","FolderMinusIcon","el","KeyBindingContainerKey","page","nodes","ComponentListPanel","LayerPanel","CodeBlockListPanel","DataSourceListPanel","VanillaMoveable","stage","visible","CenterIcon","zoom","root","Editor","uiSelect","CodeLink","Code","CodeSelect","CodeSelectCol","EventSelect","DataSourceFields","DataSourceMocks","KeyValue","DataSourceInput","DataSourceSelect","DataSourceMethods","DataSourceMethodSelect","DataSourceFieldSelect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tmagic-editor.js","sources":["../src/utils/config.ts","../src/layouts/CodeEditor.vue","../src/fields/Code.vue","../src/fields/CodeLink.vue","../src/fields/CodeSelect.vue","../src/components/CodeBlockEditor.vue","../src/utils/data-source/formConfigs/base.ts","../src/utils/data-source/formConfigs/http.ts","../src/utils/data-source/index.ts","../src/utils/compose.ts","../src/services/BaseService.ts","../src/services/dataSource.ts","../src/utils/props.ts","../src/utils/logger.ts","../src/type.ts","../src/utils/editor.ts","../src/services/dep.ts","../src/utils/undo-redo.ts","../src/services/history.ts","../src/services/storage.ts","../src/services/props.ts","../src/services/editor.ts","../src/utils/operator.ts","../src/components/CodeParams.vue","../src/components/Icon.vue","../src/hooks/use-code-block-edit.ts","../src/fields/CodeSelectCol.vue","../src/fields/DataSourceFields.vue","../src/fields/DataSourceFieldSelect.vue","../src/fields/DataSourceInput.vue","../src/hooks/use-data-source-method.ts","../src/fields/DataSourceMethods.vue","../src/fields/DataSourceMethodSelect.vue","../src/fields/DataSourceMocks.vue","../src/fields/DataSourceSelect.vue","../src/fields/EventSelect.vue","../src/fields/KeyValue.vue","../src/fields/PageFragmentSelect.vue","../src/fields/UISelect.vue","../src/hooks/use-getso.ts","../src/components/Resizer.vue","../src/components/SplitView.vue","../src/components/ToolButton.vue","../src/layouts/page-bar/AddButton.vue","../src/layouts/page-bar/PageBarScrollContainer.vue","../src/layouts/page-bar/SwitchTypeButton.vue","../src/layouts/page-bar/PageBar.vue","../src/layouts/AddPageBox.vue","../src/layouts/Framework.vue","../src/layouts/NavMenu.vue","../src/layouts/PropsPanel.vue","../src/hooks/use-float-box.ts","../src/components/SearchInput.vue","../src/utils/tree.ts","../src/components/TreeNode.vue","../src/components/Tree.vue","../src/hooks/use-filter.ts","../src/hooks/use-node-status.ts","../src/layouts/sidebar/code-block/CodeBlockList.vue","../src/layouts/sidebar/code-block/CodeBlockListPanel.vue","../src/layouts/sidebar/data-source/DataSourceConfigPanel.vue","../src/layouts/sidebar/data-source/DataSourceList.vue","../src/layouts/sidebar/data-source/DataSourceListPanel.vue","../src/components/ContentMenu.vue","../src/utils/content-menu.ts","../src/layouts/sidebar/layer/LayerMenu.vue","../src/layouts/sidebar/layer/LayerNodeTool.vue","../src/layouts/sidebar/layer/use-click.ts","../src/layouts/sidebar/layer/use-drag.ts","../src/utils/keybinding-config.ts","../src/layouts/sidebar/layer/use-keybinding.ts","../src/layouts/sidebar/layer/use-node-status.ts","../src/layouts/sidebar/layer/LayerPanel.vue","../src/layouts/sidebar/ComponentListPanel.vue","../src/layouts/sidebar/Sidebar.vue","../src/utils/scroll-viewer.ts","../src/components/ScrollBar.vue","../src/components/ScrollViewer.vue","../src/services/ui.ts","../src/hooks/use-stage.ts","../src/components/FloatingBox.vue","../src/layouts/workspace/viewer/NodeListMenu.vue","../src/layouts/workspace/viewer/ViewerMenu.vue","../src/layouts/workspace/viewer/Stage.vue","../src/layouts/workspace/Breadcrumb.vue","../src/layouts/workspace/Workspace.vue","../src/services/codeBlock.ts","../src/services/componentList.ts","../src/services/events.ts","../src/services/keybinding.ts","../src/editorProps.ts","../src/initService.ts","../src/Editor.vue","../src/index.ts"],"sourcesContent":["/*\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 = <K extends keyof InstallOptions>(key: K): InstallOptions[K] => $TMAGIC_EDITOR[key];\n\nexport { getConfig, setConfig };\n","<template>\n <div :class=\"`magic-code-editor`\">\n <Teleport to=\"body\" :disabled=\"!fullScreen\">\n <div\n :class=\"`magic-code-editor-wrapper${fullScreen ? ' full-screen' : ''}`\"\n :style=\"!fullScreen && height ? `height: ${height}` : '100%'\"\n >\n <TMagicButton\n class=\"magic-code-editor-full-screen-icon\"\n circle\n size=\"small\"\n :icon=\"FullScreen\"\n @click=\"fullScreenHandler\"\n ></TMagicButton>\n <div ref=\"codeEditor\" class=\"magic-code-editor-content\"></div>\n </div>\n </Teleport>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { onBeforeUnmount, onMounted, ref, watch } from 'vue';\nimport { FullScreen } from '@element-plus/icons-vue';\nimport { throttle } from 'lodash-es';\nimport * as monaco from 'monaco-editor';\nimport serialize from 'serialize-javascript';\n\nimport { TMagicButton } from '@tmagic/design';\n\nimport { getConfig } from '@editor/utils/config';\n\ndefineOptions({\n name: 'MEditorCodeEditor',\n});\n\nconst props = withDefaults(\n defineProps<{\n initValues?: any;\n modifiedValues?: any;\n type?: 'diff';\n language?: string;\n options?: {\n [key: string]: any;\n };\n height?: string;\n autoSave?: boolean;\n parse?: boolean;\n }>(),\n {\n initValues: '',\n autoSave: true,\n language: 'javascript',\n options: () => ({\n tabSize: 2,\n }),\n parse: false,\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 if (language === 'json') {\n value = JSON.stringify(v, null, 2);\n } else {\n value = serialize(v, {\n space: 2,\n unsafe: true,\n }).replace(/\"(\\w+)\":\\s/g, '$1: ');\n }\n } else {\n value = v;\n }\n if (language === 'javascript' && value.startsWith('{') && value.endsWith('}')) {\n value = `(${value})`;\n }\n return value;\n};\n\nconst parse = (v: string | any, language: string): any => {\n if (typeof v !== 'string') {\n return v;\n }\n\n if (language === 'json') {\n return JSON.parse(v);\n }\n\n return getConfig('parseDSL')(v);\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.toLocaleLowerCase());\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 const newValue = getEditorValue();\n values.value = newValue;\n emit('save', props.parse ? parse(newValue, props.language) : newValue);\n }\n });\n\n if (props.type !== 'diff' && props.autoSave) {\n vsEditor?.onDidBlurEditorWidget(() => {\n const newValue = getEditorValue();\n if (values.value !== newValue) {\n values.value = newValue;\n emit('save', props.parse ? parse(newValue, props.language) : newValue);\n }\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\nonBeforeUnmount(() => {\n resizeObserver.disconnect();\n});\n\nconst fullScreen = ref(false);\nconst fullScreenHandler = () => {\n fullScreen.value = !fullScreen.value;\n setTimeout(() => {\n vsEditor?.focus();\n vsEditor?.layout();\n vsDiffEditor?.focus();\n vsDiffEditor?.layout();\n });\n};\n\ndefineExpose({\n values,\n\n getEditor() {\n return vsEditor || vsDiffEditor;\n },\n\n getVsEditor() {\n return vsEditor;\n },\n\n getVsDiffEditor() {\n return vsDiffEditor;\n },\n\n setEditorValue,\n getEditorValue,\n\n focus() {\n vsEditor?.focus();\n vsDiffEditor?.focus();\n },\n});\n</script>\n","<template>\n <MagicCodeEditor\n :height=\"config.height\"\n :init-values=\"model[name]\"\n :language=\"config.language\"\n :options=\"{\n ...config.options,\n readOnly: disabled,\n }\"\n :parse=\"config.parse\"\n @save=\"save\"\n ></MagicCodeEditor>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { FieldProps } from '@tmagic/form';\n\nimport MagicCodeEditor from '@editor/layouts/CodeEditor.vue';\n\ndefineOptions({\n name: 'MEditorCode',\n});\n\nconst emit = defineEmits<{\n change: [value: string | any];\n}>();\n\nconst props = withDefaults(\n defineProps<\n FieldProps<{\n language?: string;\n options?: {\n [key: string]: any;\n };\n height?: string;\n parse?: boolean;\n }>\n >(),\n {\n disabled: false,\n },\n);\n\nconst save = (v: string | any) => {\n props.model[props.name] = v;\n emit('change', v);\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>\nimport { computed, reactive, watch } from 'vue';\nimport serialize from 'serialize-javascript';\n\nimport type { FieldProps } from '@tmagic/form';\n\nimport { getConfig } from '@editor/utils/config';\n\ndefineOptions({\n name: 'MEditorCodeLink',\n});\n\nconst props = defineProps<\n FieldProps<{\n type: 'code-link';\n name: string;\n text?: string;\n formTitle?: string;\n codeOptions?: Object;\n }>\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 const parseDSL = getConfig('parseDSL');\n props.model[props.name] = parseDSL(`(${v[props.name]})`);\n emit('change', props.model[props.name]);\n } catch (e) {\n console.error(e);\n }\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>\nimport { computed, inject, watch } from 'vue';\nimport { isEmpty } from 'lodash-es';\n\nimport { TMagicCard } from '@tmagic/design';\nimport type { FieldProps } from '@tmagic/form';\nimport { HookType } from '@tmagic/schema';\n\nimport type { Services } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorCodeSelect',\n});\n\nconst emit = defineEmits(['change']);\n\nconst services = inject<Services>('services');\n\nconst props = withDefaults(\n defineProps<\n FieldProps<{\n className?: string;\n }>\n >(),\n {},\n);\n\nconst codeConfig = computed(() => ({\n type: 'group-list',\n name: 'hookData',\n enableToggleMode: false,\n expandAll: true,\n titleKey: 'codeId',\n items: [\n {\n type: 'code-select-col',\n name: 'codeId',\n labelWidth: 0,\n disabled: () => !services?.codeBlockService.getEditStatus(),\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","<template>\n <component\n :is=\"slideType === 'box' ? MFormBox : MFormDrawer\"\n class=\"m-editor-code-block-editor\"\n ref=\"fomDrawer\"\n label-width=\"80px\"\n :close-on-press-escape=\"false\"\n :title=\"content.name\"\n :width=\"size\"\n :config=\"functionConfig\"\n :values=\"content\"\n :disabled=\"disabled\"\n :before-close=\"beforeClose\"\n @change=\"changeHandler\"\n @submit=\"submitForm\"\n @error=\"errorHandler\"\n @open=\"openHandler\"\n @closed=\"closedHandler\"\n >\n <template #left>\n <TMagicButton type=\"primary\" text @click=\"difVisible = true\">查看修改</TMagicButton>\n </template>\n </component>\n\n <TMagicDialog v-model=\"difVisible\" title=\"查看修改\" fullscreen>\n <div style=\"display: flex; margin-bottom: 10px\">\n <div style=\"flex: 1\"><TMagicTag size=\"small\" type=\"info\">修改前</TMagicTag></div>\n <div style=\"flex: 1\"><TMagicTag size=\"small\" type=\"success\">修改后</TMagicTag></div>\n </div>\n\n <CodeEditor\n v-if=\"difVisible\"\n ref=\"magicVsEditor\"\n type=\"diff\"\n language=\"json\"\n :initValues=\"content.content\"\n :modifiedValues=\"fomDrawer?.form?.values.content\"\n :style=\"`height: ${height - 200}px`\"\n ></CodeEditor>\n\n <template #footer>\n <span class=\"dialog-footer\">\n <TMagicButton size=\"small\" @click=\"difVisible = false\">取消</TMagicButton>\n <TMagicButton size=\"small\" type=\"primary\" @click=\"diffChange\">确定</TMagicButton>\n </span>\n </template>\n </TMagicDialog>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, onBeforeUnmount, ref } from 'vue';\n\nimport { TMagicButton, TMagicDialog, tMagicMessage, tMagicMessageBox, TMagicTag } from '@tmagic/design';\nimport { ColumnConfig, FormConfig, FormState, MFormBox, MFormDrawer } from '@tmagic/form';\nimport type { CodeBlockContent } from '@tmagic/schema';\n\nimport CodeEditor from '@editor/layouts/CodeEditor.vue';\nimport type { Services, SlideType } from '@editor/type';\nimport { getConfig } from '@editor/utils/config';\n\ndefineOptions({\n name: 'MEditorCodeBlockEditor',\n});\n\nconst props = defineProps<{\n content: CodeBlockContent;\n disabled?: boolean;\n isDataSource?: boolean;\n dataSourceType?: string;\n slideType?: SlideType;\n}>();\n\nconst emit = defineEmits<{\n submit: [values: CodeBlockContent];\n}>();\n\nconst services = inject<Services>('services');\n\nconst difVisible = ref(false);\nconst height = ref(globalThis.innerHeight);\n\nconst windowReizehandler = () => {\n height.value = globalThis.innerHeight;\n};\n\nglobalThis.addEventListener('resize', windowReizehandler);\n\nonBeforeUnmount(() => {\n globalThis.removeEventListener('resize', windowReizehandler);\n});\n\nconst magicVsEditor = ref<InstanceType<typeof CodeEditor>>();\n\nconst diffChange = () => {\n if (!magicVsEditor.value || !fomDrawer.value?.form) {\n return;\n }\n\n fomDrawer.value.form.values.content = magicVsEditor.value.getEditorValue();\n\n difVisible.value = false;\n};\n\nconst columnWidth = computed(() => services?.uiService.get('columnWidth'));\nconst size = computed(() =>\n columnWidth.value ? columnWidth.value.center + columnWidth.value.right - (props.isDataSource ? 100 : 0) : 600,\n);\n\nconst codeEditorHeight = ref('600px');\n\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 text: '组件',\n label: '组件',\n value: 'ui-select',\n },\n ],\n },\n ],\n};\n\nconst functionConfig = computed<FormConfig>(() => [\n {\n text: '名称',\n name: 'name',\n rules: [{ required: true, message: '请输入名称', trigger: 'blur' }],\n },\n {\n text: '描述',\n name: 'desc',\n },\n {\n text: '执行时机',\n name: 'timing',\n type: 'select',\n options: () => {\n const options = [\n { text: '初始化前', value: 'beforeInit' },\n { text: '初始化后', value: 'afterInit' },\n ];\n if (props.dataSourceType !== 'base') {\n options.push({ text: '请求前', value: 'beforeRequest' });\n options.push({ text: '请求后', value: 'afterRequest' });\n }\n return options;\n },\n display: () => props.isDataSource,\n },\n {\n type: 'table',\n border: true,\n text: '参数',\n enableFullscreen: false,\n enableToggleMode: false,\n name: 'params',\n dropSort: false,\n items: [\n {\n type: 'text',\n label: '参数名',\n name: 'name',\n },\n {\n type: 'text',\n label: '描述',\n name: 'extra',\n },\n services?.codeBlockService.getParamsColConfig() || defaultParamColConfig,\n ],\n },\n {\n name: 'content',\n type: 'vs-code',\n options: inject('codeOptions', {}),\n height: codeEditorHeight.value,\n onChange: (formState: FormState | undefined, code: string) => {\n try {\n // 检测js代码是否存在语法错误\n getConfig('parseDSL')(code);\n\n return code;\n } catch (error: any) {\n tMagicMessage.error(error.message);\n\n throw error;\n }\n },\n },\n]);\n\nconst submitForm = (values: CodeBlockContent) => {\n emit('submit', values);\n};\n\nconst errorHandler = (error: any) => {\n tMagicMessage.error(error.message);\n};\n\nconst fomDrawer = ref<InstanceType<typeof MFormDrawer>>();\n\nconst openHandler = () => {\n setTimeout(() => {\n if (fomDrawer.value) {\n const height = fomDrawer.value?.bodyHeight - 348 - (props.isDataSource ? 50 : 0);\n codeEditorHeight.value = `${height > 100 ? height : 600}px`;\n }\n });\n};\n\nconst changedValue = ref<CodeBlockContent>();\nconst changeHandler = (values: CodeBlockContent) => {\n changedValue.value = values;\n};\n\nconst beforeClose = (done: (cancel?: boolean) => void) => {\n if (!changedValue.value) {\n done();\n return;\n }\n tMagicMessageBox\n .confirm('当前代码块已修改,是否保存?', '提示', {\n confirmButtonText: '保存并关闭',\n cancelButtonText: '不保存并关闭',\n type: 'warning',\n distinguishCancelAndClose: true,\n })\n .then(() => {\n changedValue.value && submitForm(changedValue.value);\n done();\n })\n .catch((action: string) => {\n done(action === 'close');\n });\n};\n\nconst closedHandler = () => {\n changedValue.value = undefined;\n};\n\ndefineExpose({\n show() {\n fomDrawer.value?.show();\n },\n\n hide() {\n fomDrawer.value?.hide();\n },\n});\n</script>\n","import type { FormConfig } from '@tmagic/form';\n\nexport default function (): FormConfig {\n return [\n {\n name: 'id',\n type: 'hidden',\n },\n {\n name: 'type',\n text: '类型',\n type: 'hidden',\n defaultValue: 'base',\n },\n {\n name: 'title',\n text: '名称',\n rules: [\n {\n required: true,\n message: '请输入名称',\n },\n ],\n },\n {\n name: 'description',\n text: '描述',\n },\n ];\n}\n","import { FormConfig } from '@tmagic/form';\n\nexport default [\n {\n name: 'autoFetch',\n text: '自动请求',\n type: 'switch',\n defaultValue: true,\n },\n {\n name: 'responseOptions',\n items: [\n {\n name: 'dataPath',\n text: '数据路径',\n },\n ],\n },\n {\n type: 'fieldset',\n name: 'options',\n legend: 'HTTP 配置',\n items: [\n {\n name: 'url',\n text: 'URL',\n },\n {\n name: 'method',\n text: 'Method',\n type: 'select',\n options: [\n { text: 'GET', value: 'GET' },\n { text: 'POST', value: 'POST' },\n { text: 'PUT', value: 'PUT' },\n { text: 'DELETE', value: 'DELETE' },\n ],\n },\n {\n name: 'params',\n type: 'key-value',\n defaultValue: {},\n text: '参数',\n },\n {\n name: 'data',\n type: 'key-value',\n defaultValue: {},\n advanced: true,\n text: '请求体',\n },\n {\n name: 'headers',\n type: 'key-value',\n defaultValue: {},\n text: '请求头',\n },\n ],\n },\n] as FormConfig;\n","import { FormConfig, FormState } from '@tmagic/form';\nimport { DataSchema, DataSourceSchema } from '@tmagic/schema';\n\nimport BaseFormConfig from './formConfigs/base';\nimport HttpFormConfig from './formConfigs/http';\n\nconst fillConfig = (config: FormConfig): FormConfig => [\n ...BaseFormConfig(),\n ...config,\n {\n type: 'tab',\n items: [\n {\n title: '数据定义',\n items: [\n {\n name: 'fields',\n type: 'data-source-fields',\n defaultValue: () => [],\n },\n ],\n },\n {\n title: '方法定义',\n items: [\n {\n name: 'methods',\n type: 'data-source-methods',\n defaultValue: () => [],\n },\n ],\n },\n {\n title: '事件配置',\n display: false,\n items: [\n {\n name: 'events',\n src: 'datasource',\n type: 'event-select',\n },\n ],\n },\n {\n title: 'mock数据',\n items: [\n {\n name: 'mocks',\n type: 'data-source-mocks',\n defaultValue: () => [],\n },\n ],\n },\n {\n title: '请求参数裁剪',\n display: (formState: FormState, { model }: any) => model.type === 'http',\n items: [\n {\n name: 'beforeRequest',\n type: 'vs-code',\n parse: true,\n height: '600px',\n },\n ],\n },\n {\n title: '响应数据裁剪',\n display: (formState: FormState, { model }: any) => model.type === 'http',\n items: [\n {\n name: 'afterResponse',\n type: 'vs-code',\n parse: true,\n height: '600px',\n },\n ],\n },\n ],\n },\n];\n\nexport const getFormConfig = (type: string, configs: Record<string, FormConfig>): FormConfig => {\n switch (type) {\n case 'base':\n return fillConfig([]);\n case 'http':\n return fillConfig(HttpFormConfig);\n default:\n return fillConfig(configs[type] || []);\n }\n};\n\nexport const getFormValue = (type: string, values: Partial<DataSourceSchema>): Partial<DataSourceSchema> => {\n if (type !== 'http') {\n return values;\n }\n\n return {\n beforeRequest: `(options, context) => {\n /**\n * 用户可以直接编写函数,在原始接口调用之前,会运行该函数,将这个函数的返回值作为该数据源接口的入参\n *\n * options: HttpOptions\n *\n * interface HttpOptions {\n * // 请求链接\n * url: string;\n * // query参数\n * params?: Record<string, string>;\n * // body数据\n * data?: Record<string, any>;\n * // 请求头\n * headers?: Record<string, string>;\n * // 请求方法 GET/POST\n * method?: Method;\n * }\n *\n * context:上下文对象\n *\n * interface Content {\n * app: AppCore;\n * dataSource: HttpDataSource;\n * }\n *\n * return: HttpOptions\n */\n\n // 此处的返回值会作为这个接口的入参\n return options;\n}`,\n afterResponse: `(response, context) => {\n /**\n * 用户可以直接编写函数,在原始接口返回之后,会运行该函数,将这个函数的返回值作为该数据源接口的返回\n\n * context:上下文对象\n *\n * interface Content {\n * app: AppCore;\n * dataSource: HttpDataSource;\n * }\n *\n */\n\n // 此处的返回值会作为这个接口的返回值\n return response;\n}`,\n ...values,\n };\n};\n\nexport const getDisplayField = (dataSources: DataSourceSchema[], key: string) => {\n const displayState: { value: string; type: 'var' | 'text' }[] = [];\n\n // 匹配es6字符串模块\n const matches = key.matchAll(/\\$\\{([\\s\\S]+?)\\}/g);\n let index = 0;\n for (const match of matches) {\n if (typeof match.index === 'undefined') break;\n\n // 字符串常量\n displayState.push({\n type: 'text',\n value: key.substring(index, match.index),\n });\n\n let dsText = '';\n let ds: DataSourceSchema | undefined;\n let fields: DataSchema[] | undefined;\n\n // 将模块解析成数据源对应的值\n match[1].split('.').forEach((item, index) => {\n if (index === 0) {\n ds = dataSources.find((ds) => ds.id === item);\n dsText += ds?.title || item;\n fields = ds?.fields;\n return;\n }\n\n const field = fields?.find((field) => field.name === item);\n fields = field?.fields;\n dsText += `.${field?.title || item}`;\n });\n\n displayState.push({\n type: 'var',\n value: dsText,\n });\n\n index = match.index + match[0].length;\n }\n\n if (index < key.length) {\n displayState.push({\n type: 'text',\n value: key.substring(index),\n });\n }\n\n return displayState;\n};\n","/**\n * @param {Array} middleware\n * @return {Function}\n */\nexport const compose = (middleware: Function[], isAsync: boolean) => {\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> | void {\n if (i <= index) {\n const error = new Error('next() 被多次调用');\n if (isAsync) {\n return Promise.reject(error);\n }\n throw error;\n }\n index = i;\n let fn = middleware[i];\n if (i === middleware.length && next) fn = next;\n if (!fn) {\n if (isAsync) {\n return Promise.resolve();\n }\n return;\n }\n\n if (isAsync) {\n try {\n return Promise.resolve(fn(...args, dispatch.bind(null, i + 1)));\n } catch (err) {\n return Promise.reject(err);\n }\n }\n try {\n return fn(...args, dispatch.bind(null, i + 1));\n } catch (err) {\n throw 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 = (\n args: any[],\n scope: any,\n sourceMethod: any,\n beforeMethodName: string,\n afterMethodName: string,\n fn: (args: any[], next?: Function | undefined) => void,\n) => {\n try {\n let beforeArgs = args;\n\n for (const beforeMethod of scope.pluginOptionsList[beforeMethodName]) {\n beforeArgs = 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 = fn(beforeArgs, sourceMethod.bind(scope));\n\n for (const afterMethod of scope.pluginOptionsList[afterMethodName]) {\n returnValue = afterMethod(returnValue, ...beforeArgs);\n\n if (isError(returnValue)) throw returnValue;\n }\n\n return returnValue;\n } catch (error) {\n throw error;\n }\n};\n\nconst doAsyncAction = 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> | 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: { name: string; isAsync: boolean }[] = [], serialMethods: string[] = []) {\n super();\n\n methods.forEach(({ name: propertyName, isAsync }) => {\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], isAsync);\n Object.defineProperty(scope, propertyName, {\n value: isAsync\n ? async (...args: any[]) => {\n if (!serialMethods.includes(propertyName)) {\n return doAsyncAction(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 doAsyncAction(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 : (...args: any[]) => doAction(args, scope, sourceMethod, beforeMethodName, afterMethodName, fn),\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","import { reactive } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport type { EventOption } from '@tmagic/core';\nimport type { FormConfig } from '@tmagic/form';\nimport type { DataSourceSchema } from '@tmagic/schema';\nimport { guid } from '@tmagic/utils';\n\nimport type { DatasourceTypeOption } from '@editor/type';\nimport { getFormConfig, getFormValue } from '@editor/utils/data-source';\n\nimport BaseService from './BaseService';\n\ninterface State {\n datasourceTypeList: DatasourceTypeOption[];\n dataSources: DataSourceSchema[];\n editable: boolean;\n configs: Record<string, FormConfig>;\n values: Record<string, Partial<DataSourceSchema>>;\n events: Record<string, EventOption[]>;\n methods: Record<string, EventOption[]>;\n}\n\ntype StateKey = keyof State;\nclass DataSource extends BaseService {\n private state = reactive<State>({\n datasourceTypeList: [],\n dataSources: [],\n editable: true,\n configs: {},\n values: {},\n events: {},\n methods: {},\n });\n\n constructor() {\n super([\n { name: 'getFormConfig', isAsync: false },\n { name: 'setFormConfig', isAsync: false },\n { name: 'getFormValue', isAsync: false },\n { name: 'setFormValue', isAsync: false },\n { name: 'getFormEvent', isAsync: false },\n { name: 'setFormEvent', isAsync: false },\n { name: 'getFormMethod', isAsync: false },\n { name: 'setFormMethod', isAsync: false },\n { name: 'add', isAsync: false },\n { name: 'update', isAsync: false },\n { name: 'remove', isAsync: false },\n { name: 'createId', isAsync: false },\n ]);\n }\n\n public set<K extends StateKey, T extends State[K]>(name: K, value: T) {\n this.state[name] = value;\n }\n\n public get<K extends StateKey>(name: K): State[K] {\n return this.state[name];\n }\n\n public getFormConfig(type = 'base') {\n return getFormConfig(type, this.get('configs'));\n }\n\n public setFormConfig(type: string, config: FormConfig) {\n this.get('configs')[type] = config;\n }\n\n public getFormValue(type = 'base') {\n return getFormValue(type, this.get('values')[type]);\n }\n\n public setFormValue(type: string, value: Partial<DataSourceSchema>) {\n this.get('values')[type] = value;\n }\n\n public getFormEvent(type = 'base') {\n return this.get('events')[type] || [];\n }\n\n public setFormEvent(type: string, value: EventOption[] = []) {\n this.get('events')[type] = value;\n }\n\n public getFormMethod(type = 'base') {\n return this.get('methods')[type] || [];\n }\n\n public setFormMethod(type: string, value: EventOption[] = []) {\n this.get('methods')[type] = value;\n }\n\n public add(config: DataSourceSchema) {\n const newConfig = {\n ...config,\n id: this.createId(),\n };\n\n this.get('dataSources').push(newConfig);\n\n this.emit('add', newConfig);\n\n return newConfig;\n }\n\n public update(config: DataSourceSchema) {\n const dataSources = this.get('dataSources');\n\n const index = dataSources.findIndex((ds) => ds.id === config.id);\n\n dataSources[index] = cloneDeep(config);\n\n this.emit('update', config);\n\n return config;\n }\n\n public remove(id: string) {\n const dataSources = this.get('dataSources');\n const index = dataSources.findIndex((ds) => ds.id === id);\n dataSources.splice(index, 1);\n\n this.emit('remove', id);\n }\n\n public getDataSourceById(id: string) {\n return this.get('dataSources').find((ds) => ds.id === id);\n }\n\n public resetState() {\n this.set('dataSources', []);\n }\n\n public destroy() {\n this.removeAllListeners();\n this.resetState();\n this.removeAllPlugins();\n }\n\n private createId(): string {\n return `ds_${guid()}`;\n }\n}\n\nexport type DataSourceService = DataSource;\n\nexport default new DataSource();\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 { FormConfig, FormState, TabPaneConfig } from '@tmagic/form';\n\nimport dataSourceService from '@editor/services/dataSource';\n\nconst arrayOptions = [\n { text: '包含', value: 'include' },\n { text: '不包含', value: 'not_include' },\n];\n\nconst eqOptions = [\n { text: '等于', value: '=' },\n { text: '不等于', value: '!=' },\n];\n\nconst numberOptions = [\n { text: '大于', value: '>' },\n { text: '大于等于', value: '>=' },\n { text: '小于', value: '<' },\n { text: '小于等于', value: '<=' },\n { text: '在范围内', value: 'between' },\n { text: '不在范围内', value: 'not_between' },\n];\n\nexport const styleTabConfig: TabPaneConfig = {\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: 'borderWidth',\n text: '宽度',\n defaultValue: '0',\n },\n {\n name: 'borderColor',\n text: '颜色',\n type: 'colorPicker',\n },\n {\n name: 'borderStyle',\n text: '样式',\n type: 'select',\n defaultValue: 'none',\n options: [\n { text: 'none', value: 'none' },\n { text: 'hidden', value: 'hidden' },\n { text: 'dotted', value: 'dotted' },\n { text: 'dashed', value: 'dashed' },\n { text: 'solid', value: 'solid' },\n { text: 'double', value: 'double' },\n { text: 'groove', value: 'groove' },\n { text: 'ridge', value: 'ridge' },\n { text: 'inset', value: 'inset' },\n { text: 'outset', value: 'outset' },\n ],\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\nexport const eventTabConfig: TabPaneConfig = {\n title: '事件',\n items: [\n {\n name: 'events',\n src: 'component',\n labelWidth: '100px',\n type: 'event-select',\n },\n ],\n};\n\nexport const advancedTabConfig: TabPaneConfig = {\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\nexport const displayTabConfig: TabPaneConfig = {\n title: '显示条件',\n display: (vm: FormState, { model }: any) => model.type !== 'page',\n items: [\n {\n type: 'groupList',\n name: 'displayConds',\n titlePrefix: '条件组',\n expandAll: true,\n items: [\n {\n type: 'table',\n name: 'cond',\n items: [\n {\n type: 'data-source-field-select',\n name: 'field',\n value: 'key',\n label: '字段',\n },\n {\n type: 'select',\n options: (mForm, { model }) => {\n const [id, field] = model.field;\n\n const ds = dataSourceService.getDataSourceById(id);\n\n const type = ds?.fields.find((f) => f.name === field)?.type;\n\n if (type === 'array') {\n return arrayOptions;\n }\n\n if (type === 'boolean') {\n return [\n { text: '是', value: 'is' },\n { text: '不是', value: 'not' },\n ];\n }\n\n if (type === 'number') {\n return [...eqOptions, ...numberOptions];\n }\n\n if (type === 'string') {\n return [...arrayOptions, ...eqOptions];\n }\n\n return [...arrayOptions, ...eqOptions, ...numberOptions];\n },\n label: '条件',\n name: 'op',\n },\n {\n label: '值',\n items: [\n {\n name: 'value',\n type: (mForm, { model }) => {\n const [id, field] = model.field;\n\n const ds = dataSourceService.getDataSourceById(id);\n\n const type = ds?.fields.find((f) => f.name === field)?.type;\n\n if (type === 'number') {\n return 'number';\n }\n\n if (type === 'boolean') {\n return 'select';\n }\n\n return 'text';\n },\n options: [\n { text: 'true', value: true },\n { text: 'false', value: false },\n ],\n display: (vm, { model }) => !['between', 'not_between'].includes(model.op),\n },\n {\n name: 'range',\n type: 'number-range',\n display: (vm, { model }) => ['between', 'not_between'].includes(model.op),\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n};\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 { ...styleTabConfig },\n { ...eventTabConfig },\n { ...advancedTabConfig },\n { ...displayTabConfig },\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 { ColumnConfig, FilterFunction, FormConfig, FormItem } from '@tmagic/form';\nimport type { CodeBlockContent, CodeBlockDSL, Id, MApp, MContainer, MNode, MPage, MPageFragment } from '@tmagic/schema';\nimport type StageCore from '@tmagic/stage';\nimport type {\n ContainerHighlightType,\n CustomizeMoveableOptionsCallbackConfig,\n GuidesOptions,\n MoveableOptions,\n RenderType,\n UpdateDragEl,\n} from '@tmagic/stage';\n\nimport type { CodeBlockService } from './services/codeBlock';\nimport type { ComponentListService } from './services/componentList';\nimport type { DataSourceService } from './services/dataSource';\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 { KeybindingService } from './services/keybinding';\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 interface FrameworkSlots {\n header(props: {}): any;\n nav(props: {}): any;\n 'content-before'(props: {}): any;\n 'content-after'(props: {}): any;\n 'src-code'(props: {}): any;\n sidebar(props: {}): any;\n empty(props: {}): any;\n workspace(props: {}): any;\n 'props-panel'(props: {}): any;\n 'footer'(props: {}): any;\n 'page-bar'(props: {}): any;\n 'page-bar-title'(props: { page: MPage | MPageFragment }): any;\n 'page-bar-popover'(props: { page: MPage | MPageFragment }): any;\n}\n\nexport interface WorkspaceSlots {\n stage(props: {}): any;\n 'workspace-content'(props: {}): any;\n}\n\nexport interface ComponentListPanelSlots {\n 'component-list-panel-header'(props: {}): any;\n 'component-list-item'(props: { component: ComponentItem }): any;\n}\n\nexport interface CodeBlockListPanelSlots extends CodeBlockListSlots {\n 'code-block-panel-search'(props: {}): any;\n 'code-block-panel-header'(props: {}): any;\n}\n\nexport interface CodeBlockListSlots {\n 'code-block-panel-tool'(props: { id: Id; data: any }): any;\n}\n\nexport interface DataSourceListSlots {\n 'data-source-panel-tool'(props: { data: any }): any;\n}\n\nexport interface LayerNodeSlots {\n 'layer-node-content'(props: { data: MNode }): any;\n 'layer-node-tool'(props: { data: MNode }): any;\n 'layer-node-label'(props: { data: MNode }): any;\n}\n\nexport interface LayerPanelSlots extends LayerNodeSlots {\n 'layer-panel-header'(props: {}): any;\n}\n\nexport interface PropsPanelSlots {\n 'props-panel-header'(props: {}): any;\n}\n\nexport type SidebarSlots = LayerPanelSlots & CodeBlockListPanelSlots & ComponentListPanelSlots & DataSourceListSlots;\n\nexport type BeforeAdd = (config: MNode, parent: MContainer) => Promise<MNode> | MNode;\nexport type GetConfig = (config: FormConfig) => Promise<FormConfig> | FormConfig;\n\nexport interface InstallOptions {\n parseDSL: <T = any>(dsl: string) => T;\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 dataSourceService: DataSourceService;\n keybindingService: KeybindingService;\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 renderType: RenderType;\n guidesOptions: Partial<GuidesOptions>;\n disabledMultiSelect?: boolean;\n}\n\nexport interface StoreState {\n root: MApp | null;\n page: MPage | MPageFragment | null;\n parent: MContainer | null;\n node: MNode | null;\n highlightNode: MNode | null;\n nodes: MNode[];\n stage: StageCore | null;\n stageLoading: boolean;\n modifiedNodeIds: Map<Id, Id>;\n pageLength: number;\n pageFragmentLength: number;\n disabledMultiSelect: boolean;\n}\n\nexport type StoreStateKey = keyof StoreState;\n\nexport interface PropsState {\n propsConfigMap: Record<string, FormConfig>;\n propsValueMap: Record<string, Partial<MNode>>;\n relateIdMap: Record<Id, Id>;\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 | string;\n height: number | string;\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: {\n width: number;\n height: number;\n };\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 /** slide 拖拽悬浮窗 state */\n floatBox: Map<\n string,\n {\n status: boolean;\n zIndex: number;\n top: number;\n left: number;\n }\n >;\n\n /** 是否隐藏侧边栏 */\n hideSlideBar: boolean;\n}\n\nexport interface EditorNodeInfo {\n node: MNode | null;\n parent: MContainer | null;\n page: MPage | MPageFragment | 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 id?: string | number;\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 /** slide 唯一标识 key */\n $key: string;\n\n /** 组件扩展参数 */\n boxComponentConfig?: {\n /** Vue3组件 */\n component?: any;\n /** 传入组件的props对象 */\n props?: Record<string, any>;\n };\n}\n\n/**\n * component-list: 组件列表\n * layer: 已选组件树\n * code-block: 代码块\n */\nexport type SideItem = 'component-list' | 'layer' | 'code-block' | 'data-source' | SideComponent;\n\n/** 工具栏 */\nexport interface SideBarData {\n /** 容器类型 */\n type: 'tabs';\n /** 默认激活的内容 */\n status: string;\n /** panel列表 */\n items: SideItem[];\n}\n\n/**\n * drawer 抽屉\n * box 悬浮窗\n */\nexport type SlideType = 'drawer' | 'box';\n\nexport interface ComponentItem {\n /** 显示文案 */\n text: string;\n /** 详情,用于tooltip */\n desc?: 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 /** 代码块DSL数据源 */\n codeDsl: CodeBlockDSL | null;\n /** 代码块是否可编辑 */\n editable: boolean;\n /** list模式下左侧展示的代码列表 */\n combineIds: string[];\n /** 为业务逻辑预留的不可删除的代码块列表,由业务逻辑维护(如代码块上线后不可删除) */\n undeletableList: Id[];\n paramsColConfig?: ColumnConfig;\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 | MPageFragment;\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 src: 'datasource' | 'component';\n labelWidth?: string;\n /** 事件名称表单配置 */\n eventNameConfig?: FormItem;\n /** 动作类型配置 */\n actionTypeConfig?: FormItem;\n /** 联动组件配置 */\n targetCompConfig?: FormItem;\n /** 联动组件动作配置 */\n compActionConfig?: FormItem;\n /** 联动代码配置 */\n codeActionConfig?: FormItem;\n /** 联动数据源配置 */\n dataSourceActionConfig?: FormItem;\n}\n\nexport enum KeyBindingCommand {\n /** 复制 */\n COPY_NODE = 'tmagic-system-copy-node',\n /** 粘贴 */\n PASTE_NODE = 'tmagic-system-paste-node',\n /** 删除 */\n DELETE_NODE = 'tmagic-system-delete-node',\n /** 剪切 */\n CUT_NODE = 'tmagic-system-cut-node',\n /** 撤销 */\n UNDO = 'tmagic-system-undo',\n /** 重做 */\n REDO = 'tmagic-system-redo',\n /** 放大 */\n ZOOM_IN = 'tmagic-system-zoom-in',\n /** 缩小 */\n ZOOM_OUT = 'tmagic-system-zoom-out',\n /** 缩放到实际大小 */\n ZOOM_RESET = 'tmagic-system-zoom-reset',\n /** 缩放以适应 */\n ZOOM_FIT = 'tmagic-system-zoom-fit',\n /** 向上移动1px */\n MOVE_UP_1 = 'tmagic-system-move-up-1',\n /** 向下移动1px */\n MOVE_DOWN_1 = 'tmagic-system-move-down-1',\n /** 向左移动1px */\n MOVE_LEFT_1 = 'tmagic-system-move-left-1',\n /** 向右移动1px */\n MOVE_RIGHT_1 = 'tmagic-system-move-right-1',\n /** 向上移动10px */\n MOVE_UP_10 = 'tmagic-system-move-up-10',\n /** 向下移动10px */\n MOVE_DOWN_10 = 'tmagic-system-move-down-10',\n /** 向左移动10px */\n MOVE_LEFT_10 = 'tmagic-system-move-left-10',\n /** 向右移动10px */\n MOVE_RIGHT_10 = 'tmagic-system-move-right-10',\n /** 切换组件 */\n SWITCH_NODE = 'tmagic-system-switch-node',\n}\n\nexport interface KeyBindingItem {\n command: KeyBindingCommand | string;\n keybinding?: string | string[];\n when: [string, 'keyup' | 'keydown'][];\n}\n\nexport interface KeyBindingCacheItem {\n type: string;\n command: KeyBindingCommand | string;\n keybinding?: string | string[];\n eventType: 'keyup' | 'keydown';\n bound: boolean;\n}\n\nexport interface CodeSelectColConfig {\n type: 'code-select-col';\n name: string;\n text: string;\n labelWidth?: number | string;\n disabled?: boolean | FilterFunction;\n display?: boolean | FilterFunction;\n}\n\nexport interface PageFragmentSelectConfig {\n type: 'page-fragment-select';\n name: string;\n text: string;\n labelWidth?: number | string;\n disabled?: boolean | FilterFunction;\n display?: boolean | FilterFunction;\n}\n\nexport interface DataSourceMethodSelectConfig {\n type: 'data-source-method-select';\n name: string;\n text: string;\n labelWidth?: number | string;\n disabled?: boolean | FilterFunction;\n display?: boolean | FilterFunction;\n}\n\nexport interface DataSourceFieldSelectConfig {\n type: 'data-source-field-select';\n name: string;\n value?: 'key' | 'value';\n labelWidth?: number | string;\n disabled?: boolean | FilterFunction;\n display?: boolean | FilterFunction;\n}\n\n/** 可新增的数据源类型选项 */\nexport interface DatasourceTypeOption {\n /** 数据源类型 */\n type: string;\n /** 数据源名称 */\n text: string;\n}\n\n/** 组件树节点状态 */\nexport interface LayerNodeStatus {\n /** 显隐 */\n visible: boolean;\n /** 展开子节点 */\n expand: boolean;\n /** 选中 */\n selected: boolean;\n /** 是否可拖拽 */\n draggable: boolean;\n}\n\n/** 拖拽类型 */\nexport enum DragType {\n /** 从组件列表拖到画布 */\n COMPONENT_LIST = 'component-list',\n /** 拖动组件树节点 */\n LAYER_TREE = 'layer-tree',\n}\n\n/** 当uiService.get('uiSelectMode')为true,点击组件(包括任何形式,组件树/画布)时触发的事件名 */\nexport const UI_SELECT_MODE_EVENT_NAME = 'ui-select';\n\nexport interface TreeNodeData {\n id: Id;\n name?: string;\n items?: TreeNodeData[];\n [key: string]: any;\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 { Id, MApp, MContainer, MNode, MPage, MPageFragment } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\nimport type StageCore from '@tmagic/stage';\nimport { getNodePath, isNumber, isPage, isPageFragment, isPop } from '@tmagic/utils';\n\nimport { Layout } from '@editor/type';\nexport const COPY_STORAGE_KEY = '$MagicEditorCopyData';\n\n/**\n * 获取所有页面配置\n * @param root DSL跟节点\n * @returns 所有页面配置\n */\nexport const getPageList = (root?: MApp | null): MPage[] => {\n if (!root) return [];\n if (!Array.isArray(root.items)) return [];\n return root.items.filter((item) => isPage(item)) as MPage[];\n};\n\nexport const getPageFragmentList = (root?: MApp | null): MPageFragment[] => {\n if (!root) return [];\n if (!Array.isArray(root.items)) return [];\n return root.items.filter((item) => isPageFragment(item)) as MPageFragment[];\n};\n\n/**\n * 获取所有页面名称\n * @param pages 所有页面配置\n * @returns 所有页面名称\n */\nexport const getPageNameList = (pages: (MPage | MPageFragment)[]): string[] =>\n pages.map((page) => page.name || 'index');\n\n/**\n * 新增页面时,生成页面名称\n * @param {Object} pageNameList 所有页面名称\n * @returns {string}\n */\nexport const generatePageName = (pageNameList: string[], type: NodeType.PAGE | NodeType.PAGE_FRAGMENT): string => {\n let pageLength = pageNameList.length;\n\n if (!pageLength) return `${type}_index`;\n\n let pageName = `${type}_${pageLength}`;\n while (pageNameList.includes(pageName)) {\n pageLength += 1;\n pageName = `${type}_${pageLength}`;\n }\n\n return pageName;\n};\n\n/**\n * 新增页面时,生成页面名称\n * @param {Object} app 所有页面配置\n * @returns {string}\n */\nexport const generatePageNameByApp = (app: MApp, type: NodeType.PAGE | NodeType.PAGE_FRAGMENT): string =>\n generatePageName(getPageNameList(type === 'page' ? getPageList(app) : getPageFragmentList(app)), type);\n\n/**\n * @param {Object} node\n * @returns {boolean}\n */\nexport const isFixed = (node: MNode): boolean => node.style?.position === 'fixed';\n\nexport const getNodeIndex = (id: Id, parent: MContainer | MApp): number => {\n const items = parent?.items || [];\n return items.findIndex((item: MNode) => `${item.id}` === `${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 setChildrenLayout = (node: MContainer, layout: Layout) => {\n node.items?.forEach((child: MNode) => {\n setLayout(child, layout);\n });\n return node;\n};\n\nexport const setLayout = (node: MNode, layout: Layout) => {\n if (isPop(node)) return;\n\n const style = node.style || {};\n\n // 是 fixed 不做处理\n if (style.position === 'fixed') return;\n\n if (layout !== Layout.RELATIVE) {\n style.position = 'absolute';\n } else {\n node.style = getRelativeStyle(style);\n node.style.right = 'auto';\n node.style.bottom = 'auto';\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\nexport interface NodeItem {\n items?: NodeItem[];\n [key: string]: any;\n}\n\nexport const traverseNode = <T extends NodeItem = NodeItem>(\n node: T,\n cb: (node: T, parents: T[]) => void,\n parents: T[] = [],\n) => {\n cb(node, parents);\n\n if (node.items?.length) {\n parents.push(node);\n node.items.forEach((item) => {\n traverseNode(item as T, cb, [...parents]);\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 */\nimport { reactive } from 'vue';\n\nimport { DepTargetType, type Target, Watcher } from '@tmagic/dep';\nimport type { Id, MNode } from '@tmagic/schema';\n\nimport BaseService from './BaseService';\n\nclass Dep extends BaseService {\n private watcher = new Watcher({ initialTargets: reactive({}) });\n\n public removeTargets(type: string = DepTargetType.DEFAULT) {\n this.watcher.removeTargets(type);\n\n this.emit('remove-target');\n }\n\n public getTargets(type: string = DepTargetType.DEFAULT) {\n return this.watcher.getTargets(type);\n }\n\n public getTarget(id: Id, type: string = DepTargetType.DEFAULT) {\n return this.watcher.getTarget(id, type);\n }\n\n public addTarget(target: Target) {\n this.watcher.addTarget(target);\n this.emit('add-target', target);\n }\n\n public removeTarget(id: Id, type: string = DepTargetType.DEFAULT) {\n this.watcher.removeTarget(id, type);\n this.emit('remove-target');\n }\n\n public clearTargets() {\n this.watcher.clearTargets();\n }\n\n public collect(nodes: MNode[], deep = false, type?: DepTargetType) {\n this.watcher.collect(nodes, deep, type);\n this.emit('collected', nodes, deep);\n }\n\n public clear(nodes?: MNode[]) {\n return this.watcher.clear(nodes);\n }\n\n public clearByType(type: DepTargetType, nodes?: MNode[]) {\n return this.watcher.clearByType(type, nodes);\n }\n\n public hasTarget(id: Id, type: string = DepTargetType.DEFAULT) {\n return this.watcher.hasTarget(id, type);\n }\n\n public hasSpecifiedTypeTarget(type: string = DepTargetType.DEFAULT): boolean {\n return this.watcher.hasSpecifiedTypeTarget(type);\n }\n}\n\nexport type DepService = Dep;\n\nexport default new Dep();\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 = 20) {\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 * 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, MPageFragment } 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.resetPage();\n }\n\n public resetPage() {\n this.state.pageId = undefined;\n this.state.canRedo = false;\n this.state.canUndo = false;\n }\n\n public changePage(page: MPage | MPageFragment): 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 { getConfig } from '@editor/utils/config';\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([\n { name: 'getStorage', isAsync: false },\n { name: 'getNamespace', isAsync: false },\n { name: 'clear', isAsync: false },\n { name: 'getItem', isAsync: false },\n { name: 'removeItem', isAsync: false },\n { name: 'setItem', isAsync: false },\n ]);\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 getStorage(): Storage {\n return this.storage;\n }\n\n public getNamespace(): string {\n return this.namespace;\n }\n\n /**\n * 清理,支持storageService.usePlugin\n */\n public clear(): void {\n const storage = this.getStorage();\n storage.clear();\n }\n /**\n * 获取存储项,支持storageService.usePlugin\n */\n public getItem(key: string, options: Options = {}): any {\n const storage = this.getStorage();\n const namespace = 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 return getConfig('parseDSL')(`(${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 key(index: number): string | null {\n const storage = this.getStorage();\n return storage.key(index);\n }\n\n /**\n * 移除存储项,支持storageService.usePlugin\n */\n public removeItem(key: string, options: Options = {}): void {\n const storage = this.getStorage();\n const namespace = this.getNamespace();\n storage.removeItem(`${options.namespace || namespace}:${key}`);\n }\n\n /**\n * 设置存储项,支持storageService.usePlugin\n */\n public setItem(key: string, value: any, options: Options = {}): void {\n const storage = this.getStorage();\n const namespace = 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, get, mergeWith, set } from 'lodash-es';\n\nimport { DepTargetType } from '@tmagic/dep';\nimport type { FormConfig } from '@tmagic/form';\nimport type { Id, MComponent, MNode } from '@tmagic/schema';\nimport { guid, toLine } from '@tmagic/utils';\n\nimport depService from '@editor/services/dep';\nimport editorService from '@editor/services/editor';\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 relateIdMap: {},\n });\n\n constructor() {\n super([\n { name: 'setPropsConfig', isAsync: true },\n { name: 'getPropsConfig', isAsync: true },\n { name: 'setPropsValue', isAsync: true },\n { name: 'getPropsValue', isAsync: true },\n { name: 'createId', isAsync: false },\n { name: 'setNewItemId', isAsync: true },\n { name: 'fillConfig', isAsync: true },\n { name: 'getDefaultPropsValue', isAsync: true },\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, Partial<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: Partial<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 * 如果没有相同ID并且force为false则保持不变\n * @param {Object} config 组件配置\n * @param {Boolean} force 是否强制设置新的ID\n */\n /* eslint no-param-reassign: [\"error\", { \"props\": false }] */\n public async setNewItemId(config: MNode, force = true) {\n if (force || editorService.getNodeById(config.id)) {\n const newId = await this.createId(config.type || 'component');\n this.setRelateId(config.id, newId);\n config.id = newId;\n }\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 /**\n * 替换关联ID\n * @param originConfigs 原组件配置\n * @param targetConfigs 待替换的组件配置\n */\n public replaceRelateId(originConfigs: MNode[], targetConfigs: MNode[]) {\n const relateIdMap = this.getRelateIdMap();\n if (Object.keys(relateIdMap).length === 0) return;\n const target = depService.getTarget(DepTargetType.RELATED_COMP_WHEN_COPY, DepTargetType.RELATED_COMP_WHEN_COPY);\n if (!target) return;\n originConfigs.forEach((config: MNode) => {\n const newId = relateIdMap[config.id];\n const targetConfig = targetConfigs.find((targetConfig) => targetConfig.id === newId);\n if (!targetConfig) return;\n target.deps[config.id]?.keys?.forEach((fullKey) => {\n const relateOriginId = get(config, fullKey);\n const relateTargetId = relateIdMap[relateOriginId];\n if (!relateTargetId) return;\n set(targetConfig, fullKey, relateTargetId);\n });\n });\n }\n\n /**\n * 清除setNewItemId前后映射关系\n */\n public clearRelateId() {\n this.state.relateIdMap = {};\n }\n\n public destroy() {\n this.resetState();\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n\n /**\n * 获取setNewItemId前后映射关系\n * @param oldId 原组件ID\n * @returns 新旧ID映射\n */\n private getRelateIdMap() {\n return this.state.relateIdMap;\n }\n\n /**\n * 记录setNewItemId前后映射关系\n * @param oldId 原组件ID\n * @param newId 分配的新ID\n */\n private setRelateId(oldId: Id, newId: Id) {\n this.state.relateIdMap[oldId] = newId;\n }\n}\n\nexport type PropsService = Props;\n\nexport default new Props();\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 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, get, isObject, mergeWith, uniq } from 'lodash-es';\n\nimport { DepTargetType } from '@tmagic/dep';\nimport type { Id, MApp, MComponent, MContainer, MNode, MPage, MPageFragment } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\nimport { getNodePath, isNumber, isPage, isPageFragment, isPop } from '@tmagic/utils';\n\nimport depService from '@editor/services/dep';\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 getPageFragmentList,\n getPageList,\n isFixed,\n setChildrenLayout,\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 stageLoading: true,\n highlightNode: null,\n modifiedNodeIds: new Map(),\n pageLength: 0,\n pageFragmentLength: 0,\n disabledMultiSelect: false,\n });\n private isHistoryStateChange = false;\n\n constructor() {\n super(\n [\n { name: 'getLayout', isAsync: true },\n { name: 'select', isAsync: true },\n { name: 'doAdd', isAsync: true },\n { name: 'add', isAsync: true },\n { name: 'doRemove', isAsync: true },\n { name: 'remove', isAsync: true },\n { name: 'doUpdate', isAsync: true },\n { name: 'update', isAsync: true },\n { name: 'sort', isAsync: true },\n { name: 'copy', isAsync: true },\n { name: 'paste', isAsync: true },\n { name: 'doPaste', isAsync: true },\n { name: 'doAlignCenter', isAsync: true },\n { name: 'alignCenter', isAsync: true },\n { name: 'moveLayer', isAsync: true },\n { name: 'moveToContainer', isAsync: true },\n { name: 'move', isAsync: true },\n { name: 'undo', isAsync: true },\n { name: 'redo', isAsync: true },\n { name: 'highlight', isAsync: true },\n { name: 'dragTo', isAsync: true },\n ],\n // 需要注意循环依赖问题,如果函数间有相互调用的话,不能设置为串行调用\n ['select', 'update', 'moveLayer'],\n );\n }\n\n /**\n * 设置当前指点节点配置\n * @param name 'root' | 'page' | 'parent' | 'node' | 'highlightNode' | 'nodes' | 'stage' | 'modifiedNodeIds' | 'pageLength' | 'pageFragmentLength\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)) {\n const app = value as MApp;\n this.state.pageLength = getPageList(app).length || 0;\n this.state.pageFragmentLength = getPageFragmentList(app).length || 0;\n this.state.stageLoading = this.state.pageLength !== 0;\n } else {\n this.state.pageLength = 0;\n this.state.pageFragmentLength = 0;\n this.state.stageLoading = false;\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' | 'pageFragmentLength'\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 (isPage(item) || isPageFragment(item)) {\n info.page = item as MPage | MPageFragment;\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 | null): 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.id, 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.id, 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 selectRoot() {\n const root = this.get('root');\n if (!root) return;\n\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 }\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) && !(isPage(node) || isPageFragment(node))) {\n throw new Error('app下不能添加组件');\n }\n\n if (parent.id !== curNode.id && !(isPage(node) || isPageFragment(node))) {\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) || isPageFragment(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 if (isPageFragment(newNodes[0])) {\n this.state.pageFragmentLength += 1;\n } else {\n // 新增页面,这个时候页面还有渲染出来,此时select会出错,在runtime-ready的时候回去select\n stage?.select(newNodes[0].id);\n }\n }\n\n if (!(isPage(newNodes[0]) || isPageFragment(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, false);\n\n if (!parent || !curNode) throw new Error('找不要删除的节点');\n\n const index = getNodeIndex(curNode.id, 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 const selectDefault = async (pages: MNode[]) => {\n if (pages[0]) {\n await this.select(pages[0]);\n stage?.select(pages[0].id);\n } else {\n this.selectRoot();\n\n historyService.resetPage();\n }\n };\n\n const rootItems = root.items || [];\n\n if (isPage(node)) {\n this.state.pageLength -= 1;\n\n await selectDefault(getPageList(root));\n } else if (isPageFragment(node)) {\n this.state.pageFragmentLength -= 1;\n\n await selectDefault(getPageFragmentList(root));\n } else {\n await this.select(parent);\n stage?.select(parent.id);\n\n this.addModifiedNodeId(parent.id);\n }\n\n if (!rootItems.length) {\n this.resetModifiedNodeId();\n historyService.reset();\n }\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]) || isPageFragment(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.id, 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 (Array.isArray(newConfig.items) && newLayout !== layout) {\n newConfig = setChildrenLayout(newConfig as MContainer, 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 (isPage(newConfig) || isPageFragment(newConfig)) {\n this.set('page', newConfig as MPage | MPageFragment);\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 if (newNodes[0]?.type !== NodeType.ROOT) {\n this.pushHistoryState();\n }\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 * 将组件节点配置存储到localStorage中\n * @param config 组件节点配置\n * @returns\n */\n public copy(config: MNode | MNode[]): void {\n storageService.setItem(COPY_STORAGE_KEY, Array.isArray(config) ? config : [config], {\n protocol: Protocol.OBJECT,\n });\n }\n\n /**\n * 复制时会带上组件关联的依赖\n * @param config 组件节点配置\n * @returns\n */\n public copyWithRelated(config: MNode | MNode[]): void {\n const copyNodes: MNode[] = Array.isArray(config) ? config : [config];\n // 关联的组件也一并复制\n depService.clearByType(DepTargetType.RELATED_COMP_WHEN_COPY);\n depService.collect(copyNodes, true, DepTargetType.RELATED_COMP_WHEN_COPY);\n const customTarget = depService.getTarget(\n DepTargetType.RELATED_COMP_WHEN_COPY,\n DepTargetType.RELATED_COMP_WHEN_COPY,\n );\n if (customTarget) {\n Object.keys(customTarget.deps).forEach((nodeId: Id) => {\n const node = this.getNodeById(nodeId);\n if (!node) return;\n customTarget!.deps[nodeId].keys.forEach((key) => {\n const relateNodeId = get(node, key);\n const isExist = copyNodes.find((node) => node.id === relateNodeId);\n if (!isExist) {\n const relateNode = this.getNodeById(relateNodeId);\n if (relateNode) {\n copyNodes.push(relateNode);\n }\n }\n });\n });\n }\n storageService.setItem(COPY_STORAGE_KEY, copyNodes, {\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[] = storageService.getItem(COPY_STORAGE_KEY);\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 const pasteConfigs = await this.doPaste(config, position);\n propsService.replaceRelateId(config, pasteConfigs);\n return this.add(pasteConfigs, parent);\n }\n\n public async doPaste(config: MNode[], position: PastePosition = {}): Promise<MNode[]> {\n propsService.clearRelateId();\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 = layout === Layout.FIXED ? doc.body : el?.offsetParent;\n if (parentEl && el) {\n node.style.left = (parentEl.clientWidth - el.clientWidth) / 2;\n node.style.right = '';\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 node.style.right = '';\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, 0, node);\n } else if (offset === LayerOffset.BOTTOM) {\n brothers.splice(isRelative ? brothers.length : 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.id, 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 public async dragTo(config: MNode, targetParent: MContainer, targetIndex: number) {\n if (!targetParent || !Array.isArray(targetParent.items)) return;\n\n const { parent, node: curNode } = this.getNodeInfo(config.id, false);\n if (!parent || !curNode) throw new Error('找不要删除的节点');\n\n const index = getNodeIndex(curNode.id, parent);\n\n if (typeof index !== 'number' || index === -1) throw new Error('找不要删除的节点');\n\n if (parent.id === targetParent.id) {\n if (index === targetIndex) return;\n\n if (index < targetIndex) {\n targetIndex -= 1;\n }\n }\n\n const layout = await this.getLayout(parent);\n const newLayout = await this.getLayout(targetParent);\n\n if (newLayout !== layout) {\n setLayout(config, newLayout);\n }\n\n parent.items?.splice(index, 1);\n\n targetParent.items?.splice(targetIndex, 0, config);\n\n const page = this.get('page');\n const root = this.get('root');\n const stage = this.get('stage');\n\n if (stage && page && root) {\n stage.update({\n config: cloneDeep(page),\n parentId: root.id,\n root: cloneDeep(root),\n });\n }\n\n this.addModifiedNodeId(config.id);\n this.addModifiedNodeId(parent.id);\n\n this.pushHistoryState();\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 || !['absolute', 'fixed'].includes(style.position)) return;\n\n const update = (style: { [key: string]: any }) =>\n this.update({\n id,\n type,\n style,\n });\n\n if (top) {\n if (isNumber(style.top)) {\n update({\n ...style,\n top: Number(style.top) + Number(top),\n bottom: '',\n });\n } else if (isNumber(style.bottom)) {\n update({\n ...style,\n bottom: Number(style.bottom) - Number(top),\n top: '',\n });\n }\n }\n\n if (left) {\n if (isNumber(style.left)) {\n update({\n ...style,\n left: Number(style.left) + Number(left),\n right: '',\n });\n } else if (isNumber(style.right)) {\n update({\n ...style,\n right: Number(style.right) - Number(left),\n left: '',\n });\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","import { toRaw } from 'vue';\nimport { isEmpty } from 'lodash-es';\n\nimport { Id, MContainer, MNode, NodeType } from '@tmagic/schema';\nimport { isPage, isPageFragment } 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 const pasteConfig = await propsService.setNewItemId(configItem, false);\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) || isPageFragment(pasteConfig)) && root) {\n pasteConfig.name = generatePageNameByApp(root, isPage(pasteConfig) ? NodeType.PAGE : NodeType.PAGE_FRAGMENT);\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","<template>\n <MForm\n ref=\"form\"\n :config=\"codeParamsConfig\"\n :init-values=\"model\"\n :disabled=\"disabled\"\n :size=\"size\"\n :watch-props=\"false\"\n @change=\"onParamsChangeHandler\"\n ></MForm>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue';\n\nimport { FormConfig, MForm } from '@tmagic/form';\n\nimport type { CodeParamStatement } from '@editor/type';\nimport { error } from '@editor/utils';\n\ndefineOptions({\n name: 'MEditorCodeParams',\n});\n\nconst props = defineProps<{\n model: any;\n size?: 'small' | 'default' | 'large';\n disabled?: boolean;\n name: string;\n paramsConfig: CodeParamStatement[];\n}>();\n\nconst emit = defineEmits(['change']);\n\nconst form = ref<InstanceType<typeof MForm>>();\n\nconst getFormConfig = (items: FormConfig = []) => [\n {\n type: 'fieldset',\n items,\n legend: '参数',\n labelWidth: '70px',\n name: props.name,\n },\n];\n\nconst codeParamsConfig = computed(() => getFormConfig(props.paramsConfig));\n\n/**\n * 参数值修改更新\n */\nconst onParamsChangeHandler = async () => {\n try {\n const value = await form.value?.submitForm(true);\n emit('change', value);\n } catch (e) {\n error(e);\n }\n};\n</script>\n","<template>\n <TMagicIcon v-if=\"!icon\" class=\"magic-editor-icon\"><Edit></Edit></TMagicIcon>\n <TMagicIcon\n v-else-if=\"typeof icon === 'string' && (icon.startsWith('http') || isRelativePath(icon))\"\n 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>\nimport { toRaw } from 'vue';\nimport { Edit } from '@element-plus/icons-vue';\n\nimport { TMagicIcon } from '@tmagic/design';\n\ndefineOptions({\n name: 'MEditorIcon',\n});\n\ndefineProps<{\n icon?: any;\n}>();\n\nconst isRelativePath = (str: string) => /^(\\.|(\\.\\.)?\\/)/.test(str);\n</script>\n","import { nextTick, ref } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport { tMagicMessage } from '@tmagic/design';\nimport type { CodeBlockContent } from '@tmagic/schema';\n\nimport CodeBlockEditor from '@editor/components/CodeBlockEditor.vue';\nimport type { CodeBlockService } from '@editor/services/codeBlock';\n\nexport const useCodeBlockEdit = (codeBlockService?: CodeBlockService) => {\n const codeConfig = ref<CodeBlockContent>();\n const codeId = ref<string>();\n const codeBlockEditor = ref<InstanceType<typeof CodeBlockEditor>>();\n\n // 新增代码块\n const createCodeBlock = async () => {\n if (!codeBlockService) {\n tMagicMessage.error('新增代码块失败');\n return;\n }\n\n codeConfig.value = {\n name: '代码块',\n content: `({app, params}) => {\\n // place your code here\\n}`,\n params: [],\n };\n\n codeId.value = await codeBlockService.getUniqueId();\n\n await nextTick();\n\n codeBlockEditor.value?.show();\n };\n\n // 编辑代码块\n const editCode = async (id: string) => {\n const codeBlock = await codeBlockService?.getCodeContentById(id);\n\n if (!codeBlock) {\n tMagicMessage.error('获取代码块内容失败');\n return;\n }\n\n let codeContent = codeBlock.content;\n\n if (typeof codeContent !== 'string') {\n codeContent = codeContent.toString();\n }\n\n codeConfig.value = {\n ...cloneDeep(codeBlock),\n content: codeContent,\n };\n codeId.value = id;\n\n await nextTick();\n\n codeBlockEditor.value?.show();\n };\n\n // 删除代码块\n const deleteCode = async (key: string) => {\n codeBlockService?.deleteCodeDslByIds([key]);\n };\n\n const submitCodeBlockHandler = async (values: CodeBlockContent) => {\n if (!codeId.value) return;\n\n await codeBlockService?.setCodeDslById(codeId.value, values);\n\n tMagicMessage.success('代码块保存成功');\n\n codeBlockEditor.value?.hide();\n };\n\n return {\n codeId,\n codeConfig,\n codeBlockEditor,\n\n createCodeBlock,\n editCode,\n deleteCode,\n submitCodeBlockHandler,\n };\n};\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 :size=\"size\"\n @change=\"onParamsChangeHandler\"\n ></m-form-container>\n <!-- 查看/编辑按钮 -->\n <Icon v-if=\"model[name]\" class=\"icon\" :icon=\"!disabled ? Edit : View\" @click=\"editCode(model[name])\"></Icon>\n </div>\n\n <!-- 参数填写框 -->\n <CodeParams\n v-if=\"paramsConfig.length\"\n name=\"params\"\n :model=\"model\"\n :size=\"size\"\n :params-config=\"paramsConfig\"\n @change=\"onParamsChangeHandler\"\n ></CodeParams>\n\n <CodeBlockEditor\n ref=\"codeBlockEditor\"\n v-if=\"codeConfig\"\n :disabled=\"disabled\"\n :content=\"codeConfig\"\n @submit=\"submitCodeBlockHandler\"\n ></CodeBlockEditor>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"\">\nimport { computed, inject, ref, watch } from 'vue';\nimport { Edit, View } from '@element-plus/icons-vue';\nimport { isEmpty, map } from 'lodash-es';\n\nimport { createValues, FieldProps } from '@tmagic/form';\nimport type { Id } from '@tmagic/schema';\n\nimport CodeBlockEditor from '@editor/components/CodeBlockEditor.vue';\nimport CodeParams from '@editor/components/CodeParams.vue';\nimport Icon from '@editor/components/Icon.vue';\nimport { useCodeBlockEdit } from '@editor/hooks/use-code-block-edit';\nimport type { CodeParamStatement, CodeSelectColConfig, Services } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorCodeSelectCol',\n});\n\nconst services = inject<Services>('services');\nconst emit = defineEmits(['change']);\n\nconst props = withDefaults(defineProps<FieldProps<CodeSelectColConfig>>(), {\n disabled: false,\n});\n\n/**\n * 根据代码块id获取代码块参数配置\n * @param codeId 代码块ID\n */\nconst getParamItemsConfig = (codeId?: Id): CodeParamStatement[] => {\n if (!codeDsl.value || !codeId) return [];\n\n const paramStatements = codeDsl.value[codeId]?.params;\n\n if (isEmpty(paramStatements)) return [];\n\n return paramStatements.map((paramState: CodeParamStatement) => ({\n labelWidth: '100px',\n text: paramState.name,\n ...paramState,\n }));\n};\n\nconst codeDsl = computed(() => services?.codeBlockService.getCodeDsl());\nconst paramsConfig = ref<CodeParamStatement[]>(getParamItemsConfig(props.model[props.name]));\n\nwatch(\n () => props.model[props.name],\n (v, preV) => {\n if (v !== preV) {\n paramsConfig.value = getParamItemsConfig(v);\n }\n },\n);\n\nconst selectConfig = {\n type: 'select',\n name: props.name,\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 paramsConfig.value = getParamItemsConfig(codeId);\n\n if (paramsConfig.value.length) {\n model.params = createValues(formState, paramsConfig.value, {}, model.params);\n } else {\n model.params = {};\n }\n\n return codeId;\n },\n};\n\n/**\n * 参数值修改更新\n */\nconst onParamsChangeHandler = (value: any) => {\n props.model.params = value.params;\n emit('change', props.model);\n};\n\nconst { codeBlockEditor, codeConfig, editCode, submitCodeBlockHandler } = useCodeBlockEdit(services?.codeBlockService);\n</script>\n","<template>\n <div class=\"m-editor-data-source-fields\">\n <MagicTable :data=\"model[name]\" :columns=\"fieldColumns\"></MagicTable>\n\n <div class=\"m-editor-data-source-fields-footer\">\n <TMagicButton size=\"small\" :disabled=\"disabled\" plain @click=\"newFromJsonHandler()\">快速添加</TMagicButton>\n <TMagicButton size=\"small\" type=\"primary\" :disabled=\"disabled\" plain @click=\"newHandler()\">添加</TMagicButton>\n </div>\n\n <MFormDrawer\n ref=\"addDialog\"\n label-width=\"80px\"\n :title=\"fieldTitle\"\n :config=\"dataSourceFieldsConfig\"\n :values=\"fieldValues\"\n :parentValues=\"model[name]\"\n :disabled=\"disabled\"\n :width=\"width\"\n @submit=\"fieldChange\"\n ></MFormDrawer>\n\n <MFormDrawer\n ref=\"addFromJsonDialog\"\n title=\"快速添加数据定义\"\n :config=\"jsonFromConfig\"\n :values=\"jsonFromValues\"\n :disabled=\"disabled\"\n :width=\"width\"\n @submit=\"addFromJsonFromChange\"\n ></MFormDrawer>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, ref } from 'vue';\n\nimport { TMagicButton, tMagicMessage, tMagicMessageBox } from '@tmagic/design';\nimport { type FieldProps, type FormConfig, type FormState, MFormDrawer } from '@tmagic/form';\nimport type { DataSchema } from '@tmagic/schema';\nimport { MagicTable } from '@tmagic/table';\nimport { getDefaultValueFromFields } from '@tmagic/utils';\n\nimport type { Services } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorDataSourceFields',\n});\n\nconst props = withDefaults(\n defineProps<\n FieldProps<{\n type: 'data-source-fields';\n }>\n >(),\n {\n disabled: false,\n },\n);\n\nconst emit = defineEmits(['change']);\n\nconst services = inject<Services>('services');\n\nconst addDialog = ref<InstanceType<typeof MFormDrawer>>();\n\nconst fieldValues = ref<Record<string, any>>({});\nconst fieldTitle = ref('');\n\nconst width = computed(() => globalThis.document.body.clientWidth - (services?.uiService.get('columnWidth').left || 0));\n\nconst newHandler = () => {\n fieldValues.value = {};\n fieldTitle.value = '新增属性';\n addDialog.value?.show();\n};\n\nconst fieldChange = ({ index, ...value }: Record<string, any>) => {\n if (index > -1) {\n props.model[props.name][index] = value;\n } else {\n props.model[props.name].push(value);\n }\n\n addDialog.value?.hide();\n\n emit('change', props.model[props.name]);\n};\n\nconst fieldColumns = [\n {\n label: '属性名称',\n prop: 'title',\n },\n {\n label: '属性key',\n prop: 'name',\n },\n {\n label: '属性描述',\n prop: 'description',\n },\n {\n label: '默认值',\n prop: 'defaultValue',\n },\n {\n label: '操作',\n fixed: 'right',\n actions: [\n {\n text: '编辑',\n handler: (row: Record<string, any>, index: number) => {\n fieldValues.value = {\n ...row,\n index,\n };\n fieldTitle.value = `编辑${row.title}`;\n addDialog.value?.show();\n },\n },\n {\n text: '删除',\n buttonType: 'danger',\n handler: async (row: Record<string, any>, index: number) => {\n await tMagicMessageBox.confirm(`确定删除${row.title}(${row.name})?`, '提示');\n props.model[props.name].splice(index, 1);\n emit('change', props.model[props.name]);\n },\n },\n ],\n },\n];\n\nconst dataSourceFieldsConfig: FormConfig = [\n { name: 'index', type: 'hidden', filter: 'number', defaultValue: -1 },\n {\n name: 'type',\n text: '数据类型',\n type: 'select',\n defaultValue: 'string',\n options: [\n { text: '字符串', value: 'string' },\n { text: '数字', value: 'number' },\n { text: '布尔值', value: 'boolean' },\n { text: '对象', value: 'object' },\n { text: '数组', value: 'array' },\n { text: 'null', value: 'null' },\n { text: 'any', value: 'any' },\n ],\n },\n {\n name: 'name',\n text: '字段名称',\n rules: [\n {\n required: true,\n message: '请输入字段名称',\n },\n {\n validator: ({ value, callback }, { model, parent }) => {\n const index = parent.findIndex((item: Record<string, any>) => item.name === value);\n if ((model.index === -1 && index > -1) || (model.index > -1 && index > -1 && index !== model.index)) {\n return callback(`属性key(${value})已存在`);\n }\n callback();\n },\n },\n ],\n },\n {\n name: 'title',\n text: '展示名称',\n rules: [\n {\n required: true,\n message: '请输入展示名称',\n },\n ],\n },\n {\n name: 'description',\n text: '描述',\n type: 'textarea',\n },\n {\n name: 'defaultValue',\n text: '默认值',\n height: '200px',\n parse: true,\n type: (mForm: FormState | undefined, { model }: any) => {\n if (model.type === 'number') return 'number';\n if (model.type === 'boolean') return 'select';\n if (model.type === 'string') return 'text';\n\n return 'vs-code';\n },\n options: [\n { text: 'true', value: true },\n { text: 'false', value: false },\n ],\n },\n {\n name: 'enable',\n text: '是否可用',\n type: 'switch',\n defaultValue: true,\n },\n {\n name: 'fields',\n type: 'data-source-fields',\n defaultValue: [],\n display: (formState: FormState | undefined, { model }: any) => model.type === 'object' || model.type === 'array',\n },\n];\n\nconst addFromJsonDialog = ref<InstanceType<typeof MFormDrawer>>();\nconst jsonFromConfig: FormConfig = [\n {\n name: 'data',\n type: 'vs-code',\n labelWidth: '0',\n language: 'json',\n height: '600px',\n options: inject('codeOptions', {}),\n },\n];\n\nconst jsonFromValues = ref({\n data: {},\n});\n\nconst newFromJsonHandler = () => {\n jsonFromValues.value.data = getDefaultValueFromFields(props.model[props.name]);\n addFromJsonDialog.value?.show();\n};\n\nconst getValueType = (value: any) => {\n if (Array.isArray(value)) return 'array';\n if (value === null) return 'null';\n if (typeof value === 'object') return 'object';\n if (typeof value === 'number') return 'number';\n if (typeof value === 'boolean') return 'boolean';\n if (typeof value === 'string') return 'string';\n\n return 'any';\n};\n\nconst getFieldsConfig = (value: any, fields: DataSchema[] = []) => {\n if (!value || typeof value !== 'object') throw new Error('数据格式错误');\n\n const newFields: DataSchema[] = [];\n Object.entries(value).forEach(([key, value]) => {\n const type = getValueType(value);\n\n const oldField = fields.find((field) => field.name === key);\n\n let childFields: DataSchema[] = [];\n if (Array.isArray(value) && value.length > 0) {\n childFields = getFieldsConfig(value[0], oldField?.fields);\n } else if (type === 'object') {\n childFields = getFieldsConfig(value, oldField?.fields);\n }\n\n newFields.push({\n name: key,\n title: oldField?.title || key,\n type,\n description: oldField?.description || '',\n enable: oldField?.enable ?? true,\n defaultValue: value,\n fields: childFields,\n });\n });\n\n return newFields;\n};\n\nconst addFromJsonFromChange = ({ data }: { data: string }) => {\n try {\n const value = JSON.parse(data);\n\n props.model[props.name] = getFieldsConfig(value, props.model[props.name]);\n\n addFromJsonDialog.value?.hide();\n\n emit('change', props.model[props.name]);\n } catch (e: any) {\n tMagicMessage.error(e.message);\n }\n};\n</script>\n","<template>\n <m-form-container\n :config=\"{\n ...config,\n ...cascaderConfig,\n }\"\n :model=\"model\"\n @change=\"onChangeHandler\"\n ></m-form-container>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject } from 'vue';\n\nimport type { CascaderOption, FieldProps } from '@tmagic/form';\nimport type { DataSchema } from '@tmagic/schema';\nimport { DATA_SOURCE_FIELDS_SELECT_VALUE_PREFIX } from '@tmagic/utils';\n\nimport type { DataSourceFieldSelectConfig, Services } from '@editor/type';\n\nconst services = inject<Services>('services');\nconst emit = defineEmits(['change']);\n\nconst props = withDefaults(defineProps<FieldProps<DataSourceFieldSelectConfig>>(), {\n disabled: false,\n});\n\nconst dataSources = computed(() => services?.dataSourceService.get('dataSources'));\n\nconst getOptionChildren = (fields: DataSchema[] = []): CascaderOption[] =>\n fields.map((field) => ({\n label: field.title || field.name,\n value: field.name,\n children: field.type === 'array' ? [] : getOptionChildren(field.fields),\n }));\n\nconst cascaderConfig = computed(() => {\n const valueIsKey = props.config.value === 'key';\n\n return {\n type: 'cascader',\n name: props.name,\n checkStrictly: !valueIsKey,\n text: '',\n options: () =>\n dataSources.value\n ?.filter((ds) => ds.fields?.length)\n ?.map((ds) => ({\n label: ds.title || ds.id,\n value: valueIsKey ? ds.id : `${DATA_SOURCE_FIELDS_SELECT_VALUE_PREFIX}${ds.id}`,\n children: getOptionChildren(ds.fields),\n })) || [],\n };\n});\n\nconst onChangeHandler = (value: any) => {\n emit('change', value);\n};\n</script>\n","<template>\n <component\n v-if=\"disabled || isFocused\"\n :is=\"getConfig('components')?.autocomplete.component || 'el-autocomplete'\"\n class=\"tmagic-design-auto-complete\"\n ref=\"autocomplete\"\n v-model=\"state\"\n v-bind=\"\n getConfig('components')?.autocomplete.props({\n disabled,\n size,\n fetchSuggestions: querySearch,\n triggerOnFocus: false,\n clearable: true,\n }) || {}\n \"\n style=\"width: 100%\"\n @blur=\"blurHandler\"\n @input=\"inputHandler\"\n @select=\"selectHandler\"\n >\n <template #suffix>\n <Icon :icon=\"Coin\" />\n </template>\n <template #default=\"{ item }\">\n <div style=\"display: flex; flex-direction: column; line-height: 1.2em\">\n <div>{{ item.text }}</div>\n <span style=\"font-size: 10px; color: rgba(0, 0, 0, 0.6)\">{{ item.value }}</span>\n </div>\n </template>\n </component>\n <div :class=\"`tmagic-data-source-input-text el-input el-input--${size}`\" @mouseup=\"mouseupHandler\" v-else>\n <div :class=\"`tmagic-data-source-input-text-wrapper el-input__wrapper ${isFocused ? ' is-focus' : ''}`\">\n <div class=\"el-input__inner\">\n <template v-for=\"(item, index) in displayState\">\n <span :key=\"index\" v-if=\"item.type === 'text'\" style=\"margin-right: 2px\">{{ item.value }}</span>\n <TMagicTag :key=\"index\" :size=\"size\" v-if=\"item.type === 'var'\">{{ item.value }}</TMagicTag>\n </template>\n\n <Icon class=\"tmagic-data-source-input-icon\" :icon=\"Coin\" />\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, nextTick, ref, watch } from 'vue';\nimport { Coin } from '@element-plus/icons-vue';\n\nimport { getConfig, TMagicAutocomplete, TMagicTag } from '@tmagic/design';\nimport type { FieldProps } from '@tmagic/form';\nimport type { DataSchema, DataSourceSchema } from '@tmagic/schema';\n\nimport Icon from '@editor/components/Icon.vue';\nimport type { Services } from '@editor/type';\nimport { getDisplayField } from '@editor/utils/data-source';\n\ndefineOptions({\n name: 'MEditorDataSourceInput',\n});\n\nconst props = withDefaults(\n defineProps<\n FieldProps<{\n type: 'data-source-input';\n name: string;\n text: string;\n }>\n >(),\n {\n disabled: false,\n },\n);\n\nconst emit = defineEmits<{\n change: [value: string];\n}>();\n\nconst { dataSourceService } = inject<Services>('services') || {};\n\nconst autocomplete = ref<InstanceType<typeof TMagicAutocomplete>>();\nconst isFocused = ref(false);\nconst state = ref('');\nconst displayState = ref<{ value: string; type: 'var' | 'text' }[]>([]);\n\nconst input = computed<HTMLInputElement>(() => autocomplete.value?.inputRef?.input);\nconst dataSources = computed(() => dataSourceService?.get('dataSources') || []);\n\nconst setDisplayState = () => {\n displayState.value = getDisplayField(dataSources.value, state.value);\n};\n\nwatch(\n () => props.model[props.name],\n (value = '') => {\n state.value = value;\n\n setDisplayState();\n },\n { immediate: true },\n);\n\nconst mouseupHandler = async () => {\n isFocused.value = true;\n await nextTick();\n autocomplete.value?.focus();\n};\n\nconst blurHandler = () => {\n isFocused.value = false;\n\n setDisplayState();\n\n emit('change', state.value);\n};\n\nconst changeHandler = (v: string) => {\n emit('change', v);\n};\n\nlet inputText = '';\n\nconst inputHandler = (v: string) => {\n if (!v) {\n inputText = v;\n }\n};\n\n/**\n * 光标位置是不是}\n * @param selectionStart 光标位置\n */\nconst isRightCurlyBracket = (selectionStart = 0) => {\n const lastChar = inputText.substring(selectionStart - 1, selectionStart);\n return lastChar === '}';\n};\n\n/**\n * 获取光标位置\n */\nconst getSelectionStart = () => {\n let selectionStart = input.value?.selectionStart || 0;\n\n // 输入法可能会自动补全},如果当前光标前面一个字符是},则光标前移一位\n if (isRightCurlyBracket(selectionStart)) {\n selectionStart -= 1;\n }\n\n return selectionStart;\n};\n\n/**\n * 当前输入的是{\n * @param leftCurlyBracketIndex {字符索引\n */\nconst curCharIsLeftCurlyBracket = (leftCurlyBracketIndex: number) =>\n leftCurlyBracketIndex > 0 && leftCurlyBracketIndex === getSelectionStart() - 1;\n\n/**\n * 当前输入的是.\n * @param leftCurlyBracketIndex .字符索引\n */\nconst curCharIsDot = (dotIndex: number) => dotIndex > -1 && dotIndex === getSelectionStart() - 1;\n\n/**\n * @param leftCurlyBracketIndex 左大括号字符索引\n * @param cb 建议的方法\n */\nconst dsQuerySearch = (queryString: string, leftCurlyBracketIndex: number, cb: (data: { value: string }[]) => void) => {\n let result: DataSourceSchema[] = [];\n\n if (curCharIsLeftCurlyBracket(leftCurlyBracketIndex)) {\n // 当前输入的是{\n result = dataSources.value;\n } else if (leftCurlyBracketIndex > 0) {\n // 当前输入的是{xx\n const queryName = queryString.substring(leftCurlyBracketIndex + 1).toLowerCase();\n result = dataSources.value.filter((ds) => ds.title?.toLowerCase().includes(queryName) || ds.id.includes(queryName));\n }\n\n cb(\n result.map((ds) => ({\n value: ds.id,\n text: ds.title,\n type: 'dataSource',\n })),\n );\n};\n\n/**\n * 字段提示\n * @param queryString 当前输入框内的字符串\n * @param leftAngleIndex {字符索引\n * @param dotIndex .字符索引\n * @param cb 建议回调\n */\nconst fieldQuerySearch = (\n queryString: string,\n leftAngleIndex: number,\n dotIndex: number,\n cb: (data: { value: string }[]) => void,\n) => {\n let result: DataSchema[] = [];\n\n const dsKey = queryString.substring(leftAngleIndex + 1, dotIndex);\n\n // 可能是xx.xx.xx,存在链式调用\n const keys = dsKey.split('.');\n\n // 最前的是数据源id\n const dsId = keys.shift();\n const ds = dataSources.value.find((ds) => ds.id === dsId);\n if (!ds) {\n cb([]);\n return;\n }\n\n let fields = ds.fields || [];\n\n // 后面这些是字段\n let key = keys.shift();\n while (key) {\n for (const field of fields) {\n if (field.name === key) {\n fields = field.fields || [];\n key = keys.shift();\n break;\n }\n }\n }\n\n if (curCharIsDot(dotIndex)) {\n // 当前输入的是.\n result = fields || [];\n } else if (dotIndex > -1) {\n const queryName = queryString.substring(dotIndex + 1).toLowerCase();\n result =\n fields.filter(\n (field) => field.name?.toLowerCase().includes(queryName) || field.title?.toLowerCase().includes(queryName),\n ) || [];\n }\n\n cb(\n result.map((field) => ({\n value: field.name,\n text: field.title,\n type: 'field',\n })),\n );\n};\n\n/**\n * 数据源提示\n * @param queryString 当前输入框内的字符串\n * @param cb 建议回调\n */\nconst querySearch = (queryString: string, cb: (data: { value: string }[]) => void) => {\n inputText = queryString;\n\n const selectionStart = getSelectionStart();\n\n const curQueryString = queryString.substring(0, selectionStart);\n\n const fieldKeyStringLastIndex = curQueryString.lastIndexOf('.');\n const dsKeyStringLastIndex = curQueryString.lastIndexOf('${') + 1;\n\n const isFieldTip = fieldKeyStringLastIndex > dsKeyStringLastIndex;\n\n if (isFieldTip) {\n fieldQuerySearch(curQueryString, dsKeyStringLastIndex, fieldKeyStringLastIndex, cb);\n } else {\n dsQuerySearch(curQueryString, dsKeyStringLastIndex, cb);\n }\n};\n\n/**\n * 选择建议\n * @param value 建议值\n * @param type 建议类型,是数据源还是字段\n */\nconst selectHandler = async ({ value, type }: { value: string; type: 'dataSource' | 'field' }) => {\n const isDataSource = type === 'dataSource';\n const selectionStart = input.value?.selectionStart || 0;\n let startText = inputText.substring(0, selectionStart);\n\n const dotIndex = startText.lastIndexOf('.');\n const leftCurlyBracketIndex = startText.lastIndexOf('${') + 1;\n\n const endText = inputText.substring(selectionStart);\n\n let suggestText = value;\n\n if (isDataSource) {\n if (!curCharIsLeftCurlyBracket(leftCurlyBracketIndex)) {\n startText = startText.substring(0, leftCurlyBracketIndex + 1);\n }\n\n // 当前光标后一位是否为},不是的话需要补上\n if (!isRightCurlyBracket(selectionStart + 1)) {\n suggestText = `${suggestText}}`;\n }\n } else if (!curCharIsDot(dotIndex)) {\n startText = startText.substring(0, dotIndex + 1);\n }\n\n state.value = `${startText}${suggestText}${endText}`;\n\n await nextTick();\n\n // 由于选择数据源时会在后面补全}, 所以光标要前移2位\n let newSelectionStart = 0;\n if (isDataSource) {\n newSelectionStart = leftCurlyBracketIndex + suggestText.length;\n } else {\n newSelectionStart = dotIndex + suggestText.length + 1;\n }\n input.value?.setSelectionRange(newSelectionStart, newSelectionStart);\n\n changeHandler(state.value);\n};\n</script>\n","import { nextTick, ref } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport { tMagicMessage } from '@tmagic/design';\nimport type { CodeBlockContent, DataSourceSchema } from '@tmagic/schema';\n\nimport CodeBlockEditor from '@editor/components/CodeBlockEditor.vue';\nimport { getConfig } from '@editor/utils/config';\n\nexport const useDataSourceMethod = () => {\n const codeConfig = ref<CodeBlockContent>();\n const codeBlockEditor = ref<InstanceType<typeof CodeBlockEditor>>();\n\n const dataSource = ref<DataSourceSchema>();\n const dataSourceMethod = ref('');\n\n return {\n codeConfig,\n codeBlockEditor,\n\n createCode: async (model: DataSourceSchema) => {\n codeConfig.value = {\n name: '',\n content: `({ params, dataSource, app }) => {\\n // place your code here\\n}`,\n params: [],\n };\n\n await nextTick();\n\n dataSource.value = model;\n dataSourceMethod.value = '';\n\n codeBlockEditor.value?.show();\n },\n\n editCode: async (model: DataSourceSchema, methodName: string) => {\n const method = model.methods?.find((method) => method.name === methodName);\n\n if (!method) {\n tMagicMessage.error('获取数据源方法失败');\n return;\n }\n\n let codeContent = method.content;\n\n if (typeof codeContent !== 'string') {\n codeContent = codeContent.toString();\n }\n\n codeConfig.value = {\n ...cloneDeep(method),\n content: codeContent,\n };\n\n await nextTick();\n\n dataSource.value = model;\n dataSourceMethod.value = methodName;\n\n codeBlockEditor.value?.show();\n },\n\n deleteCode: async (model: DataSourceSchema, methodName: string) => {\n if (!model.methods) return;\n\n const index = model.methods.findIndex((method) => method.name === methodName);\n\n if (index === -1) {\n return;\n }\n\n model.methods.splice(index, 1);\n },\n\n submitCode: (values: CodeBlockContent) => {\n if (!dataSource.value) return;\n\n if (!dataSource.value.methods) {\n dataSource.value.methods = [];\n }\n\n if (values.content) {\n // 在保存的时候转换代码内容\n const parseDSL = getConfig('parseDSL');\n if (typeof values.content === 'string') {\n values.content = parseDSL<(...args: any[]) => any>(values.content);\n }\n }\n\n if (dataSourceMethod.value) {\n const index = dataSource.value.methods.findIndex((method) => method.name === dataSourceMethod.value);\n dataSource.value.methods.splice(index, 1, values);\n } else {\n dataSource.value.methods.push(values);\n }\n\n codeBlockEditor.value?.hide();\n },\n };\n};\n","<template>\n <div class=\"m-editor-data-source-methods\">\n <MagicTable :data=\"model[name]\" :columns=\"methodColumns\"></MagicTable>\n\n <div class=\"m-editor-data-source-methods-footer\">\n <TMagicButton size=\"small\" type=\"primary\" :disabled=\"disabled\" plain @click=\"createCodeHandler\"\n >添加</TMagicButton\n >\n </div>\n\n <CodeBlockEditor\n v-if=\"codeConfig\"\n ref=\"codeBlockEditor\"\n :disabled=\"disabled\"\n :content=\"codeConfig\"\n :is-data-source=\"true\"\n :data-source-type=\"model.type\"\n @submit=\"submitCodeHandler\"\n ></CodeBlockEditor>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { TMagicButton } from '@tmagic/design';\nimport type { FieldProps } from '@tmagic/form';\nimport type { CodeBlockContent } from '@tmagic/schema';\nimport { MagicTable } from '@tmagic/table';\n\nimport CodeBlockEditor from '@editor/components/CodeBlockEditor.vue';\nimport { useDataSourceMethod } from '@editor/hooks/use-data-source-method';\nimport type { CodeParamStatement } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorDataSourceMethods',\n});\n\nconst props = withDefaults(\n defineProps<\n FieldProps<{\n type: 'data-source-methods';\n }>\n >(),\n {\n disabled: false,\n },\n);\n\nconst emit = defineEmits(['change']);\n\nconst { codeConfig, codeBlockEditor, createCode, editCode, deleteCode, submitCode } = useDataSourceMethod();\n\nconst methodColumns = [\n {\n label: '名称',\n prop: 'name',\n },\n {\n label: '描述',\n prop: 'desc',\n },\n {\n label: '执行时机',\n prop: 'timing',\n },\n {\n label: '参数',\n prop: 'params',\n formatter: (params: CodeParamStatement[]) => params.map((item) => item.name).join(', '),\n },\n {\n label: '操作',\n fixed: 'right',\n actions: [\n {\n text: '编辑',\n handler: (row: CodeBlockContent) => {\n editCode(props.model, row.name);\n emit('change', props.model[props.name]);\n },\n },\n {\n text: '删除',\n buttonType: 'danger',\n handler: (row: CodeBlockContent) => {\n deleteCode(props.model, row.name);\n emit('change', props.model[props.name]);\n },\n },\n ],\n },\n];\n\nconst createCodeHandler = () => {\n createCode(props.model);\n\n emit('change', props.model[props.name]);\n};\n\nconst submitCodeHandler = (values: CodeBlockContent) => {\n submitCode(values);\n\n emit('change', props.model[props.name]);\n};\n</script>\n","<template>\n <div class=\"m-fields-data-source-method-select\">\n <div class=\"data-source-method-select-container\">\n <m-form-container\n class=\"select\"\n :config=\"cascaderConfig\"\n :model=\"model\"\n @change=\"onChangeHandler\"\n ></m-form-container>\n <Icon v-if=\"model[name]\" class=\"icon\" :icon=\"!disabled ? Edit : View\" @click=\"editCodeHandler\"></Icon>\n </div>\n\n <CodeParams\n v-if=\"paramsConfig.length\"\n name=\"params\"\n :model=\"model\"\n :size=\"size\"\n :disabled=\"disabled\"\n :params-config=\"paramsConfig\"\n @change=\"onChangeHandler\"\n ></CodeParams>\n\n <CodeBlockEditor\n ref=\"codeBlockEditor\"\n v-if=\"codeConfig\"\n :disabled=\"disabled\"\n :content=\"codeConfig\"\n @submit=\"submitCodeBlockHandler\"\n ></CodeBlockEditor>\n </div>\n</template>\n\n<script lang=\"ts\" setup name=\"\">\nimport { computed, inject, ref } from 'vue';\nimport { Edit, View } from '@element-plus/icons-vue';\n\nimport { createValues, FieldProps } from '@tmagic/form';\nimport type { CodeBlockContent, Id } from '@tmagic/schema';\n\nimport CodeBlockEditor from '@editor/components/CodeBlockEditor.vue';\nimport CodeParams from '@editor/components/CodeParams.vue';\nimport Icon from '@editor/components/Icon.vue';\nimport { useDataSourceMethod } from '@editor/hooks/use-data-source-method';\nimport type { CodeParamStatement, DataSourceMethodSelectConfig, Services } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorDataSourceMethodSelect',\n});\n\nconst services = inject<Services>('services');\nconst emit = defineEmits(['change']);\n\nconst dataSourceService = services?.dataSourceService;\n\nconst props = withDefaults(defineProps<FieldProps<DataSourceMethodSelectConfig>>(), {\n disabled: false,\n});\n\nconst dataSources = computed(() => dataSourceService?.get('dataSources'));\n\nconst getParamItemsConfig = ([dataSourceId, medthodName]: [Id, string] = ['', '']): CodeParamStatement[] => {\n if (!dataSourceId) return [];\n\n const paramStatements = dataSources.value\n ?.find((item) => item.id === dataSourceId)\n ?.methods?.find((item) => item.name === medthodName)?.params;\n\n if (!paramStatements) return [];\n\n return paramStatements.map((paramState: CodeParamStatement) => ({\n text: paramState.name,\n ...paramState,\n }));\n};\n\nconst paramsConfig = ref<CodeParamStatement[]>(getParamItemsConfig(props.model.dataSourceMethod));\n\nconst setParamsConfig = (dataSourceMethod: [Id, string], formState: any = {}) => {\n // 通过下拉框选择的codeId变化后修正model的值,避免写入其他codeId的params\n paramsConfig.value = dataSourceMethod ? getParamItemsConfig(dataSourceMethod) : [];\n\n if (paramsConfig.value.length) {\n props.model.params = createValues(formState, paramsConfig.value, {}, props.model.params);\n } else {\n props.model.params = {};\n }\n};\n\nconst methodsOptions = computed(\n () =>\n dataSources.value\n ?.filter((ds) => ds.methods?.length || dataSourceService?.getFormMethod(ds.type).length)\n ?.map((ds) => ({\n label: ds.title || ds.id,\n value: ds.id,\n children: [\n ...(dataSourceService?.getFormMethod(ds.type) || []),\n ...(ds.methods || []).map((method) => ({\n label: method.name,\n value: method.name,\n })),\n ],\n })) || [],\n);\n\nconst cascaderConfig = computed(() => ({\n type: 'cascader',\n name: props.name,\n options: methodsOptions.value,\n onChange: (formState: any, dataSourceMethod: [Id, string]) => {\n setParamsConfig(dataSourceMethod, formState);\n\n return dataSourceMethod;\n },\n}));\n\n/**\n * 参数值修改更新\n */\nconst onChangeHandler = (value: any) => {\n props.model.params = value.params;\n emit('change', props.model);\n};\n\nconst { codeBlockEditor, codeConfig, editCode, submitCode } = useDataSourceMethod();\n\nconst editCodeHandler = () => {\n const [id, name] = props.model[props.name];\n\n const dataSource = dataSourceService?.getDataSourceById(id);\n\n if (!dataSource) return;\n\n editCode(dataSource, name);\n\n setParamsConfig([id, name]);\n};\n\nconst submitCodeBlockHandler = (value: CodeBlockContent) => {\n submitCode(value);\n};\n</script>\n","<template>\n <div class=\"m-editor-data-source-fields\">\n <MagicTable :data=\"model[name]\" :columns=\"columns\"></MagicTable>\n\n <div class=\"m-editor-data-source-fields-footer\">\n <TMagicButton size=\"small\" type=\"primary\" :disabled=\"disabled\" plain @click=\"newHandler()\">添加</TMagicButton>\n </div>\n\n <MFormDrawer\n ref=\"addDialog\"\n label-width=\"120px\"\n :title=\"drawerTitle\"\n :config=\"formConfig\"\n :values=\"formValues\"\n :parentValues=\"model[name]\"\n :disabled=\"disabled\"\n :width=\"width\"\n @submit=\"formChangeHandler\"\n ></MFormDrawer>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, ref } from 'vue';\n\nimport { TMagicButton, tMagicMessageBox, TMagicSwitch } from '@tmagic/design';\nimport { type FieldProps, type FormConfig, type FormState, MFormDrawer } from '@tmagic/form';\nimport type { MockSchema } from '@tmagic/schema';\nimport { MagicTable } from '@tmagic/table';\nimport { getDefaultValueFromFields } from '@tmagic/utils';\n\nimport CodeEditor from '@editor/layouts/CodeEditor.vue';\nimport { Services } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorDataSourceMocks',\n});\n\nconst props = withDefaults(\n defineProps<\n FieldProps<{\n type: 'data-source-mocks';\n }>\n >(),\n {\n disabled: false,\n },\n);\n\nconst emit = defineEmits(['change']);\n\nconst services = inject<Services>('services');\nconst width = computed(() => globalThis.document.body.clientWidth - (services?.uiService.get('columnWidth').left || 0));\n\nconst addDialog = ref<InstanceType<typeof MFormDrawer>>();\nconst drawerTitle = ref('');\nconst formValues = ref<Record<string, any>>({});\n\nconst formConfig: FormConfig = [\n { name: 'index', type: 'hidden', filter: 'number', defaultValue: -1 },\n {\n name: 'title',\n text: '名称',\n rules: [\n {\n required: true,\n message: '请输入字段名称',\n },\n {\n required: true,\n message: '请输入名称',\n },\n ],\n },\n {\n name: 'description',\n text: '描述',\n },\n {\n name: 'enable',\n text: '启用',\n type: 'switch',\n },\n {\n name: 'useInEditor',\n text: '编辑器中使用',\n type: 'switch',\n },\n {\n name: 'data',\n text: 'mock数据',\n type: 'vs-code',\n language: 'json',\n options: inject('codeOptions', {}),\n defaultValue: '{}',\n height: '400px',\n onChange: (formState: FormState | undefined, v: string | any) => {\n if (typeof v !== 'string') return v;\n return JSON.parse(v);\n },\n rules: [\n {\n validator: ({ value, callback }) => {\n if (typeof value !== 'string') return callback();\n\n try {\n // 检测json是否存在语法错误\n JSON.parse(value);\n\n callback();\n } catch (error: any) {\n callback(error);\n }\n },\n },\n ],\n },\n];\n\nconst columns = [\n {\n type: 'expand',\n component: CodeEditor,\n props: (row: MockSchema) => ({\n initValues: row.data,\n language: 'json',\n height: '150px',\n options: {\n readOnly: true,\n },\n }),\n },\n {\n label: '名称',\n prop: 'title',\n },\n {\n label: '描述',\n prop: 'description',\n },\n {\n label: '是否启用',\n prop: 'enable',\n type: 'component',\n component: TMagicSwitch,\n props: (row: MockSchema) => ({\n modelValue: row.enable,\n activeValue: true,\n inactiveValue: false,\n }),\n listeners: (row: MockSchema, index: number) => ({\n 'update:modelValue': (v: boolean) => {\n toggleValue(row, 'enable', v, index);\n },\n }),\n },\n {\n label: '编辑器中使用',\n prop: 'useInEditor',\n type: 'component',\n component: TMagicSwitch,\n props: (row: MockSchema) => ({\n modelValue: row.useInEditor,\n activeValue: true,\n inactiveValue: false,\n }),\n listeners: (row: MockSchema, index: number) => ({\n 'update:modelValue': (v: boolean) => {\n toggleValue(row, 'useInEditor', v, index);\n },\n }),\n },\n {\n label: '操作',\n fixed: 'right',\n actions: [\n {\n text: '编辑',\n handler: (row: MockSchema, index: number) => {\n formValues.value = {\n ...row,\n index,\n };\n drawerTitle.value = `编辑${row.title}`;\n addDialog.value?.show();\n },\n },\n {\n text: '删除',\n buttonType: 'danger',\n handler: async (row: MockSchema, index: number) => {\n await tMagicMessageBox.confirm(`确定删除${row.title}?`, '提示');\n props.model[props.name].splice(index, 1);\n emit('change', props.model[props.name]);\n },\n },\n ],\n },\n];\n\nconst newHandler = () => {\n const isFirstRow = props.model[props.name].length === 0;\n formValues.value = {\n data: getDefaultValueFromFields(props.model.fields || []),\n useInEditor: isFirstRow,\n enable: isFirstRow,\n };\n drawerTitle.value = '新增Mock';\n addDialog.value?.show();\n};\n\nconst formChangeHandler = ({ index, ...value }: Record<string, any>) => {\n if (index > -1) {\n props.model[props.name][index] = value;\n } else {\n props.model[props.name].push(value);\n }\n\n addDialog.value?.hide();\n\n emit('change', props.model[props.name]);\n};\n\nconst toggleValue = (row: MockSchema, key: 'enable' | 'useInEditor', value: boolean, index: number) => {\n if (value) {\n props.model[props.name].forEach((item: MockSchema) => {\n item[key] = false;\n });\n }\n\n formChangeHandler({\n ...row,\n [key]: value,\n index,\n });\n};\n</script>\n","<template>\n <MSelect\n :model=\"model\"\n :name=\"name\"\n :size=\"size\"\n :prop=\"prop\"\n :disabled=\"disabled\"\n :config=\"selectConfig\"\n :last-values=\"lastValues\"\n @change=\"changeHandler\"\n ></MSelect>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject } from 'vue';\n\nimport { FieldProps, MSelect, SelectConfig } from '@tmagic/form';\n\nimport { Services } from '../type';\n\ndefineOptions({\n name: 'MEditorDataSourceSelect',\n});\n\nconst emit = defineEmits(['change']);\n\nconst props = withDefaults(\n defineProps<\n FieldProps<{\n type: 'data-source-select';\n name: string;\n text?: string;\n placeholder?: string;\n dataSourceType?: string;\n value?: 'id' | 'value';\n }>\n >(),\n {\n disabled: false,\n },\n);\n\nconst { dataSourceService } = inject<Services>('services') || {};\n\nconst dataSources = computed(() => dataSourceService?.get('dataSources') || []);\n\nconst selectConfig = computed<SelectConfig>(() => {\n const { type, dataSourceType, value, ...config } = props.config;\n\n const valueIsId = props.config.value === 'id';\n\n return {\n ...config,\n type: 'select',\n valueKey: 'dataSourceId',\n options: dataSources.value\n .filter((ds) => !props.config.dataSourceType || ds.type === props.config.dataSourceType)\n .map((ds) => ({\n value: valueIsId\n ? ds.id\n : {\n isBindDataSource: true,\n dataSourceType: ds.type,\n dataSourceId: ds.id,\n },\n text: ds.title || ds.id,\n })),\n };\n});\n\nconst changeHandler = (value: any) => {\n emit('change', value);\n};\n</script>\n","<template>\n <div class=\"m-fields-event-select\">\n <m-form-table\n v-if=\"isOldVersion\"\n ref=\"eventForm\"\n name=\"events\"\n :size=\"size\"\n :disabled=\"disabled\"\n :model=\"model\"\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=\"size\" :disabled=\"disabled\" @click=\"addEvent()\"\n >添加事件</TMagicButton\n >\n <m-form-panel\n v-for=\"(cardItem, index) in model[name]\"\n :key=\"index\"\n :disabled=\"disabled\"\n :size=\"size\"\n :config=\"actionsConfig\"\n :model=\"cardItem\"\n :label-width=\"config.labelWidth || '100px'\"\n @change=\"onChangeHandler\"\n >\n <template #header>\n <m-form-container\n class=\"fullWidth\"\n :config=\"eventNameConfig\"\n :model=\"cardItem\"\n :disabled=\"disabled\"\n :size=\"size\"\n @change=\"onChangeHandler\"\n ></m-form-container>\n <TMagicButton\n style=\"color: #f56c6c\"\n text\n :icon=\"Delete\"\n :disabled=\"disabled\"\n :size=\"size\"\n @click=\"removeEvent(index)\"\n ></TMagicButton>\n </template>\n </m-form-panel>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue';\nimport { Delete } from '@element-plus/icons-vue';\nimport { has } from 'lodash-es';\n\nimport type { EventOption } from '@tmagic/core';\nimport { TMagicButton } from '@tmagic/design';\nimport type { FieldProps, FormState } from '@tmagic/form';\nimport { ActionType } from '@tmagic/schema';\n\nimport type { CodeSelectColConfig, DataSourceMethodSelectConfig, EventSelectConfig, Services } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorEventSelect',\n});\n\nconst props = defineProps<FieldProps<EventSelectConfig>>();\n\nconst emit = defineEmits(['change']);\n\nconst services = inject<Services>('services');\n\nconst editorService = services?.editorService;\nconst dataSourceService = services?.dataSourceService;\nconst eventsService = services?.eventsService;\nconst codeBlockService = services?.codeBlockService;\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 let events: EventOption[] = [];\n\n if (!eventsService || !dataSourceService) return events;\n\n if (props.config.src === 'component') {\n events = eventsService.getEvent(formValue.type);\n } else if (props.config.src === 'datasource') {\n events = dataSourceService.getFormEvent(formValue.type);\n }\n\n return events.map((option) => ({\n text: option.label,\n value: option.value,\n }));\n },\n };\n return { ...defaultEventNameConfig, ...props.config.eventNameConfig };\n});\n\n// 联动类型\nconst actionTypeConfig = computed(() => {\n const defaultActionTypeConfig = {\n name: 'actionType',\n text: '联动类型',\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 disabled: !Object.keys(codeBlockService?.getCodeDsl() || {}).length,\n value: ActionType.CODE,\n },\n {\n text: '数据源',\n label: '数据源',\n disabled: !dataSourceService\n ?.get('dataSources')\n ?.filter((ds) => ds.methods?.length || dataSourceService?.getFormMethod(ds.type).length).length,\n value: ActionType.DATA_SOURCE,\n },\n ],\n };\n return { ...defaultActionTypeConfig, ...props.config.actionTypeConfig };\n});\n\n// 联动组件配置\nconst targetCompConfig = computed(() => {\n const defaultTargetCompConfig = {\n name: 'to',\n text: '联动组件',\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 type: 'select',\n display: (mForm: FormState, { model }: { model: Record<any, any> }) => model.actionType === ActionType.COMP,\n options: (mForm: FormState, { model }: any) => {\n const node = editorService?.getNodeById(model.to);\n if (!node?.type) return [];\n\n return eventsService?.getMethod(node.type).map((option: 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: CodeSelectColConfig = {\n type: 'code-select-col',\n text: '代码块',\n name: 'codeId',\n disabled: () => !codeBlockService?.getEditStatus(),\n display: (mForm, { model }) => model.actionType === ActionType.CODE,\n };\n return { ...defaultCodeActionConfig, ...props.config.codeActionConfig };\n});\n\n// 数据源联动配置\nconst dataSourceActionConfig = computed(() => {\n const defaultDataSourceActionConfig: DataSourceMethodSelectConfig = {\n type: 'data-source-method-select',\n text: '数据源方法',\n name: 'dataSourceMethod',\n display: (mForm, { model }) => model.actionType === ActionType.DATA_SOURCE,\n };\n return { ...defaultDataSourceActionConfig, ...props.config.dataSourceActionConfig };\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 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 = editorService?.getNodeById(model.to);\n if (!node?.type) return [];\n\n return 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 expandAll: true,\n enableToggleMode: false,\n titlePrefix: '动作',\n items: [\n actionTypeConfig.value,\n targetCompConfig.value,\n compActionConfig.value,\n codeActionConfig.value,\n dataSourceActionConfig.value,\n ],\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","<template>\n <div class=\"m-fields-key-value\">\n <div v-if=\"!showCode\">\n <div class=\"m-fields-key-value-item\" v-for=\"(item, index) in records\" :key=\"index\">\n <TMagicInput\n placeholder=\"key\"\n v-model=\"records[index][0]\"\n :disabled=\"disabled\"\n :size=\"size\"\n @change=\"keyChangeHandler\"\n ></TMagicInput>\n <span class=\"m-fileds-key-value-delimiter\">:</span>\n <TMagicInput\n placeholder=\"value\"\n v-model=\"records[index][1]\"\n :disabled=\"disabled\"\n :size=\"size\"\n @change=\"valueChangeHandler\"\n ></TMagicInput>\n\n <TMagicButton\n class=\"m-fileds-key-value-delete\"\n type=\"danger\"\n :size=\"size\"\n :disabled=\"disabled\"\n circle\n plain\n :icon=\"Delete\"\n @click=\"deleteHandler(index)\"\n ></TMagicButton>\n </div>\n\n <TMagicButton type=\"primary\" :size=\"size\" :disabled=\"disabled\" plain :icon=\"Plus\" @click=\"addHandler\"\n >添加</TMagicButton\n >\n </div>\n\n <MagicCodeEditor\n v-if=\"config.advanced && showCode\"\n height=\"200px\"\n :init-values=\"model[name]\"\n language=\"json\"\n :options=\"{\n readOnly: disabled,\n }\"\n :parse=\"true\"\n @save=\"save\"\n ></MagicCodeEditor>\n\n <TMagicButton\n v-if=\"config.advanced\"\n size=\"default\"\n :disabled=\"disabled\"\n text\n :icon=\"CodeIcon\"\n @click=\"showCode = !showCode\"\n ></TMagicButton>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watchEffect } from 'vue';\nimport { Delete, Plus } from '@element-plus/icons-vue';\n\nimport { TMagicButton, TMagicInput } from '@tmagic/design';\nimport type { FieldProps } from '@tmagic/form';\n\nimport CodeIcon from '@editor/icons/CodeIcon.vue';\nimport MagicCodeEditor from '@editor/layouts/CodeEditor.vue';\n\ndefineOptions({\n name: 'MEditorKeyValue',\n});\n\nconst props = withDefaults(\n defineProps<\n FieldProps<{\n type: 'key-value';\n name: string;\n text: string;\n advanced?: boolean;\n }>\n >(),\n {\n disabled: false,\n },\n);\n\nconst emit = defineEmits<(e: 'change', value: Record<string, any>) => void>();\n\nconst records = ref<[string, string][]>([]);\nconst showCode = ref(false);\n\nwatchEffect(() => {\n const initValues: [string, any][] = Object.entries(props.model[props.name] || {});\n\n for (const [, value] of initValues) {\n if (typeof value !== 'string') {\n showCode.value = true;\n break;\n }\n }\n\n records.value = initValues;\n});\n\nconst getValue = () => {\n const record: Record<string, string> = {};\n records.value.forEach(([key, value]) => {\n if (key) {\n record[key] = value;\n }\n });\n return record;\n};\n\nconst keyChangeHandler = () => {\n emit('change', getValue());\n};\n\nconst valueChangeHandler = () => {\n emit('change', getValue());\n};\n\nconst addHandler = () => {\n records.value.push(['', '']);\n};\n\nconst deleteHandler = (index: number) => {\n records.value.splice(index, 1);\n emit('change', getValue());\n};\n\nconst save = (v: string | any) => {\n emit('change', v);\n};\n</script>\n","<template>\n <div class=\"m-fields-page-fragment-select\">\n <div class=\"page-fragment-select-container\">\n <!-- 页面片下拉框 -->\n <m-form-container\n class=\"select\"\n :config=\"selectConfig\"\n :model=\"model\"\n :size=\"size\"\n @change=\"changeHandler\"\n ></m-form-container>\n <!-- 编辑按钮 -->\n <Icon v-if=\"model[name]\" class=\"icon\" :icon=\"Edit\" @click=\"editPageFragment(model[name])\"></Icon>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue';\nimport { Edit } from '@element-plus/icons-vue';\n\nimport { FieldProps } from '@tmagic/form';\nimport { Id, NodeType } from '@tmagic/schema';\n\nimport Icon from '@editor/components/Icon.vue';\nimport type { PageFragmentSelectConfig, Services } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorPageFragmentSelect',\n});\n\nconst services = inject<Services>('services');\nconst emit = defineEmits(['change']);\n\nconst props = withDefaults(defineProps<FieldProps<PageFragmentSelectConfig>>(), {\n disabled: false,\n});\nconst pageList = computed(() =>\n services?.editorService.get('root')?.items.filter((item) => item.type === NodeType.PAGE_FRAGMENT),\n);\n\nconst selectConfig = {\n type: 'select',\n name: props.name,\n options: () => {\n if (pageList.value) {\n return pageList.value.map((item) => ({\n text: `${item.devconfig?.tabName || item.title || item.name}(${item.id})`,\n label: `${item.devconfig?.tabName || item.title || item.name}(${item.id})`,\n value: item.id,\n }));\n }\n return [];\n },\n};\nconst changeHandler = async () => {\n emit('change', props.model[props.name]);\n};\n\nconst editPageFragment = (id: Id) => {\n services?.editorService.select(id);\n};\n</script>\n","<template>\n <div class=\"m-fields-ui-select\" v-if=\"uiSelectMode\" @click=\"cancelHandler\">\n <TMagicButton type=\"danger\" :icon=\"Delete\" :disabled=\"disabled\" :size=\"size\" text style=\"padding: 0\"\n >取消</TMagicButton\n >\n </div>\n <div class=\"m-fields-ui-select\" v-else style=\"display: flex\">\n <template v-if=\"val\">\n <TMagicTooltip content=\"清除\" placement=\"top\">\n <TMagicButton\n style=\"padding: 0\"\n type=\"danger\"\n :icon=\"Close\"\n :disabled=\"disabled\"\n :size=\"size\"\n text\n @click.stop=\"deleteHandler\"\n ></TMagicButton>\n </TMagicTooltip>\n\n <TMagicTooltip content=\"点击选中组件\" placement=\"top\">\n <TMagicButton\n text\n style=\"padding: 0; margin: 0\"\n :disabled=\"disabled\"\n :size=\"size\"\n @click=\"selectNode(val)\"\n @mouseenter=\"highlight(val)\"\n @mouseleave=\"unhightlight\"\n >{{ `${toName}_${val}` }}</TMagicButton\n >\n </TMagicTooltip>\n </template>\n\n <TMagicTooltip v-else content=\"点击此处选择\" placement=\"top\">\n <TMagicButton text style=\"padding: 0; margin: 0\" :disabled=\"disabled\" :size=\"size\" @click=\"startSelect\"\n >点击此处选择</TMagicButton\n >\n </TMagicTooltip>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, ref } from 'vue';\nimport { Close, Delete } from '@element-plus/icons-vue';\nimport { throttle } from 'lodash-es';\n\nimport { TMagicButton, TMagicTooltip } from '@tmagic/design';\nimport type { FieldProps, FormState } from '@tmagic/form';\nimport type { Id } from '@tmagic/schema';\n\nimport { Services, UI_SELECT_MODE_EVENT_NAME } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorUISelect',\n});\n\nconst props = defineProps<FieldProps<any>>();\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_MODE_EVENT_NAME, 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_MODE_EVENT_NAME, 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\nconst selectNode = async (id: Id) => {\n await services?.editorService.select(id);\n services?.editorService.get('stage')?.select(id);\n};\n\nconst highlight = throttle((id: Id) => {\n services?.editorService.highlight(id);\n services?.editorService.get('stage')?.highlight(id);\n}, 150);\n\nconst unhightlight = () => {\n services?.editorService.set('highlightNode', null);\n services?.editorService.get('stage')?.clearHighlight();\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","import { onBeforeUnmount, onMounted, type Ref, ref } from 'vue';\nimport Gesto, { type OnDrag } from 'gesto';\n\nexport const useGetSo = (target: Ref<HTMLElement | undefined>, emit: (evt: 'change', e: OnDrag<Gesto>) => void) => {\n let getso: Gesto;\n const isDraging = ref(false);\n\n onMounted(() => {\n if (!target.value) return;\n getso = new Gesto(target.value, {\n container: window,\n pinchOutside: true,\n })\n .on('drag', (e) => {\n if (!target.value) return;\n\n emit('change', e);\n })\n .on('dragStart', () => {\n isDraging.value = true;\n })\n .on('dragEnd', () => {\n isDraging.value = false;\n });\n });\n\n onBeforeUnmount(() => {\n getso?.unset();\n isDraging.value = false;\n });\n\n return {\n isDraging,\n };\n};\n","<template>\n <span ref=\"target\" class=\"m-editor-resizer\" :class=\"{ 'm-editor-resizer-draging': isDraging }\">\n <slot></slot>\n </span>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ref } from 'vue';\nimport type { OnDrag } from 'gesto';\n\nimport { useGetSo } from '@editor/hooks/use-getso';\n\ndefineOptions({\n name: 'MEditorResizer',\n});\n\nconst emit = defineEmits<{\n change: [e: OnDrag];\n}>();\n\nconst target = ref<HTMLSpanElement>();\nconst { isDraging } = useGetSo(target, emit);\n</script>\n","<template>\n <div ref=\"el\" class=\"m-editor-layout\" :style=\"`min-width: ${props.minCenter + props.minLeft + props.minRight}px`\">\n <template v-if=\"hasLeft && $slots.left\">\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 && $slots.right\">\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>\nimport { computed, onBeforeUnmount, onMounted, ref } from 'vue';\nimport { OnDrag } from 'gesto';\n\nimport Resizer from './Resizer.vue';\n\ndefineOptions({\n name: 'MEditorLayout',\n});\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, l = 0, r = 0) => {\n let right = r > 0 ? r : 0;\n let left = l > 0 ? l : 0;\n let center = clientWidth - left - right;\n\n if (center < props.minCenter) {\n center = props.minCenter;\n if (right > center + props.minRight) {\n right = clientWidth - left - center;\n } else {\n right = props.minRight;\n left = clientWidth - right - center;\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\nonBeforeUnmount(() => {\n resizerObserver.disconnect();\n});\n\nconst center = ref(0);\n\nconst changeLeft = ({ deltaX }: OnDrag) => {\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 }: OnDrag) => {\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, 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\ndefineExpose({\n updateWidth() {\n const columnWidth = getCenterWidth(el.value?.clientWidth || clientWidth, props.left, props.right);\n\n emit('change', {\n left: columnWidth.left,\n center: center.value,\n right: columnWidth.right,\n });\n },\n});\n</script>\n","<template>\n <div\n v-if=\"display\"\n class=\"menu-item\"\n :class=\"`${data.type} ${data.className || ''}`\"\n @click=\"clickHandler(data, $event)\"\n @mousedown=\"mousedownHandler(data, $event)\"\n @mouseup=\"mouseupHandler(data, $event)\"\n >\n <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\" :title=\"data.text\"\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>\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\ndefineOptions({\n name: 'MEditorToolButton',\n});\n\nconst props = withDefaults(\n defineProps<{\n data?: MenuButton | MenuComponent;\n eventType?: 'mousedown' | 'mouseup' | 'click';\n }>(),\n {\n data: () => ({\n type: 'text',\n display: false,\n }),\n eventType: 'click',\n },\n);\nconst services = inject<Services>('services');\n\nconst disabled = computed(() => {\n if (typeof props.data === 'string') return false;\n if (props.data.type === 'component') return false;\n if (typeof props.data.disabled === 'function') {\n return props.data.disabled(services);\n }\n return props.data.disabled;\n});\n\nconst display = computed(() => {\n if (!props.data) return false;\n if (typeof props.data === 'string') return true;\n if (typeof props.data.display === 'function') {\n return props.data.display(services);\n }\n return props.data.display ?? true;\n});\n\nconst buttonHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (disabled.value) return;\n if (typeof (item as MenuButton).handler === 'function' && services) {\n (item as MenuButton).handler?.(services, event);\n }\n};\n\nconst dropdownHandler = (command: any) => {\n if (command.item.handler) {\n command.item.handler(services);\n }\n};\n\nconst clickHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'click') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n\nconst mousedownHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'mousedown') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n\nconst mouseupHandler = (item: MenuButton | MenuComponent, event: MouseEvent) => {\n if (props.eventType !== 'mouseup') return;\n if (item.type === 'button') {\n buttonHandler(item, event);\n }\n};\n</script>\n","<template>\n <div\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</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, toRaw } from 'vue';\nimport { 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\ndefineOptions({\n name: 'MEditorPageBarAddButton',\n});\n\nconst props = defineProps<{\n type: NodeType.PAGE | NodeType.PAGE_FRAGMENT;\n}>();\n\nconst services = inject<Services>('services');\nconst uiService = services?.uiService;\nconst editorService = services?.editorService;\n\nconst showAddPageButton = computed(() => uiService?.get('showAddPageButton'));\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: props.type,\n name: generatePageNameByApp(root, props.type),\n items: [],\n };\n editorService.add(pageConfig);\n};\n</script>\n","<template>\n <div class=\"m-editor-page-bar\" ref=\"pageBar\">\n <slot name=\"prepend\"></slot>\n\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\n <div\n v-if=\"(type === NodeType.PAGE && pageLength) || (type === NodeType.PAGE_FRAGMENT && pageFragmentLength)\"\n class=\"m-editor-page-bar-items\"\n ref=\"itemsContainer\"\n :style=\"`width: ${itemsContainerWidth}px`\"\n >\n <slot></slot>\n </div>\n\n <div v-if=\"canScroll\" class=\"m-editor-page-bar-item m-editor-page-bar-item-icon\" @click=\"scroll('right')\">\n <Icon :icon=\"ArrowRightBold\"></Icon>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport {\n computed,\n type ComputedRef,\n inject,\n nextTick,\n onBeforeUnmount,\n onMounted,\n ref,\n watch,\n type WatchStopHandle,\n} from 'vue';\nimport { ArrowLeftBold, ArrowRightBold } 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';\n\ndefineOptions({\n name: 'MEditorPageBarScrollContainer',\n});\n\nconst props = defineProps<{\n type: NodeType.PAGE | NodeType.PAGE_FRAGMENT;\n}>();\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\nonBeforeUnmount(() => {\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') || 0);\nconst pageFragmentLength = computed(() => editorService?.get('pageFragmentLength') || 0);\n\nconst crateWatchLength = (length: ComputedRef<number>) =>\n watch(\n length,\n (length = 0, preLength = 0) => {\n setTimeout(() => {\n setCanScroll();\n if (length < preLength) {\n scroll('start');\n } else {\n scroll('end');\n }\n });\n },\n {\n immediate: true,\n },\n );\n\nlet unWatchPageLength: WatchStopHandle | null;\nlet unWatchPageFragmentLength: WatchStopHandle | null;\n\nwatch(\n () => props.type,\n (type) => {\n if (type === NodeType.PAGE) {\n unWatchPageFragmentLength?.();\n unWatchPageFragmentLength = null;\n unWatchPageLength = crateWatchLength(pageLength);\n } else {\n unWatchPageLength?.();\n unWatchPageLength = null;\n unWatchPageFragmentLength = crateWatchLength(pageFragmentLength);\n }\n },\n {\n immediate: true,\n },\n);\n</script>\n","<template>\n <TMagicButton\n v-for=\"item in data\"\n class=\"m-editor-page-bar-switch-type-button\"\n size=\"small\"\n :key=\"item.type\"\n text\n :class=\"{ active: modelValue === item.type }\"\n :type=\"modelValue === item.type ? 'primary' : ''\"\n @click=\"clickHandler(item.type)\"\n >{{ item.text }}</TMagicButton\n >\n</template>\n\n<script setup lang=\"ts\">\nimport { TMagicButton } from '@tmagic/design';\nimport { NodeType } from '@tmagic/schema';\n\ndefineOptions({\n name: 'MEditorPageBarSwitchTypeButton',\n});\n\ndefineProps<{\n modelValue: NodeType.PAGE | NodeType.PAGE_FRAGMENT;\n}>();\n\nconst data: { type: NodeType.PAGE | NodeType.PAGE_FRAGMENT; text: string }[] = [\n {\n type: NodeType.PAGE,\n text: '页面',\n },\n {\n type: NodeType.PAGE_FRAGMENT,\n text: '页面片',\n },\n];\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: NodeType.PAGE | NodeType.PAGE_FRAGMENT];\n}>();\n\nconst clickHandler = (value: NodeType.PAGE | NodeType.PAGE_FRAGMENT) => {\n emit('update:modelValue', value);\n};\n</script>\n","<template>\n <div class=\"m-editor-page-bar-tabs\">\n <SwitchTypeButton v-if=\"!disabledPageFragment\" v-model=\"active\" />\n\n <PageBarScrollContainer :type=\"active\">\n <template #prepend>\n <AddButton :type=\"active\"></AddButton>\n </template>\n\n <div\n v-for=\"item in list\"\n class=\"m-editor-page-bar-item\"\n :key=\"item.id\"\n :class=\"{ active: page?.id === item.id }\"\n @click=\"switchPage(item.id)\"\n >\n <div class=\"m-editor-page-bar-title\">\n <slot name=\"page-bar-title\" :page=\"item\">\n <span :title=\"item.name\">{{ item.name || item.id }}</span>\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 </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, ref, watch } from 'vue';\nimport { CaretBottom, Delete, DocumentCopy } from '@element-plus/icons-vue';\n\nimport { TMagicIcon, TMagicPopover } from '@tmagic/design';\nimport { Id, type MPage, type MPageFragment, NodeType } from '@tmagic/schema';\nimport { isPage, isPageFragment } from '@tmagic/utils';\n\nimport ToolButton from '@editor/components/ToolButton.vue';\nimport type { Services } from '@editor/type';\nimport { getPageFragmentList, getPageList } from '@editor/utils';\n\nimport AddButton from './AddButton.vue';\nimport PageBarScrollContainer from './PageBarScrollContainer.vue';\nimport SwitchTypeButton from './SwitchTypeButton.vue';\n\ndefineOptions({\n name: 'MEditorPageBar',\n});\n\ndefineProps<{\n disabledPageFragment: boolean;\n}>();\n\nconst active = ref<NodeType.PAGE | NodeType.PAGE_FRAGMENT>(NodeType.PAGE);\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\n\nconst root = computed(() => editorService?.get('root'));\nconst page = computed(() => editorService?.get('page'));\nconst pageList = computed(() => getPageList(root.value));\nconst pageFragmentList = computed(() => getPageFragmentList(root.value));\n\nconst list = computed(() => (active.value === NodeType.PAGE ? pageList.value : pageFragmentList.value));\n\nconst activePage = ref<Id>('');\nconst activePageFragment = ref<Id>('');\n\nwatch(\n page,\n (page) => {\n if (!page) {\n if (active.value === NodeType.PAGE) {\n activePage.value = '';\n }\n if (active.value === NodeType.PAGE_FRAGMENT) {\n activePageFragment.value = '';\n }\n return;\n }\n\n if (isPage(page)) {\n activePage.value = page?.id;\n if (active.value !== NodeType.PAGE) {\n active.value = NodeType.PAGE;\n }\n } else if (isPageFragment(page)) {\n activePageFragment.value = page?.id;\n if (active.value !== NodeType.PAGE_FRAGMENT) {\n active.value = NodeType.PAGE_FRAGMENT;\n }\n }\n },\n {\n immediate: true,\n },\n);\n\nwatch(active, (active) => {\n if (active === NodeType.PAGE) {\n if (!activePage.value) {\n editorService?.selectRoot();\n return;\n }\n switchPage(activePage.value);\n return;\n }\n\n if (active === NodeType.PAGE_FRAGMENT) {\n if (!activePageFragment.value) {\n editorService?.selectRoot();\n return;\n }\n switchPage(activePageFragment.value);\n }\n});\n\nconst switchPage = (id: Id) => {\n editorService?.select(id);\n};\n\nconst copy = (node: MPage | MPageFragment) => {\n node && editorService?.copy(node);\n editorService?.paste({\n left: 0,\n top: 0,\n });\n};\n\nconst remove = (node: MPage | MPageFragment) => {\n editorService?.remove(node);\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(NodeType.PAGE)\">\n <div>\n <MIcon :icon=\"Plus\"></MIcon>\n </div>\n <p>新增页面</p>\n </div>\n\n <div v-if=\"!disabledPageFragment\" class=\"m-editor-empty-button\" @click=\"clickHandler(NodeType.PAGE_FRAGMENT)\">\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>\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\ndefineOptions({\n name: 'MEditorAddPageBox',\n});\n\ndefineProps<{\n disabledPageFragment: boolean;\n}>();\n\nconst services = inject<Services>('services');\n\nconst clickHandler = (type: NodeType.PAGE | NodeType.PAGE_FRAGMENT) => {\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,\n name: generatePageNameByApp(root, type),\n items: [],\n });\n};\n</script>\n","<template>\n <div class=\"m-editor\" ref=\"content\" style=\"min-width: 180px\">\n <slot name=\"header\"></slot>\n\n <slot name=\"nav\"></slot>\n\n <slot name=\"content-before\"></slot>\n\n <slot name=\"src-code\" v-if=\"showSrc\">\n <CodeEditor class=\"m-editor-content\" :init-values=\"root\" :options=\"codeOptions\" @save=\"saveCode\"></CodeEditor>\n </slot>\n\n <SplitView\n v-loading=\"stageLoading\"\n element-loading-text=\"Runtime 加载中...\"\n v-else\n ref=\"splitView\"\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 :min-center=\"100\"\n @change=\"columnWidthChange\"\n >\n <template #left>\n <slot name=\"sidebar\"></slot>\n </template>\n\n <template #center>\n <slot v-if=\"page\" name=\"workspace\"></slot>\n <slot v-else name=\"empty\">\n <AddPageBox :disabled-page-fragment=\"disabledPageFragment\"></AddPageBox>\n </slot>\n\n <slot name=\"page-bar\">\n <PageBar :disabled-page-fragment=\"disabledPageFragment\">\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 </slot>\n </template>\n\n <template v-if=\"page\" #right>\n <TMagicScrollbar>\n <slot name=\"props-panel\"></slot>\n </TMagicScrollbar>\n </template>\n </SplitView>\n\n <slot name=\"content-after\"></slot>\n <slot name=\"footer\"></slot>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, ref, watch } from 'vue';\n\nimport { TMagicScrollbar } from '@tmagic/design';\n\nimport SplitView from '@editor/components/SplitView.vue';\nimport type { FrameworkSlots, GetColumnWidth, Services } from '@editor/type';\nimport { getConfig } from '@editor/utils/config';\n\nimport PageBar from './page-bar/PageBar.vue';\nimport AddPageBox from './AddPageBox.vue';\nimport CodeEditor from './CodeEditor.vue';\n\ndefineSlots<FrameworkSlots>();\n\ndefineOptions({\n name: 'MEditorFramework',\n});\n\ndefineProps<{\n disabledPageFragment: boolean;\n}>();\n\nconst DEFAULT_LEFT_COLUMN_WIDTH = 310;\nconst DEFAULT_RIGHT_COLUMN_WIDTH = 480;\n\nconst codeOptions = inject('codeOptions', {});\nconst { editorService, uiService } = inject<Services>('services') || {};\n\nconst content = ref<HTMLDivElement>();\nconst splitView = ref<InstanceType<typeof SplitView>>();\n\nconst root = computed(() => editorService?.get('root'));\nconst page = computed(() => editorService?.get('page'));\n\nconst pageLength = computed(() => editorService?.get('pageLength') || 0);\nconst stageLoading = computed(() => editorService?.get('stageLoading') || false);\nconst showSrc = computed(() => uiService?.get('showSrc'));\n\nconst LEFT_COLUMN_WIDTH_STORAGE_KEY = '$MagicEditorLeftColumnWidthData';\nconst RIGHT_COLUMN_WIDTH_STORAGE_KEY = '$MagicEditorRightColumnWidthData';\n\nconst getLeftColumnWidthCacheData = () =>\n Number(globalThis.localStorage.getItem(LEFT_COLUMN_WIDTH_STORAGE_KEY)) || DEFAULT_LEFT_COLUMN_WIDTH;\n\nconst leftColumnWidthCacheData = getLeftColumnWidthCacheData();\nconst RightColumnWidthCacheData =\n Number(globalThis.localStorage.getItem(RIGHT_COLUMN_WIDTH_STORAGE_KEY)) || DEFAULT_RIGHT_COLUMN_WIDTH;\n\nconst columnWidth = ref<Partial<GetColumnWidth>>({\n left: leftColumnWidthCacheData,\n center: 0,\n right: RightColumnWidthCacheData,\n});\n\nwatch(\n [pageLength, splitView],\n () => {\n splitView.value?.updateWidth();\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\nwatch(\n () => uiService?.get('hideSlideBar'),\n (hideSlideBar) => {\n columnWidth.value.left = hideSlideBar ? 0 : getLeftColumnWidthCacheData();\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 const parseDSL = getConfig('parseDSL');\n editorService?.set('root', parseDSL(value));\n } catch (e: any) {\n console.error(e);\n }\n};\n</script>\n","<template>\n <div class=\"m-editor-nav-menu\" :style=\"{ height: `${height}px` }\">\n <div v-for=\"key in keys\" :class=\"`menu-${key}`\" :key=\"key\" :style=\"`width: ${columnWidth?.[key]}px`\">\n <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>\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\ndefineOptions({\n name: 'MEditorNavMenu',\n});\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","<template>\n <div class=\"m-editor-props-panel\" v-show=\"nodes.length === 1\">\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 :extend-state=\"extendState\"\n @change=\"submit\"\n @error=\"errorHandler\"\n ></MForm>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, getCurrentInstance, inject, onBeforeUnmount, onMounted, ref, watchEffect } from 'vue';\n\nimport type { FormState, FormValue } from '@tmagic/form';\nimport { MForm } from '@tmagic/form';\n\nimport type { PropsPanelSlots, Services } from '@editor/type';\n\ndefineSlots<PropsPanelSlots>();\n\ndefineOptions({\n name: 'MEditorPropsPanel',\n});\n\ndefineProps<{\n extendState?: (state: FormState) => Record<string, any> | Promise<Record<string, any>>;\n}>();\n\nconst emit = defineEmits(['mounted', 'submit-error', 'form-error']);\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 nodes = computed(() => services?.editorService.get('nodes') || []);\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\nonBeforeUnmount(() => {\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 emit('submit-error', e);\n }\n};\n\nconst errorHandler = (e: any) => {\n emit('form-error', e);\n};\n\ndefineExpose({ configForm, submit });\n</script>\n","import { computed, ComputedRef, inject, nextTick, ref, watch } from 'vue';\nimport Moveable from 'moveable';\n\nimport { type Services } from '@editor/type';\n\nexport const useFloatBox = (slideKeys: ComputedRef<string[]>) => {\n const services = inject<Services>('services');\n const moveable = ref<Moveable>();\n const floatBox = ref<HTMLElement[]>();\n\n const floatBoxStates = computed(() => services?.uiService.get('floatBox'));\n\n const curKey = ref('');\n const target = computed(() =>\n floatBox.value\n ? floatBox.value.find((item) => item.classList.contains(`m-editor-float-box-${curKey.value}`))\n : undefined,\n );\n\n const showingBoxKeys = computed(() =>\n [...(floatBoxStates.value?.keys() ?? [])].filter((key) => floatBoxStates.value?.get(key)?.status),\n );\n\n const isDraging = ref(false);\n\n const showFloatBox = async (key: string) => {\n const curBoxStatus = floatBoxStates.value?.get(curKey.value)?.status;\n if (curKey.value === key && curBoxStatus) return;\n curKey.value = key;\n setSlideState(key, {\n zIndex: getMaxZIndex() + 1,\n status: true,\n });\n\n await nextTick();\n if (moveable.value) {\n moveable.value.target = target.value;\n moveable.value.dragTarget = getDragTarget();\n moveable.value.updateRect();\n } else {\n initFloatBoxMoveable();\n }\n };\n\n const setSlideState = (key: string, data: Record<string, string | number | boolean>) => {\n const slideState = floatBoxStates.value?.get(key);\n if (!slideState) return;\n floatBoxStates.value?.set(key, {\n ...slideState,\n ...data,\n });\n };\n\n const getDragTarget = (key?: string) => `.m-editor-float-box-header-${key ?? curKey.value}`;\n\n const closeFloatBox = (key: string) => {\n setSlideState(key, {\n status: false,\n });\n\n // 如果只有一个,关掉后需要销毁moveable实例\n if (!floatBoxStates.value?.values) return;\n const keys = [...floatBoxStates.value?.keys()];\n const values = [...floatBoxStates.value?.values()];\n const lastFloatBoxLen = values.filter((state) => state.status).length;\n if (lastFloatBoxLen === 0) {\n moveable.value?.destroy();\n moveable.value = undefined;\n return;\n }\n\n // 如果关掉的 box 是最大的,需要选中下面的一层\n if (key === curKey.value) {\n // 查找显示的最大 zIndex 对应的 index\n const zIndexList = values.filter((item) => item.status).map((item) => item.zIndex);\n const maxZIndex = Math.max(...zIndexList);\n const key = keys.find((key) => floatBoxStates.value?.get(key)?.zIndex === maxZIndex);\n if (!key) return;\n showFloatBox(key);\n }\n };\n\n const getMaxZIndex = () => {\n if (!floatBoxStates.value?.values()) return 0;\n const list = [...floatBoxStates.value?.values()].map((state) => state.zIndex);\n return Math.max(...list) ?? 0;\n };\n\n const initFloatBoxMoveable = () => {\n const dragTarget = getDragTarget();\n moveable.value = new Moveable(document.body, {\n target: target.value,\n draggable: true,\n resizable: true,\n edge: true,\n keepRatio: false,\n origin: false,\n snappable: true,\n dragTarget,\n dragTargetSelf: false,\n linePadding: 10,\n controlPadding: 10,\n elementGuidelines: [...(floatBoxStates.value?.keys() ?? [])].map((key) => getDragTarget(key)),\n bounds: { left: 0, top: 0, right: 0, bottom: 0, position: 'css' },\n });\n moveable.value.on('drag', (e) => {\n e.target.style.transform = e.transform;\n });\n moveable.value.on('resize', (e) => {\n e.target.style.width = `${e.width}px`;\n e.target.style.height = `${e.height}px`;\n e.target.style.transform = e.drag.transform;\n });\n };\n\n const dragendHandler = (key: string, e: DragEvent) => {\n setSlideState(key, {\n left: e.clientX,\n top: e.clientY,\n });\n showFloatBox(key);\n isDraging.value = false;\n };\n\n document.body.addEventListener('dragover', (e: DragEvent) => {\n if (!isDraging.value) return;\n e.preventDefault();\n });\n\n const dragstartHandler = () => (isDraging.value = true);\n\n // 监听 slide 长度变化,更新 ui serice map\n watch(\n () => slideKeys.value,\n () => {\n services?.uiService.setFloatBox(slideKeys.value);\n },\n {\n deep: true,\n immediate: true,\n },\n );\n\n return {\n showFloatBox,\n closeFloatBox,\n dragstartHandler,\n dragendHandler,\n floatBoxStates,\n floatBox,\n showingBoxKeys,\n };\n};\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\ndefineOptions({\n name: 'MEditorSearchInput',\n});\n\nconst emit = defineEmits(['search']);\n\nconst filterText = ref('');\n\nlet timer: NodeJS.Timeout | null = null;\nconst filterTextChangeHandler = () => {\n timer && clearTimeout(timer);\n timer = setTimeout(() => {\n emit('search', filterText.value);\n }, 300);\n};\n</script>\n","import type { Id } from '@tmagic/schema';\nimport { getKeys } from '@tmagic/utils';\n\nimport type { LayerNodeStatus } from '@editor/type';\n\nexport const updateStatus = (nodeStatusMap: Map<Id, LayerNodeStatus>, id: Id, status: Partial<LayerNodeStatus>) => {\n const nodeStatus = nodeStatusMap.get(id);\n\n if (!nodeStatus) return;\n getKeys(status).forEach((key) => {\n if (nodeStatus[key] !== undefined && status[key] !== undefined) {\n nodeStatus[key] = Boolean(status[key]);\n }\n });\n};\n","<template>\n <div\n v-show=\"visible\"\n class=\"m-editor-tree-node\"\n :draggable=\"draggable\"\n :data-node-id=\"data.id\"\n :data-is-container=\"Array.isArray(data.items)\"\n @dragstart=\"handleDragStart\"\n @dragleave=\"handleDragLeave\"\n @dragend=\"handleDragEnd\"\n >\n <div\n class=\"tree-node\"\n :class=\"{ selected, expanded }\"\n :style=\"`padding-left: ${indent}px`\"\n @contextmenu=\"nodeContentmenuHandler\"\n @mouseenter=\"mouseenterHandler\"\n >\n <MIcon\n class=\"expand-icon\"\n :style=\"hasChildren ? '' : 'color: transparent; cursor: default'\"\n :icon=\"expanded ? ArrowDown : ArrowRight\"\n @click=\"expandHandler\"\n ></MIcon>\n\n <div class=\"tree-node-content\" @click=\"nodeClickHandler\">\n <slot name=\"tree-node-content\" :data=\"data\">\n <div class=\"tree-node-label\">\n <slot name=\"tree-node-label\" :data=\"data\">{{ `${data.name} (${data.id})` }}</slot>\n </div>\n <div class=\"tree-node-tool\">\n <slot name=\"tree-node-tool\" :data=\"data\"></slot>\n </div>\n </slot>\n </div>\n </div>\n\n <div v-if=\"hasChildren && expanded\" class=\"m-editor-tree-node-children\">\n <TreeNode\n v-for=\"item in data.items\"\n :key=\"item.id\"\n :data=\"item\"\n :node-status-map=\"nodeStatusMap\"\n :indent=\"indent + 11\"\n >\n <template #tree-node-content=\"{ data: nodeData }\">\n <slot name=\"tree-node-content\" :data=\"nodeData\"> </slot>\n </template>\n <template #tree-node-label=\"{ data: nodeData }\">\n <slot name=\"tree-node-label\" :data=\"nodeData\"> </slot>\n </template>\n <template #tree-node-tool=\"{ data: nodeData }\">\n <slot name=\"tree-node-tool\" :data=\"nodeData\"> </slot>\n </template>\n </TreeNode>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject } from 'vue';\nimport { ArrowDown, ArrowRight } from '@element-plus/icons-vue';\n\nimport type { Id } from '@tmagic/schema';\n\nimport MIcon from '@editor/components/Icon.vue';\nimport type { LayerNodeStatus, TreeNodeData } from '@editor/type';\nimport { updateStatus } from '@editor/utils/tree';\n\ndefineSlots<{\n 'tree-node-label'(props: { data: TreeNodeData }): any;\n 'tree-node-tool'(props: { data: TreeNodeData }): any;\n 'tree-node-content'(props: { data: TreeNodeData }): any;\n}>();\n\ndefineOptions({\n name: 'MEditorTreeNode',\n});\n\nconst emit = defineEmits<{\n 'node-dragstart': [event: DragEvent, data: TreeNodeData];\n 'node-dragleave': [event: DragEvent, data: TreeNodeData];\n 'node-dragend': [event: DragEvent, data: TreeNodeData];\n 'node-contextmenu': [event: MouseEvent, data: TreeNodeData];\n 'node-mouseenter': [event: MouseEvent, data: TreeNodeData];\n 'node-click': [event: MouseEvent, data: TreeNodeData];\n}>();\n\nconst treeEmit = inject<typeof emit>('treeEmit');\n\nconst props = withDefaults(\n defineProps<{\n data: TreeNodeData;\n nodeStatusMap: Map<Id, LayerNodeStatus>;\n indent?: number;\n }>(),\n {\n indent: 0,\n },\n);\n\nconst nodeStatus = computed(\n () =>\n props.nodeStatusMap?.get(props.data.id) || {\n selected: false,\n expand: false,\n visible: false,\n draggable: false,\n },\n);\n\nconst expanded = computed(() => nodeStatus.value.expand);\nconst selected = computed(() => nodeStatus.value.selected);\nconst visible = computed(() => nodeStatus.value.visible);\nconst draggable = computed(() => nodeStatus.value.draggable);\n\nconst hasChildren = computed(() => props.data.items?.some((item) => props.nodeStatusMap.get(item.id)?.visible));\n\nconst handleDragStart = (event: DragEvent) => {\n treeEmit?.('node-dragstart', event, props.data);\n};\n\nconst handleDragLeave = (event: DragEvent) => {\n treeEmit?.('node-dragleave', event, props.data);\n};\n\nconst handleDragEnd = (event: DragEvent) => {\n treeEmit?.('node-dragend', event, props.data);\n};\n\nconst nodeContentmenuHandler = (event: MouseEvent) => {\n treeEmit?.('node-contextmenu', event, props.data);\n};\n\nconst mouseenterHandler = (event: MouseEvent) => {\n treeEmit?.('node-mouseenter', event, props.data);\n};\n\nconst expandHandler = () => {\n updateStatus(props.nodeStatusMap, props.data.id, {\n expand: !expanded.value,\n });\n};\n\nconst nodeClickHandler = (event: MouseEvent) => {\n treeEmit?.('node-click', event, props.data);\n};\n</script>\n","<template>\n <div class=\"m-editor-tree\" @dragover=\"handleDragOver\">\n <template v-if=\"data?.length\">\n <TreeNode v-for=\"item in data\" :key=\"item.id\" :data=\"item\" :indent=\"indent\" :node-status-map=\"nodeStatusMap\">\n <template #tree-node-content=\"{ data: nodeData }\">\n <slot name=\"tree-node-content\" :data=\"nodeData\"> </slot>\n </template>\n\n <template #tree-node-label=\"{ data: nodeData }\">\n <slot name=\"tree-node-label\" :data=\"nodeData\"> </slot>\n </template>\n\n <template #tree-node-tool=\"{ data: nodeData }\">\n <slot name=\"tree-node-tool\" :data=\"nodeData\"> </slot>\n </template>\n </TreeNode>\n </template>\n <div v-else class=\"m-editor-tree-empty\">\n <p>{{ emptyText }}</p>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { provide } from 'vue';\n\nimport type { Id } from '@tmagic/schema';\n\nimport type { LayerNodeStatus, TreeNodeData } from '@editor/type';\n\nimport TreeNode from './TreeNode.vue';\n\ndefineSlots<{\n 'tree-node-content'(props: { data: TreeNodeData }): any;\n 'tree-node-label'(props: { data: TreeNodeData }): any;\n 'tree-node-tool'(props: { data: TreeNodeData }): any;\n}>();\n\ndefineOptions({\n name: 'MEditorTree',\n});\n\nconst emit = defineEmits<{\n 'node-dragover': [event: DragEvent];\n 'node-dragstart': [event: DragEvent, data: TreeNodeData];\n 'node-dragleave': [event: DragEvent, data: TreeNodeData];\n 'node-dragend': [event: DragEvent, data: TreeNodeData];\n 'node-contextmenu': [event: MouseEvent, data: TreeNodeData];\n 'node-mouseenter': [event: MouseEvent, data: TreeNodeData];\n 'node-click': [event: MouseEvent, data: TreeNodeData];\n}>();\n\nprovide('treeEmit', emit);\n\nwithDefaults(\n defineProps<{\n data: TreeNodeData[];\n nodeStatusMap: Map<Id, LayerNodeStatus>;\n indent?: number;\n emptyText?: string;\n }>(),\n {\n indent: 0,\n emptyText: '暂无数据',\n },\n);\n\nconst handleDragOver = (event: DragEvent) => {\n emit('node-dragover', event);\n};\n</script>\n","import { type Ref, ref } from 'vue';\n\nimport type { Id, MNode } from '@tmagic/schema';\n\nimport type { LayerNodeStatus, TreeNodeData } from '@editor/type';\nimport { traverseNode } from '@editor/utils';\nimport { updateStatus } from '@editor/utils/tree';\n\nexport const useFilter = (\n nodeData: Ref<TreeNodeData[]>,\n nodeStatusMap: Ref<Map<Id, LayerNodeStatus> | undefined>,\n filterNodeMethod: (value: string, data: MNode) => boolean,\n) => {\n // tree方法:对树节点进行筛选时执行的方法\n const filterIsMatch = (value: string | string[], data: MNode): boolean => {\n const string = !Array.isArray(value) ? [value] : value;\n\n if (!string.length) {\n return true;\n }\n\n return string.some((v) => filterNodeMethod(v, data));\n };\n\n const filter = (text: string | string[]) => {\n if (!nodeData.value.length) return;\n\n nodeData.value.forEach((node) => {\n traverseNode(node, (node: MNode, parents: MNode[]) => {\n if (!nodeStatusMap.value) return;\n\n const visible = filterIsMatch(text, node);\n if (visible && parents.length) {\n parents.forEach((parent) => {\n updateStatus(nodeStatusMap.value!, parent.id, {\n visible,\n expand: true,\n });\n });\n }\n\n updateStatus(nodeStatusMap.value, node.id, {\n visible,\n });\n });\n });\n };\n\n return {\n filterText: ref(''),\n filterTextChangeHandler(text: string | string[]) {\n filter(text);\n },\n };\n};\n","import { ComputedRef, ref, watch } from 'vue';\n\nimport type { Id, MNode } from '@tmagic/schema';\n\nimport { LayerNodeStatus, TreeNodeData } from '@editor/type';\nimport { traverseNode } from '@editor/utils';\n\nconst createPageNodeStatus = (nodeData: TreeNodeData[], initalLayerNodeStatus?: Map<Id, LayerNodeStatus>) => {\n const map = new Map<Id, LayerNodeStatus>();\n\n nodeData.forEach((node: MNode) =>\n traverseNode(node, (node) => {\n map.set(\n node.id,\n initalLayerNodeStatus?.get(node.id) || {\n visible: true,\n expand: false,\n selected: false,\n draggable: false,\n },\n );\n }),\n );\n\n return map;\n};\n\nexport const useNodeStatus = (nodeData: ComputedRef<TreeNodeData[]>) => {\n /** 所有页面的节点状态 */\n const nodeStatusMap = ref(new Map<Id, LayerNodeStatus>());\n\n // 切换页面或者新增页面,重新生成节点状态\n watch(\n nodeData,\n (nodeData) => {\n // 生成节点状态\n nodeStatusMap.value = createPageNodeStatus(nodeData, nodeStatusMap.value);\n },\n {\n immediate: true,\n deep: true,\n },\n );\n\n return {\n nodeStatusMap,\n };\n};\n","<template>\n <Tree :data=\"codeList\" :node-status-map=\"nodeStatusMap\" @node-click=\"clickHandler\">\n <template #tree-node-label=\"{ data }\">\n <div\n :class=\"{\n code: data.type === 'code',\n hook: data.type === 'key',\n disabled: data.type === 'key' || data.type === 'code',\n }\"\n >\n {{ data.name }} {{ data.key ? `(${data.key})` : '' }}\n </div>\n </template>\n\n <template #tree-node-tool=\"{ data }\">\n <TMagicTooltip v-if=\"data.type === 'code'\" effect=\"dark\" :content=\"editable ? '编辑' : '查看'\" placement=\"bottom\">\n <Icon :icon=\"editable ? Edit : View\" class=\"edit-icon\" @click.stop=\"editCode(`${data.key}`)\"></Icon>\n </TMagicTooltip>\n <TMagicTooltip v-if=\"data.type === 'code' && editable\" effect=\"dark\" content=\"删除\" placement=\"bottom\">\n <Icon :icon=\"Close\" class=\"edit-icon\" @click.stop=\"deleteCode(`${data.key}`)\"></Icon>\n </TMagicTooltip>\n <slot name=\"code-block-panel-tool\" :id=\"data.key\" :data=\"data\"></slot>\n </template>\n </Tree>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue';\nimport { Close, Edit, View } from '@element-plus/icons-vue';\n\nimport { DepTargetType } from '@tmagic/dep';\nimport { tMagicMessage, tMagicMessageBox, TMagicTooltip } from '@tmagic/design';\nimport type { Id, MNode } from '@tmagic/schema';\n\nimport Icon from '@editor/components/Icon.vue';\nimport Tree from '@editor/components/Tree.vue';\nimport { useFilter } from '@editor/hooks/use-filter';\nimport { useNodeStatus } from '@editor/hooks/use-node-status';\nimport { type CodeBlockListSlots, CodeDeleteErrorType, type Services, type TreeNodeData } from '@editor/type';\n\ndefineSlots<CodeBlockListSlots>();\n\ndefineOptions({\n name: 'MEditorCodeBlockList',\n});\n\nconst props = defineProps<{\n customError?: (id: Id, errorType: CodeDeleteErrorType) => any;\n}>();\n\nconst emit = defineEmits<{\n edit: [id: string];\n remove: [id: string];\n}>();\n\nconst services = inject<Services>('services');\nconst { codeBlockService, depService, editorService } = services || {};\n\n// 代码块列表\nconst codeList = computed<TreeNodeData[]>(() =>\n Object.values(depService?.getTargets(DepTargetType.CODE_BLOCK) || {}).map((target) => {\n // 组件节点\n const compNodes: TreeNodeData[] = Object.entries(target.deps).map(([id, dep]) => ({\n name: dep.name,\n type: 'node',\n id: `${target.id}_${id}`,\n key: id,\n items: dep.keys.map((key) => {\n const data: TreeNodeData = { name: `${key}`, id: `${target.id}_${id}_${key}`, type: 'key' };\n return data;\n }),\n }));\n\n const data: TreeNodeData = {\n id: target.id,\n key: target.id,\n name: target.name,\n type: 'code',\n codeBlockContent: codeBlockService?.getCodeContentById(target.id),\n items: compNodes,\n };\n\n return data;\n }),\n);\n\nconst filterNode = (value: string, data: MNode): boolean => {\n if (!value) {\n return true;\n }\n return `${data.name}${data.id}`.toLocaleLowerCase().includes(value.toLocaleLowerCase());\n};\n\nconst { nodeStatusMap } = useNodeStatus(codeList);\nconst { filterTextChangeHandler } = useFilter(codeList, nodeStatusMap, filterNode);\n\nconst editable = computed(() => codeBlockService?.getEditStatus());\n\n// 选中组件\nconst selectComp = (compId: Id) => {\n const stage = editorService?.get('stage');\n editorService?.select(compId);\n stage?.select(compId);\n};\n\nconst clickHandler = (event: MouseEvent, data: any) => {\n if (data.type === 'node') {\n selectComp(data.key);\n }\n};\n\n// 编辑代码块\nconst editCode = (id: string) => {\n emit('edit', id);\n};\n\nconst deleteCode = async (id: string) => {\n const currentCode = codeList.value.find((codeItem) => codeItem.id === id);\n const existBinds = Boolean(currentCode?.items?.length);\n const undeleteableList = codeBlockService?.getUndeletableList() || [];\n if (!existBinds && !undeleteableList.includes(id)) {\n await tMagicMessageBox.confirm('确定删除该代码块吗?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning',\n });\n\n // 无绑定关系,且不在不可删除列表中\n emit('remove', id);\n } else {\n if (typeof props.customError === 'function') {\n props.customError(id, existBinds ? CodeDeleteErrorType.BIND : CodeDeleteErrorType.UNDELETEABLE);\n } else {\n tMagicMessage.error('代码块删除失败');\n }\n }\n};\n\ndefineExpose({\n filter: filterTextChangeHandler,\n});\n</script>\n","<template>\n <TMagicScrollbar class=\"m-editor-code-block-list m-editor-layer-panel\">\n <slot name=\"code-block-panel-header\">\n <div class=\"search-wrapper\">\n <SearchInput @search=\"filterTextChangeHandler\"></SearchInput>\n <TMagicButton v-if=\"editable\" class=\"create-code-button\" type=\"primary\" size=\"small\" @click=\"createCodeBlock\"\n >新增</TMagicButton\n >\n <slot name=\"code-block-panel-search\"></slot>\n </div>\n </slot>\n\n <!-- 代码块列表 -->\n <CodeBlockList ref=\"codeBlockList\" :custom-error=\"customError\" @edit=\"editCode\" @remove=\"deleteCode\">\n <template #code-block-panel-tool=\"{ id, data }\">\n <slot name=\"code-block-panel-tool\" :id=\"id\" :data=\"data\"></slot>\n </template>\n </CodeBlockList>\n </TMagicScrollbar>\n\n <!-- 代码块编辑区 -->\n <CodeBlockEditor\n v-if=\"codeConfig\"\n ref=\"codeBlockEditor\"\n :disabled=\"!editable\"\n :content=\"codeConfig\"\n :slideType=\"slideType\"\n @submit=\"submitCodeBlockHandler\"\n ></CodeBlockEditor>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, ref } from 'vue';\n\nimport { TMagicButton, TMagicScrollbar } from '@tmagic/design';\nimport type { Id } from '@tmagic/schema';\n\nimport CodeBlockEditor from '@editor/components/CodeBlockEditor.vue';\nimport SearchInput from '@editor/components/SearchInput.vue';\nimport { useCodeBlockEdit } from '@editor/hooks/use-code-block-edit';\nimport type { CodeBlockListPanelSlots, CodeDeleteErrorType, Services, SlideType } from '@editor/type';\n\nimport CodeBlockList from './CodeBlockList.vue';\n\ndefineSlots<CodeBlockListPanelSlots>();\n\ndefineOptions({\n name: 'MEditorCodeBlockListPanel',\n});\n\ndefineProps<{\n customError?: (id: Id, errorType: CodeDeleteErrorType) => any;\n slideType?: SlideType;\n}>();\n\nconst { codeBlockService } = inject<Services>('services') || {};\n\nconst editable = computed(() => codeBlockService?.getEditStatus());\n\nconst { codeBlockEditor, codeConfig, editCode, deleteCode, createCodeBlock, submitCodeBlockHandler } =\n useCodeBlockEdit(codeBlockService);\n\nconst codeBlockList = ref<InstanceType<typeof CodeBlockList>>();\n\nconst filterTextChangeHandler = (val: string) => {\n codeBlockList.value?.filter(val);\n};\n</script>\n","<template>\n <component\n :is=\"slideType === 'box' ? MFormBox : MFormDrawer\"\n ref=\"fomDrawer\"\n label-width=\"80px\"\n :close-on-press-escape=\"false\"\n :title=\"title\"\n :width=\"size\"\n :config=\"dataSourceConfig\"\n :values=\"initValues\"\n :disabled=\"disabled\"\n @submit=\"submitHandler\"\n @error=\"errorHandler\"\n ></component>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, ref, watchEffect } from 'vue';\n\nimport { tMagicMessage } from '@tmagic/design';\nimport { FormConfig, MFormBox, MFormDrawer } from '@tmagic/form';\nimport { DataSourceSchema } from '@tmagic/schema';\n\nimport type { Services, SlideType } from '@editor/type';\n\ndefineOptions({\n name: 'MEditorDataSourceConfigPanel',\n});\n\nconst props = defineProps<{\n title?: string;\n values: any;\n disabled: boolean;\n slideType?: SlideType;\n}>();\n\nconst emit = defineEmits(['submit']);\n\nconst services = inject<Services>('services');\n\nconst size = computed(() => globalThis.document.body.clientWidth - (services?.uiService.get('columnWidth').left || 0));\n\nconst fomDrawer = ref<InstanceType<typeof MFormDrawer>>();\n\nconst initValues = ref<Partial<DataSourceSchema>>({});\nconst dataSourceConfig = ref<FormConfig>([]);\n\nwatchEffect(() => {\n initValues.value = props.values;\n dataSourceConfig.value = services?.dataSourceService.getFormConfig(initValues.value.type) || [];\n});\n\nconst submitHandler = (values: any) => {\n emit('submit', values);\n};\n\nconst errorHandler = (error: any) => {\n tMagicMessage.error(error.message);\n};\n\ndefineExpose({\n show() {\n fomDrawer.value?.show();\n },\n\n hide() {\n fomDrawer.value?.hide();\n },\n});\n</script>\n","<template>\n <Tree :data=\"list\" :node-status-map=\"nodeStatusMap\" @node-click=\"clickHandler\">\n <template #tree-node-label=\"{ data }\">\n <div\n :class=\"{\n ds: data.type === 'ds',\n hook: data.type === 'key',\n disabled: data.type === 'key' || data.type === 'ds',\n }\"\n >\n {{ data.name }} {{ data.key ? `(${data.key})` : '' }}\n </div>\n </template>\n <template #tree-node-tool=\"{ data }\">\n <TMagicTooltip v-if=\"data.type === 'ds'\" effect=\"dark\" :content=\"editable ? '编辑' : '查看'\" placement=\"bottom\">\n <Icon :icon=\"editable ? Edit : View\" class=\"edit-icon\" @click.stop=\"editHandler(`${data.key}`)\"></Icon>\n </TMagicTooltip>\n <TMagicTooltip v-if=\"data.type === 'ds' && editable\" effect=\"dark\" content=\"删除\" placement=\"bottom\">\n <Icon :icon=\"Close\" class=\"edit-icon\" @click.stop=\"removeHandler(`${data.key}`)\"></Icon>\n </TMagicTooltip>\n <slot name=\"data-source-panel-tool\" :data=\"data\"></slot>\n </template>\n </Tree>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue';\nimport { Close, Edit, View } from '@element-plus/icons-vue';\n\nimport { DepTargetType } from '@tmagic/dep';\nimport { tMagicMessageBox, TMagicTooltip } from '@tmagic/design';\nimport { DepData, Id, MNode } from '@tmagic/schema';\n\nimport Icon from '@editor/components/Icon.vue';\nimport Tree from '@editor/components/Tree.vue';\nimport { useFilter } from '@editor/hooks/use-filter';\nimport { useNodeStatus } from '@editor/hooks/use-node-status';\nimport type { DataSourceListSlots, Services } from '@editor/type';\n\ndefineSlots<DataSourceListSlots>();\n\ndefineOptions({\n name: 'MEditorDataSourceList',\n});\n\nconst emit = defineEmits<{\n edit: [id: string];\n remove: [id: string];\n}>();\n\nconst { depService, editorService, dataSourceService } = inject<Services>('services') || {};\n\nconst editable = computed(() => dataSourceService?.get('editable') ?? true);\n\nconst dataSources = computed(() => dataSourceService?.get('dataSources') || []);\n\nconst dsDep = computed(() => depService?.getTargets(DepTargetType.DATA_SOURCE) || {});\nconst dsMethodDep = computed(() => depService?.getTargets(DepTargetType.DATA_SOURCE_METHOD) || {});\nconst dsCondDep = computed(() => depService?.getTargets(DepTargetType.DATA_SOURCE_COND) || {});\n\nconst getKeyTreeConfig = (dep: DepData[string], type?: string, parentKey?: Id) =>\n dep.keys.map((key) => ({\n name: key,\n id: `${parentKey}_${key}`,\n type: 'key',\n isMethod: type === 'method',\n isCond: type === 'cond',\n }));\n\nconst getNodeTreeConfig = (id: string, dep: DepData[string], type?: string, parentKey?: Id) => ({\n name: dep.name,\n type: 'node',\n id: `${parentKey}_${id}`,\n key: id,\n items: getKeyTreeConfig(dep, type, `${parentKey}_${id}`),\n});\n\n/**\n * 生成tree中依赖节点的数据\n * @param items 节点\n * @param deps 依赖\n * @param type 依赖类型\n */\nconst mergeChildren = (dsId: Id, items: any[], deps: DepData, type?: string) => {\n Object.entries(deps).forEach(([id, dep]) => {\n // 已经生成过的节点\n const nodeItem = items.find((item) => item.key === id);\n // 节点存在,则追加依赖的key\n if (nodeItem) {\n nodeItem.items = nodeItem.items.concat(getKeyTreeConfig(dep, type, nodeItem.key));\n } else {\n // 节点不存在,则生成\n items.push(getNodeTreeConfig(id, dep, type, dsId));\n }\n });\n};\n\nconst list = computed(() =>\n dataSources.value.map((ds) => {\n const dsDeps = dsDep.value[ds.id]?.deps || {};\n const dsMethodDeps = dsMethodDep.value[ds.id]?.deps || {};\n const dsCondDeps = dsCondDep.value[ds.id]?.deps || {};\n\n const items: any[] = [];\n // 数据源依赖分为三种类型:key/node、method、cond,是分开存储,这里将其合并展示\n mergeChildren(ds.id, items, dsDeps);\n mergeChildren(ds.id, items, dsMethodDeps, 'method');\n mergeChildren(ds.id, items, dsCondDeps, 'cond');\n\n return {\n id: ds.id,\n key: ds.id,\n name: ds.title,\n type: 'ds',\n items,\n };\n }),\n);\n\nconst filterNode = (value: string, data: MNode): boolean => {\n if (!value) {\n return true;\n }\n return `${data.name}${data.id}`.toLocaleLowerCase().includes(value.toLocaleLowerCase());\n};\n\nconst { nodeStatusMap } = useNodeStatus(list);\nconst { filterTextChangeHandler } = useFilter(list, nodeStatusMap, filterNode);\n\nconst editHandler = (id: string) => {\n emit('edit', id);\n};\n\nconst removeHandler = async (id: string) => {\n await tMagicMessageBox.confirm('确定删除?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning',\n });\n\n emit('remove', id);\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 = (event: MouseEvent, data: any) => {\n if (data.type === 'node') {\n selectComp(data.key);\n }\n};\n\ndefineExpose({\n filter: filterTextChangeHandler,\n});\n</script>\n","<template>\n <TMagicScrollbar class=\"data-source-list-panel m-editor-layer-panel\">\n <div class=\"search-wrapper\">\n <SearchInput @search=\"filterTextChangeHandler\"></SearchInput>\n <TMagicPopover v-if=\"editable\" placement=\"right\">\n <template #reference>\n <TMagicButton type=\"primary\" size=\"small\">新增</TMagicButton>\n </template>\n <div class=\"data-source-list-panel-add-menu\">\n <ToolButton\n v-for=\"(item, index) in datasourceTypeList\"\n :data=\"{\n type: 'button',\n text: item.text,\n handler: () => {\n addHandler(item.type);\n },\n }\"\n :key=\"index\"\n ></ToolButton>\n </div>\n </TMagicPopover>\n </div>\n\n <!-- 数据源列表 -->\n <DataSourceList @edit=\"editHandler\" @remove=\"removeHandler\"></DataSourceList>\n </TMagicScrollbar>\n <DataSourceConfigPanel\n ref=\"editDialog\"\n :disabled=\"!editable\"\n :values=\"dataSourceValues\"\n :title=\"dialogTitle\"\n :slideType=\"slideType\"\n @submit=\"submitDataSourceHandler\"\n ></DataSourceConfigPanel>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, ref } from 'vue';\nimport { mergeWith } from 'lodash-es';\n\nimport { TMagicButton, TMagicPopover, TMagicScrollbar } from '@tmagic/design';\nimport type { DataSourceSchema } from '@tmagic/schema';\n\nimport SearchInput from '@editor/components/SearchInput.vue';\nimport ToolButton from '@editor/components/ToolButton.vue';\nimport type { DataSourceListSlots, Services, SlideType } from '@editor/type';\n\nimport DataSourceConfigPanel from './DataSourceConfigPanel.vue';\nimport DataSourceList from './DataSourceList.vue';\n\ndefineSlots<DataSourceListSlots>();\n\ndefineOptions({\n name: 'MEditorDataSourceListPanel',\n});\n\ndefineProps<{\n slideType?: SlideType;\n}>();\n\nconst { dataSourceService } = inject<Services>('services') || {};\n\nconst editDialog = ref<InstanceType<typeof DataSourceConfigPanel>>();\n\nconst dataSourceValues = ref<Record<string, any>>({});\n\nconst dialogTitle = ref('');\n\nconst editable = computed(() => dataSourceService?.get('editable') ?? true);\nconst datasourceTypeList = computed(() =>\n [\n { text: '基础', type: 'base' },\n { text: 'HTTP', type: 'http' },\n ].concat(dataSourceService?.get('datasourceTypeList') ?? []),\n);\n\nconst addHandler = (type: string) => {\n if (!editDialog.value) return;\n\n const datasourceType = datasourceTypeList.value.find((item) => item.type === type);\n\n dataSourceValues.value = mergeWith(\n { type, title: datasourceType?.text },\n dataSourceService?.getFormValue(type) || {},\n (objValue, srcValue) => {\n if (Array.isArray(srcValue)) {\n return srcValue;\n }\n },\n );\n\n dialogTitle.value = `新增${datasourceType?.text || ''}`;\n\n editDialog.value.show();\n};\n\nconst editHandler = (id: string) => {\n if (!editDialog.value) return;\n\n dataSourceValues.value = {\n ...dataSourceService?.getDataSourceById(id),\n };\n\n dialogTitle.value = `编辑${dataSourceValues.value.title || ''}`;\n\n editDialog.value.show();\n};\n\nconst removeHandler = (id: string) => {\n dataSourceService?.remove(id);\n};\n\nconst submitDataSourceHandler = (value: DataSourceSchema) => {\n if (value.id) {\n dataSourceService?.update(value);\n } else {\n dataSourceService?.add(value);\n }\n\n editDialog.value?.hide();\n};\n\nconst dataSourceList = ref<InstanceType<typeof DataSourceList>>();\n\nconst filterTextChangeHandler = (val: string) => {\n dataSourceList.value?.filter(val);\n};\n</script>\n","<template>\n <transition name=\"fade\">\n <div\n v-show=\"visible\"\n class=\"magic-editor-content-menu\"\n ref=\"menu\"\n :style=\"menuStyle\"\n @mouseenter=\"mouseenterHandler()\"\n >\n <slot name=\"title\"></slot>\n <div>\n <ToolButton\n v-for=\"(item, index) in menuData\"\n event-type=\"mouseup\"\n ref=\"buttons\"\n :class=\"{ active: active && item.id === active }\"\n :data=\"item\"\n :key=\"index\"\n @mouseup=\"clickHandler\"\n @mouseenter=\"showSubMenu(item, index)\"\n ></ToolButton>\n </div>\n <teleport to=\"body\">\n <content-menu\n v-if=\"subMenuData.length\"\n class=\"sub-menu\"\n ref=\"subMenu\"\n :active=\"active\"\n :menu-data=\"subMenuData\"\n :is-sub-menu=\"true\"\n @hide=\"hide\"\n ></content-menu>\n </teleport>\n </div>\n </transition>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref } from 'vue';\n\nimport { MenuButton, MenuComponent } from '@editor/type';\n\nimport ToolButton from './ToolButton.vue';\n\ndefineOptions({\n name: 'MEditorContentMenu',\n});\n\nconst props = withDefaults(\n defineProps<{\n menuData?: (MenuButton | MenuComponent)[];\n isSubMenu?: boolean;\n active?: string | number;\n autoHide?: boolean;\n }>(),\n {\n menuData: () => [],\n isSubMenu: false,\n autoHide: true,\n },\n);\n\nconst emit = defineEmits<{\n hide: [];\n show: [];\n mouseenter: [];\n}>();\n\nconst menu = ref<HTMLDivElement>();\nconst buttons = ref<InstanceType<typeof ToolButton>[]>();\nconst subMenu = ref<any>();\nconst visible = ref(false);\nconst subMenuData = ref<(MenuButton | MenuComponent)[]>([]);\n\nconst menuPosition = ref({\n left: 0,\n top: 0,\n});\n\nconst menuStyle = computed(() => ({\n top: `${menuPosition.value.top}px`,\n left: `${menuPosition.value.left}px`,\n}));\n\nconst contains = (el: HTMLElement) => menu.value?.contains(el) || subMenu.value?.contains(el);\n\nconst hide = () => {\n if (!visible.value) return;\n\n visible.value = false;\n subMenu.value?.hide();\n\n emit('hide');\n};\n\nconst clickHandler = () => {\n if (!props.autoHide) return;\n\n hide();\n};\n\nconst outsideClickHideHandler = (e: MouseEvent) => {\n if (!props.autoHide) return;\n\n const target = e.target as HTMLElement | undefined;\n if (!visible.value || !target) {\n return;\n }\n if (contains(target)) {\n return;\n }\n hide();\n};\n\nconst setPosition = (e: { clientY: number; clientX: number }) => {\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 menuPosition.value = {\n top,\n left: e.clientX,\n };\n};\n\nconst show = (e?: { clientY: number; clientX: number }) => {\n // 加settimeout是以为,如果菜单中的按钮监听的是mouseup,那么菜单显示出来时鼠标如果正好在菜单上就会马上触发按钮的mouseup\n setTimeout(() => {\n visible.value = true;\n\n nextTick(() => {\n e && setPosition(e);\n\n emit('show');\n });\n }, 300);\n};\n\nconst showSubMenu = (item: MenuButton | MenuComponent, index: number) => {\n const menuItem = item as MenuButton;\n if (typeof item !== 'object') {\n return;\n }\n\n subMenuData.value = menuItem.items || [];\n setTimeout(() => {\n if (!visible.value) {\n return;\n }\n\n if (menu.value) {\n // 将子菜单放置在按钮右侧,与按钮齐平\n let y = menu.value.offsetTop;\n if (buttons.value?.[index].$el) {\n const rect = buttons.value?.[index].$el.getBoundingClientRect();\n y = rect.top;\n }\n subMenu.value?.show({\n clientX: menu.value.offsetLeft + menu.value.clientWidth,\n clientY: y,\n });\n }\n }, 0);\n};\n\nconst mouseenterHandler = () => {\n emit('mouseenter');\n};\n\nonMounted(() => {\n if (props.isSubMenu) return;\n\n globalThis.addEventListener('mousedown', outsideClickHideHandler, true);\n});\n\nonBeforeUnmount(() => {\n if (props.isSubMenu) return;\n\n globalThis.removeEventListener('mousedown', outsideClickHideHandler, true);\n});\n\ndefineExpose({\n menu,\n menuPosition,\n hide,\n show,\n contains,\n setPosition,\n});\n</script>\n","import { computed, markRaw, Ref } from 'vue';\nimport { CopyDocument, Delete, DocumentCopy } from '@element-plus/icons-vue';\n\nimport { Id, MContainer, NodeType } from '@tmagic/schema';\nimport { isPage, isPageFragment } from '@tmagic/utils';\n\nimport ContentMenu from '@editor/components/ContentMenu.vue';\nimport type { MenuButton, Services } from '@editor/type';\n\nimport { COPY_STORAGE_KEY } from './editor';\n\nexport const useDeleteMenu = (): MenuButton => ({\n type: 'button',\n text: '删除',\n icon: Delete,\n display: (services) => {\n const node = services?.editorService?.get('node');\n return node?.type !== NodeType.ROOT && !isPage(node) && !isPageFragment(node);\n },\n handler: (services) => {\n const nodes = services?.editorService?.get('nodes');\n nodes && services?.editorService?.remove(nodes);\n },\n});\n\nexport const useCopyMenu = (): MenuButton => ({\n type: 'button',\n text: '复制',\n icon: markRaw(CopyDocument),\n handler: (services) => {\n const nodes = services?.editorService?.get('nodes');\n nodes && services?.editorService?.copy(nodes);\n },\n});\n\nexport const usePasteMenu = (menu?: Ref<InstanceType<typeof ContentMenu> | undefined>): MenuButton => ({\n type: 'button',\n text: '粘贴',\n icon: markRaw(DocumentCopy),\n display: (services) => !!services?.storageService?.getItem(COPY_STORAGE_KEY),\n handler: (services) => {\n const nodes = services?.editorService?.get('nodes');\n if (!nodes || nodes.length === 0) return;\n\n if (menu?.value?.$el) {\n const stage = services?.editorService?.get('stage');\n const rect = menu.value.$el.getBoundingClientRect();\n const parentRect = stage?.container?.getBoundingClientRect();\n const initialLeft = (rect.left || 0) - (parentRect?.left || 0);\n const initialTop = (rect.top || 0) - (parentRect?.top || 0);\n services?.editorService?.paste({ left: initialLeft, top: initialTop });\n } else {\n services?.editorService?.paste();\n }\n },\n});\n\nconst moveTo = (id: Id, services?: Services) => {\n if (!services?.editorService) return;\n\n const nodes = services.editorService.get('nodes') || [];\n const parent = services.editorService.getNodeById(id) as MContainer;\n\n if (!parent) return;\n\n services?.editorService.add(nodes, parent);\n services?.editorService.remove(nodes);\n};\n\nexport const useMoveToMenu = (services?: Services): MenuButton => {\n const root = computed(() => services?.editorService?.get('root'));\n\n return {\n type: 'button',\n text: '移动至',\n display: (services) => {\n const node = services?.editorService?.get('node');\n const pageLength = services?.editorService?.get('pageLength') || 0;\n return !isPage(node) && pageLength > 1;\n },\n items: (root.value?.items || [])\n .filter((page) => page.id !== services?.editorService?.get('page')?.id)\n .map((page) => ({\n text: `${page.name}(${page.id})`,\n type: 'button',\n handler: (services?: Services) => {\n moveTo(page.id, services);\n },\n })),\n };\n};\n","<template>\n <ContentMenu :menu-data=\"menuData\" ref=\"menu\" style=\"overflow: initial\"></ContentMenu>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, markRaw, ref } from 'vue';\nimport { Files, Plus } from '@element-plus/icons-vue';\n\nimport { isPage, isPageFragment } from '@tmagic/utils';\n\nimport ContentMenu from '@editor/components/ContentMenu.vue';\nimport FolderMinusIcon from '@editor/icons/FolderMinusIcon.vue';\nimport type { ComponentGroup, MenuButton, MenuComponent, Services } from '@editor/type';\nimport { useCopyMenu, useDeleteMenu, useMoveToMenu, usePasteMenu } from '@editor/utils/content-menu';\n\ndefineOptions({\n name: 'MEditorLayerMenu',\n});\n\nconst props = withDefaults(\n defineProps<{\n layerContentMenu: (MenuButton | MenuComponent)[];\n customContentMenu?: (menus: (MenuButton | MenuComponent)[], type: string) => (MenuButton | MenuComponent)[];\n }>(),\n {\n layerContentMenu: () => [],\n customContentMenu: (menus: (MenuButton | MenuComponent)[]) => menus,\n },\n);\n\nconst emit = defineEmits<{\n 'collapse-all': [];\n}>();\n\nconst services = inject<Services>('services');\nconst menu = ref<InstanceType<typeof ContentMenu>>();\nconst node = computed(() => services?.editorService.get('node'));\nconst nodes = computed(() => services?.editorService.get('nodes'));\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 props.customContentMenu(\n [\n {\n type: 'button',\n text: '全部折叠',\n icon: FolderMinusIcon,\n display: () => isPage(node.value) || isPageFragment(node.value),\n handler: () => {\n emit('collapse-all');\n },\n },\n {\n type: 'button',\n text: '新增',\n icon: markRaw(Plus),\n display: () => node.value?.items && nodes.value?.length === 1,\n items: getSubMenuData.value,\n },\n useCopyMenu(),\n usePasteMenu(),\n useDeleteMenu(),\n useMoveToMenu(services),\n ...props.layerContentMenu,\n ],\n 'layer',\n ),\n);\n\nconst show = (e: MouseEvent) => {\n menu.value?.show(e);\n};\n\ndefineExpose({\n show,\n});\n</script>\n","<template>\n <template v-if=\"data.type !== 'page'\">\n <MIcon v-if=\"data.visible === false\" :icon=\"Hide\" @click.stop=\"setNodeVisible(true)\" title=\"点击显示\"></MIcon>\n <MIcon v-else :icon=\"View\" @click.stop=\"setNodeVisible(false)\" class=\"node-lock\" title=\"点击隐藏\"></MIcon>\n </template>\n</template>\n\n<script setup lang=\"ts\">\nimport { inject } from 'vue';\nimport { Hide, View } from '@element-plus/icons-vue';\n\nimport type { MNode } from '@tmagic/schema';\n\nimport MIcon from '@editor/components/Icon.vue';\nimport { Services } from '@editor/type';\n\nconst props = defineProps<{\n data: MNode;\n}>();\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\n\nconst setNodeVisible = (visible: boolean) => {\n if (!editorService) return;\n\n editorService.update({\n id: props.data.id,\n visible,\n });\n};\n</script>\n","import { computed, type ComputedRef, nextTick, type Ref, ref } from 'vue';\nimport { throttle } from 'lodash-es';\n\nimport { Id, MNode } from '@tmagic/schema';\n\nimport { LayerNodeStatus, Services, TreeNodeData, UI_SELECT_MODE_EVENT_NAME } from '@editor/type';\nimport { updateStatus } from '@editor/utils/tree';\n\nimport LayerMenu from './LayerMenu.vue';\n\nexport const useClick = (\n services: Services | undefined,\n isCtrlKeyDown: Ref<boolean>,\n nodeStatusMap: ComputedRef<Map<Id, LayerNodeStatus> | undefined>,\n) => {\n const isMultiSelect = computed(() => isCtrlKeyDown.value && !services?.editorService.get('disabledMultiSelect'));\n\n // 触发画布选中\n const select = async (data: MNode) => {\n if (!data.id) {\n throw new Error('没有id');\n }\n\n if (isMultiSelect.value) {\n multiSelect(data);\n } else {\n await services?.editorService.select(data);\n services?.editorService.get('stage')?.select(data.id);\n }\n };\n\n const multiSelect = async (data: MNode) => {\n const nodes = services?.editorService.get('nodes') || [];\n\n const newNodes: Id[] = [];\n let isCancel = false;\n nodes.forEach((node) => {\n if (node.id === data.id) {\n isCancel = true;\n return;\n }\n\n newNodes.push(node.id);\n });\n\n // 只剩一个不能取消选中\n if (!isCancel || newNodes.length === 0) {\n newNodes.push(data.id);\n }\n\n await services?.editorService.multiSelect(newNodes);\n services?.editorService.get('stage')?.multiSelect(newNodes);\n };\n\n const throttleTime = 300;\n // 鼠标在组件树移动触发高亮\n const highlightHandler = throttle((event: MouseEvent, data: TreeNodeData) => {\n highlight(data);\n }, throttleTime);\n\n // 触发画布高亮\n const highlight = (data: TreeNodeData) => {\n services?.editorService?.highlight(data);\n services?.editorService?.get('stage')?.highlight(data.id);\n };\n\n const nodeClickHandler = (event: MouseEvent, data: TreeNodeData) => {\n if (!nodeStatusMap?.value) return;\n\n if (services?.uiService.get('uiSelectMode')) {\n document.dispatchEvent(new CustomEvent(UI_SELECT_MODE_EVENT_NAME, { detail: data }));\n return;\n }\n\n if (data.items && data.items.length > 0 && !isMultiSelect.value) {\n updateStatus(nodeStatusMap.value, data.id, {\n expand: true,\n });\n }\n\n nextTick(() => {\n select(data);\n });\n };\n\n // 右键菜单\n const menu = ref<InstanceType<typeof LayerMenu>>();\n\n return {\n menu,\n\n nodeClickHandler,\n\n nodeContentmenuHandler(event: MouseEvent, data: TreeNodeData) {\n event.preventDefault();\n\n const nodes = services?.editorService.get('nodes') || [];\n if (nodes.length < 2 || !nodes.includes(data)) {\n nodeClickHandler(event, data);\n }\n\n menu.value?.show(event);\n },\n\n highlightHandler,\n };\n};\n","import type { Id, MContainer, MNode } from '@tmagic/schema';\nimport { addClassName, removeClassName } from '@tmagic/utils';\n\nimport { DragType, type Services } from '@editor/type';\nimport { getNodeIndex } from '@editor/utils';\n\nexport declare type NodeDropType = 'before' | 'after' | 'inner' | 'none';\n\nconst dragState: {\n dragOverNodeId: Id;\n dropType: NodeDropType | '';\n container: HTMLElement | null;\n} = {\n dragOverNodeId: '',\n dropType: '',\n container: null,\n};\n\nconst getNodeEl = (el: HTMLElement): HTMLElement | void => {\n if (el.dataset.nodeId) {\n return el;\n }\n\n if (el.parentElement) {\n return getNodeEl(el.parentElement);\n }\n};\n\nconst removeStatusClass = (el: HTMLElement | null) => {\n if (!el) return;\n\n ['drag-before', 'drag-after', 'drag-inner'].forEach((className) => {\n el.querySelectorAll(`.${className}`).forEach((el) => {\n removeClassName(el, className);\n });\n });\n};\n\n/**\n * dragstart/dragleave/dragend 属于源节点\n * dragover 属于目标节点\n * 这些方法并不是同一个dom事件触发的\n */\nexport const useDrag = (services: Services | undefined) => {\n const handleDragStart = (event: DragEvent) => {\n if (!event.dataTransfer || !event.target || !event.currentTarget) return;\n\n const targetEl = getNodeEl(event.target as HTMLElement);\n\n if (!targetEl || targetEl !== event.currentTarget) return;\n\n event.dataTransfer.effectAllowed = 'move';\n\n try {\n event.dataTransfer.setData(\n 'text/json',\n JSON.stringify({\n dragType: DragType.LAYER_TREE,\n }),\n );\n } catch {}\n };\n\n const handleDragOver = (event: DragEvent) => {\n if (!event.target) return;\n\n const targetEl = getNodeEl(event.target as HTMLElement);\n if (!targetEl?.draggable) return;\n\n const labelEl = targetEl.children[0];\n if (!labelEl) return;\n\n const { top: targetTop, height: targetHeight } = labelEl.getBoundingClientRect();\n\n const distance = event.clientY - targetTop;\n const isContainer = targetEl.dataset.isContainer === 'true';\n\n if (distance < targetHeight / 3) {\n dragState.dropType = 'before';\n addClassName(labelEl, globalThis.document, 'drag-before');\n removeClassName(labelEl, 'drag-after', 'drag-inner');\n } else if (distance > (targetHeight * 2) / 3) {\n dragState.dropType = 'after';\n addClassName(labelEl, globalThis.document, 'drag-after');\n removeClassName(labelEl, 'drag-before', 'drag-inner');\n } else if (isContainer) {\n dragState.dropType = 'inner';\n addClassName(labelEl, globalThis.document, 'drag-inner');\n removeClassName(labelEl, 'drag-before', 'drag-after');\n }\n\n if (!dragState.dropType) {\n return;\n }\n\n dragState.dragOverNodeId = targetEl.dataset.nodeId || '';\n dragState.container = event.currentTarget as HTMLElement;\n\n event.preventDefault();\n };\n\n const handleDragLeave = (event: DragEvent) => {\n if (!event.target || !event.currentTarget) return;\n\n const targetEl = getNodeEl(event.target as HTMLElement);\n\n if (!targetEl || targetEl !== event.currentTarget) return;\n\n const labelEl = targetEl.children[0];\n\n removeClassName(labelEl, 'drag-before', 'drag-after', 'drag-inner');\n };\n\n const handleDragEnd = (event: DragEvent, node: MNode) => {\n if (!event.target || !event.currentTarget) return;\n\n const targetEl = getNodeEl(event.target as HTMLElement);\n\n if (!targetEl || targetEl !== event.currentTarget) return;\n\n removeStatusClass(dragState.container);\n\n if (node && dragState.dragOverNodeId && dragState.dropType && services) {\n if (dragState.dragOverNodeId === node.id) {\n return;\n }\n\n const targetInfo = services.editorService.getNodeInfo(dragState.dragOverNodeId, false);\n const targetNode = targetInfo.node;\n let targetParent = targetInfo.parent;\n\n if (!targetParent || !targetNode) return;\n\n let targetIndex = -1;\n\n if (Array.isArray(targetNode.items) && dragState.dropType === 'inner') {\n targetIndex = targetNode.items.length;\n targetParent = targetNode as MContainer;\n } else {\n targetIndex = getNodeIndex(dragState.dragOverNodeId, targetParent);\n }\n\n if (dragState.dropType === 'after') {\n targetIndex += 1;\n }\n\n services?.editorService.dragTo(node, targetParent, targetIndex);\n }\n\n dragState.dragOverNodeId = '';\n dragState.dropType = '';\n dragState.container = null;\n };\n\n return {\n handleDragStart,\n handleDragEnd,\n handleDragLeave,\n handleDragOver,\n };\n};\n","import { KeyBindingCommand, KeyBindingItem } from '@editor/type';\n\nexport enum KeyBindingContainerKey {\n STAGE = 'stage',\n LAYER_PANEL = 'layer-panel',\n}\n\nexport default [\n {\n command: KeyBindingCommand.DELETE_NODE,\n keybinding: ['delete', 'backspace'],\n when: [\n [KeyBindingContainerKey.STAGE, 'keyup'],\n [KeyBindingContainerKey.LAYER_PANEL, 'keydown'],\n ],\n },\n {\n command: KeyBindingCommand.COPY_NODE,\n keybinding: 'ctrl+c',\n when: [\n [KeyBindingContainerKey.STAGE, 'keydown'],\n [KeyBindingContainerKey.LAYER_PANEL, 'keydown'],\n ],\n },\n {\n command: KeyBindingCommand.PASTE_NODE,\n keybinding: 'ctrl+v',\n when: [\n [KeyBindingContainerKey.STAGE, 'keydown'],\n [KeyBindingContainerKey.LAYER_PANEL, 'keydown'],\n ],\n },\n {\n command: KeyBindingCommand.CUT_NODE,\n keybinding: 'ctrl+x',\n when: [\n [KeyBindingContainerKey.STAGE, 'keydown'],\n [KeyBindingContainerKey.LAYER_PANEL, 'keydown'],\n ],\n },\n {\n command: KeyBindingCommand.UNDO,\n keybinding: 'ctrl+z',\n when: [\n [KeyBindingContainerKey.STAGE, 'keydown'],\n [KeyBindingContainerKey.LAYER_PANEL, 'keydown'],\n ],\n },\n {\n command: KeyBindingCommand.REDO,\n keybinding: 'ctrl+shift+z',\n when: [\n [KeyBindingContainerKey.STAGE, 'keydown'],\n [KeyBindingContainerKey.LAYER_PANEL, 'keydown'],\n ],\n },\n {\n command: KeyBindingCommand.MOVE_UP_1,\n keybinding: 'up',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.MOVE_DOWN_1,\n keybinding: 'down',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.MOVE_LEFT_1,\n keybinding: 'left',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.MOVE_RIGHT_1,\n keybinding: 'right',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.MOVE_UP_10,\n keybinding: 'ctrl+up',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.MOVE_DOWN_10,\n keybinding: 'ctrl+down',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.MOVE_LEFT_10,\n keybinding: 'ctrl+left',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.MOVE_RIGHT_10,\n keybinding: 'ctrl+right',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.SWITCH_NODE,\n keybinding: 'tab',\n when: [\n [KeyBindingContainerKey.STAGE, 'keydown'],\n [KeyBindingContainerKey.LAYER_PANEL, 'keydown'],\n ],\n },\n {\n command: KeyBindingCommand.ZOOM_IN,\n keybinding: ['ctrl+=', 'ctrl+numpadplus'],\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.ZOOM_OUT,\n keybinding: ['ctrl+-', 'ctrl+numpad-'],\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.ZOOM_FIT,\n keybinding: 'ctrl+0',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n {\n command: KeyBindingCommand.ZOOM_RESET,\n keybinding: 'ctrl+1',\n when: [[KeyBindingContainerKey.STAGE, 'keydown']],\n },\n] as KeyBindingItem[];\n","import { type Ref, ref, watchEffect } from 'vue';\n\nimport Tree from '@editor/components/Tree.vue';\nimport type { Services } from '@editor/type';\nimport { KeyBindingContainerKey } from '@editor/utils/keybinding-config';\n\nexport const useKeybinding = (\n services: Services | undefined,\n container: Ref<InstanceType<typeof Tree> | undefined>,\n) => {\n const keybindingService = services?.keybindingService;\n\n // 是否多选\n const isCtrlKeyDown = ref(false);\n\n const windowBlurHandler = () => {\n isCtrlKeyDown.value = false;\n };\n\n keybindingService?.registerCommand('layer-panel-global-keyup', () => {\n isCtrlKeyDown.value = false;\n });\n\n keybindingService?.registerCommand('layer-panel-global-keydown', () => {\n isCtrlKeyDown.value = true;\n });\n\n keybindingService?.register([\n {\n command: 'layer-panel-global-keydown',\n keybinding: 'ctrl',\n when: [['global', 'keydown']],\n },\n {\n command: 'layer-panel-global-keyup',\n keybinding: 'ctrl',\n when: [['global', 'keyup']],\n },\n ]);\n\n watchEffect(() => {\n if (container.value) {\n globalThis.addEventListener('blur', windowBlurHandler);\n keybindingService?.registerEl(KeyBindingContainerKey.LAYER_PANEL, container.value.$el);\n } else {\n globalThis.removeEventListener('blur', windowBlurHandler);\n keybindingService?.unregisterEl(KeyBindingContainerKey.LAYER_PANEL);\n }\n });\n\n return {\n isCtrlKeyDown,\n };\n};\n","import { computed, ref, watch } from 'vue';\n\nimport type { Id, MNode, MPage, MPageFragment } from '@tmagic/schema';\nimport { getNodePath } from '@tmagic/utils';\n\nimport { LayerNodeStatus, Services } from '@editor/type';\nimport { traverseNode } from '@editor/utils';\nimport { updateStatus } from '@editor/utils/tree';\n\nconst createPageNodeStatus = (page: MPage | MPageFragment, initialLayerNodeStatus?: Map<Id, LayerNodeStatus>) => {\n const map = new Map<Id, LayerNodeStatus>();\n\n map.set(page.id, {\n visible: true,\n expand: true,\n selected: true,\n draggable: false,\n });\n\n page.items.forEach((node: MNode) =>\n traverseNode<MNode>(node, (node) => {\n map.set(\n node.id,\n initialLayerNodeStatus?.get(node.id) || {\n visible: true,\n expand: false,\n selected: false,\n draggable: true,\n },\n );\n }),\n );\n\n return map;\n};\n\nexport const useNodeStatus = (services: Services | undefined) => {\n const page = computed(() => services?.editorService.get('page'));\n const nodes = computed(() => services?.editorService.get('nodes') || []);\n\n /** 所有页面的节点状态 */\n const nodeStatusMaps = ref(new Map<Id, Map<Id, LayerNodeStatus>>());\n\n /** 当前页面的节点状态 */\n const nodeStatusMap = computed(() =>\n page.value ? nodeStatusMaps.value.get(page.value.id) : new Map<Id, LayerNodeStatus>(),\n );\n\n // 切换页面或者新增页面,重新生成节点状态\n watch(\n page,\n (page) => {\n if (!page) {\n return;\n }\n // 生成节点状态\n nodeStatusMaps.value.set(page.id, createPageNodeStatus(page, nodeStatusMaps.value.get(page.id)));\n },\n {\n immediate: true,\n },\n );\n\n // 选中状态变化,更新节点状态\n watch(\n nodes,\n (nodes) => {\n if (!nodeStatusMap.value) return;\n\n for (const [id, status] of nodeStatusMap.value.entries()) {\n status.selected = nodes.some((node) => node.id === id);\n if (status.selected) {\n getNodePath(id, page.value?.items).forEach((node) => {\n updateStatus(nodeStatusMap.value!, node.id, {\n expand: true,\n });\n });\n }\n }\n },\n {\n immediate: true,\n },\n );\n\n services?.editorService.on('add', (newNodes: MNode[]) => {\n newNodes.forEach((node) => {\n traverseNode(node, (node: MNode) => {\n nodeStatusMap.value?.set(node.id, {\n visible: true,\n expand: Array.isArray(node.items),\n selected: true,\n draggable: true,\n });\n });\n });\n });\n\n services?.editorService.on('remove', (nodes: MNode[]) => {\n nodes.forEach((node) => {\n traverseNode(node, (node: MNode) => {\n nodeStatusMap.value?.delete(node.id);\n });\n });\n });\n\n return {\n nodeStatusMaps,\n nodeStatusMap,\n };\n};\n","<template>\n <TMagicScrollbar class=\"m-editor-layer-panel\">\n <slot name=\"layer-panel-header\"></slot>\n\n <SearchInput @search=\"filterTextChangeHandler\"></SearchInput>\n\n <Tree\n v-if=\"page && nodeStatusMap\"\n tabindex=\"-1\"\n ref=\"tree\"\n :data=\"nodeData\"\n :node-status-map=\"nodeStatusMap\"\n @node-dragover=\"handleDragOver\"\n @node-dragstart=\"handleDragStart\"\n @node-dragleave=\"handleDragLeave\"\n @node-dragend=\"handleDragEnd\"\n @node-contextmenu=\"nodeContentmenuHandler\"\n @node-mouseenter=\"mouseenterHandler\"\n @node-click=\"nodeClickHandler\"\n >\n <template #tree-node-content=\"{ data: nodeData }\">\n <slot name=\"layer-node-content\" :data=\"nodeData\"> </slot>\n </template>\n\n <template #tree-node-tool=\"{ data: nodeData }\">\n <slot name=\"layer-node-tool\" :data=\"nodeData\">\n <LayerNodeTool :data=\"nodeData\"></LayerNodeTool>\n </slot>\n </template>\n\n <template #tree-node-label=\"{ data: nodeData }\">\n <slot name=\"layer-node-label\" :data=\"nodeData\"></slot>\n </template>\n </Tree>\n\n <Teleport to=\"body\">\n <LayerMenu\n ref=\"menu\"\n :layer-content-menu=\"layerContentMenu\"\n :custom-content-menu=\"customContentMenu\"\n @collapse-all=\"collapseAllHandler\"\n ></LayerMenu>\n </Teleport>\n </TMagicScrollbar>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, ref } from 'vue';\n\nimport { TMagicScrollbar } from '@tmagic/design';\nimport type { MNode } from '@tmagic/schema';\n\nimport SearchInput from '@editor/components/SearchInput.vue';\nimport Tree from '@editor/components/Tree.vue';\nimport { useFilter } from '@editor/hooks/use-filter';\nimport { LayerPanelSlots, MenuButton, MenuComponent, Services, TreeNodeData } from '@editor/type';\n\nimport LayerMenu from './LayerMenu.vue';\nimport LayerNodeTool from './LayerNodeTool.vue';\nimport { useClick } from './use-click';\nimport { useDrag } from './use-drag';\nimport { useKeybinding } from './use-keybinding';\nimport { useNodeStatus } from './use-node-status';\n\ndefineSlots<LayerPanelSlots>();\n\ndefineOptions({\n name: 'MEditorLayerPanel',\n});\n\ndefineProps<{\n layerContentMenu: (MenuButton | MenuComponent)[];\n customContentMenu?: (menus: (MenuButton | MenuComponent)[], type: string) => (MenuButton | MenuComponent)[];\n}>();\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\n\nconst tree = ref<InstanceType<typeof Tree>>();\n\nconst page = computed(() => editorService?.get('page'));\nconst nodeData = computed<TreeNodeData[]>(() => (!page.value ? [] : [page.value]));\n\nconst { nodeStatusMap } = useNodeStatus(services);\nconst { isCtrlKeyDown } = useKeybinding(services, tree);\n\nconst filterNodeMethod = (v: string, data: MNode): boolean => {\n let name = '';\n if (data.name) {\n name = data.name;\n } else if (data.items) {\n name = 'container';\n }\n\n return `${data.id}${name}${data.type}`.includes(v);\n};\n\nconst { filterTextChangeHandler } = useFilter(nodeData, nodeStatusMap, filterNodeMethod);\n\nconst collapseAllHandler = () => {\n if (!page.value || !nodeStatusMap.value) return;\n const items = nodeStatusMap.value.entries();\n for (const [id, status] of items) {\n if (id === page.value.id) {\n continue;\n }\n status.expand = false;\n }\n};\n\nconst { handleDragStart, handleDragEnd, handleDragLeave, handleDragOver } = useDrag(services);\n\nconst {\n menu,\n nodeClickHandler,\n nodeContentmenuHandler,\n highlightHandler: mouseenterHandler,\n} = useClick(services, isCtrlKeyDown, nodeStatusMap);\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 <TMagicTooltip placement=\"right\" :disabled=\"!Boolean(item.desc)\" :content=\"item.desc\">\n <MIcon :icon=\"item.icon\"></MIcon>\n </TMagicTooltip>\n <span :title=\"item.text\">{{ item.text }}</span>\n </slot>\n </div>\n </TMagicCollapseItem>\n </template>\n </TMagicCollapse>\n </TMagicScrollbar>\n</template>\n\n<script lang=\"ts\" setup>\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 {\n type ComponentGroup,\n type ComponentItem,\n ComponentListPanelSlots,\n DragType,\n type Services,\n type StageOptions,\n} from '@editor/type';\n\ndefineSlots<ComponentListPanelSlots>();\n\ndefineOptions({\n name: 'MEditorComponentListPanel',\n});\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 e.dataTransfer?.setData(\n 'text/json',\n serialize({\n dragType: DragType.COMPONENT_LIST,\n data: {\n name: text,\n type,\n ...data,\n },\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.delayedMarkContainer(e);\n};\n</script>\n","<template>\n <div class=\"m-editor-sidebar\" v-if=\"data.type === 'tabs' && data.items.length\">\n <div class=\"m-editor-sidebar-header\">\n <div\n class=\"m-editor-sidebar-header-item\"\n v-for=\"(config, index) in sideBarItems\"\n v-show=\"!floatBoxStates?.get(config.$key)?.status\"\n draggable=\"true\"\n :key=\"config.$key ?? index\"\n :class=\"{ 'is-active': activeTabName === config.text }\"\n @click=\"activeTabName = config.text || `${index}`\"\n @dragstart=\"dragstartHandler\"\n @dragend=\"dragendHandler(config.$key, $event)\"\n >\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 </div>\n <div\n class=\"m-editor-sidebar-content\"\n v-for=\"(config, index) in sideBarItems\"\n :key=\"config.$key ?? index\"\n v-show=\"activeTabName === config.text\"\n >\n <component\n v-if=\"config && !floatBoxStates?.get(config.$key)?.status\"\n :is=\"config.component\"\n v-bind=\"config.props || {}\"\n v-on=\"config?.listeners || {}\"\n >\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 #layer-node-content=\"{ data: nodeData }\"\n v-if=\"config.$key === 'layer' || config.slots?.layerNodeContent\"\n >\n <slot v-if=\"config.$key === 'layer'\" name=\"layer-node-content\" :data=\"nodeData\"></slot>\n <component v-else-if=\"config.slots?.layerNodeContent\" :is=\"config.slots.layerNodeContent\" :data=\"nodeData\" />\n </template>\n\n <template #layer-node-label=\"{ data: nodeData }\" v-if=\"config.$key === 'layer' || config.slots?.layerNodeLabel\">\n <slot v-if=\"config.$key === 'layer'\" name=\"layer-node-label\" :data=\"nodeData\"></slot>\n <component v-else-if=\"config.slots?.layerNodeLabel\" :is=\"config.slots.layerNodeTool\" :data=\"nodeData\" />\n </template>\n\n <template #layer-node-tool=\"{ data: nodeData }\" v-if=\"config.$key === 'layer' || config.slots?.layerNodeTool\">\n <slot v-if=\"config.$key === 'layer'\" name=\"layer-node-tool\" :data=\"nodeData\"></slot>\n <component v-else-if=\"config.slots?.layerNodeTool\" :is=\"config.slots.layerNodeTool\" :data=\"nodeData\" />\n </template>\n\n <template\n #data-source-panel-tool=\"{ data }\"\n v-if=\"config.$key === 'data-source' || config.slots?.codeBlockPanelTool\"\n >\n <slot v-if=\"config.$key === 'data-source'\" name=\"data-source-panel-tool\" :data=\"data\"></slot>\n <component v-else-if=\"config.slots?.DataSourcePanelTool\" :is=\"config.slots.DataSourcePanelTool\" />\n </template>\n </component>\n </div>\n </div>\n\n <Teleport to=\"body\">\n <div class=\"m-editor-float-box-list\">\n <div\n v-for=\"(config, index) in sideBarItems\"\n :key=\"config.$key ?? index\"\n ref=\"floatBox\"\n :class=\"['m-editor-float-box', `m-editor-float-box-${config.$key}`]\"\n :style=\"{\n left: `${floatBoxStates?.get(config.$key)?.left}px`,\n top: `${floatBoxStates?.get(config.$key)?.top}px`,\n zIndex: floatBoxStates?.get(config.$key)?.zIndex,\n }\"\n v-show=\"floatBoxStates?.get(config.$key)?.status\"\n >\n <div\n :class=\"['m-editor-float-box-header', `m-editor-float-box-header-${config.$key}`]\"\n @click=\"showFloatBox(config.$key)\"\n >\n <div>{{ config.text }}</div>\n <MIcon class=\"m-editor-float-box-close\" :icon=\"Close\" @click.stop=\"closeFloatBox(config.$key)\"></MIcon>\n </div>\n <div class=\"m-editor-float-box-body\">\n <component\n v-if=\"config && floatBoxStates?.get(config.$key)?.status\"\n :is=\"config.boxComponentConfig?.component || config.component\"\n v-bind=\"config.boxComponentConfig?.props || config.props || {}\"\n v-on=\"config?.listeners || {}\"\n />\n </div>\n </div>\n </div>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, ref, watch } from 'vue';\nimport { Close, Coin, EditPen, Goods, List } from '@element-plus/icons-vue';\n\nimport MIcon from '@editor/components/Icon.vue';\nimport { useFloatBox } from '@editor/hooks/use-float-box';\nimport type {\n MenuButton,\n MenuComponent,\n Services,\n SideBarData,\n SidebarSlots,\n SideComponent,\n SideItem,\n} from '@editor/type';\n\nimport CodeBlockListPanel from './code-block/CodeBlockListPanel.vue';\nimport DataSourceListPanel from './data-source/DataSourceListPanel.vue';\nimport LayerPanel from './layer/LayerPanel.vue';\nimport ComponentListPanel from './ComponentListPanel.vue';\n\ndefineSlots<SidebarSlots>();\n\ndefineOptions({\n name: 'MEditorSidebar',\n});\n\nconst props = withDefaults(\n defineProps<{\n data: SideBarData;\n layerContentMenu: (MenuButton | MenuComponent)[];\n customContentMenu?: (menus: (MenuButton | MenuComponent)[], type: string) => (MenuButton | MenuComponent)[];\n }>(),\n {\n data: () => ({ type: 'tabs', status: '组件', items: ['component-list', 'layer', 'code-block', 'data-source'] }),\n },\n);\n\nconst services = inject<Services>('services');\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: Goods,\n text: '组件',\n component: ComponentListPanel,\n slots: {},\n },\n layer: {\n $key: 'layer',\n type: 'component',\n icon: List,\n text: '已选组件',\n props: {\n layerContentMenu: props.layerContentMenu,\n customContentMenu: props.customContentMenu,\n },\n component: LayerPanel,\n slots: {},\n },\n 'code-block': {\n $key: 'code-block',\n type: 'component',\n icon: EditPen,\n text: '代码编辑',\n component: CodeBlockListPanel,\n slots: {},\n boxComponentConfig: {\n props: {\n slideType: 'box',\n },\n },\n },\n 'data-source': {\n $key: 'data-source',\n type: 'component',\n icon: Coin,\n text: '数据源',\n component: DataSourceListPanel,\n slots: {},\n boxComponentConfig: {\n props: {\n slideType: 'box',\n },\n },\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\nconst slideKeys = computed(() => sideBarItems.value.map((sideBarItem) => sideBarItem.$key));\n\nconst { showFloatBox, closeFloatBox, dragstartHandler, dragendHandler, floatBoxStates, floatBox, showingBoxKeys } =\n useFloatBox(slideKeys);\n\nwatch(\n () => showingBoxKeys.value.length,\n () => {\n const isActiveTabShow = showingBoxKeys.value.some(\n (key) => activeTabName.value === sideBarItems.value.find((v) => v.$key === key)?.text,\n );\n if (!isActiveTabShow && activeTabName.value) return;\n const nextSlideBarItem = sideBarItems.value.find((sideBarItem) => !showingBoxKeys.value.includes(sideBarItem.$key));\n if (!nextSlideBarItem) {\n activeTabName.value = '';\n services?.uiService.set('hideSlideBar', true);\n return;\n }\n services?.uiService.set('hideSlideBar', false);\n activeTabName.value = nextSlideBarItem?.text;\n },\n);\n\ndefineExpose({\n activeTabName,\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","<template>\n <div ref=\"bar\" class=\"m-editor-scroll-bar\" :class=\"isHorizontal ? 'horizontal' : 'vertical'\">\n <div ref=\"thumb\" class=\"m-editor-scroll-bar-thumb\" :style=\"thumbStyle\"></div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onBeforeUnmount, onMounted, ref } from 'vue';\nimport Gesto from 'gesto';\n\ndefineOptions({\n name: 'MEditorScrollBar',\n});\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\nonBeforeUnmount(() => {\n if (gesto) gesto.off();\n bar.value?.removeEventListener('wheel', wheelHandler, false);\n});\n\nconst wheelHandler = (e: WheelEvent) => {\n const delta = props.isHorizontal ? e.deltaX : e.deltaY;\n if (delta) {\n e.preventDefault();\n }\n scrollBy(delta);\n};\n\nconst getDelta = (e: any) => {\n const ratio = (props.isHorizontal ? e.deltaX : e.deltaY) / props.size;\n return props.scrollSize * ratio;\n};\n\nconst scrollBy = (delta: number) => {\n if (delta < 0) {\n if (props.pos <= 0) {\n emit('scroll', 0);\n } else {\n emit('scroll', -Math.min(-delta, props.pos));\n }\n } else {\n const leftPos = props.size - (thumbSize.value + thumbPos.value);\n if (leftPos <= 0) {\n emit('scroll', 0);\n } else {\n emit('scroll', Math.min(delta, leftPos));\n }\n }\n};\n</script>\n\n<style lang=\"scss\">\n.m-editor-scroll-bar {\n position: absolute;\n background-color: transparent;\n opacity: 0.3;\n transition: background-color 0.2s linear, opacity 0.2s linear;\n\n .m-editor-scroll-bar-thumb {\n background-color: #aaa;\n border-radius: 6px;\n position: absolute;\n }\n\n &.horizontal {\n width: 100%;\n height: 15px;\n bottom: 0;\n\n .m-editor-scroll-bar-thumb {\n height: 6px;\n transition: background-color 0.2s linear, height 0.2s ease-in-out;\n bottom: 2px;\n }\n }\n\n &.vertical {\n height: 100%;\n width: 15px;\n right: 5px;\n\n .m-editor-scroll-bar-thumb {\n width: 6px;\n transition: background-color 0.2s linear, width 0.2s ease-in-out;\n right: 2px;\n }\n }\n\n &:hover,\n &:focus {\n background-color: #eee;\n opacity: 0.9;\n\n .m-editor-scroll-bar-thumb {\n background-color: #999;\n }\n\n &.horizontal {\n .m-editor-scroll-bar-thumb {\n height: 11px;\n }\n }\n\n &.vertical {\n .m-editor-scroll-bar-thumb {\n width: 11px;\n }\n }\n }\n}\n</style>\n","<template>\n <div class=\"m-editor-scroll-viewer-container\" ref=\"container\">\n <div ref=\"el\" :style=\"style\">\n <slot></slot>\n </div>\n\n <ScrollBar\n v-if=\"scrollHeight > wrapHeight\"\n :scroll-size=\"scrollHeight\"\n :size=\"wrapHeight\"\n :pos=\"vOffset\"\n @scroll=\"vScrollHandler\"\n ></ScrollBar>\n <ScrollBar\n v-if=\"scrollWidth > wrapWidth\"\n :is-horizontal=\"true\"\n :scroll-size=\"scrollWidth\"\n :pos=\"hOffset\"\n :size=\"wrapWidth\"\n @scroll=\"hScrollHandler\"\n ></ScrollBar>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue';\n\nimport { isNumber } from '@tmagic/utils';\n\nimport type { ScrollViewerEvent } from '@editor/type';\nimport { ScrollViewer } from '@editor/utils/scroll-viewer';\n\nimport ScrollBar from './ScrollBar.vue';\n\ndefineOptions({\n name: 'MEditorScrollViewer',\n});\n\nconst props = withDefaults(\n defineProps<{\n width?: number | string;\n height?: number | string;\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: ${isNumber(`${props.width}`) ? `${props.width}px` : props.width};\n height: ${isNumber(`${props.height}`) ? `${props.height}px` : props.height};\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\nonBeforeUnmount(() => {\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","/*\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 { convertToNumber } from '@tmagic/utils';\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 floatBox: new Map(),\n hideSlideBar: false,\n});\n\nclass Ui extends BaseService {\n constructor() {\n super([\n { name: 'zoom', isAsync: true },\n { name: 'calcZoom', isAsync: true },\n ]);\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 let stageWidth: number = convertToNumber(stageRect.width, width);\n let stageHeight: number = convertToNumber(stageRect.height, height);\n\n // 30为标尺的大小\n stageWidth = stageWidth + 30;\n stageHeight = stageHeight + 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 async setFloatBox(keys: string[]) {\n const map = state.floatBox;\n for (const key of keys) {\n if (map.get(key)) continue;\n map.set(key, {\n status: false,\n zIndex: 99,\n top: 0,\n left: 0,\n });\n }\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, watch } from 'vue';\n\nimport type { MNode } from '@tmagic/schema';\nimport StageCore, { GuidesType, RemoveEventData, SortEventData, UpdateEventData } from '@tmagic/stage';\n\nimport editorService from '@editor/services/editor';\nimport uiService from '@editor/services/ui';\nimport {\n H_GUIDE_LINE_STORAGE_KEY,\n StageOptions,\n UI_SELECT_MODE_EVENT_NAME,\n V_GUIDE_LINE_STORAGE_KEY,\n} from '@editor/type';\nimport { getGuideLineFromCache } from '@editor/utils/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 renderType: stageOptions.renderType,\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_MODE_EVENT_NAME, { detail: el }));\n return stop();\n }\n\n return elCanSelect;\n },\n moveableOptions: stageOptions.moveableOptions,\n updateDragEl: stageOptions.updateDragEl,\n guidesOptions: stageOptions.guidesOptions,\n disabledMultiSelect: stageOptions.disabledMultiSelect,\n });\n\n watch(\n () => editorService.get('disabledMultiSelect'),\n (disabledMultiSelect) => {\n if (disabledMultiSelect) {\n stage.disableMultiSelect();\n } else {\n stage.enableMultiSelect();\n }\n },\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('page-el-update', () => {\n editorService.set('stageLoading', false);\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 const nodes = ev.data.map(({ el }) => editorService.getNodeById(el.id));\n editorService.remove(nodes.filter((node) => Boolean(node)) as MNode[]);\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","<template>\n <Teleport to=\"body\" v-if=\"visible\">\n <div ref=\"target\" class=\"m-editor-float-box\" :style=\"style\">\n <div ref=\"dragTarget\" class=\"m-editor-float-box-title\">\n <slot name=\"title\">\n <span>{{ title }}</span>\n </slot>\n <div>\n <TMagicButton text size=\"small\" :icon=\"Close\" @click=\"closeHandler\"></TMagicButton>\n </div>\n </div>\n <div class=\"m-editor-float-box-body\">\n <slot name=\"body\"></slot>\n </div>\n </div>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, ref, watch } from 'vue';\nimport { Close } from '@element-plus/icons-vue';\nimport VanillaMoveable from 'moveable';\n\nimport { TMagicButton } from '@tmagic/design';\n\ninterface Position {\n left: number;\n top: number;\n}\n\ninterface Rect {\n width: number | string;\n height: number | string;\n}\n\nconst props = withDefaults(defineProps<{ visible: boolean; position?: Position; rect?: Rect; title?: string }>(), {\n visible: false,\n title: '',\n position: () => ({ left: 0, top: 0 }),\n rect: () => ({ width: 'auto', height: 'auto' }),\n});\n\nconst emit = defineEmits<{\n 'update:visible': [boolean];\n}>();\n\nconst target = ref<HTMLDivElement>();\nconst dragTarget = ref<HTMLDivElement>();\n\nconst style = computed(() => ({\n left: `${props.position.left}px`,\n top: `${props.position.top}px`,\n width: typeof props.rect.width === 'string' ? props.rect.width : `${props.rect.width}px`,\n height: typeof props.rect.height === 'string' ? props.rect.height : `${props.rect.height}px`,\n}));\n\nlet moveable: VanillaMoveable | null = null;\n\nconst initMoveable = () => {\n moveable = new VanillaMoveable(globalThis.document.body, {\n className: 'm-editor-floating-box-moveable',\n target: target.value,\n draggable: true,\n resizable: true,\n edge: true,\n keepRatio: false,\n origin: false,\n snappable: true,\n dragTarget: dragTarget.value,\n dragTargetSelf: false,\n linePadding: 10,\n controlPadding: 10,\n });\n\n moveable.on('drag', (e) => {\n e.target.style.transform = e.transform;\n });\n\n moveable.on('resize', (e) => {\n e.target.style.width = `${e.width}px`;\n e.target.style.height = `${e.height}px`;\n e.target.style.transform = e.drag.transform;\n });\n};\n\nconst destroyMoveable = () => {\n moveable?.destroy();\n moveable = null;\n};\n\nwatch(\n () => props.visible,\n async (visible) => {\n if (visible) {\n await nextTick();\n initMoveable();\n } else {\n destroyMoveable();\n }\n },\n {\n immediate: true,\n },\n);\n\nonBeforeUnmount(() => {\n destroyMoveable();\n});\n\nconst closeHandler = () => {\n emit('update:visible', false);\n};\n\ndefineExpose({\n target,\n});\n</script>\n","<template>\n <TMagicTooltip v-if=\"page && buttonVisible\" content=\"点击查看当前位置下的组件\">\n <div ref=\"button\" class=\"m-editor-stage-float-button\" @click=\"visible = true\">可选组件</div>\n </TMagicTooltip>\n <FloatingBox\n v-if=\"page && nodeStatusMap && buttonVisible\"\n ref=\"box\"\n v-model:visible=\"visible\"\n title=\"当前位置下的组件\"\n :position=\"menuPosition\"\n >\n <template #body>\n <Tree\n class=\"m-editor-node-list-menu magic-editor-layer-tree\"\n :data=\"nodeData\"\n :node-status-map=\"nodeStatusMap\"\n @node-click=\"clickHandler\"\n ></Tree>\n </template>\n </FloatingBox>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, nextTick, ref, watch } from 'vue';\n\nimport { TMagicTooltip } from '@tmagic/design';\nimport type { MNode } from '@tmagic/schema';\n\nimport FloatingBox from '@editor/components/FloatingBox.vue';\nimport Tree from '@editor/components/Tree.vue';\nimport { useFilter } from '@editor/hooks/use-filter';\nimport { useNodeStatus } from '@editor/layouts/sidebar/layer/use-node-status';\nimport type { Services, TreeNodeData } from '@editor/type';\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\n\nconst visible = ref(false);\nconst buttonVisible = ref(false);\nconst button = ref<HTMLDivElement>();\nconst box = ref<InstanceType<typeof FloatingBox>>();\n\nconst stage = computed(() => editorService?.get('stage'));\nconst page = computed(() => editorService?.get('page'));\nconst nodes = computed(() => editorService?.get('nodes') || []);\nconst nodeData = computed<TreeNodeData[]>(() => (!page.value ? [] : [page.value]));\n\nconst { nodeStatusMap } = useNodeStatus(services);\n\nconst filterNodeMethod = (value: string, data: MNode): boolean => data.id === value;\n\nconst { filterTextChangeHandler } = useFilter(nodeData, nodeStatusMap, filterNodeMethod);\n\nconst unWatch = watch(\n stage,\n (stage) => {\n if (!stage) return;\n\n nextTick(() => unWatch());\n\n stage.on('select', (el: HTMLElement, event: MouseEvent) => {\n const els = stage.renderer.getElementsFromPoint(event) || [];\n const ids = els.map((el) => el.id).filter((id) => Boolean(id));\n\n buttonVisible.value = ids.length > 3;\n\n filterTextChangeHandler(ids);\n });\n },\n {\n immediate: true,\n },\n);\n\nwatch(\n nodes,\n (nodes) => {\n if (!nodeStatusMap.value) return;\n\n for (const [id, status] of nodeStatusMap.value.entries()) {\n status.selected = nodes.some((node) => node.id === id);\n }\n },\n {\n immediate: true,\n },\n);\n\nconst clickHandler = async (event: MouseEvent, data: TreeNodeData) => {\n await editorService?.select(data.id);\n stage.value?.select(data.id);\n};\n\nconst menuPosition = ref({\n left: 0,\n top: 0,\n});\n\nwatch(visible, async (visible) => {\n if (!button.value || !visible) {\n return;\n }\n\n await nextTick();\n\n const rect = button.value.getBoundingClientRect();\n const height = box.value?.target?.clientHeight || 0;\n\n menuPosition.value = {\n left: rect.left + rect.width + 5,\n top: rect.top - height / 2 + rect.height / 2,\n };\n});\n</script>\n","<template>\n <ContentMenu :menu-data=\"menuData\" ref=\"menu\"></ContentMenu>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, markRaw, ref, watch } from 'vue';\nimport { Bottom, Top } from '@element-plus/icons-vue';\n\nimport { NodeType } from '@tmagic/schema';\nimport { isPage, isPageFragment } from '@tmagic/utils';\n\nimport ContentMenu from '@editor/components/ContentMenu.vue';\nimport CenterIcon from '@editor/icons/CenterIcon.vue';\nimport { LayerOffset, Layout, MenuButton, MenuComponent, Services } from '@editor/type';\nimport { useCopyMenu, useDeleteMenu, useMoveToMenu, usePasteMenu } from '@editor/utils/content-menu';\n\ndefineOptions({\n name: 'MEditorViewerMenu',\n});\n\nconst props = withDefaults(\n defineProps<{\n isMultiSelect?: boolean;\n stageContentMenu: (MenuButton | MenuComponent)[];\n customContentMenu?: (menus: (MenuButton | MenuComponent)[], type: string) => (MenuButton | MenuComponent)[];\n }>(),\n {\n isMultiSelect: false,\n stageContentMenu: () => [],\n customContentMenu: (menus: (MenuButton | MenuComponent)[]) => menus,\n },\n);\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\nconst menu = ref<InstanceType<typeof ContentMenu>>();\nconst canCenter = ref(false);\n\nconst node = computed(() => editorService?.get('node'));\nconst nodes = computed(() => editorService?.get('nodes'));\nconst parent = computed(() => editorService?.get('parent'));\n\nconst menuData = computed<(MenuButton | MenuComponent)[]>(() =>\n props.customContentMenu(\n [\n {\n type: 'button',\n text: '水平居中',\n icon: markRaw(CenterIcon),\n display: () => canCenter.value,\n handler: () => {\n if (!nodes.value) return;\n editorService?.alignCenter(nodes.value);\n },\n },\n useCopyMenu(),\n usePasteMenu(menu),\n {\n type: 'divider',\n direction: 'horizontal',\n display: () => {\n if (!node.value) return false;\n return !isPage(node.value) && !isPageFragment(node.value);\n },\n },\n {\n type: 'button',\n text: '上移一层',\n icon: markRaw(Top),\n display: () => !isPage(node.value) && !isPageFragment(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) && !isPageFragment(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(-1);\n },\n },\n {\n type: 'button',\n text: '置顶',\n icon: markRaw(Top),\n display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(LayerOffset.TOP);\n },\n },\n {\n type: 'button',\n text: '置底',\n icon: markRaw(Bottom),\n display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect,\n handler: () => {\n editorService?.moveLayer(LayerOffset.BOTTOM);\n },\n },\n useMoveToMenu(services),\n {\n type: 'divider',\n direction: 'horizontal',\n display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect,\n },\n useDeleteMenu(),\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 'viewer',\n ),\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 = (e: MouseEvent) => {\n menu.value?.show(e);\n};\n\ndefineExpose({ show });\n</script>\n","<template>\n <ScrollViewer\n class=\"m-editor-stage\"\n ref=\"stageWrap\"\n tabindex=\"-1\"\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 @click=\"stageWrap?.container?.focus()\"\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 <NodeListMenu></NodeListMenu>\n\n <Teleport to=\"body\">\n <ViewerMenu\n ref=\"menu\"\n :is-multi-select=\"isMultiSelect\"\n :stage-content-menu=\"stageContentMenu\"\n :custom-content-menu=\"customContentMenu\"\n ></ViewerMenu>\n </Teleport>\n </ScrollViewer>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, markRaw, nextTick, onBeforeUnmount, onMounted, ref, toRaw, watch, watchEffect } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport type { MApp, MContainer } from '@tmagic/schema';\nimport StageCore, { calcValueByFontsize, getOffset, Runtime } from '@tmagic/stage';\n\nimport ScrollViewer from '@editor/components/ScrollViewer.vue';\nimport { useStage } from '@editor/hooks/use-stage';\nimport { DragType, Layout, type MenuButton, type MenuComponent, type Services, type StageOptions } from '@editor/type';\nimport { getConfig } from '@editor/utils/config';\nimport { KeyBindingContainerKey } from '@editor/utils/keybinding-config';\n\nimport NodeListMenu from './NodeListMenu.vue';\nimport ViewerMenu from './ViewerMenu.vue';\n\ndefineOptions({\n name: 'MEditorStage',\n});\n\ndefineProps<{\n stageContentMenu: (MenuButton | MenuComponent)[];\n customContentMenu?: (menus: (MenuButton | MenuComponent)[], type: string) => (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 stage.on('select', () => {\n stageWrap.value?.container?.focus();\n });\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(page, (page) => {\n if (runtime && page) {\n services?.editorService.set('stageLoading', true);\n runtime.updatePageId?.(page.id);\n nextTick(() => {\n stage?.select(page.id);\n });\n }\n});\n\nconst rootChangeHandler = (root: MApp) => {\n if (runtime && root) {\n runtime.updateRootConfig?.(cloneDeep(toRaw(root)));\n }\n};\n\nservices?.editorService.on('root-change', rootChangeHandler);\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 if (stageWrap.value?.container) {\n resizeObserver.observe(stageWrap.value.container);\n services?.keybindingService.registerEl(KeyBindingContainerKey.STAGE, stageWrap.value.container);\n }\n});\n\nonBeforeUnmount(() => {\n stage?.destroy();\n resizeObserver.disconnect();\n services?.editorService.set('stage', null);\n services?.keybindingService.unregisterEl('stage');\n services?.editorService.off('root-change', rootChangeHandler);\n});\n\nconst parseDSL = getConfig('parseDSL');\n\nconst contextmenuHandler = (e: MouseEvent) => {\n e.preventDefault();\n menu.value?.show(e);\n};\n\nconst dragoverHandler = (e: DragEvent) => {\n if (!e.dataTransfer) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n};\n\nconst dropHandler = async (e: DragEvent) => {\n if (!e.dataTransfer) return;\n\n const data = e.dataTransfer.getData('text/json');\n\n if (!data) return;\n\n const config = parseDSL(`(${data})`);\n\n if (!config || config.dragType !== DragType.COMPONENT_LIST) return;\n\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 (parent && stageContainer.value && stage) {\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.data;\n\n let top = 0;\n let left = 0;\n let position = 'relative';\n\n if (style.position === 'fixed') {\n position = 'fixed';\n top = e.clientY - containerRect.top;\n left = e.clientX - containerRect.left;\n } else 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.data.style = {\n ...style,\n position,\n top: top / zoom.value,\n left: left / zoom.value,\n };\n\n config.data.inputEvent = e;\n\n services?.editorService.add(config.data, parent);\n }\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\">\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\ndefineOptions({\n name: 'MEditorBreadcrumb',\n});\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","<template>\n <div class=\"m-editor-workspace\">\n <Breadcrumb></Breadcrumb>\n\n <slot name=\"stage\">\n <MagicStage\n v-if=\"page\"\n :stage-content-menu=\"stageContentMenu\"\n :custom-content-menu=\"customContentMenu\"\n ></MagicStage>\n </slot>\n\n <slot name=\"workspace-content\"></slot>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue';\n\nimport type { MenuButton, MenuComponent, Services, WorkspaceSlots } from '@editor/type';\n\nimport MagicStage from './viewer/Stage.vue';\nimport Breadcrumb from './Breadcrumb.vue';\n\ndefineSlots<WorkspaceSlots>();\n\ndefineOptions({\n name: 'MEditorWorkspace',\n});\n\ndefineProps<{\n stageContentMenu: (MenuButton | MenuComponent)[];\n customContentMenu?: (menus: (MenuButton | MenuComponent)[], type: string) => (MenuButton | MenuComponent)[];\n}>();\n\nconst services = inject<Services>('services');\n\nconst page = computed(() => services?.editorService.get('page'));\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 type { ColumnConfig } from '@tmagic/form';\nimport type { CodeBlockContent, CodeBlockDSL, Id } from '@tmagic/schema';\n\nimport type { CodeState } from '@editor/type';\nimport { CODE_DRAFT_STORAGE_KEY } from '@editor/type';\nimport { getConfig } from '@editor/utils/config';\n\nimport BaseService from './BaseService';\n\nclass CodeBlock extends BaseService {\n private state = reactive<CodeState>({\n codeDsl: null,\n editable: true,\n combineIds: [],\n undeletableList: [],\n paramsColConfig: undefined,\n });\n\n constructor() {\n super([\n { name: 'setCodeDslById', isAsync: true },\n { name: 'setEditStatus', isAsync: true },\n { name: 'setCombineIds', isAsync: true },\n { name: 'setUndeleteableList', isAsync: true },\n { name: 'deleteCodeDslByIds', isAsync: true },\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 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: Partial<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 const parseDSL = getConfig('parseDSL');\n if (typeof codeConfig.content === 'string') {\n codeConfig.content = parseDSL<(...args: any[]) => any>(codeConfig.content);\n }\n codeConfigProcessed.content = 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 * @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 {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 public setParamsColConfig(config: ColumnConfig): void {\n this.state.paramsColConfig = config;\n }\n\n public getParamsColConfig(): ColumnConfig | undefined {\n return this.state.paramsColConfig;\n }\n\n /**\n * 生成代码块唯一id\n * @returns {Id} 代码块唯一id\n */\n public async getUniqueId(): Promise<string> {\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.codeDsl = null;\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 */\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 KeyController, { KeyControllerEvent } from 'keycon';\n\nimport { isPage, isPageFragment } from '@tmagic/utils';\n\nimport { KeyBindingCacheItem, KeyBindingCommand, KeyBindingItem } from '@editor/type';\n\nimport BaseService from './BaseService';\nimport editorService from './editor';\nimport uiService from './ui';\n\nclass Keybinding extends BaseService {\n public ctrlKey = /mac os x/.test(navigator.userAgent.toLowerCase()) ? 'meta' : 'ctrl';\n\n private controllers = new Map<string, KeyController>();\n\n private bindingList: KeyBindingCacheItem[] = [];\n\n private commands: Record<KeyBindingCommand | string, (e: KeyboardEvent) => void | Promise<void>> = {\n [KeyBindingCommand.DELETE_NODE]: () => {\n const nodes = editorService.get('nodes');\n\n if (!nodes || isPage(nodes[0]) || isPageFragment(nodes[0])) return;\n editorService.remove(nodes);\n },\n [KeyBindingCommand.COPY_NODE]: () => {\n const nodes = editorService.get('nodes');\n nodes && editorService.copy(nodes);\n },\n [KeyBindingCommand.CUT_NODE]: () => {\n const nodes = editorService.get('nodes');\n\n if (!nodes || isPage(nodes[0]) || isPageFragment(nodes[0])) return;\n editorService.copy(nodes);\n editorService.remove(nodes);\n },\n [KeyBindingCommand.PASTE_NODE]: () => {\n const nodes = editorService.get('nodes');\n nodes && editorService.paste({ offsetX: 10, offsetY: 10 });\n },\n [KeyBindingCommand.UNDO]: () => {\n editorService.undo();\n },\n [KeyBindingCommand.REDO]: () => {\n editorService.redo();\n },\n [KeyBindingCommand.ZOOM_IN]: () => {\n uiService.zoom(0.1);\n },\n [KeyBindingCommand.ZOOM_OUT]: () => {\n uiService.zoom(-0.1);\n },\n [KeyBindingCommand.ZOOM_RESET]: () => {\n uiService.set('zoom', 1);\n },\n [KeyBindingCommand.ZOOM_FIT]: async () => {\n uiService.set('zoom', await uiService.calcZoom());\n },\n [KeyBindingCommand.MOVE_UP_1]: () => {\n editorService.move(0, -1);\n },\n [KeyBindingCommand.MOVE_DOWN_1]: () => {\n editorService.move(0, 1);\n },\n [KeyBindingCommand.MOVE_LEFT_1]: () => {\n editorService.move(-1, 0);\n },\n [KeyBindingCommand.MOVE_RIGHT_1]: () => {\n editorService.move(1, 0);\n },\n [KeyBindingCommand.MOVE_UP_10]: () => {\n editorService.move(0, -10);\n },\n [KeyBindingCommand.MOVE_DOWN_10]: () => {\n editorService.move(0, 10);\n },\n [KeyBindingCommand.MOVE_LEFT_10]: () => {\n editorService.move(-10, 0);\n },\n [KeyBindingCommand.MOVE_RIGHT_10]: () => {\n editorService.move(10, 0);\n },\n [KeyBindingCommand.SWITCH_NODE]: () => {\n editorService.selectNextNode();\n },\n };\n\n public registerCommand(command: string, handler: (e: KeyboardEvent) => void | Promise<void>) {\n this.commands[command] = handler;\n }\n\n /**\n * @deprecated\n */\n public registeCommand(command: string, handler: (e: KeyboardEvent) => void | Promise<void>) {\n this.registerCommand(command, handler);\n }\n\n public unregisterCommand(command: string) {\n delete this.commands[command];\n }\n\n /**\n * @deprecated\n */\n public unregisteCommand(command: string) {\n this.unregisterCommand(command);\n }\n\n public registerEl(name: string, el?: HTMLElement) {\n if (name !== 'global' && !el) {\n throw new Error('只有name为global可以不传el');\n }\n\n const keycon = new KeyController(el);\n this.controllers.set(name, keycon);\n this.bind(name);\n }\n\n /**\n * @deprecated\n */\n public registeEl(name: string, el?: HTMLElement) {\n this.registerEl(name, el);\n }\n\n public unregisterEl(name: string) {\n this.controllers.get(name)?.destroy();\n this.controllers.delete(name);\n this.bindingList.forEach((item) => {\n item.bound = false;\n });\n }\n\n /**\n * @deprecated\n */\n public unregisteEl(name: string) {\n this.unregisterEl(name);\n }\n\n public register(maps: KeyBindingItem[]) {\n for (const keybindingItem of maps) {\n const { command, keybinding, when } = keybindingItem;\n\n for (const [type = '', eventType = 'keydown'] of when) {\n const cacheItem: KeyBindingCacheItem = { type, command, keybinding, eventType, bound: false };\n\n this.bindingList.push(cacheItem);\n }\n }\n\n this.bind();\n }\n\n /**\n * @deprecated\n */\n public registe(map: KeyBindingItem[]) {\n this.register(map);\n }\n\n public reset() {\n this.controllers.forEach((keycon) => {\n keycon.destroy();\n });\n this.controllers.clear();\n this.bindingList = [];\n }\n\n public destroy() {\n this.reset();\n }\n\n private bind(name?: string) {\n for (const item of this.bindingList) {\n const { type, eventType, command, keybinding, bound } = item;\n\n if (name && name !== type) {\n continue;\n }\n\n if (bound) {\n continue;\n }\n\n const keycon = this.controllers.get(type);\n if (!keycon) {\n continue;\n }\n\n const handler = (e: KeyControllerEvent) => {\n e.inputEvent.preventDefault();\n\n this.commands[command]?.(e.inputEvent);\n };\n this.getKeyconKeys(keybinding).forEach((keys) => {\n if (keys[0]) {\n keycon[eventType](keys, handler);\n } else {\n keycon[eventType](handler);\n }\n });\n\n item.bound = true;\n }\n }\n\n private getKeyconKeys(keybinding: string | string[] = '') {\n const splitKey = (key: string) => key.split('+').map((k) => (k === 'ctrl' ? this.ctrlKey : k));\n\n if (Array.isArray(keybinding)) {\n return keybinding.map((key) => splitKey(key));\n }\n return [splitKey(keybinding)];\n }\n}\n\nexport type KeybindingService = Keybinding;\n\nexport default new Keybinding();\n","import type { EventOption } from '@tmagic/core';\nimport type { CustomTargetOptions } from '@tmagic/dep';\nimport type { FormConfig, FormState } from '@tmagic/form';\nimport type { DataSourceSchema, Id, MApp, MNode } from '@tmagic/schema';\nimport StageCore, {\n CONTAINER_HIGHLIGHT_CLASS_NAME,\n ContainerHighlightType,\n type CustomizeMoveableOptionsCallbackConfig,\n type GuidesOptions,\n type MoveableOptions,\n RenderType,\n type UpdateDragEl,\n} from '@tmagic/stage';\n\nimport type {\n ComponentGroup,\n DatasourceTypeOption,\n MenuBarData,\n MenuButton,\n MenuComponent,\n SideBarData,\n StageRect,\n} from './type';\n\nexport interface EditorProps {\n /** 页面初始值 */\n modelValue?: MApp;\n /** 左侧面板中的组件类型列表 */\n componentGroupList?: ComponentGroup[];\n /** 左侧面板中的数据源类型列表 */\n datasourceList?: DatasourceTypeOption[];\n /** 左侧面板配置 */\n sidebar?: SideBarData;\n /** 顶部工具栏配置 */\n menu?: MenuBarData;\n /** 组件树右键菜单 */\n layerContentMenu?: (MenuButton | MenuComponent)[];\n /** 画布右键菜单 */\n stageContentMenu?: (MenuButton | MenuComponent)[];\n /** 中间工作区域中画布渲染的内容 */\n render?: (stage: StageCore) => HTMLDivElement | Promise<HTMLDivElement>;\n /** 中间工作区域中画布通过iframe渲染时的页面url */\n runtimeUrl?: string;\n /** 是用iframe渲染还是直接渲染 */\n renderType?: RenderType;\n /** 选中时是否自动滚动到可视区域 */\n autoScrollIntoView?: boolean;\n /** 组件的属性配置表单的dsl */\n propsConfigs?: Record<string, FormConfig>;\n /** 添加组件时的默认值 */\n propsValues?: Record<string, Partial<MNode>>;\n /** 组件联动事件选项列表 */\n eventMethodList?: Record<string, { events: EventOption[]; methods: EventOption[] }>;\n /** 添加数据源时的默认值 */\n datasourceValues?: Record<string, Partial<DataSourceSchema>>;\n /** 数据源的属性配置表单的dsl */\n datasourceConfigs?: Record<string, FormConfig>;\n datasourceEventMethodList?: Record<string, { events: EventOption[]; methods: EventOption[] }>;\n /** 画布中组件选中框的移动范围 */\n moveableOptions?: MoveableOptions | ((config?: CustomizeMoveableOptionsCallbackConfig) => MoveableOptions);\n /** 编辑器初始化时默认选中的组件ID */\n defaultSelected?: Id;\n canSelect?: (el: HTMLElement) => boolean | Promise<boolean>;\n isContainer?: (el: HTMLElement) => boolean | Promise<boolean>;\n containerHighlightClassName?: string;\n containerHighlightDuration?: number;\n containerHighlightType?: ContainerHighlightType;\n stageRect?: StageRect;\n codeOptions?: { [key: string]: any };\n updateDragEl?: UpdateDragEl;\n disabledDragStart?: boolean;\n extendFormState?: (state: FormState) => Record<string, any> | Promise<Record<string, any>>;\n /** 自定义依赖收集器,复制组件时会将关联依赖一并复制 */\n collectorOptions?: CustomTargetOptions;\n /** 标尺配置 */\n guidesOptions?: Partial<GuidesOptions>;\n /** 禁止多选 */\n disabledMultiSelect?: boolean;\n /** 禁用页面片 */\n disabledPageFragment?: boolean;\n customContentMenu?: (menus: (MenuButton | MenuComponent)[], type: string) => (MenuButton | MenuComponent)[];\n}\n\nexport const defaultEditorProps = {\n componentGroupList: () => [],\n datasourceList: () => [],\n menu: () => ({ left: [], right: [] }),\n layerContentMenu: () => [],\n stageContentMenu: () => [],\n propsConfigs: () => ({}),\n propsValues: () => ({}),\n eventMethodList: () => ({}),\n datasourceValues: () => ({}),\n datasourceConfigs: () => ({}),\n canSelect: (el: HTMLElement) => Boolean(el.id),\n isContainer: (el: HTMLElement) => el.classList.contains('magic-ui-container'),\n containerHighlightClassName: CONTAINER_HIGHLIGHT_CLASS_NAME,\n containerHighlightDuration: 800,\n containerHighlightType: ContainerHighlightType.DEFAULT,\n codeOptions: () => ({}),\n renderType: RenderType.IFRAME,\n disabledMultiSelect: false,\n disabledPageFragment: false,\n};\n","import { onBeforeUnmount, reactive, toRaw, watch } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport type { EventOption } from '@tmagic/core';\nimport {\n createCodeBlockTarget,\n createDataSourceCondTarget,\n createDataSourceMethodTarget,\n createDataSourceTarget,\n createRelatedCompTarget,\n DepTargetType,\n Target,\n} from '@tmagic/dep';\nimport type { CodeBlockContent, DataSourceSchema, Id, MApp, MNode, MPage, MPageFragment } from '@tmagic/schema';\nimport { getNodes } from '@tmagic/utils';\n\nimport PropsPanel from './layouts/PropsPanel.vue';\nimport { EditorProps } from './editorProps';\nimport { Services } from './type';\n\nexport declare type LooseRequired<T> = {\n [P in string & keyof T]: T[P];\n};\n\nexport const initServiceState = (\n props: EditorProps,\n {\n editorService,\n historyService,\n componentListService,\n propsService,\n eventsService,\n uiService,\n codeBlockService,\n keybindingService,\n dataSourceService,\n }: Services,\n) => {\n // 初始值变化,重新设置节点信息\n watch(\n () => props.modelValue,\n (modelValue) => {\n editorService.set('root', modelValue || null);\n },\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.disabledMultiSelect,\n (disabledMultiSelect) => {\n editorService.set('disabledMultiSelect', disabledMultiSelect || false);\n },\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.componentGroupList,\n (componentGroupList) => componentGroupList && componentListService.setList(componentGroupList),\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.datasourceList,\n (datasourceList) => datasourceList && dataSourceService.set('datasourceTypeList', datasourceList),\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.propsConfigs,\n (configs) => configs && propsService.setPropsConfigs(configs),\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.propsValues,\n (values) => 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 eventMethodList &&\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.datasourceConfigs,\n (configs) => {\n configs &&\n Object.entries(configs).forEach(([key, value]) => {\n dataSourceService.setFormConfig(key, value);\n });\n },\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.datasourceValues,\n (values) => {\n values &&\n Object.entries(values).forEach(([key, value]) => {\n dataSourceService.setFormValue(key, value);\n });\n },\n {\n immediate: true,\n },\n );\n\n watch(\n () => props.datasourceEventMethodList,\n (eventMethodList) => {\n const eventsList: Record<string, EventOption[]> = {};\n const methodsList: Record<string, EventOption[]> = {};\n\n eventMethodList &&\n Object.keys(eventMethodList).forEach((type: string) => {\n eventsList[type] = eventMethodList[type].events;\n methodsList[type] = eventMethodList[type].methods;\n });\n\n Object.entries(eventsList).forEach(([key, value]) => {\n dataSourceService.setFormEvent(key, value);\n });\n Object.entries(methodsList).forEach(([key, value]) => {\n dataSourceService.setFormMethod(key, value);\n });\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 onBeforeUnmount(() => {\n editorService.resetState();\n historyService.resetState();\n propsService.resetState();\n uiService.resetState();\n componentListService.resetState();\n codeBlockService.resetState();\n keybindingService.reset();\n });\n};\n\nexport const initServiceEvents = (\n props: EditorProps,\n emit: ((event: 'props-panel-mounted', instance: InstanceType<typeof PropsPanel>) => void) &\n ((event: 'update:modelValue', value: MApp | null) => void),\n { editorService, codeBlockService, dataSourceService, depService }: Services,\n) => {\n const getApp = () => {\n const stage = editorService.get('stage');\n return stage?.renderer.runtime?.getApp?.();\n };\n\n const updateDataSourceSchema = () => {\n const root = editorService.get('root');\n\n if (root?.dataSources) {\n getApp()?.dataSourceManager?.updateSchema(root.dataSources);\n }\n };\n\n const updateNodeWhenDataSourceChange = (nodes: MNode[]) => {\n const root = editorService.get('root');\n const stage = editorService.get('stage');\n\n if (!root || !stage) return;\n\n const app = getApp();\n\n if (!app) return;\n\n if (app.dsl) {\n app.dsl.dataSourceDeps = root.dataSourceDeps;\n app.dsl.dataSourceCondDeps = root.dataSourceCondDeps;\n app.dsl.dataSources = root.dataSources;\n }\n\n updateDataSourceSchema();\n\n nodes.forEach((node) => {\n const deps = Object.values(root.dataSourceDeps || {});\n deps.forEach((dep) => {\n if (dep[node.id]) {\n stage.update({\n config: cloneDeep(node),\n parentId: editorService.getParentById(node.id)?.id,\n root: cloneDeep(root),\n });\n }\n });\n });\n };\n\n const targetAddHandler = (target: Target) => {\n const root = editorService.get('root');\n if (!root) return;\n\n if (target.type === DepTargetType.DATA_SOURCE) {\n if (!root.dataSourceDeps) {\n root.dataSourceDeps = {};\n }\n root.dataSourceDeps[target.id] = target.deps;\n }\n\n if (target.type === DepTargetType.DATA_SOURCE_COND) {\n if (!root.dataSourceCondDeps) {\n root.dataSourceCondDeps = {};\n }\n root.dataSourceCondDeps[target.id] = target.deps;\n }\n };\n\n const targetRemoveHandler = (id: string | number) => {\n const root = editorService.get('root');\n\n if (root?.dataSourceDeps) {\n delete root.dataSourceDeps[id];\n }\n\n if (root?.dataSourceCondDeps) {\n delete root.dataSourceCondDeps[id];\n }\n };\n\n const depUpdateHandler = (node: MNode) => {\n updateNodeWhenDataSourceChange([node]);\n };\n\n const collectedHandler = (nodes: MNode[]) => {\n updateNodeWhenDataSourceChange(nodes);\n };\n\n depService.on('add-target', targetAddHandler);\n depService.on('remove-target', targetRemoveHandler);\n depService.on('dep-update', depUpdateHandler);\n depService.on('collected', collectedHandler);\n\n const initDataSourceDepTarget = (ds: DataSourceSchema) => {\n depService.addTarget(createDataSourceTarget(ds, reactive({})));\n depService.addTarget(createDataSourceMethodTarget(ds, reactive({})));\n depService.addTarget(createDataSourceCondTarget(ds, reactive({})));\n };\n\n const rootChangeHandler = async (value: MApp | null, preValue?: MApp | null) => {\n if (!value) return;\n\n value.codeBlocks = value.codeBlocks || {};\n value.dataSources = value.dataSources || [];\n\n codeBlockService.setCodeDsl(value.codeBlocks);\n dataSourceService.set('dataSources', value.dataSources);\n\n depService.removeTargets(DepTargetType.CODE_BLOCK);\n\n Object.entries(value.codeBlocks).forEach(([id, code]) => {\n depService.addTarget(createCodeBlockTarget(id, code));\n });\n\n dataSourceService.get('dataSources').forEach((ds) => {\n initDataSourceDepTarget(ds);\n });\n\n if (Array.isArray(value.items)) {\n depService.collect(value.items, true);\n } else {\n depService.clear();\n delete value.dataSourceDeps;\n }\n\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\n // 新增节点,收集依赖\n const nodeAddHandler = (nodes: MNode[]) => {\n depService.collect(nodes);\n };\n\n // 节点更新,收集依赖\n const nodeUpdateHandler = (nodes: MNode[]) => {\n depService.collect(nodes);\n };\n\n // 节点删除,清除对齐的依赖收集\n const nodeRemoveHandler = (nodes: MNode[]) => {\n depService.clear(nodes);\n };\n\n // 由于历史记录变化是更新整个page,所以历史记录变化时,需要重新收集依赖\n const historyChangeHandler = (page: MPage | MPageFragment) => {\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, DepTargetType.CODE_BLOCK)) {\n depService.getTarget(id, DepTargetType.CODE_BLOCK)!.name = codeBlock.name;\n return;\n }\n\n depService.addTarget(createCodeBlockTarget(id, codeBlock));\n };\n\n const codeBlockRemoveHandler = (id: Id) => {\n depService.removeTarget(id, DepTargetType.CODE_BLOCK);\n };\n\n codeBlockService.on('addOrUpdate', codeBlockAddOrUpdateHandler);\n codeBlockService.on('remove', codeBlockRemoveHandler);\n\n const dataSourceAddHandler = (config: DataSourceSchema) => {\n initDataSourceDepTarget(config);\n getApp()?.dataSourceManager?.addDataSource(config);\n };\n\n const dataSourceUpdateHandler = (config: DataSourceSchema) => {\n const root = editorService.get('root');\n removeDataSourceTarget(config.id);\n initDataSourceDepTarget(config);\n\n depService.collect(root?.items || [], true);\n\n const targets = depService.getTargets(DepTargetType.DATA_SOURCE);\n\n const nodes = getNodes(Object.keys(targets[config.id].deps), root?.items);\n\n updateNodeWhenDataSourceChange(nodes);\n };\n\n const removeDataSourceTarget = (id: string) => {\n depService.removeTarget(id, DepTargetType.DATA_SOURCE);\n depService.removeTarget(id, DepTargetType.DATA_SOURCE_COND);\n depService.removeTarget(id, DepTargetType.DATA_SOURCE_METHOD);\n };\n\n const dataSourceRemoveHandler = (id: string) => {\n removeDataSourceTarget(id);\n getApp()?.dataSourceManager?.removeDataSource(id);\n };\n\n dataSourceService.on('add', dataSourceAddHandler);\n dataSourceService.on('update', dataSourceUpdateHandler);\n dataSourceService.on('remove', dataSourceRemoveHandler);\n\n // 初始化复制组件相关的依赖收集器\n if (props.collectorOptions && !depService.hasTarget(DepTargetType.RELATED_COMP_WHEN_COPY)) {\n depService.addTarget(createRelatedCompTarget(props.collectorOptions));\n }\n\n onBeforeUnmount(() => {\n depService.off('add-target', targetAddHandler);\n depService.off('remove-target', targetRemoveHandler);\n depService.off('dep-update', depUpdateHandler);\n depService.off('collected', collectedHandler);\n\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 dataSourceService.off('add', dataSourceAddHandler);\n dataSourceService.off('update', dataSourceUpdateHandler);\n dataSourceService.off('remove', dataSourceRemoveHandler);\n });\n};\n","<template>\n <Framework :disabled-page-fragment=\"disabledPageFragment\">\n <template #header>\n <slot name=\"header\"></slot>\n </template>\n\n <template #nav>\n <slot name=\"nav\" :editorService=\"editorService\"><TMagicNavMenu :data=\"menu\"></TMagicNavMenu></slot>\n </template>\n\n <template #content-before>\n <slot name=\"content-before\"></slot>\n </template>\n\n <template #src-code><slot name=\"src-code\" :editorService=\"editorService\"></slot></template>\n\n <template #sidebar>\n <slot name=\"sidebar\" :editorService=\"editorService\">\n <Sidebar :data=\"sidebar\" :layer-content-menu=\"layerContentMenu\" :custom-content-menu=\"customContentMenu\">\n <template #layer-panel-header>\n <slot name=\"layer-panel-header\"></slot>\n </template>\n\n <template #layer-node-content=\"{ data }\">\n <slot name=\"layer-node-content\" :data=\"data\"></slot>\n </template>\n\n <template #layer-node-label=\"{ data }\">\n <slot name=\"layer-node-label\" :data=\"data\"></slot>\n </template>\n\n <template #layer-node-tool=\"{ data }\">\n <slot name=\"layer-node-tool\" :data=\"data\"></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 #data-source-panel-tool=\"{ data }\">\n <slot name=\"data-source-panel-tool\" :data=\"data\"></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\" :custom-content-menu=\"customContentMenu\">\n <template #stage><slot name=\"stage\"></slot></template>\n <template #workspace-content><slot name=\"workspace-content\" :editorService=\"editorService\"></slot></template>\n </Workspace>\n </slot>\n </template>\n\n <template #props-panel>\n <slot name=\"props-panel\">\n <PropsPanel\n :extend-state=\"extendFormState\"\n @mounted=\"(instance: any) => $emit('props-panel-mounted', instance)\"\n @form-error=\"(e: any) => $emit('props-form-error', e)\"\n @submit-error=\"(e: any) => $emit('props-submit-error', e)\"\n >\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\n <template #content-after>\n <slot name=\"content-after\"></slot>\n </template>\n\n <template #footer>\n <slot name=\"footer\"></slot>\n </template>\n\n <template #page-bar><slot name=\"page-bar\"></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 </Framework>\n</template>\n\n<script lang=\"ts\" setup>\nimport { provide, reactive } from 'vue';\n\nimport type { MApp } from '@tmagic/schema';\n\nimport Framework from './layouts/Framework.vue';\nimport TMagicNavMenu 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 dataSourceService from './services/dataSource';\nimport depService from './services/dep';\nimport editorService, { type EditorService } from './services/editor';\nimport eventsService from './services/events';\nimport historyService from './services/history';\nimport keybindingService from './services/keybinding';\nimport propsService from './services/props';\nimport storageService from './services/storage';\nimport uiService from './services/ui';\nimport keybindingConfig from './utils/keybinding-config';\nimport { defaultEditorProps, EditorProps } from './editorProps';\nimport { initServiceEvents, initServiceState } from './initService';\nimport type { FrameworkSlots, PropsPanelSlots, Services, SidebarSlots, WorkspaceSlots } from './type';\n\ndefineSlots<\n FrameworkSlots &\n WorkspaceSlots &\n SidebarSlots &\n PropsPanelSlots & {\n workspace(props: { editorService: EditorService }): any;\n 'workspace-content'(props: { editorService: EditorService }): any;\n }\n>();\n\ndefineOptions({\n name: 'MEditor',\n});\n\nconst emit = defineEmits<{\n 'props-panel-mounted': [instance: InstanceType<typeof PropsPanel>];\n 'update:modelValue': [value: MApp | null];\n 'props-form-error': [e: any];\n 'props-submit-error': [e: any];\n}>();\n\nconst props = withDefaults(defineProps<EditorProps>(), defaultEditorProps);\n\nconst services: Services = {\n componentListService,\n eventsService,\n historyService,\n propsService,\n editorService,\n uiService,\n storageService,\n codeBlockService,\n depService,\n dataSourceService,\n keybindingService,\n};\n\ninitServiceEvents(props, emit, services);\ninitServiceState(props, services);\nkeybindingService.register(keybindingConfig);\nkeybindingService.registerEl('global');\n\nprovide('services', services);\n\nprovide('codeOptions', props.codeOptions);\nprovide(\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 renderType: props.renderType,\n guidesOptions: props.guidesOptions,\n disabledMultiSelect: props.disabledMultiSelect,\n }),\n);\n\ndefineExpose(services);\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 DataSourceFields from './fields/DataSourceFields.vue';\nimport DataSourceFieldSelect from './fields/DataSourceFieldSelect.vue';\nimport DataSourceInput from './fields/DataSourceInput.vue';\nimport DataSourceMethods from './fields/DataSourceMethods.vue';\nimport DataSourceMethodSelect from './fields/DataSourceMethodSelect.vue';\nimport DataSourceMocks from './fields/DataSourceMocks.vue';\nimport DataSourceSelect from './fields/DataSourceSelect.vue';\nimport EventSelect from './fields/EventSelect.vue';\nimport KeyValue from './fields/KeyValue.vue';\nimport PageFragmentSelect from './fields/PageFragmentSelect.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 { OnDrag } from 'gesto';\n\nexport { DepTargetType } from '@tmagic/dep';\nexport type { MoveableOptions } from '@tmagic/stage';\nexport * from './type';\nexport * from './hooks';\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 dataSourceService } from './services/dataSource';\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/layer/LayerPanel.vue';\nexport { default as CodeSelect } from './fields/CodeSelect.vue';\nexport { default as CodeSelectCol } from './fields/CodeSelectCol.vue';\nexport { default as DataSourceFields } from './fields/DataSourceFields.vue';\nexport { default as DataSourceMocks } from './fields/DataSourceMocks.vue';\nexport { default as DataSourceMethods } from './fields/DataSourceMethods.vue';\nexport { default as DataSourceInput } from './fields/DataSourceInput.vue';\nexport { default as DataSourceSelect } from './fields/DataSourceSelect.vue';\nexport { default as DataSourceMethodSelect } from './fields/DataSourceMethodSelect.vue';\nexport { default as DataSourceFieldSelect } from './fields/DataSourceFieldSelect.vue';\nexport { default as EventSelect } from './fields/EventSelect.vue';\nexport { default as KeyValue } from './fields/KeyValue.vue';\nexport { default as CodeBlockList } from './layouts/sidebar/code-block/CodeBlockList.vue';\nexport { default as CodeBlockListPanel } from './layouts/sidebar/code-block/CodeBlockListPanel.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/SplitView.vue';\nexport { default as SplitView } from './components/SplitView.vue';\nexport { default as Resizer } from './components/Resizer.vue';\nexport { default as CodeBlockEditor } from './components/CodeBlockEditor.vue';\nexport { default as PageFragmentSelect } from './fields/PageFragmentSelect.vue';\n\nconst defaultInstallOpt: InstallOptions = {\n // eslint-disable-next-line no-eval\n parseDSL: (dsl: string) => eval(dsl),\n};\n\nexport default {\n install: (app: App, opt?: Partial<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 app.component('m-fields-data-source-fields', DataSourceFields);\n app.component('m-fields-data-source-mocks', DataSourceMocks);\n app.component('m-fields-key-value', KeyValue);\n app.component('m-fields-data-source-input', DataSourceInput);\n app.component('m-fields-data-source-select', DataSourceSelect);\n app.component('m-fields-data-source-methods', DataSourceMethods);\n app.component('m-fields-data-source-method-select', DataSourceMethodSelect);\n app.component('m-fields-data-source-field-select', DataSourceFieldSelect);\n app.component('m-fields-page-fragment-select', PageFragmentSelect);\n },\n};\n"],"names":["height","fillConfig","index","ds","field","methodName","ColumnLayout","LayerOffset","Layout","Keys","CodeDeleteErrorType","KeyBindingCommand","DragType","Protocol","targetConfig","node","style","value","method","CodeEditor","clientWidth","center","length","page","active","values","key","createPageNodeStatus","useNodeStatus","nodeData","data","services","FolderMinusIcon","el","KeyBindingContainerKey","nodes","ComponentListPanel","LayerPanel","CodeBlockListPanel","DataSourceListPanel","VanillaMoveable","stage","visible","CenterIcon","zoom","root","Editor","uiSelect","CodeLink","Code","CodeSelect","CodeSelectCol","EventSelect","DataSourceFields","DataSourceMocks","KeyValue","DataSourceInput","DataSourceSelect","DataSourceMethods","DataSourceMethodSelect","DataSourceFieldSelect","PageFragmentSelect"],"mappings":"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"}
|